1、多路选择器设计方式
- case语句
- if else 语句
2、四选一的选择器
制作一个四选一的多路选择器,要求输出定义上为线网类型
状态转换:
d0 11
d1 10
d2 01
d3 00
2.1 采用case语句
always块中,输出信号用reg ; 时序用 <= reg [1:0] mux_out;
1.module里定义时自动为wire型变量
2.always的@内变量设置为*可以自动匹配输入
3.always模块内被赋值的变量必须是reg型,赋的值类型随意
4.assign时被赋值的变量必须是wire型,赋的值类型随意
`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
//*************code***********//
//always块中,输出信号用reg ; 时序用 <=
reg [1:0] mux_out;
always @(*)
begin
case(sel)
2'b00 : mux_out<= d3;
2'b01 : mux_out<= d2;
2'b10 : mux_out<= d1;
2'b11 : mux_out<= d0;
default: mux_out<= 2'b00;
endcase
end
//*************code***********//
endmodule
3、Testbench编写
1.testbench里需要根据Verilog里的输入输出重新定义变量,再实例化设计模块
2.initial作为初始化模块,被初始化的变量必须是reg类型
3.时钟 always +时钟延时反转
`timescale 1ns/1ns
module testbench();
reg [1:0] d0,d1,d2,d3,sel;
initial begin
d0=3;
d1=0;
d2=1;
d3=2;
sel=0;
#1 sel=1;
#20 sel=2;
#20 $finish;
end
mux4_1 simulation_test (
.d1(d1),
.d2(d2),
.d3(d3),
.d0(d0),
.sel(sel),
.mux_out(mux_out));
initial begin
$dumpfile("out.vcd");
$dumpvars(0, testbench);
end
endmodule