题解 | #四选一多路器#
四选一多路器
https://www.nowcoder.com/practice/cba4617e1ef64e9ea52cbb400a0725a3
`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
//*************code***********//
wire [1:0]d1,d2,d3,d0;
wire [1:0]sel;
wire [1:0]mux_out;
assign mux_out = (sel == 2'b00)? d3:
(sel == 2'b01)? d2:
(sel == 2'b10)? d1:d0;
//*************code***********//
endmodule
先上代码。
题目拆分:
1、四选一输出;
2、输出为wire;
思路:
1、由于是四选一输出,所以其功能为通过sel信号选择四路输入信号之一输出到输出信号端口。
2、接着看到输出为wire类型,首先考虑使用组合逻辑的办法,即直接使用assign语句赋值,再考虑到波形图中的sel信号和其他信号的对应关系,使用=?:结构进行判断与选择。
assign mux_out = (sel == 2'b00)? d3:
(sel == 2'b01)? d2:
(sel == 2'b10)? d1:d0;
3、也可以使用always块的组合逻辑方式,但是由于输出需要wire类型,所以需要一个中间变量寄存器mux_out_mid,也可以实现功能。
reg [1:0]mux_out_mid;
always@(*)
begin
case (sel)
2'b00: mux_out_mid = d3;
2'b01: mux_out_mid = d2;
2'b10: mux_out_mid = d1;
2'b11: mux_out_mid = d0;
endcase
end
assign mux_out = mux_out_mid;