Verilog代码背后的逻辑
我正在看一个代码,不明白assign上的行是做什么的。如果您能解释一下这句话的意思,我们将不胜感激 导线a由一些组合逻辑驱动。在这种组合逻辑中,Verilog代码背后的逻辑,verilog,Verilog,我正在看一个代码,不明白assign上的行是做什么的。如果您能解释一下这句话的意思,我们将不胜感激 导线a由一些组合逻辑驱动。在这种组合逻辑中,输入[10:0]z的所有位都被加在一起(这就是|z的意思)。然后将该ORing的结果(即11输入或门的输出)与输入x和y一起进行and运算。该ANDing(即3输入和门的输出)的结果分配给导线a(即3输入和门驱动导线a)。z是一个11位宽的信号。 |是信号的或减少量。 如果z中至少有一位为1,则(| z)将为真(1)。另一方面,如果z中的所有位都是0,则
输入[10:0]z
的所有位都被加在一起(这就是|z
的意思)。然后将该ORing的结果(即11输入或门的输出)与输入x
和y
一起进行and运算。该ANDing(即3输入和门的输出)的结果分配给导线a
(即3输入和门驱动导线a
)。z
是一个11位宽的信号。|
是信号的或减少量。
如果z
中至少有一位为1
,则(| z)
将为真(1
)。另一方面,如果z
中的所有位都是0
,则(| z)
将为false(0
)。这意味着信号的或减少
是测试信号是否为0
的捷径
input x;
input y;
input[10:0] z;
wire a;
assign a = x & y & (|z);
相当于(位到位):
或(带串联):
但在您的表达式中,由于所有信号都是1位宽(a
、b
和(|z)
),因此&
或&
可以等效使用
使用简单的2输入门实现表达式状态的原理图如下所示:
有关操作员以及如何在硬件中翻译操作员的更多信息,请访问
|z <==> z==0;
wire [2:0] signal1, signal2, result;
assign result = signal1 & signal2;
assign result[0] = signal1[0] && signal2[0];
assign result[1] = signal1[1] && signal2[1];
assign result[2] = signal1[2] && signal2[2];
assign result = {signal1[0] && signal2[0],signal1[1] && signal2[1],signal1[2] && signal2[2]}