在VHDL过程中存储以前的数据

时间:2015-04-27 20:14:55

标签: signals vhdl

我有一个组件,我想存储以前的数据。目前的代码如下:

process(data_in)
variable prev_data : std_logic_vector (7 downto 0) := "00000000";
begin 

if (prev_data /= "11110000") then

    case(data_in) is 
        when "00011100" =>  
           en <= '1';
           count <= 62500;


        when "00110010" =>      
           en <= '1';
           count <= 50000; 


        when others =>
           en <= '0';
           count <= 0;

    end case;
    else 
        en <= '0';
        count <= 0;
end if;
    prev_data := data_in;
end process;

我想在比较发生后更新prev_data。我已经尝试将其设置为信号,但无济于事。任何帮助表示赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

将来,在您的问题中指明您的问题是与您相关的问题,包括您定位的技术和您正在使用的工具。

正如大卫指出的那样,你的代码描述了由data_in的任何位改变触发的锁存器。据我所知,这不是任何工具可以合成的。此外,真的不应该使用锁存器。

任何存储器元件(锁存器旁边)都需要时钟信号才能工作,以下代码可以正常工作:

architecture rtl of some_entity is
    signal prev_data : std_logic_vector(7 downto 0);
begin

    process(clk)
    begin 

        if rising_edge(clk) then
            prev_data <= data_in;

            if (prev_data /= "11110000") then
                case(data_in) is 
                    when "00011100" =>  
                       en <= '1';
                       count <= 62500;

                    when "00110010" =>      
                       en <= '1';
                       count <= 50000; 

                    when others =>
                       en <= '0';
                       count <= 0;

                end case;
            else 
                en <= '0';
                count <= 0;
            end if;
        end if;
    end process;

end architecture rtl;

您需要向实体添加时钟信号。