2

我有一个 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。我怎样才能得到它?

4

3 回答 3

9

为什么每个人都痴迷于异或?

changed <= '0' when rL1 = l1 else '1';
于 2012-04-28T18:00:07.513 回答
3

您可以使用

change <= or_reduce(tickL1)

或者

change <= or_reduce(rL1 xor l1);

哪个或结果的所有信号一起,所以如果其中任何一个是1信号change也将是1

编辑:所有这些reduce函数都在ieee.std_logic_misc.all

于 2012-04-28T15:06:33.427 回答
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在条件中使用运算符......这就是我说“你可以尝试”的原因......所以,让我知道它是否适合你......

于 2012-04-28T15:04:41.503 回答