【问题标题】:Using wire or reg with input or output in Verilog在 Verilog 中使用带有输入或输出的 wire 或 reg
【发布时间】:2011-03-19 06:10:39
【问题描述】:

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

【问题讨论】:

    标签: verilog


    【解决方案1】:

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

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

    【讨论】:

    • 如果你添加`default_nettype none,如果你没有明确指定wire,你会得到一个错误。
    • reg 声明对外部连接的模块有什么影响吗?
    • 您需要在always(*) 块中使用reg 吗?这种情况下会不会合成一个d触发器?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您使用的 Verilog 代码编译器将指示您必须做什么。如果你使用非法语法,你会得到一个编译错误。

      output 也必须声明为 reg,前提是它使用“过程赋值”进行赋值。例如:

      output reg a;
      always @* a = b;
      

      无需将output 声明为wire

      无需将input 声明为wirereg

      【讨论】:

        【解决方案4】:

        在数字电路领域看到它

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

        所以这完全取决于你的使用是否需要创建一个寄存器并根据灵敏度列表勾选它或者你想创建一个端口/引脚分配

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-03-03
            • 1970-01-01
            • 2021-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多