이 오류는 VHDL 2008을 지원하지 않는 GHDL의 결과라고 생각합니다. ff0 D에 벡터 din의 값이 할당되면 오류 27/28이 발생합니다 . 포트 맵에서 벡터를 인덱싱하는 적절한 방법은 무엇입니까?실제는 포트 맵에서 정적 이름 인덱싱 벡터 여야합니다
오류를 우회하려고 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 on)는 VHDL-2008의 상당수 (전부는 아님)를 지원합니다. 그러나 제프가 지적한대로 그것은 당신의 문제가 아닙니다. –
IEEE Std 1076-2008 6.5.5.3 para 6 * 블록의 공식 포트에 대한 주어진 연관 요소의 실제 부분이 관성 예약어 관행에 이어 표현식이거나 전역 적으로 정적이 아닌 표현식이면 주어진 연관 요소는 블록을 즉시 둘러싸는 선언적 영역에서 암시 적으로 선언 된 익명 신호와 포트의 연관과 같습니다. 신호는 공식 포트와 동일한 하위 유형을 가지며 anonymous <= E ... * ghdl은 (아직) 이것을 지원하지 않습니다. – user1155120
ghdl-updates [RoadMap2008] (https://sourceforge.net/p/ghdl-updates/wiki/RoadMap2008/) VHDL 2008의 새로운 기능, 6. 선언, port 절의 익명 신호. (그리고 이것은 \ [완료]로 표시되지 않습니다). – user1155120