当您将某些内容声明为输入或输出时,您如何知道是否必须将其声明为reg
或wire
?
答案 0 :(得分:28)
reg
和wire
指定对象的分配方式,因此仅对输出有意义。
如果您计划在顺序代码中分配输出,例如在always
块中,请将其声明为reg
(这实际上是Verilog中“变量”的误称)。否则,它应该是wire
,这也是默认值。
答案 1 :(得分:15)
output reg foo
只是output foo_wire; reg foo; assign foo_wire = foo
的简写。无论如何,当您计划注册该输出时,这很方便。我认为input reg
对module
(或许task
)没有意义。 input wire
和output wire
与input
和output
相同:它更加明确。
答案 2 :(得分:6)
您使用的Verilog代码编译器将指示您拥有要执行的操作。如果使用非法语法,则会出现编译错误。
output
只有在使用“程序分配”分配时才必须声明为reg
。例如:
output reg a;
always @* a = b;
无需将output
声明为wire
。
无需将input
声明为wire
或reg
。
答案 3 :(得分:3)
在数字电路领域看到它
所以它完全取决于您的使用是否需要创建一个寄存器并根据灵敏度列表勾选它或者您想要创建一个端口/引脚分配
答案 4 :(得分:2)
基本上reg用于存储值。例如,如果你想要一个计数器(它将计数,因此每个计数都有一些值),我们将使用一个reg。 另一方面,如果我们只有一个带有2个值0和1的普通信号,我们会将其声明为wire.Wire无法保存值。因此,为线路分配值会导致问题....