mux2的verilog实现
功能描述:选择信号sel = 0时输出 out = a,sel = 1时out = b,主要有以下三种方式实现。
1.门互联: 使用verilog保留字and、or、not
`timescale 1ns / 1ps
//端口定义
module practice3_(
input a,
input b,
input sl,
output out
);
//定义门级输入输出
not u1(nsl,sl);
and #1 u2(sela,nsl,a); //门输入到输出延迟 1ns
and #1 u3(selb,sl,b);
or #1 u4(out,sela,selb);
endmodule
2.布尔表达式:使用&、|、~操作符表示
//端口定义
module practice3_(
input a,
input b,
input sl,
output out
);
wire sela,selb,nsl; //定义内部互连线
assign nsl = ~sl; //按位取反
assign sela = a & nsl; //按位与
assign selb = b & sl;
assign out = sela | selb; //按位或
endmodule
3.逻辑功能描述
//端口定义
module mux2(
input a,
input b,
input sel,
output reg c
);
//
always @(*) begin
if(!sel) c = a; //sel = 0 时输出为a
else c = b; //sel = 1 时输出为b
end
endmodule
综合结果均为查找表电路:
4.测试
testbench:
`timescale 1ns / 1ps
module tb_pra();
reg a;
reg b;
reg sel;
reg clk;
wire c;
//initialize
initial begin
a = 0;
b = 0;
sel = 0;
clk = 0;
end
//f = 10MHz
always #50 clk = ~clk;
//random a&b
always @(posedge clk) begin
#1 a <= {$random}%2;
#3 b <= {$random}%2;
end
//change sel
always #10000 sel = !sel;
//inst
mux2 u_mux2(
.a(a),
.b(b),
.sel(sel),
.c(c)
);
endmodule
仿真
系统函数 $random
1.随机整数
num = $random%b
其中,b为十进制整数;则num为范围在 -(b-1):(b-1) 中的随机数
2.随机正整数
num = {$random}%b
其中,b为十进制整数;则num为范围在 0:(b-1) 中的随机数