我有一个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.我怎么能得到它?
答案 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
运算符...这就是我说“你可以尝试”的原因......所以,请告诉我它是否适合你。 ...