微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Verilog 线注册

如何解决Verilog 线注册

我有一个双向总线,我可以将它的输入读取到电线中,但是我很难用它们做逻辑并将它们分配回总线作为输出,或者将它们连接到寄存器中以便我可以使用值。

感谢所有帮助和回复

乔索

解决方法

verilog 中有两类基本的变量:nets 和 regs。 reg 用于在程序块中进行计算,net 用于连接不同的实体,例如模块实例或 UDP。

因此,它们具有不同的功能和不同的规则和运算符。因此,电线通过模块实例端口和/或连续的 assign 运算符连接,理想情况下代表电线连接。

基本规则是

  1. net 值可以用作寄存器表达式的rhs。因此,它可以分配给过程(例如,始终)块内的寄存器。
  2. 可以在连续 reg 运算符或输出端口连接中将 assign 值分配给网络。
  3. net 不能在 always 块内赋值
  4. 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 举报,一经查实,本站将立刻删除。