多路选择器
多路选择器:在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路。
二选一多路选择器 --- 模块框图
in_1:输入信号
in_2:输入信号
sel:控制选择信号
out:输出信号
二选一多路选择器 --- 波形图
in_1、in_2、sel 的波形是随机的。
out 的波形根据控制选通信号而定。当 sel为高电频时,输出信号为 in_1;当 sel为低电频时,输出信号为 in_2。
代码部分:
功能代码:
在创建的该二选一多路选择器文件夹下的 Src文件夹中新建 mux2_1.v文件
module mux2_1 ( input wire [0:0] in_1, // 输入信号1 input wire in_2, // 输入信号2 input wire sel, // 选通信号 output reg out // 输出信号 ); always@(*) // if(sel == 1'b1) // out = in_1; // else // out = in_2; case(sel) 1'b1 : out = in_1; 1'b0 : out = in_2; default : out = in_1; endcase endmodule
然后将其添加到 Quartus软件中编译,编译通过后,接着就是仿真文件的编写与编译
仿真文件在 Sim文件夹下新建 tb_mux2_1.v文件
`timescale 1ns/1ns module tb_mux2_1(); reg in_1 ; reg in_2 ; reg sel ; wire out ; initial begin in_1 <= 1'b0; in_2 <= 1'b0; sel <= 1'b0; end always #10 in_1 <= {$random} % 2; always #10 in_2 <= {$random} % 2; always #10 sel <= {$random} % 2; initial begin // -9表示时间格式是纳秒 要和“ns”一致,即10的负9次方;0表示小数点后精确的位数;6打印的最小数字字符是6个 $timeformat(-9,0,"ns",6); // 打印他们的电频变化 $monitor("@time %t:in_1=%b in_2=%b sel=%b out=%b",$time,in_1,in_2,sel,out); end mux2_1 mux2_1_inst ( .in_1(in_1), // 输入信号1 .in_2(in_2), // 输入信号2 .sel (sel), // 选通信号 .out (out) // 输出信号 ); endmodule
由下图可知:打印的波形和日志均正常