PS:目前手上仍然没有板子,按照野火视频的讲解,目前我们只能做到前面六步(其实第一步设计规划也是需要看板子的硬件的,但是现在没有板子就完全与野火传授的板子一致来看)
首先我们以最简单的2路选择器MUX2_1为例。
1 设计规划及波形绘制
设计规划:MUX的原理是根据sel的值选择对应输入连到输出。
对应的真值表及波形图绘制如下:
2 代码编写
rtl文件:(这里用always进行功能描述,故输入必须是reg型)
module MUX2_1
(input in1,in2,sel,output reg out);always@(*)if(sel == 1'b0)out = in1;elseout = in2;endmodule
3 逻辑仿真及波形验证
仿真文件编写如下:
`timescale 1ns/1nsmodule tb_MUX2_1();reg tb_in1,tb_in2,tb_sel;
wire tb_out;initial begintb_in1 <= 1'b0;tb_in2 <= 1'b0;tb_sel <= 1'b0; endalways #10 tb_in1 <= {$random} % 2;
always #10 tb_in2 <= {$random} % 2;
always #10 tb_sel <= {$random} % 2;MUX2_1 MUX2_1_inst
(.in1 (tb_in1),.in2 (tb_in2),.sel (tb_sel),.out (tb_out)
); endmodule
得到的仿真波形图如下(注意:1中画出的波形图是自己随意画的一个波形,而这里仿真文件是随机生成Sel,in1和in2的,所以这三个与1中画的输入就不同,输出也自然不同,但是依然可以看到,输出根据sel选择对应的输入,仿真通过。)
4 四选一,八选一...
类似上述2选一选择器的设计思路,需要更改的点主要是:
sel的位数根据多少输入来确定:比如四选一有4个输入,需要两位sel(00,01,10,11);八选一有8个输入,需要三位sel(000,001,010,011,100,101,110,111)即
n选一需要x位sel ,满足
4.1 代码编写
当输入比较多时,用if...else语句可能比较麻烦,可以使用case语句,比较清晰明了。
module MUX4_1
(input in1,input in2,input in3,input in4,input [1:0] sel,output reg out);always@(*)begincase(sel)2'b00: out = in1;2'b01: out = in2;2'b10: out = in3;2'b11: out = in4;default out = 1'bx;endcase
endendmodule
4.2 逻辑仿真及波形验证
注意,这里输入in1~in4都是一位的,生成随机数对2取模(得0,1),而sel是两位的,要求有00,01,10,11四种情况,则不能再对2取模,而是对4取模。
always #10 tb_in1 <= {$random} % 2;
always #10 tb_in2 <= {$random} % 2;
always #10 tb_in3 <= {$random} % 2;
always #10 tb_in4 <= {$random} % 2;
always #10 tb_sel <= {$random} % 4;
`timescale 1ns/1nsmodule tb_MUX4_1();reg tb_in1;
reg tb_in2;
reg tb_in3;
reg tb_in4;
reg [1:0] tb_sel;wire tb_out;initial begintb_in1 <= 1'b0;tb_in2 <= 1'b0;tb_in3 <= 1'b0;tb_in4 <= 1'b0;tb_sel <= 2'b00;
endalways #10 tb_in1 <= {$random} % 2;
always #10 tb_in2 <= {$random} % 2;
always #10 tb_in3 <= {$random} % 2;
always #10 tb_in4 <= {$random} % 2;
always #10 tb_sel <= {$random} % 4;MUX4_1 MUX4_1_inst
(.in1(tb_in1),.in2(tb_in2),.in3(tb_in3),.in4(tb_in4),.sel(tb_sel),.out(tb_out)
);endmodule
(本贴仅是个人经验,参考哔哩哔野火视频:06-第六讲-简单组合逻辑---多路选择器(一)_哔哩哔哩_bilibili。如有侵权请联系我~)