如何解决Verilog 线注册
我有一个双向总线,我可以将它的输入读取到电线中,但是我很难用它们做逻辑并将它们分配回总线作为输出,或者将它们连接到寄存器中以便我可以使用值。
感谢所有帮助和回复。
乔索
解决方法
verilog 中有两类基本的变量:net
s 和 reg
s。 reg
用于在程序块中进行计算,net
用于连接不同的实体,例如模块实例或 UDP。
因此,它们具有不同的功能和不同的规则和运算符。因此,电线通过模块实例端口和/或连续的 assign
运算符连接,理想情况下代表电线连接。
基本规则是
-
net
值可以用作寄存器表达式的rhs。因此,它可以分配给过程(例如,始终)块内的寄存器。 - 可以在连续
reg
运算符或输出端口连接中将assign
值分配给网络。 -
net
不能在 always 块内赋值 -
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。