声明:
博主主页:王_嘻嘻的CSDN博客
未经作者允许,禁止转载
系列专栏:牛客Verilog习题集
推荐一个IC、FPGA新手入门的好网站:快 点 击 进 入 学 习 吧
前言:应朋友之约,从今天开始一个新的专栏Verilog习题集,将整理牛客网经典Verilog习题讲解,牛客网里除了最新的Verilog题库还有其它领域的经典笔试、面试题,大家快和我一起刷起来吧点 击 跳 转
首先题目要求完成的一个4输入的多路选择器,从要求的波形可以看出选择信号的对应关系如下:
sel | din |
---|---|
2’b00 | d3 |
2’b01 | d2 |
2’b10 | d1 |
2’b11 | d0 |
所以其本质就是一个case语句形成的并行选择电路,这里需要提醒各位新手,在写任何Verilog代码时,都需要想到其最后对应的电路形式,Verilog其实是算不上代码,而是电路描述。
有很多朋友在完成这题时,可能还会使用assign或者if else语句,虽然这样完成的电路最后功能也是正确的,但是我们需要明白这样的电路是有优先级的,那么形成的电路其实是3个2选1的MUX串联的,那么其逻辑时延会更大,但是面积会略小于一个4选1的MUX。
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;
always @(*)begin
case(sel[1:0])
2'b00: mux_out[1:0] <= d3[1:0];
2'b01: mux_out[1:0] <= d2[1:0];
2'b10: mux_out[1:0] <= d1[1:0];
2'b11: mux_out[1:0] <= d0[1:0];
endcase
end
//*************code***********//
endmodule