【问题标题】:Verilog Reg/Wire ConfusionVerilog Reg/Wire 混淆
【发布时间】:2016-03-03 11:36:48
【问题描述】:

我正在用 Verilog 制作一个多周期 CPU,它由一个数据路径和一个控件组成。控制(状态机)的输出是寄存器,但数据路径之间的连接是电线。如果线路信号应该是(在伪代码中):wire = OR(wire coming from a mux, reg output from control),我该怎么做?您可以在 Verilog 中使用带有 reg 的电线或电线吗?如果没有,是否有更好的方法来实现这一点?控制信号输出是否可以是控制模块中的寄存器,但在顶层模块中接线?

更新图片以澄清:

【问题讨论】:

    标签: verilog logical-operators cpu-registers


    【解决方案1】:

    是的,您可以在 Verilog 中输出一个连线和一个 reg。

    是的,每个子模块的输出,本质上是电线,可以直接或间接地在内部连接到子模块内的 reg。

    我认为这是一个很好的方法。

    现在,您甚至可以将模块的输出声明为“reg”,但这只是将输出和 reg 分开声明的语义糖。我更喜欢明确的方式(即 q1_o 和 q1_reg)。

    module Submod(input clk_i, intput d_i, output q1_o, output reg q2_o);
        reg q1_reg;
        always @(posedge clk_i) begin
            q1_reg <= d_i;
            q2_o <= ~d_i;
        end
        assign q1_o = q1_reg;
    endmodule
    
    module Main(input clk_i, input [3:0]ext_i, output [1:0]ext_o)
        wire mux, x1, x2;
    
        Submod Submod_inst(clk_i, ext_i[0], x1, x2);
    
        assign ext_o[0] = x1;
        assign mux = ext_i[1] ? ext_i[2] : ext_i[3];
    
        assign ext_o[1] = mux | x2; /* something like this */
    endmodule
    

    【讨论】:

    • 仅供参考:示例是假想的。我认为语法是正确的,它是我的首要任务,我无法访问 Verilog 编译器来检查。它应该足够近,可以看到如何将 reg 挂在电线上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多