특정 엔티티의 출력은 벡터의 모든 위치와 모든 입력에 따라 다릅니다. 이것을 구현하는 가장 쉬운 방법은 for-loop의 for-loop 인 것 같습니다. 그러나 대한 루프 두 번째 실패 13.0sp1의 Quartus II는 :For-loop for for 루프 VHDL
VHDL syntax error at mcve.vhd(24) near text "IN"; expecting "(", or "'", or "."
나는 구문을 엉망 수도 있지만, 나는 확실히 VHDL 루프에서 반복 할 수 있어요.
for 루프에서 for 루프의 올바른 구현은 무엇입니까? 여기 내가 지금까지 얻은 것이 있습니다.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
TYPE ANAT_SLV16 IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(15 DOWNTO 0);
ENTITY mcve IS
GENERIC(
PORTS : POSITIVE := 256;
HPORTS : POSITIVE := 128
);
PORT(
X : IN ANAT_SLV16(PORTS - 1 DOWNTO 0);
Y : OUT ANAT_SLV16(HPORTS - 1 DOWNTO 0);
);
END mcve;
ARCHITECTURE loops OF mcve IS
SIGNAL to_Y : ANAT_SLV16(HPORTS - 1 DOWNTO 0) := (others -> '0');
BEGIN
gen : FOR i IN 0 TO HPORTS - 1 GENERATE
FOR j IN 0 TO PORTS - 1 GENERATE -- error near text "IN"; expecting "(", or "'", or "."
to_Y((i)) <= to_Y((i)) + X(j);
END GENERATE;
END GENERATE;
Y <= to_Y;
END loops;
두 번째 루프에 레이블을 지정하지 마십시오. – grorel
유형 선언은 use 절에서 볼 수있는 패키지에 있어야합니다. 'y' 포트 선언 말미에 port 절에 세미콜론이 추가로 있습니다. '->'는'=>'이어야하고 기본 표현식은''(다른 => ('= 0'))'-'to_y'는 std_logic_vector의 배열입니다. 범위의 경계를 모두 같은 기본 유형으로 지정하려면 해당 제네릭이 '자연스러운'이어야합니다 (오른쪽 경계 0). numeric_std 패키지의''+ ''연산자를 사용하려면 피연산자를 unsigned로 변환해야합니다. 결과는 std_logic_vector입니다. 그런 다음 MVCe는 완전하고 검증 가능하며 Brian의 레이블로 고칠 수 있습니다. – user1155120
나는 성급한 MCVE를 만들고 간과 된 실수를 저질렀다. 그러나이 문제는 분명히 드러납니다. 전 패키지에 동의합니다, 원본은 그런 식으로 만들어졌습니다. 그러나 나는 MCVE가 더 콤팩트하게 만들어 져야하고 그것들과 같은 구조를 가지지 않아야한다고 생각한다. – Mast