0

从今天开始,我正在自学 Verilog HDL 并试图理解。我试图以位形式显示通过逻辑图示例的变量的相反/否定。

module My_Implementation();
reg A,B,C,D;
wire F;

assign F = ((A&&(!B))||((!A)&&B))&&(C||(!D));

initial begin
    $monitor("A=%b A'=%b B=%b B'=%b C'=%b D=%b OUTPUT=%b",A,!A,B,!B,!C,D,F);
    #10     A=0; B=0; C=0; D=0;
    #10     A=1;
    #10     B=1;
    #10     C=1;
    #10     D=1;
    #10     A=0;
    #10     B=0;
    #10     C=0;
    #10     D=0;
    #10     $finish;
end

endmodule 

我尝试了许多组合来尝试显示否定变量,但我只得到“X”的输出。

4

1 回答 1

3

我复制并粘贴了您的示例,并使用我的模拟器运行它输出:

A=x A'=x B=x B'=x C'=x D=x OUTPUT=x
A=0 A'=1 B=0 B'=1 C'=1 D=0 OUTPUT=0
A=1 A'=0 B=0 B'=1 C'=1 D=0 OUTPUT=1
A=1 A'=0 B=1 B'=0 C'=1 D=0 OUTPUT=0
A=1 A'=0 B=1 B'=0 C'=0 D=0 OUTPUT=0
A=1 A'=0 B=1 B'=0 C'=0 D=1 OUTPUT=0
A=0 A'=1 B=1 B'=0 C'=0 D=1 OUTPUT=1
A=0 A'=1 B=0 B'=1 C'=0 D=1 OUTPUT=0
A=0 A'=1 B=0 B'=1 C'=1 D=1 OUTPUT=0
A=0 A'=1 B=0 B'=1 C'=1 D=0 OUTPUT=0

如果我们在报告中添加时间,我们可以看到x在声明任何内容之前的时间 0 发生。我预计会这样,一旦定义了所有输入,它就会解决。对于那些不熟悉 Verilog 的人来说,这可能是值得注意的,这x意味着一个未知的值。

$monitor("%2t : A=%b A'=%b B=%b B'=%b C'=%b D=%b OUTPUT=%b",$realtime, A,!A,B,!B,!C,D,F);

新输出:

 0 : A=x A'=x B=x B'=x C'=x D=x OUTPUT=x
10 : A=0 A'=1 B=0 B'=1 C'=1 D=0 OUTPUT=0
20 : A=1 A'=0 B=0 B'=1 C'=1 D=0 OUTPUT=1
30 : A=1 A'=0 B=1 B'=0 C'=1 D=0 OUTPUT=0
40 : A=1 A'=0 B=1 B'=0 C'=0 D=0 OUTPUT=0
50 : A=1 A'=0 B=1 B'=0 C'=0 D=1 OUTPUT=0
60 : A=0 A'=1 B=1 B'=0 C'=0 D=1 OUTPUT=1
70 : A=0 A'=1 B=0 B'=1 C'=0 D=1 OUTPUT=0
80 : A=0 A'=1 B=0 B'=1 C'=1 D=1 OUTPUT=0
90 : A=0 A'=1 B=0 B'=1 C'=1 D=0 OUTPUT=0
于 2012-12-04T08:49:34.433 回答