在Verilog中使用wire或reg与输入或输出

nod*_*nja 34 verilog

当您将某些内容声明为输入或输出时,您如何知道是否必须将其声明为a reg或a wire

Jan*_*uwe 30

regwire指定如何分配对象,因此仅对输出有意义.

如果您计划在顺序代码中分配输出,例如在always块中,则将其声明为reg(在Verilog中,它实际上是"变量"的误称).否则,它应该是a wire,这也是默认值.

  • 如果添加`\`default_nettype none`,如果你没有明确指定wire,你会收到错误. (2认同)
  • 你需要在 `always(*)` 块中使用 `reg` 吗?在这种情况下它会合成为广告触发器吗? (2认同)

Ben*_*son 16

An output reg foo只是简写output foo_wire; reg foo; assign foo_wire = foo.无论如何,当您计划注册该输出时,这很方便.我认为(也许)没有input reg意义. 并且是相同的和:它只是更加明确.moduletaskinput wireoutput wireinputoutput


too*_*lic 6

您使用的Verilog代码编译器将决定您必须执行的操作.如果使用非法语法,则会出现编译错误.

一个output也必须声明为reg,如果它使用的是"程序转让"只分配.例如:

output reg a;
always @* a = b;
Run Code Online (Sandbox Code Playgroud)

没有必要声明output一个wire.

没有必要声明input一个wire或一个reg.


小智 5

在数字电路领域看到它

  1. Wire 将创建一个电线输出,只能使用分配语句将其分配给任何输入,因为分配语句创建端口/引脚连接,并且电线可以连接到端口/引脚
  2. reg 将创建一个寄存器(D FLIP FLOP ),它根据灵敏度列表获取或接收输入,可以是时钟(上升或下降)或组合边沿。

因此,这完全取决于您的用途,是否需要创建一个寄存器并根据敏感度列表勾选它,或者您想要创建一个端口/引脚分配