1

我正在使用 VHDL,但我的模拟器不支持以下示例代码中未受影响的波形,我需要在开始作业之前运行这些代码。我在网上阅读我可以传递相同的波形 Z,但我不知道该怎么做才能得到与 unaffected 关键字相同的结果......如何重写它以产生相同的结果?

PS:我需要在下一部分作业中使用 if-then-else 语句重写它,我知道在这种情况下我可以使用 next 关键字。这是我需要在作业之前运行的教科书中的代码。

谢谢你的帮助。

library IEEE;
use IEEE.std_logic_1164.all;

entity pr_encoder is
port (  S0, S1,S2,S3: in std_logic;
            Z : out std_logic_vector (1 downto 0));
end entity pr_encoder;

architecture behavioral of pr_encoder is
begin
    Z <= "00" after 5 ns when S0 = '1' else
    "01" after 5 ns when S1 = '1' else
    unaffected when S2 = '1' else
    "11" after 5 ns when S3 = '1' else
    "00" after 5 ns;
end architecture behavioral;

编辑:如果我注释掉该行,我会达到我想要的结果吗?

4

1 回答 1

2

不,如果您只是简单地评论带有unaffected行为的行将被更改。

看来您正在描述一个闩锁。(在同步设计中不建议这样做)。如果和 不是 如果确实Z会更新。S2 /= '1'S2 = '1'

您确实可以将您的分配包装在一个流程和一个 if-else 结构中,但该next语句不是必需的。

process (S0, S1, S2, S3) is
begin
    if S0 = '1' then
        Z <= "00" after 5 ns;
    elsif S1 = '1' then
        Z <= "01" after 5 ns;
    elsif S2 = '1' then
        null;                 -- do nothing
    elsif S3 = '1' then
        Z <= "11" after 5 ns;
    else
        Z <= "00" after 5 ns;
    end if;
end process;

或者您可以像现在一样保留选定的赋值语句并更改条件以使其成为unaffected默认(其他)情况。

Z <= "00" after 5 ns when S0 = '1' else
     "01" after 5 ns when S1 = '1' else
     "11" after 5 ns when S2 /= '1' and S3 = '1' else
     "00" after 5 ns when S2 /= '1';
     -- else unaffected is implicit

旁注:

我以前从未听说过该unaffected关键字,我认为它的使用非常有限,因此可能并非所有工具都支持它?

你的模拟器是什么?

于 2012-08-02T07:01:44.063 回答