Modules and vectors

/*
在always块中赋值的输出信号必须声明为reg类型
*/
module top_module ( 
    input clk, 
    input [7:0] d, 
    input [1:0] sel, 
    output reg [7:0]  q 
);
wire [7:0]d_1;
wire [7:0]d_2;
wire [7:0]d_3;
    my_dff8 my_dff8_inst1(
        .clk(clk),
        .d(d),
        .q(d_1)
    );
    my_dff8 my_dff8_inst2(
        .clk(clk),
        .d(d_1),
        .q(d_2)
    );
    my_dff8 my_dff8_inst3(
        .clk(clk),
        .d(d_2),
        .q(d_3)
    );

// 多路复用模块
    always @(*) begin
        case(sel)
            2'b00: q = d;          // 选择输入d(0个时钟周期延迟)
            2'b01: q = d_1;        // 选择第一个D触发器的输出(1个时钟周期延迟)
            2'b10: q = d_2;        // 选择第二个D触发器的输出(2个时钟周期延迟)
            2'b11: q = d_3;        // 选择第三个D触发器的输出(3个时钟周期延迟)
            default: q = 8'b0;     // 默认值,防止未定义行为
        endcase
    end
endmodule