Verilog代码背后的逻辑

时间:2017-01-11 08:21:19

标签: verilog

input x;
input y;
input[10:0] z;

wire a;

assign a = x & y & (|z);

我正在查看代码并且不明白分配线上的内容。关于这条线的含义的解释将不胜感激!

2 个答案:

答案 0 :(得分:1)

z是一个十一位宽的信号 |是信号的or reduction 如果(|z)中至少有一位是1,则z将为真(1)。另一方面,如果(|z)中的所有位均为0,则z将为false(0)。这意味着信号的or reduction是测试信号是否为0的简短方法。

|z <==> z==0;

&bitwise and。这意味着对于多位信号,它将在每个位索引之间执行and操作。结果与输入的大小相同。例如:

wire [2:0] signal1, signal2, result;
assign result = signal1 & signal2;

相当于(bit-bit):

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]}

在您的表达式中,由于所有信号均为1位宽(ab(|z)),因此可以使用&&&等效。

使用简单的2输入门执行表达式的示意图如下:

Simple gates schematic of the assignment

有关运营商的更多信息以及如何在硬件中进行转换,可以在this site上找到。

答案 1 :(得分:0)

wire a由一些组合逻辑驱动。在该组合逻辑中,input [10:0] z的所有位都被“或”在一起(这就是|z的含义)。然后,ORing的结果(即11输入OR门的输出)与输入xy进行AND运算。 AND的结果(即3输入AND门的输出)被分配给wire a(即3输入AND门驱动wire a)。