Modelsim的仿真心得
该文档记录我简单使用Modelsim的心得。从库的使用到后来的仿真。
第一章 仿真流程
1.1库的设置
首先是Altera公司各种芯片的仿真库。我本次安装的是Quartus9.1SP2。它的仿真库的位置 D:\\altera\\91\\quartus\\eda\\sim_lib
下面是通常每次仿真都需要用到的一些仿真库,所以把它做成库比较好。
在Modelsim里面新建一个工程。位置什么的随便选。如下图。
然后综合它下面的所有文件。
然后它生成在work目录下。这样仿真库是编译好了。不过还需要加载及映射一下。使用File里面的Import功能,选择Library。如下,为需要导入的文件的位置。
然后选择next,接下来就是库文件名及位置。下面使用的设置是为Altera的器件设置的库,然后放在Modelsim的安装目录下。如图。
然后接着继续导入就行了。重新启动Modelsim即可看到该库的存在。
注:后来经研究发现,该库只是对于当前的那个工程管用(mpf工程文件里面包含的有各种信息)。最简单或者好的方式(免去下次再弄)是修改Modelsim的配置文件。该文件为只读,先取消只读。下面是我修改的例子。
注意是这个配置文件:C:/modeltech_6.5b/examples/modelsim.ini
1.2简单的仿真
这里面从Quartus开始。在最初建立工程的时候仿真工具选择Modelsim SE版本。然后选择器件及添加代码。这里添加的是如下代码,采用的是CycloneII的FPGA。
module signalshow(hit,clk,Q1,Q2,Q3);
input hit,clk;
output Q1,Q2,Q3; wire invclk;
assign invclk=!clk;
wire Q1,Q2,Q3;//hit到来后的第一个上升沿Q1,接着下降沿Q2,再接着上升沿为Q3。 (* noprune *) DFF dff1( .d(hit), .clk(clk), //.clrn(), //.prn(), .q(Q1) ); (* noprune *) DFF dff2( .d(Q1), .clk(invclk), //.clrn(), //.prn(), .q(Q2) ); (* noprune *) DFF dff3( .d(Q2), .clk(clk), //.clrn(), //.prn(), .q(Q3) ); endmodule
该代码的RTL功能如下图。是很简单的功能。
编译综合完成后,在其目录下会生成一个simulation文件夹,然后该文件夹下有modelsim文件夹。比较关键的是该文件夹下有signalshow.vo(生成的网表文件)、signalshow_v.sdo(标准延时文件)及其他几个文件。
接下来启动Modelsim,新建工程。位置可以直接选在这里。然后添加现成的文件,添加上
面的*.vo文件。
另外这里面采用的是CycloneII,需要另外添加CycloneII器件的仿真库cycloneii_atoms.v。同时由于最前面的例子,已经添加了Altera的几个比较常用仿真库编译的库(即用Import引入的),所以这里不用添加,否则也应该像cycloneii_atoms.v一样添加。
打开一个文本文件,即可发现处理文本的工具条。然后可以选择模板。
中间那个T的即是模板。然后二条即生成测试向量模板。双击并进行相应的操作即可生成模板。下面是生成的并修改过后的模板。
`timescale 1 ns/1 ps
module signalshow_tb ;
wire Q3 ; reg hit ; wire Q1 ; reg clk ; wire Q2 ;
initial begin
hit=0; clk=0;
#500 hit=1; #50 hit=0; end
always #10 clk=~clk;
signalshow DUT ( .Q3 (Q3 ) , .hit (hit ) , .Q1 (Q1 ) , .clk (clk ) , .Q2 (Q2 ) ); endmodule
注意`timescale 1 ns/1 ps表示单位为ns,精度为ps。
然后编译所有文件。
Simuliate->Star Simulation。首先在Design页选择要仿真的文件。通常取消优化。即“Enable Optimization”项取消。
另外注意Librarys里面一定要看一下,是否设置了相应的库。
如果需要后仿真,则接着设置,否则直接OK即可。后仿真时,在SDF项里面选择延时文件。然后勾上几个关于SDF文件的选项。这样才能正常运行成功。还要选择一下延时类型。
接下来即可选择信号了。
选择该项的话,添加出来的仅仅是设计文件中提到的几个主要端口。如果选择下面的一个All items in design的话,会添加进去相当多的信号。查看会比较麻烦。 无延时
典型
最大
最小
感觉好像都一样,呵呵。
第二章 测试代码编写
第三章 常见问题
关于No objects found matching
Modelsim在仿真时,点击start simulateion后,出现Objects空白的问题,导致add wave -hex *后出现“No objects found matching '*'”;尽管输入run后,可以运行仿真,但却无法察看wave窗口的波形
网上有很多资料多次提到,这是优化的问题。
本文整理一下解决的方法:.
点击工具栏中的“simulate”按钮,调出start smulation窗口,把窗口中最下边optimization栏中的Enable optimization项目前的钩钩去掉,然后选择仿真的文件,点击OK,就一切正常了,能看到objects了。 或者
找到modelsim安装目录下的modelsim.ini文件,将VoptFlow = 1注释掉,或者把1改为0,这样默认的状态就是不优化。
总的来说,就是优化的问题,禁止优化,你就能看到期望中的objects了