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

时间:2011-03-19 06:10:40

标签: verilog

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

5 个答案:

答案 0 :(得分:28)

regwire指定对象的分配方式,因此仅对输出有意义。

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

答案 1 :(得分:15)

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

答案 2 :(得分:6)

您使用的Verilog代码编译器将指示您拥有要执行的操作。如果使用非法语法,则会出现编译错误。

output只有在使用“程序分配”分配时才必须声明为reg。例如:

output reg a;
always @* a = b;

无需将output声明为wire

无需将input声明为wirereg

答案 3 :(得分:3)

在数字电路领域看到它

  1. 线路将创建一个线路输出,只能通过使用assign语句为任何输入分配,因为assign语句创建一个端口/引脚连接,并且线路可以连接到端口/引脚
  2. 一个寄存器将创建一个寄存器(D FLIP FLOP),它根据灵敏度列表获取或接收输入,或者它可以是时钟(上升或下降)或组合边缘。
  3. 所以它完全取决于您的使用是否需要创建一个寄存器并根据灵敏度列表勾选它或者您想要创建一个端口/引脚分配

答案 4 :(得分:2)

基本上reg用于存储值。例如,如果你想要一个计数器(它将计数,因此每个计数都有一些值),我们将使用一个reg。 另一方面,如果我们只有一个带有2个值0和1的普通信号,我们会将其声明为wire.Wire无法保存值。因此,为线路分配值会导致问题....