2013-02-18 1 views
1

VHDL 코드에서 정수에 대해 몇 가지 수학 연산을 수행하려고합니다.하지만 컴파일하려고 할 때 "0 정의 연산자"+ "여기에 일치"라고 표시됩니다. 다음은 내가하려는 일입니다.vhdl에서 정수에 대한 산술 연산

for i in 0 to arr_size - 1 loop 
    for j in 0 to arr_size - 1 loop 
     for k in 0 to arr_size - 1 loop 
     for l in 0 to arr_size - 1 loop 
      for m in 0 to arr_size - 1 loop 
       mega_array(i)(j)(k)(l)(m) <= i*(arr_size**4) + j*(arr_size**3) + k*(arr_size**2) + l*(arr_size**1) + m*(arr_size**0); 
      end loop; 
     end loop; 
     end loop; 
    end loop; 
end loop; 

mega_array가 설정된 줄에서 문제가 발생했습니다. 이 전체 블록은 프로세스에 있음을 유의하십시오. 또한

는 :

arr_size : integer := 4; 
sig_size : integer := 32 

type \1-line\ is array (arr_size - 1 downto 0) of unsigned (sig_size - 1 downto 0); 
type square is array (arr_size - 1 downto 0) of \1-line\; 
type cube is array (arr_size - 1 downto 0) of square; 
type hypercube is array (arr_size - 1 downto 0) of cube; 
type \5-cube\ is array (arr_size - 1 downto 0) of hypercube; 

signal mega_array : \5-cube\; 
+0

문제는 Library/Use 절 또는 mega_array 선언에있을 수 있습니다. 질문에 추가 할 가치가 있습니다. "0 정의 일치"는 너무 많은 중복 "사용"절이 있기 때문에 2 개 이상의 가시적 인 (모호한) 정의가 있음을 의미합니다. –

답변

2

당신의 이전 게시물을 읽고는 mega_array는 부호없는 가장 낮은 레벨에서 4 개 레벨의 배열입니다. 이 질문에 귀하의 코드에서 나는 5 단계를 참조하십시오. 그래서 다섯 번째 레벨에 bit이 있습니다. std_logicinteger을 할당 할 수 없습니다.

이 코드가 원하는 것일 수 있습니까?

for i in 0 to arr_size - 1 loop    -- 5-cube 
     for j in 0 to arr_size - 1 loop   -- hypercube 
      for k in 0 to arr_size - 1 loop  -- cube 
       for l in 0 to arr_size - 1 loop -- square 
        for m in 0 to arr_size - 1 loop -- 1-line 
         mega_array(i)(j)(k)(l) <= to_unsigned(i*(arr_size**4) + j*(arr_size**3) + k*(arr_size**2) + l*(arr_size**1), 32); 
        end loop 
       end loop; 
      end loop; 
     end loop; 
    end loop; 

to_unsigned 기능은 unsignedinteger 변환 1-line 유형하는 것이다. 두 번째 매개 변수는 정수를 변환 할 벡터의 크기입니다. 크기는 1-line과 같아야합니다.

+0

그것은 to_unsigned에 대해 "std_ulogic"유형을 기대한다고 말합니다. –

+0

게시 한 코드에서 IMHO에는 여전히 하나의 루프가 너무 많습니다. 'm'루프 내에서 당신은 'unsigned'비트 수준에 있습니다. 그리고이 비트에서 정수를 할당하려고합니다 (변환을 '부호없는'로 지정). IMHO, 당신은 'm'레벨이 필요하지 않습니다. 'l'레벨에서 계산 된 값을 지정하십시오. – vermaete

+0

"하이퍼 큐브"수준을 잊어 버렸습니다. –