我的VHDL代码中出现以下错误,
architecture Behavioral of Con_Int is
type camera_log1 is array (0 to 2047) of std_logic;
signal RAM1 : camera_log1 := (others => '0');
type camera_log2 is array (0 to 2047) of std_logic;
signal RAM2 : camera_log2 := (others => '0');
signal sync_bit1 :std_logic:='0';
begin
process(sync_bit1,rdatalatch)
variable cnt1 :integer range 0 to 2048:=0;
begin
if sync_bit1 = '1' then
if rising_edge(rdatalatch)then
if cnt1<2047 then
cnt1 := cnt1 +1;
RAM2(1 to 2047) <= RAM2(0 to 2046);
RAM2(0) <= blk_out;
elsif cnt1 = 2047 then
RAM1 <= RAM2;
end if;
end if;
else
cnt1:=0;
end if;
end process;
end behavioral;
但我有如下错误;
错误:HDLParsers:800 - “xxx”RAM1的类型与RAM2的类型不兼容。
但两者都是相同的数据类型!这就是为什么我感到困惑!。
答案 0 :(得分:3)
RAM1
的类型为camera_log1
,RAM2
的类型为camera_log2
,因此不类型相同。这两种类型恰好被声明为array (0 to 2047) of std_logic
。
一种解决方案是使用std_logic_vector
而不是制作自己的std_logic
数组,然后将RAM1
和RAM2
声明为:
signal RAM1 : std_logic_vector(0 to 2047) := (others => '0');
signal RAM2 : std_logic_vector(0 to 2047) := (others => '0');
其他解决方案只需制作一个camera_log
,然后同时用于RAM1
和RAM2
。
type camera_log is array (0 to 2047) of std_logic;