题目
要求设计一个四选一多路选择器,其输入输出信号如下表。
信号 | 类型 | 输入/输出 |
---|---|---|
d1 | wire | Intput |
d2 | wire | Intput |
d3 | wire | Intput |
d0 | wire | Intput |
sel | wire | Intput |
mux_out | wire | Output |
具体的模块的输入输出如下图所示。
题目要求的输入输出真值表如下表。
sel | 输出 |
---|---|
00 | d3 |
01 | d2 |
10 | d1 |
11 | d0 |
模块的输入输出时序如下图所示(这里官方给的时序图有问题)。
答案
练习的答案如下。
(1)写法一
`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_t;
always @(*)
case(sel)
2'd0: mux_out_t <= d3;
2'd1: mux_out_t <= d2;
2'd2: mux_out_t <= d1;
2'd3: mux_out_t <= d0;
default: mux_out_t <= 2'd0;
endcase
assign mux_out = mux_out_t;
//*************code***********//
endmodule
(2)写法二
`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'd0) ? d3 : (sel == 2'd1) ? d2 : (sel == 2'd2) ? d1 : d0;
//*************code***********//
endmodule