我有一个组件,我想存储以前的数据。目前的代码如下:
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。我已经尝试将其设置为信号,但无济于事。任何帮助表示赞赏。
谢谢
答案 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;
您需要向实体添加时钟信号。