本博客以modelsim平台为例,实现了一个三八译码器;
Step1.在modelsim创建新的工程;
file-》new-》project,给工程命名,添加相应的文件;
Step2.添加事先准备的源文件和Testbench文件;
3-8译码器的源文件如下,文件命名:decoder3_8.v:
/*
* @Descripttion:
* @version:
* @Author:
* @Date: 2021-01-19 16:34:50
* @LastEditors: sueRimn
* @LastEditTime: 2021-03-30 17:07:58
*/
module decoder3_8(
a,
b,
c,
out
);
input a; //输入端口a
input b; //输入端口b
input c; //输入端口c
output [7:0]out;//输出端口out
reg [7:0]out;
always@(a,b,c)
begin
case({a,b,c})
3'b000:out = 8'b0000_0001;
3'b001:out = 8'b0000_0010;
3'b010:out = 8'b0000_0100;
3'b011:out = 8'b0000_1000;
3'b100:out = 8'b0001_0000;
3'b101:out = 8'b0010_0000;
3'b110:out = 8'b0100_0000;
3'b111:out = 8'b1000_0000;
endcase
end
endmodule
Testbench仿真文件如下,文件命名:tb_decoder3_8.v:
`timescale 1ns / 1ps //timescale 单位 /精度。
//例如 1ns/100ps,这样在设置延时 #100,就代表着延时,100*1ns。并且可以延时 100.1ns
module decoder3_8_tb;
reg a;
reg b;
reg c;
wire [7:0] out;
//添加激励:进行仿真,就需要对其输入端口施加激励来观测输出端口的输出波
initial begin
a = 0;b = 0;c = 0; //在0时刻三个输入均为0
#200; //经过200ns的延时
a = 0;b = 0;c = 1; //在200ns时输入信号的值
#200; //又经过200ns的延时
a = 0;b = 1;c = 0; //在400ns时输入信号的值
#200; //又经过200ns的延时
a = 0;b = 1;c = 1; //在600ns时输入信号的值
#200;
a = 1;b = 0;c = 0;
#200;
a = 1;b = 0;c = 1;
#200;
a = 1;b = 1;c = 0;
#200;
a = 1;b = 1;c = 1;
#200;
$stop; //停止仿真
end
//例化:这种例化方式代码显得简洁,但是要求在例化模块中的信号排列顺序要与被调用模块中的信号排列顺序严格一致。
decoder3_8 decoder3_8(
.a(a),
.b(b),
.c(c),
.out(out)
);
endmodule
Step3.进行仿真
1.单击_tb文件,右键Start simulation
2.设置暂态仿真时间长度
3.单击运行按钮,如图所示
Step4.观察仿真波形