多种方式描述4选1数据选择器
代码
第一种
`timescale 1 ns / 1 ps
module mux4_1 ( Y ,A ,D0, D1, D2, D3, );
input [1:0] A ;
wire [1:0] A ;
input D0 ;
input D1 ;
input D2 ;
input D3 ;
output Y ;
reg Y ;
always @(*)
if(A == 2'b00)
Y = D0 ;
else if(A == 2'b01)
Y = D1 ;
else if (A == 2'b10)
Y = D2 ;
else
Y = D3 ;
endmodule
第二种
always @(*)
begin
if(A == 2'b00)
Y = D0 ;
else if(A == 2'b01)
Y = D1 ;
else if (A == 2'b10)
Y = D2 ;
else
Y = D3 ;
end
第三种(其他的都基本一致,这里懒得写了)
assign Y = (A ==1'b0)?((B ==1'b0)?(D0):(D1)):((B ==1'b0)?(D2):(D3)) ; //选择位ab
RTL视图
rtl视图在左下角TASK->Compile Design->Analysis & Synthesis->Netlist Viewers->RTL
(以后有时间再补充)
波形仿真
编写仿真文件
`timescale 1ns/1ns
module tb_mux4_1();
reg in_1;
reg in_2;
reg in_3;
reg in_4;
reg [1:0] sel;
wire out;
initial
begin
in_1 <=1'b0;
in_2 <=1'b0;
in_3 <=1'b0;
in_4 <=1'b0;
sel <= 1'b0;
end
always #10 in_1 <= {$random} % 2;
always #10 in_2 <= {$random} % 2;
always #10 in_3 <= {$random} % 2;
always #10 in_4 <= {$random} % 2;
always #10 sel <= {$random} % 4;
always
begin
$timeformat(-9,0,"ns",6);//时间单位格式10-9S,小数点后打印位数,单位,打印最小数字字符是六个
$monitor("@time %t %b",$time , in_1);
end
mux4_1 mux4_1test1
(
.Y(out),
.A(sel),
.D0(in_1),
.D1(in_2),
.D2(in_3),
.D3(in_4)
);
endmodule
配置仿真
一些小细节
1
全局视图
2
如果有仿真文件error修改后按“上箭头”+“回车”可以重新编译,
编译失败的话在Library->work中不会加载
触发信号是在work->sim中添加、
3
左上角可以省略路径名字