Я думаю, что эта ошибка является результатом GHDL, не поддерживающего VHDL 2008. Ошибка возникает в строке 27/28, когда ff0 D присваивается значение из векторного din , Каков правильный способ индексирования вектора из карты порта?Фактическое должно быть статическим именем - вектор индексирования в portmap
Я создал count_temp, чтобы попытаться обойти ошибку, но это не помогло, и я бы предпочел не иметь дополнительную переменную. Благодарю.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity conv_encoder is
generic (d_width : positive := 16);
port (
clk : in std_logic;
din : in std_logic_vector(d_width-1 downto 0);
ff_set : in std_logic;
count : in std_logic_vector(5 downto 0);
dout : out std_logic_vector(d_width*2-1 downto 0));
end conv_encoder;
architecture behavioral of conv_encoder is
component d_ff is
port (clk, ff_set, D : in std_logic;
Q : out std_logic);
end component;
signal a, b : std_logic;
signal count_temp : integer range 0 to d_width;
begin
count_temp <= to_integer(unsigned(count));
ff0 : d_ff
port map (clk => clk,
ff_set => ff_set,
D => din(count_temp),
-- D => din(to_integer(unsigned(count))),
Q => a);
ff1 : d_ff
port map (clk => clk,
ff_set => ff_set,
D => a,
Q => b);
-- conv encoder is r=1/2 A=111 B=101
process (clk, ff_set)
begin
if (ff_set = '0') then
if (rising_edge(clk)) then
dout(count_temp*2) <= din(count_temp) xor a xor b;
dout(count_temp*2+1) <= din(count_temp) xor b;
end if;
end if;
end process;
end behavioral;
Ошибка:
ghdl -a conv_encoder.vhd
conv_encoder.vhd:28:30: actual must be a static name
ghdl: compilation error
'ghdl -a -std = 08 myfile.vhd' (и предоставить тот же флаг для разработки). Текущие выпуски ghdl (0,33 дюйма) поддерживают довольно много (не все) VHDL-2008. Но это не ваша проблема, как указывает Джефф. –
IEEE Std 1076-2008 6.5.5.3 para 6 * Если фактическая часть данного элемента ассоциации для формального порта блока является зарезервированным словом, инерционным, за которым следует выражение, или является выражением, которое не является глобально статическим, тогда данный элемент ассоциации эквивалентен ассоциации порта с анонимным сигналом, неявно объявленным в декларативной области, которая сразу же закрывает блок. Сигнал имеет тот же подтип, что и формальный порт, и является целью неявного параллельного оператора присваивания сигнала формы анонимный <= E ... * ghdl не поддерживает это (пока). – user1155120
ghdl-updates [RoadMap2008] (https://sourceforge.net/p/ghdl-updates/wiki/RoadMap2008/) Новые функции VHDL 2008, 6. Объявления, ⸰ анонимный сигнал в портовой статье. (И это не показано как \ [Готово \]). – user1155120