|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, R T, T+ ~8 i3 i5 t9 U
使用Modelsim进行仿真非常方便,可以通过.do文件完成一些重复性的界面操作,但是使用Modelsim仿真IP核的时候经常会因为没有库文件的问题而纠结,网上不乏一些相关教程,但是在使用过程中总会遇到这样那样的问题,于是我痛定思痛,决定彻底解决这个问题,为了帮助大家解决相同的烦恼,决定写这篇文档,帮助大家避免走我曾走过的弯路,这也是我的第一篇教程,希望能帮到大家! \! O9 Q4 p, c! S# O% z
1 软件环境:操作系统 win7 旗舰版 64位
) U5 @+ Q: D# Z+ v# |) z& A/ PModelsim SE10.1a
* c* m* m& S( Y& }) M7 i2 [Quartus II13.0sp1 (64-bit)
" u, B& p) Q0 m% D4 {Vivado 2016
7 Z3 g; ?. b* T3 a2 思路说明不管是Altera还是Xilinx的软件都有直接调用Modelsim仿真的功能,但是其缺点在与每次调用时都会重复编译相同的库,耗时较长,而且每次调用后仿真波形都是默认的,需要我们再次手动添加波形,无形中耗费了大量时间。同时Modelsim具有编译快,仿真快的优点,在这里就不多说了。$ [+ ]7 v" V' E
其实软件在调用Modelsim的时候回生成相应的.do文件,仔细研究生成的文件会发现里面包含了完成Modelsim仿真的几乎所有命令,包括相关库的编译,而我们要做的就是利用该.do文件,在其基础上进行修改,达到我们想要的结果。% D( T. G* y8 g" ~: U0 n8 t* F
3 Quartus下使用Modelsim独立仿真3.1 设置Quartus中仿真软件及仿真脚本首先你要有一个自己的要仿真的工程,如果没有,可以参考网上其他资料新建一个最简单的PLL分频的工程,然后打开Quartus II 13.0sp1,设置Modelsim的安装路径。
- x: ?2 r2 Z4 N' W- r: u7 Q# G![]() 2 A q/ ]$ ?: q6 D
然后在Setting里设置仿真工具,选择Modelsim,设置仿真用到的testbench,该文件需要自己提前写好。
* z4 k) Y9 y3 P![]() . Y. j; G+ T1 ]" c8 y' |8 b
: ? P; o7 E; S! }+ e7 e# a点击Test Benches->New
; }6 ?( b7 H5 R+ y; Y5 G![]() - a7 h+ g2 P- F: r
先点击Add,根据路径选择你已经写好的testbench,然后根据填写下图中第一和第二行的内容,注意,Test bench name指的是你具体文件的名字,后面要有文件名后缀,我是自己写的,所以是.v,如果用Quartus自动生成的,是.vt,二者没有本质区别,下一行Top level module in test bench 要填写的是你testbench中module的名字,如果注意规范的话,可以把文件名和module名命名成一样的,同时命名中加tb表示其为testbench。
: U. h4 Y* U9 Z: W5 ]# ] `$ ^![]() ; M0 Z6 o6 c( S
: O% [7 ^3 h( i' X# X最后,点击Tools Runsimulation tool RTL simulation,程序会自动调用Modelsim进行仿真,同时编译相关库。
, e& p @" D6 L+ m% a4 q完成以上操作,软件会自动调用Modelsim完成仿真,到这一步,恭喜你已经学会了使用Quartus与Modelsim联合仿真的方法。
6 T2 I! P& U6 l3.1 查看Modelsim记录但是联合仿真并不是我们的目的,下一步我们在Modelsim中查看软件的记录,发现实际上是执行了一个名为sdram_test_run_msim_rtl_verilog.do文件(Modelsim中的脚本文件)。8 I1 b; }* @" z9 |" J3 S. a
![]()
/ ^4 h" K, A9 V% j) D# s0 K4 |: L& P8 Q; `1 [$ `! s6 G0 }. \
我们找到并打开该文件,一般该文件位于工程目录下名为Modelsim的仿真文件目录下,可以使用everything搜索找到,内容如下:! u+ p$ x K6 D/ {2 \+ @
![]() + c3 x: C5 F) H3 t9 z2 v" B
8 v! d0 a5 M* s$ K1 U
该文件的功能实际上是建立库,生成映射,然后编译源文件。/ P6 x4 h! j, q, E; x! G, c9 }
简单分析各语句功能,第2、3行是检测是否有库文件存放的目录,如果没有,新建一个名为Verilog_libs的路径。vlib是新建一个仿真库,vmap将逻辑库映射到实际的物理地址,其后面参数依次为逻辑库和实际库地址,“.”的意思为当前目录,“..”为上一层目录,知道这个可以很好的利用相对路径,如果用过Lunix应该对这个比较熟了。. f3 r+ Q; Y$ n5 u
下面是编译生成的库, g3 W; [; D1 W% W: R) {7 e
![]()
- {$ B# [* h/ o7 ~# p+ e; W* t& h+ k5 }' }2 F: t6 `, K
接下来要做的就是新建一个工程,然后想办法调用这些自动生成的库,以后就可以摆脱联合仿真,这么做有几点好处1不用每次都编译Altera的库,2 可以直接在Modelsim中进行操作了,而与Quartus没有关系了。3.Modelsim编译.v文件比较快。
+ r. K7 |$ G# f$ n( l9 j" x! e+ Q+ v也有相关教程教大家一次性编译Altera所有的库文件然后放到指定文件夹备用,本教程方法可以借助软件自动生成的.do文件,省去自己从头编写的麻烦,具体大家可以自己探索。# e- H' O% E9 a' R6 g+ ?- L8 b
3.3 新建Modelsim工程新建工程的方法就不在这累述了,建完之后添加目前的设计文件,可以直接添加Quartus工程下的文件,这样的好处是不用重复复制文件,同时文件只有一个备份,避免在Modelsim调试时做更改而Quartus工程下的文件没有更新,毕竟,最后仿真完成了还是要回到Quartus的。2 u) v; ~( A1 ^4 J( h( ^
![]()
8 {" o" i( W0 H8 F% X
6 i( i: H+ q! w6 ~/ R将sdram_test_run_msim_rtl_verilog.do文件复制的Modelsim工程目录下并打开,翻到红线所示行,之前的代码只留下库映射的语句,其余用#注释掉,这样就不用每次都编译相关库文件了。下面解释下代码具体功能。. j' s0 B2 F d0 R
vlibrtl_work 建立一个名为rtl_work的库(物理)
$ @$ `( O: N t3 b- Svmap workrtl_work 将逻辑库work 映射到物理库rtl_work
' l+ R- V6 r- Q. _. }vlog-vlog01compat -work work +incdir+E:/99_ZJ_IP/12_sdram_test{E:/99_ZJ_IP/12_sdram_test/sdram_pll.v}
4 t" k6 J3 y) K2 V6 x: {vlog是编译.v文件的命令,“-”之后表示编译参数,后面是文件的路径,可以不用修改,直接使用,
# Z' B" B) A: T0 }7 i# m. evsim -t 1ps -Laltera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -Lcycloneive_ver -L rtl_work -L work -voptargs="+acc" tb_sdram_test6 c! L4 g1 q( e X
仿真tb_sdram_test,即我们的testbench5 [8 [5 {; Z; p* Z3 R
add wave * 添加testbench中的所有信号
5 V: ?5 F) j) `: M0 w1 ^/ _/ Dview structure 打开structure窗口
6 T" a; h, E/ b8 a3 y/ l2 lview signals 打开wave窗口$ ]! c! K( ?6 ]0 u# s
run –all 运行,-all表示一直运行至所有信号被调用,可以手动修改运行时间,例如run 3us
6 G* M1 t* N V& Z; s9 I至此,就可以愉快的使用Modelsim进行仿真了
+ B+ H3 N! i k
& Q8 \- y: j" y" L7 I t! C4 Vivado下使用Modelsim独立仿真4.1 编译库Vivado软件本身自带了编译仿真库的功能,用时较长,只需要执行一次,可以将所有的库编译并存放到指定文件夹,一劳永逸。
( R5 U/ Z5 Z' Z+ `# n; B![]() 4 [+ N) i# M9 u; Y0 z" E
![]()
; `1 `4 m% x6 L U7 M
3 q' _% K, u$ N0 K0 P9 h X2 o4.2设置仿真选项![]()
2 Y2 S1 {4 d4 y: r0 ^1 x) |$ K' T2 o5 v! u8 d% ?+ A
4.3 运行行为级仿真
! F* D! J9 x) ^2 b![]() 8 |, w' i: l! e. X- ?" V, H! e
4 g* t1 h+ X" _% S4 B4.4 找到自动产生的仿真文件![]()
d8 B# n5 w' k% H* b
4 |/ G7 y+ x; z9 T到此为止,就可以摆脱vivado了7 Q/ }/ |; r7 t8 ^/ o! p
4.5 新建Modelsim工程新建仿真文件夹,路径与文件夹behav同级,这样.do文件不需要再修改编译文件路径。
* G# x6 G% w9 ?0 Y拷贝上图中画红线的文件到新建的文件夹中,
- ^4 v2 `/ }1 p1 w/ K修改两个.do文件中的内容合并成一个文件,只保留必要的内容,比如我只保留如下内容:
3 e- D6 z5 k: K# V, T![]()
( F. ?! ?+ B/ O, @/ b: F* C O) d
: Y- T4 }( O( Y5 W5 f/ b该文件中的注释是我为了方便大家理解加上去的,实际.do文件的注释符为#,且只能独立成行,不能与命令在同一行。
L' o5 B, j; e保存该文件,在Modelsim中新建工程
- q$ {% j. W' N![]() 5 }% g! ^: e4 o- x
' _( v0 \. w# ]" ^" w4 c需要注意的是,需要在此指定拷贝到工程目录下的Modelsim.ini的路径,该路径中包含了编译的库的信息,相当于自动将之前已经编译好的库加入到工程之中,否则会提示找不到相关库文件。 v( k% c, ]6 N7 l
在Modelsim中运行前面编辑好的.do文件就可以进行仿真了。
1 f. v! S& k0 D
. c4 J0 K1 m: n3 P9 ^5 Z: ~. D5 总结上面采用的方法是核心思想是借助了软件产生的相关文件,主要是.do文件,使用熟练后,可以每次直接新建Modelsim工程,使用自己写好的.do文件在Modelsim下仿真,其中有很多小技巧,大家可以自己探索。
! W0 T1 e& C( P9 L文章如有不足之处,欢迎大家批评指正,也欢迎大家来交流。
5 X8 _ o* H, j8 q# p- k q4 y- }' @
# C, G; Q9 w0 J% o
% Z3 _' D- P/ Z" O$ t6 x5 D) c. q% P& N8 C: Y6 U
6 O% }& O: W8 }' t1 F) j
# V! _3 ~" ?6 P6 W4 h1 I0 g% ~
|
|