Verilog Reg/Wire 混乱

Verilog Reg/Wire Confusion

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

更新图片说明:

是的,您可以在 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