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