刚开始多路选择器使用如下阻塞赋值代码(还停留在c的习惯中),一直编译报错,下面语句是不能够单独使用的,要放到组合逻辑always(*)中
case (sel)
2'b00: q = w0;
2'b01: q = w1;
2'b10: q = w2;
2'b11: q = w3;
default: q = w0;
endcase
根据提示多路选择器需要使用 always@(*),否则一起会提示错误
always@(*) begin
case (sel)
2'b00: q = w0;
2'b01: q = w1;
2'b10: q = w2;
2'b11: q = w3;
default: q = w0;
endcase
end
module top_module (
input clk,
input [7:0] d,
input [1:0] sel,
output [7:0] q
);
wire [7:0] w3;
wire [7:0] w2;
wire [7:0] w1;
wire [7:0] w0;
assign w0 = d;
my_dff8 u1_my_dff8(clk,d,w1);
my_dff8 u2_my_dff8(clk,w1,w2);
my_dff8 u3_my_dff8(clk,w2,w3);
/*
case (sel)
2'b00:
assign q = w0;
2'b01:
assign q = w1;
2'b10:
assign q = w2;
2'b11:
assign q = w3;
default:
assign q = w0;
endcase
*/
always@(*) begin
case (sel)
2'b00: q = w0;
2'b01: q = w1;
2'b10: q = w2;
2'b11: q = w3;
default: q = w0;
endcase
end
endmodule