Harris HDL 示例 4.13

Harris HDL example 4.13

我读了 Harris 写的一本名为 "Digital design and computers architecture" 的书,我对示例 4.13(带延迟的逻辑门)有疑问。

在那个例子中,我们为表达式 Y = !A*!B*!C + A*!B*!C + A*!B*C. 而且,我们还添加了一些延迟:反相器为 1ns,三输入与门有 2ns 的延迟,三输入或门有 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这样的操作数?

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

assign 表达式分别代表原始布尔方程的一个运算:

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

这个表达式可以被认为是 3 个非门,输入为 abc,输出为 abbb,和 cb 分别。它使用 Verilog 按位逆运算符 ~ 以及 Verilog 串联运算符 {} 在一行中执行逆运算而不是 3 个单独的 assign 表达式。

从那里,n1n2n3的赋值都对应于等式中的3、3路和操作,只是作为中间值表达方式。 n1 分配给 !A * !B * !Cn2 分配给 A * !B * !Cn3 分配给 A * !B * C。请注意,对于给定的门,它们中的每一个都有延迟 #n,反之得到 #1n1n2n3 得到 #2,最后输出 y 被分配 #4 延迟作为其最终的 3 路或ANDed 值 n1n2n3.