Ich denke, dass dieser Fehler ein Ergebnis von GHDL nicht unterstützt VHDL 2008 ist. Der Fehler tritt in Zeile 27/28, wenn ff0 D ist der Wert von Vektor DIN zugeordnet . Was ist der richtige Weg, um den Vektor innerhalb einer Portmap zu indizieren?muss tatsächlich ein statischer Name sein - Indexierungsvektor in Portmap
Ich habe count_temp erstellt, um den Fehler zu umgehen, aber es hat nicht geholfen, und ich würde lieber nicht die zusätzliche Variable haben. Vielen Dank.
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;
Fehler:
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' (und die gleiche Flagge zur Ausarbeitung liefern). Aktuelle ghdl-Releases (ab 0.33) unterstützen ziemlich viele (nicht alle) von VHDL-2008. Aber das ist nicht dein Problem, wie Jeff hervorhebt. –
IEEE Std 1076-2008 6.5.5.3 para 6 * Wenn der tatsächliche Teil eines gegebenen Assoziationselements für einen formalen Port eines Blocks das reservierte Wort inertial gefolgt von einem Ausdruck ist oder ein Ausdruck, der nicht global statisch ist, dann Das angegebene Assoziationselement entspricht der Assoziation des Ports mit einem anonymen Signal, das im deklarativen Bereich implizit deklariert wird und den Block unmittelbar umschließt. Das Signal hat den gleichen Subtyp wie der formale Port und ist das Ziel einer impliziten konkurrierenden Signalzuweisungsanweisung des Formulars anonymous <= E ... * ghdl unterstützt dies (noch) nicht. – user1155120
ghdl-updates [RoadMap2008] (https://sourceforge.net/p/ghdl-updates/wiki/RoadMap2008/) VHDL 2008 neue Funktionen, 6. Deklarationen, ⸰ anonymes Signal in Port-Klausel. (Und das wird nicht als \ [Done \] angezeigt). – user1155120