Harris HDL示例4.13

时间:2017-01-29 21:11:02

标签: boolean logic verilog system-verilog

我读了一本名为"数字设计和计算机体系结构的书#34;哈里斯写的,我有一个关于例4.13(带有延迟的逻辑门)的问题。

在那个例子中,我们为表达式构建了一个模型 Y =!A *!B *!C + A *!B *!C + A *!B * C。而且,我们添加一些延迟:1ns用于逆变器,三输入AND门具有2ns的延迟,三输入OR门具有4ns的延迟。

现在,下面的.sv代码:

*timescale 1ns/1ps
module example(input a,b,c
               output y);
logic ab,bb,cb,n1,n2,n3;
assign #1 {ab,bb,cb} = ~{a,b,c};
assign #2 n1 = ab & bb & cb;
assign #2 n2 = a & bb & cb;
assign #2 n3 = a & bb & c;
assign #4 y = n1 | n2 | n3;

endmodule

所以,问题是:这种形式的编程3个操作数的逻辑是什么(!A *!B *!C,A *!B *!C,A *!B * C)。我不明白4到8行的情况。

有人可以解释一下吗?为什么会有像ab,bb和cb这样的操作数?

1 个答案:

答案 0 :(得分:2)

abbbcb都是abc的逻辑反转(即!A来自逻辑表达式的1}},!B!C)。 “b”或“_B”后缀通常用于表示反向或反向断言级别。

assign表达式分别表示原始布尔方程中的运算:

assign #1 {ab,bb,cb} = ~{a,b,c};

此表达式可被视为具有输入abc的3个NOT门,其输出为abbb和{分别为{1}}。它使用Verilog按位逆运算符cb以及Verilog并置运算符~来在一行中进行反转,而不是使用3个单独的{}表达式。

从那里开始,assignn1n2的分配都对应于等式中的3,3路和操作,并且只是作为表达式中的中间值。 n3被分配n1!A * !B * !C获得n2A * !B * !C获得n3。请注意,对于给定的门,每个都有延迟A * !B * C,反转得到#n; #1n1n2获取n3,最后输出#2被指定y延迟作为最终的3路OR ANDed值#4n1n2