【发布时间】:2011-03-19 06:10:39
【问题描述】:
当您将某些内容声明为输入或输出时,您如何知道是否还必须将其声明为reg 或wire?
【问题讨论】:
标签: verilog
当您将某些内容声明为输入或输出时,您如何知道是否还必须将其声明为reg 或wire?
【问题讨论】:
标签: verilog
reg 和 wire 指定如何分配对象,因此仅对输出有意义。
如果您打算在顺序代码中分配输出,例如在 always 块中,请将其声明为 reg(这在 Verilog 中确实是“变量”的误称)。否则应该是wire,这也是默认的。
【讨论】:
`default_nettype none,如果你没有明确指定wire,你会得到一个错误。
reg 声明对外部连接的模块有什么影响吗?
always(*) 块中使用reg 吗?这种情况下会不会合成一个d触发器?
output reg foo 只是 output foo_wire; reg foo; assign foo_wire = foo 的简写。无论如何,当您计划注册该输出时,它会很方便。我不认为input reg 对module 有意义(也许task)。 input wire 和 output wire 与 input 和 output 相同:只是更明确。
【讨论】:
您使用的 Verilog 代码编译器将指示您必须做什么。如果你使用非法语法,你会得到一个编译错误。
output 也必须声明为 reg,前提是它使用“过程赋值”进行赋值。例如:
output reg a;
always @* a = b;
无需将output 声明为wire。
无需将input 声明为wire 或reg。
【讨论】:
在数字电路领域看到它
所以这完全取决于你的使用是否需要创建一个寄存器并根据灵敏度列表勾选它或者你想创建一个端口/引脚分配
【讨论】:
基本上 reg 用于存储值。例如,如果你想要一个计数器(它会计数,因此每个计数都会有一些值),我们将使用一个 reg。 另一方面,如果我们只有一个具有 0 和 1 2 个值的普通信号,我们将其声明为 wire。Wire 不能保存值。因此将值分配给 wire 会导致问题....
【讨论】: