我读了一本叫做“数字设计和计算机体系结构”的书,这本书是哈里斯和我写的,我有一个关于例子4.13 (延迟逻辑门)的问题。
在该示例中,我们建立了表达式Y = !A*!B*!C +A*!C+A*!B*C的模型,并在此基础上增加了一些延迟:1 ns用于逆变器,3输入和门的延迟为2ns,三输入或门的延迟为4 ns。
现在,..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这样的操作数?
发布于 2017-01-29 23:12:39
ab、bb和cb都是a、b和c (即,逻辑表达式中的!A、!B和!C )的逻辑逆词。"b“或"_B”后缀通常用于表示逆断言级别或逆断言级别。
assign表达式分别表示原始布尔方程中的一个操作:
assign #1 {ab,bb,cb} = ~{a,b,c};这个表达式可以被认为是具有输入a、b和c的3个非门,分别具有输出ab、bb和cb。它使用Verilog按位逆运算符~以及Verilog级联运算符{}来执行所有逆操作,而不是3个单独的assign表达式。
从这里开始,n1、n2和n3的赋值都对应于方程中的3、3路和运算,只是作为表达式中的中间值。n1被分配给!A * !B * !C,n2得到A * !B * !C,n3得到A * !B * C。请注意,它们中的每一个都具有给定门的延迟#n,其中逆获取#1;n1、n2和n3获取#2,最后将输出y分配给#4延迟作为ANDed值n1、n2、d39的最后3路OR。
https://stackoverflow.com/questions/41925996
复制相似问题