描述
制作一个四选一的多路选择器,要求输出定义上为线网类型。状态转移:
d0 11
d1 10
d2 01
d3 00
信号示意图如下所示:
波形示意图:
输入描述:
输入信号 d1,d2,d3,d4 sel
类型 wire
输出描述:
输出信号 mux_out
类型 wire
代码如下:
- 线网类型只能使用连续赋值语句进行赋值;
- 使用三元运算符 ?: 来实现四个信号的选择;
- 实现思路为:首先判断sel[0]的数值,再判断sel[1]的数值,即可判断出应当选择哪一个信号;
- 此外应当看清时序电路图中sel的数值和四个信号之间的对应关系,下表为该题目中对应关系:
`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
//*************code***********//
assign mux_out = (sel==2'b00)?d3:((sel==2'b01)?d2:((sel == 2'b10)?d1:d0));
//*************code***********//
endmodule
采用case语句实现:
`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
//*************code***********//
reg [1:0] mux_out_tmp;
always@(*) begin
case(sel)
2'b00: mux_out_tmp = d3;
2'b01: mux_out_tmp = d2;
2'b10: mux_out_tmp = d1;
2'b11: mux_out_tmp = d0;
default: mux_out_tmp = d3;
endcase
end
assign mux_out = mux_out_tmp;
//*************code***********//
endmodule
波形图为: