错误:HDLParsers:800 - RAM1的类型与RAM2的类型不兼容

时间:2015-03-06 12:23:32

标签: vhdl

我的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的类型不兼容。

但两者都是相同的数据类型!这就是为什么我感到困惑!。

1 个答案:

答案 0 :(得分:3)

RAM1的类型为camera_log1RAM2的类型为camera_log2,因此类型相同。这两种类型恰好被声明为array (0 to 2047) of std_logic

一种解决方案是使用std_logic_vector而不是制作自己的std_logic数组,然后将RAM1RAM2声明为:

signal RAM1 : std_logic_vector(0 to 2047) := (others => '0');
signal RAM2 : std_logic_vector(0 to 2047) := (others => '0');

其他解决方案只需制作一个camera_log,然后同时用于RAM1RAM2

type camera_log is array (0 to 2047) of std_logic;