은 여기 (--std가 설정되지 않은) 루프의 범위에서 GHDL 및/또는 VHDL-2002가 왜 제한적입니까? (</li> <li>Vivado (STD = 200X XST 및 ISIM)
- GHDL 0.31로 컴파일 될 수있는 유효 VHDL 코드를 가지고 옵션 경우 신스와 XSIM)
- 알테라 Quatus II 13.1과 마지막으로
- QuestaSim 10.0d
GHDL은 '이 코드를 이해 - std '가 설정되지 않습니다. '--std'를 VHDL-2002로 설정하면 for-loops의 범위에서 오류가 발생합니다.
-- create vector-vector from vector (4 bit)
FUNCTION to_slvv_4(slv : STD_LOGIC_VECTOR) RETURN T_SLVV_4 IS
VARIABLE Result : T_SLVV_4((slv'length/4) - 1 DOWNTO 0);
BEGIN
IF ((slv'length MOD 4) /= 0) THEN
REPORT "to_slvv_4: width mismatch - slv'length is no multiple of 4"
SEVERITY FAILURE;
END IF;
FOR I IN 0 TO (slv'length/4) - 1 LOOP
Result(I) := slv((I * 4) + 3 DOWNTO (I * 4));
END LOOP;
RETURN Result;
END FUNCTION;
GHDL 오류 메시지 :.
이D:\VHDL\git\PoC\src\common\vectors.vhdl:249:25:
-> universal integer bound must be numeric literal or attribute
결함이있는 라인 249 FOR I IN 0 TO (slv'length/4) - 1 LOOP
인 사용자 흠 사전 2002 모드에서이 라인이 이미 경고 :(그래서 여기
을 던져 나의 기능입니다 정의 된 유형 T_SLVV_4는 다음과 같이 정의됩니다.
type T_SLVV_4 is array(natural range <>) of std_logic_vector(3 downto 0);
내 코드에는 8 번째 오류 에서. 나는 그 중 두 개를 'length
에서 'range
으로 다시 쓸 수 있었고, 6 개가 남았다. 하지만 일부는 다시 쓸 수 없습니다 ...
GHDL 및/또는 VHDL> = 2002에서 루프 경계 계산이 'length
이 아닌 이유는 무엇입니까?