Home Articles

Verilog Reg / Wire混乱

Asked
Viewed 1562 times
0

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

更新图片以澄清:
enter image description here

1 Answer

  • 3

    是的,您可以在Verilog中使用或者使用wire和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
    

Related