VHDL - 如何检测std_logic_vector上的更改?

时间:2012-04-28 14:50:41

标签: vhdl

我有一个std_logic_vector,我需要知道它何时发生了一些变化。 到目前为止我写了这个:

process (cp, l1)
begin
    if rising_edge(cp) then
        rL1 <= l1;
    end if;
end process;
tickL1 <= rL1 xor l1;

rL1是l1的延迟版本,l1是std_logic_vector我正在检查更改。问题是xor返回std_logic_vector,但我只需要0或1.我怎么能得到它?

3 个答案:

答案 0 :(得分:9)

为什么每个人都对XOR有一种痴迷?

changed <= '0' when rL1 = l1 else '1';

答案 1 :(得分:3)

您可以使用

change <= or_reduce(tickL1)

change <= or_reduce(rL1 xor l1);

结果的所有信号都是OR,所以如果其中任何一个是1,则信号change也将是1

修改:所有这些缩减功能都在ieee.std_logic_misc.all

答案 2 :(得分:0)

您可以尝试:

process (cp, l1)
begin
    if rising_edge(cp) then
        rL1 <= l1;
    end if;
end process;
changed <= '0' when (rL1 xor l1) = (others => '0') else '1';

在这种情况下,changed只是一位。

我真的不记得你是否可以在条件中使用others运算符...这就是我说“你可以尝试”的原因......所以,请告诉我它是否适合你。 ...