我有一个双向总线,我可以将输入读取到导线中,但我很难对它们进行逻辑运算,并将它们作为输出分配回总线,或者将它们连接到寄存器中,以便处理值。
感谢所有的帮助和回应。
Jozsó
verilog中有两类基本变量:net
s和reg
s。reg
用于在过程块中进行计算,net
s用于连接不同的实体,如模块实例或UDP。
因此,它们具有不同的功能、不同的规则和运算符。因此,导线是通过模块实例端口和/或连续的assign
运算符连接的,这在理想情况下表示导线连接。
基本规则是
net
值可以用作寄存器表达式的rhs。因此,它可以被分配给过程(例如始终(块中的寄存器reg
值可以在连续的assign
运算符中或在输出端口连接中分配给网络net
不能在始终块内分配任何值reg
不能通过连续分配进行分配
解决它的基本方案如下:
wire --> always block ( reg ) --> assign (wire)
这里有一个例子:
module top (bus, en);
inout wire bus;
input wire en;
reg tmp;
always @*
tmp = bus;
assign bus = en ? tmp : 1'bz;
endmodule