我读了一本名为"数字设计和计算机体系结构的书#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这样的操作数?
答案 0 :(得分:2)
ab
,bb
和cb
都是a
,b
和c
的逻辑反转(即!A
来自逻辑表达式的1}},!B
和!C
)。 “b”或“_B”后缀通常用于表示反向或反向断言级别。
assign
表达式分别表示原始布尔方程中的运算:
assign #1 {ab,bb,cb} = ~{a,b,c};
此表达式可被视为具有输入a
,b
和c
的3个NOT门,其输出为ab
,bb
和{分别为{1}}。它使用Verilog按位逆运算符cb
以及Verilog并置运算符~
来在一行中进行反转,而不是使用3个单独的{}
表达式。
从那里开始,assign
,n1
和n2
的分配都对应于等式中的3,3路和操作,并且只是作为表达式中的中间值。 n3
被分配n1
,!A * !B * !C
获得n2
,A * !B * !C
获得n3
。请注意,对于给定的门,每个都有延迟A * !B * C
,反转得到#n
; #1
,n1
和n2
获取n3
,最后输出#2
被指定y
延迟作为最终的3路OR ANDed值#4
,n1
,n2
。