0 - ModelSim 仿真
1、切换工作目录(.v 文件所在目录)
【File-Change Directory】
代码:
cd C:/Users/16041/Documents/Verilog/Course
2、创建 Library
【File-new-Library】
缺省名称为 work - work
也可使用代码:
//在当前目录建立逻辑库 work,运行后会在当前目录下找到 work 文件夹。
vlib work
//映射逻辑库名到指定的目录
vmap work work
3、编译 Compile(图标为)
选中待编译的文件,点击 compile,编译完后需手动点击 done 来关闭当前窗口。
看输出结果,显示先编译了一个 model 叫 inv,而后编译了一个 model 叫 inv_tb,顶层模块是 inv_tb。
Inv 和 inv_tb 这两个模块正是和 编写的 inv.v 程序中定义的两个模块相对应。
编译完以后打开 work 可以看到两个编译出来的 model。
4、仿真
对顶层模块进行仿真:【右键点击 inv_tb - simulate】
即 vsim -voptargs=+acc work.inv_tb
5、添加需要观察的波形
点击下方的【sim】
点击 inv_tb,右侧出现 yy,aa 也就是 .v 文件中该模块定义的信号。
右键 add to 添加到波形
点击 【restart】
点击 【run all】
6、查看波形
先查看全图
可以看到 aa 一开始是0,每过 10ns 进行一次反转,yy 始终是 aa 的反相。
至此完成了反相器的代码仿真。
附 inv.v 程序内容:
//反相器设计
//1ns的时间单位,10ps的时间精度
`timescale 1ns/10ps
module inv (
A,
Y
);
input A ;
output Y ;
assign Y=~A;
endmodule
//测试代码 testbench 不带括号
module inv_tb;
reg aa ;
wire yy ;
inv inv(
//异名例化
.A (aa ),
.Y (yy )
);
initial begin
aa<=0;
//#10表示过十个时间单位
#10 aa<=1;
#10 aa<=0;
#10 aa<=1;
//仿真停止用Verilog的系统任务
#10 $stop;
end
endmodule
PS:CSDN 不支持 Verilog 语言的语法高亮,太令人难受了。