关于并发:VHDL新,不支持不受影响的波形

New to VHDL, the unaffected waveform is not supported

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

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

感谢您的帮助。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;

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


不,如果您只是用 unaffected 注释该行,行为将会改变。

您似乎在描述一个闩锁。 (在同步设计中不建议这样做)。实际上 Z 如果 S2 /= '1' 会更新,如果 S2 = '1'.

则不会更新

您确实可以将您的分配package在一个进程和一个 if-else 结构中,但不需要 next 语句。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 成为默认(否则)情况。

1
2
3
4
5
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关键字,我认为它的使用非常有限,因此可能不是所有工具都支持它?

你的模拟器是什么?