|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
- E* u9 T V( q. o/ _! T; o* a
使用Modelsim进行仿真非常方便,可以通过.do文件完成一些重复性的界面操作,但是使用Modelsim仿真IP核的时候经常会因为没有库文件的问题而纠结,网上不乏一些相关教程,但是在使用过程中总会遇到这样那样的问题,于是我痛定思痛,决定彻底解决这个问题,为了帮助大家解决相同的烦恼,决定写这篇文档,帮助大家避免走我曾走过的弯路,这也是我的第一篇教程,希望能帮到大家!
( [2 v3 H- l6 R p. s* }1 软件环境:操作系统 win7 旗舰版 64位
/ \/ }' }+ S5 B* Z WModelsim SE10.1a
# f+ j2 H3 A8 `8 j. \Quartus II13.0sp1 (64-bit)
8 ~+ B% E; M' q. w) J5 e1 oVivado 20165 P7 E, Q+ c. S* _. O6 h o4 w
2 思路说明不管是Altera还是Xilinx的软件都有直接调用Modelsim仿真的功能,但是其缺点在与每次调用时都会重复编译相同的库,耗时较长,而且每次调用后仿真波形都是默认的,需要我们再次手动添加波形,无形中耗费了大量时间。同时Modelsim具有编译快,仿真快的优点,在这里就不多说了。
0 J. ]8 ]# C7 C. W4 _# @! `( E1 u其实软件在调用Modelsim的时候回生成相应的.do文件,仔细研究生成的文件会发现里面包含了完成Modelsim仿真的几乎所有命令,包括相关库的编译,而我们要做的就是利用该.do文件,在其基础上进行修改,达到我们想要的结果。
( Z. F |9 C! g3 l+ y/ S3 Quartus下使用Modelsim独立仿真3.1 设置Quartus中仿真软件及仿真脚本首先你要有一个自己的要仿真的工程,如果没有,可以参考网上其他资料新建一个最简单的PLL分频的工程,然后打开Quartus II 13.0sp1,设置Modelsim的安装路径。
: M0 d: m' G$ m! K: k2 c3 A/ `![]()
: C; k' H# T: E+ n8 _/ {9 Q( x然后在Setting里设置仿真工具,选择Modelsim,设置仿真用到的testbench,该文件需要自己提前写好。
5 s1 L5 Z) a6 j I3 T" A# k! B; D![]()
! q" L# F$ t0 d" T2 U6 Y' n _
$ f0 n1 Z5 b9 f: V" j点击Test Benches->New }( c' ?; j) C* ?8 _1 H
![]()
* F3 k$ r6 B' y& }( ^) I" e先点击Add,根据路径选择你已经写好的testbench,然后根据填写下图中第一和第二行的内容,注意,Test bench name指的是你具体文件的名字,后面要有文件名后缀,我是自己写的,所以是.v,如果用Quartus自动生成的,是.vt,二者没有本质区别,下一行Top level module in test bench 要填写的是你testbench中module的名字,如果注意规范的话,可以把文件名和module名命名成一样的,同时命名中加tb表示其为testbench。
7 P' f# k( p; l' W/ z![]() ! ^6 l! R* l* o7 G, z2 K
: @% P) L" y; {1 f: m3 F最后,点击Tools Runsimulation tool RTL simulation,程序会自动调用Modelsim进行仿真,同时编译相关库。
3 d0 n: x5 ~4 f; @- V- G完成以上操作,软件会自动调用Modelsim完成仿真,到这一步,恭喜你已经学会了使用Quartus与Modelsim联合仿真的方法。, K# r* R9 r' p0 V, u+ ]3 A) @
3.1 查看Modelsim记录但是联合仿真并不是我们的目的,下一步我们在Modelsim中查看软件的记录,发现实际上是执行了一个名为sdram_test_run_msim_rtl_verilog.do文件(Modelsim中的脚本文件)。
. t' ` C8 B3 t4 ?/ L y![]() - q$ y3 e) b. J6 Q# `8 \& _
- m% w8 m5 s& ^, F; L5 {' _8 m% B我们找到并打开该文件,一般该文件位于工程目录下名为Modelsim的仿真文件目录下,可以使用everything搜索找到,内容如下:0 J( N X* V) n6 ]
![]() % B+ k1 ~$ n6 Y0 I2 k
5 T# x6 h$ a# ^
该文件的功能实际上是建立库,生成映射,然后编译源文件。' I8 M+ e& B* z" C* }+ S
简单分析各语句功能,第2、3行是检测是否有库文件存放的目录,如果没有,新建一个名为Verilog_libs的路径。vlib是新建一个仿真库,vmap将逻辑库映射到实际的物理地址,其后面参数依次为逻辑库和实际库地址,“.”的意思为当前目录,“..”为上一层目录,知道这个可以很好的利用相对路径,如果用过Lunix应该对这个比较熟了。
$ r- B) W1 p2 f# R/ x) R: p2 ]下面是编译生成的库3 c; w& {2 d+ W& K+ e9 ^# L* F- r' F
![]() , e4 q% g# \' K4 t
. h0 o: Y6 n" }& G6 b
接下来要做的就是新建一个工程,然后想办法调用这些自动生成的库,以后就可以摆脱联合仿真,这么做有几点好处1不用每次都编译Altera的库,2 可以直接在Modelsim中进行操作了,而与Quartus没有关系了。3.Modelsim编译.v文件比较快。
" O& F# R# c {# R也有相关教程教大家一次性编译Altera所有的库文件然后放到指定文件夹备用,本教程方法可以借助软件自动生成的.do文件,省去自己从头编写的麻烦,具体大家可以自己探索。
6 X$ y! m \( A' s" t3.3 新建Modelsim工程新建工程的方法就不在这累述了,建完之后添加目前的设计文件,可以直接添加Quartus工程下的文件,这样的好处是不用重复复制文件,同时文件只有一个备份,避免在Modelsim调试时做更改而Quartus工程下的文件没有更新,毕竟,最后仿真完成了还是要回到Quartus的。. G( C9 j& T* c% ?( R9 Y
![]()
$ |7 T/ C8 W/ u% p0 @* s2 V
) ~# O# c7 v, T0 p7 g8 \将sdram_test_run_msim_rtl_verilog.do文件复制的Modelsim工程目录下并打开,翻到红线所示行,之前的代码只留下库映射的语句,其余用#注释掉,这样就不用每次都编译相关库文件了。下面解释下代码具体功能。
# m, H( }# h$ R" q! l# [vlibrtl_work 建立一个名为rtl_work的库(物理). z a; P6 Z: [! Y
vmap workrtl_work 将逻辑库work 映射到物理库rtl_work
3 Z' a3 d. h/ P \5 B7 {3 W* y: yvlog-vlog01compat -work work +incdir+E:/99_ZJ_IP/12_sdram_test{E:/99_ZJ_IP/12_sdram_test/sdram_pll.v}
* t' O3 j- _$ Q1 K' o' @! Y, Qvlog是编译.v文件的命令,“-”之后表示编译参数,后面是文件的路径,可以不用修改,直接使用,
1 f4 X3 k# j1 j2 s7 f* i8 e% yvsim -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_test9 m7 W4 w) K7 l
仿真tb_sdram_test,即我们的testbench
! e. G" v: g0 [* j- Badd wave * 添加testbench中的所有信号
2 C+ S5 d' p; O9 H5 k7 ~view structure 打开structure窗口
7 S7 c* `# ?! @! cview signals 打开wave窗口* W* C2 A5 t' X) @ G, ^
run –all 运行,-all表示一直运行至所有信号被调用,可以手动修改运行时间,例如run 3us" b3 n% J/ \0 Y, r. d
至此,就可以愉快的使用Modelsim进行仿真了+ @$ J& V8 A+ Y9 `
$ v' S6 `4 V- t
4 Vivado下使用Modelsim独立仿真4.1 编译库Vivado软件本身自带了编译仿真库的功能,用时较长,只需要执行一次,可以将所有的库编译并存放到指定文件夹,一劳永逸。
" H$ |# }3 Y* h; ?; o: t0 S* q![]()
6 m! g% X9 z X* Y6 d![]() - j' Z" Z' D6 L% ]& s- z* U, y1 [% g
4 q' c% u( @, E% F- z$ K0 o( N9 B4.2设置仿真选项![]() / h# F' o9 ~- C3 g6 M- n4 R( f) i$ L- d
% r6 Q7 G' k: S# |; c7 r- L: @: g4.3 运行行为级仿真) @7 x) K' }. U6 j" O7 q* i
![]()
6 V- b' U* I9 a4 d) S6 m
" w4 n1 t/ t$ u& i4.4 找到自动产生的仿真文件![]() 0 K, }9 ~1 h+ V3 Y( B' k
( }, ] _1 A' R到此为止,就可以摆脱vivado了
7 f7 t; K$ |0 ~% v. @4.5 新建Modelsim工程新建仿真文件夹,路径与文件夹behav同级,这样.do文件不需要再修改编译文件路径。
/ l' p- Z9 j. m4 b$ E拷贝上图中画红线的文件到新建的文件夹中,
4 t# s4 X* Q7 V5 _) }' R修改两个.do文件中的内容合并成一个文件,只保留必要的内容,比如我只保留如下内容:
# k/ k ^8 z; E2 ?' O- j# I; ^3 E![]()
/ m: F- g' O- o% t
, w& G: {( d# F9 q- L2 }1 X2 W该文件中的注释是我为了方便大家理解加上去的,实际.do文件的注释符为#,且只能独立成行,不能与命令在同一行。: m* e5 |2 ~. Z- O
保存该文件,在Modelsim中新建工程" r; r. | E7 K9 K3 R/ p) B# }
![]()
. w, z" |7 [7 w% a1 |, f
# n9 m) k, M# B0 E需要注意的是,需要在此指定拷贝到工程目录下的Modelsim.ini的路径,该路径中包含了编译的库的信息,相当于自动将之前已经编译好的库加入到工程之中,否则会提示找不到相关库文件。
. C, _. u4 b: d5 R/ e8 ]9 V$ {$ j2 |在Modelsim中运行前面编辑好的.do文件就可以进行仿真了。2 ?+ z7 ^' h# e" |6 [/ F5 D
2 i& R& Z4 c5 m# t5 总结上面采用的方法是核心思想是借助了软件产生的相关文件,主要是.do文件,使用熟练后,可以每次直接新建Modelsim工程,使用自己写好的.do文件在Modelsim下仿真,其中有很多小技巧,大家可以自己探索。4 n" I2 b! l+ E
文章如有不足之处,欢迎大家批评指正,也欢迎大家来交流。+ l# H" |/ z9 }* K0 F m
C0 f$ c% i* t3 I
' R. W0 g6 ?8 h2 B- F) S9 |6 O1 Z# w9 I
6 K8 S( L* n2 L$ E( s3 Y
* ~; }, n3 X1 M+ F& ~( o |
|