я здесь некоторый допустимый код VHDL, который может быть скомпилирован сПочему GHDL и/или VHDL-2002 настолько ограничивают диапазоны в циклах?
- GHDL 0,31 (--std не установлен)
- ISE 14,7 (XST и Isim; станд = 200x)
- Vivado (Synth и xSim)
- Altera Quatus II 13,1 и последнее, но не в последнюю очередь
- QuestaSim 10.0d
GHDL понимает этот код, если опция «- std 'не задано. Когда я устанавливаю '-std' на VHDL-2002, я получаю ошибки, жалующиеся на диапазоны for-loops. Хммм в предварительном режиме 2002 эти строки забросить уже предупреждение :(
Так вот моя функция:
-- 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
Пользователь определенный тип T_SLVV_4 определяется как:
type T_SLVV_4 is array(natural range <>) of std_logic_vector(3 downto 0);
В моем коде 8 ошибок, таких как th в. Я мог бы переписать два из них от 'length
до 'range
, так что осталось 6. Но некоторые из них не могут быть переписаны ...
Так почему же расчеты границ петли с 'length
не разрешены в GHDL и/или VHDL> = 2002?