|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
! h# A" q, [* m6 B6 a1 ?使用Modelsim进行仿真非常方便,可以通过.do文件完成一些重复性的界面操作,但是使用Modelsim仿真IP核的时候经常会因为没有库文件的问题而纠结,网上不乏一些相关教程,但是在使用过程中总会遇到这样那样的问题,于是我痛定思痛,决定彻底解决这个问题,为了帮助大家解决相同的烦恼,决定写这篇文档,帮助大家避免走我曾走过的弯路,这也是我的第一篇教程,希望能帮到大家!
- A# p9 r1 ~$ F, j1 软件环境:操作系统 win7 旗舰版 64位! u4 z7 }* L/ J: n9 k
Modelsim SE10.1a
% F" H5 x" f4 l1 rQuartus II13.0sp1 (64-bit)
$ J6 Q2 A, f7 h5 RVivado 2016
. K% \' L2 l& {( [1 ~2 思路说明不管是Altera还是Xilinx的软件都有直接调用Modelsim仿真的功能,但是其缺点在与每次调用时都会重复编译相同的库,耗时较长,而且每次调用后仿真波形都是默认的,需要我们再次手动添加波形,无形中耗费了大量时间。同时Modelsim具有编译快,仿真快的优点,在这里就不多说了。
- W5 }( `! g; i其实软件在调用Modelsim的时候回生成相应的.do文件,仔细研究生成的文件会发现里面包含了完成Modelsim仿真的几乎所有命令,包括相关库的编译,而我们要做的就是利用该.do文件,在其基础上进行修改,达到我们想要的结果。
' Q8 j# T) n2 e5 _% E! o3 Quartus下使用Modelsim独立仿真3.1 设置Quartus中仿真软件及仿真脚本首先你要有一个自己的要仿真的工程,如果没有,可以参考网上其他资料新建一个最简单的PLL分频的工程,然后打开Quartus II 13.0sp1,设置Modelsim的安装路径。
, @& F1 k" i& \: L; D% E![]() 4 w# n! I- `. ]7 C0 P
然后在Setting里设置仿真工具,选择Modelsim,设置仿真用到的testbench,该文件需要自己提前写好。8 k" E& v: i4 n
![]()
( b$ t/ L+ B2 A
: I9 S5 Z1 l" D# W3 g: r1 N7 ]点击Test Benches->New5 s5 G# {. }7 E* q! |2 H
![]() ) Q, i: x' f* e( W- R' I0 L$ a1 k
先点击Add,根据路径选择你已经写好的testbench,然后根据填写下图中第一和第二行的内容,注意,Test bench name指的是你具体文件的名字,后面要有文件名后缀,我是自己写的,所以是.v,如果用Quartus自动生成的,是.vt,二者没有本质区别,下一行Top level module in test bench 要填写的是你testbench中module的名字,如果注意规范的话,可以把文件名和module名命名成一样的,同时命名中加tb表示其为testbench。7 H$ y h- w% b4 ]! g5 q P# ]3 {
![]() ' K: e6 V( p" }! ~, s* s3 M( Z/ r
& K6 h4 l; B+ {: O& {: P6 J+ l
最后,点击Tools Runsimulation tool RTL simulation,程序会自动调用Modelsim进行仿真,同时编译相关库。
: u# J/ _7 T' i; [完成以上操作,软件会自动调用Modelsim完成仿真,到这一步,恭喜你已经学会了使用Quartus与Modelsim联合仿真的方法。
5 g$ v5 ~ y O) D! R5 O3.1 查看Modelsim记录但是联合仿真并不是我们的目的,下一步我们在Modelsim中查看软件的记录,发现实际上是执行了一个名为sdram_test_run_msim_rtl_verilog.do文件(Modelsim中的脚本文件)。
! f/ {% Z1 F' @![]()
/ Z# Y& }" I9 U4 f
; R0 ]! e" a" |- Y我们找到并打开该文件,一般该文件位于工程目录下名为Modelsim的仿真文件目录下,可以使用everything搜索找到,内容如下:
, q$ e) S- I p" \, X% i$ [2 w![]()
+ S% U7 }1 o5 O7 c( j; r* O
# k+ w0 y* Z# x该文件的功能实际上是建立库,生成映射,然后编译源文件。
! j; d) J( s- y3 w7 q3 O简单分析各语句功能,第2、3行是检测是否有库文件存放的目录,如果没有,新建一个名为Verilog_libs的路径。vlib是新建一个仿真库,vmap将逻辑库映射到实际的物理地址,其后面参数依次为逻辑库和实际库地址,“.”的意思为当前目录,“..”为上一层目录,知道这个可以很好的利用相对路径,如果用过Lunix应该对这个比较熟了。1 L' u2 J- k7 c/ m
下面是编译生成的库
( S5 r) U8 W: P# x2 W, M! [8 W![]()
0 M# ?' Q% J$ u6 M7 W$ Z; B- ], b# O7 `! f4 y8 h, I* v
接下来要做的就是新建一个工程,然后想办法调用这些自动生成的库,以后就可以摆脱联合仿真,这么做有几点好处1不用每次都编译Altera的库,2 可以直接在Modelsim中进行操作了,而与Quartus没有关系了。3.Modelsim编译.v文件比较快。5 C* Z" W4 d& P
也有相关教程教大家一次性编译Altera所有的库文件然后放到指定文件夹备用,本教程方法可以借助软件自动生成的.do文件,省去自己从头编写的麻烦,具体大家可以自己探索。, U8 g, T0 f8 |3 K
3.3 新建Modelsim工程新建工程的方法就不在这累述了,建完之后添加目前的设计文件,可以直接添加Quartus工程下的文件,这样的好处是不用重复复制文件,同时文件只有一个备份,避免在Modelsim调试时做更改而Quartus工程下的文件没有更新,毕竟,最后仿真完成了还是要回到Quartus的。2 c* ^' C1 X* b0 d- v i
![]() ) [% M7 D( \9 J9 q
9 }0 F6 E- c, f
将sdram_test_run_msim_rtl_verilog.do文件复制的Modelsim工程目录下并打开,翻到红线所示行,之前的代码只留下库映射的语句,其余用#注释掉,这样就不用每次都编译相关库文件了。下面解释下代码具体功能。2 [: U$ |. X, s, {8 B( k
vlibrtl_work 建立一个名为rtl_work的库(物理)1 V- [$ L0 C8 V3 g! r' I
vmap workrtl_work 将逻辑库work 映射到物理库rtl_work
- W* g. F5 g! Yvlog-vlog01compat -work work +incdir+E:/99_ZJ_IP/12_sdram_test{E:/99_ZJ_IP/12_sdram_test/sdram_pll.v} 1 h7 g, [1 I9 j% ]" n5 T
vlog是编译.v文件的命令,“-”之后表示编译参数,后面是文件的路径,可以不用修改,直接使用,9 w1 C( {; }+ w
vsim -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_test) @ P+ h' |, g$ e+ o
仿真tb_sdram_test,即我们的testbench
/ `/ @9 U) x3 e2 E4 [: S4 x2 d: r- O' }add wave * 添加testbench中的所有信号$ c* B& V, ^+ i( h
view structure 打开structure窗口
8 C5 P, W/ h9 ^+ `view signals 打开wave窗口
. E0 _2 d' i& I4 T% W5 O/ ~3 Drun –all 运行,-all表示一直运行至所有信号被调用,可以手动修改运行时间,例如run 3us# _: a8 o! _/ \! c: j: D
至此,就可以愉快的使用Modelsim进行仿真了0 n1 T" x* _- m8 {5 J; I
6 L' l& C7 x! a2 b% l, f
4 Vivado下使用Modelsim独立仿真4.1 编译库Vivado软件本身自带了编译仿真库的功能,用时较长,只需要执行一次,可以将所有的库编译并存放到指定文件夹,一劳永逸。
- Q, b; v3 O' n![]()
+ @. K; t2 q" Y- w* a( x![]() . f! c4 c. ?. x' @2 ?
/ z' O$ F9 {4 U7 T0 V; L8 [; E, ^
4.2设置仿真选项![]()
1 b7 \$ t) ]+ B/ |7 a. Y2 P8 D( D9 r+ V/ S5 d) T# r
4.3 运行行为级仿真
6 ]2 Z4 Q4 q# j1 {![]() ; s( I4 j( R7 t2 Q
- X/ w$ s+ }+ \1 j' s7 P$ o( n
4.4 找到自动产生的仿真文件![]() 1 R$ `6 @ {* I$ ~
& T# I0 t5 V+ j8 a1 d( @
到此为止,就可以摆脱vivado了2 M& d/ ^- b4 J+ m2 S" ^
4.5 新建Modelsim工程新建仿真文件夹,路径与文件夹behav同级,这样.do文件不需要再修改编译文件路径。
3 u" Y% ?! k; y! ^% e* W拷贝上图中画红线的文件到新建的文件夹中,
& p" K5 ]5 S1 B, _1 H2 \5 s1 L修改两个.do文件中的内容合并成一个文件,只保留必要的内容,比如我只保留如下内容:+ s3 ]# a0 {/ F, U" u& q5 q, r! P
![]() . ]- M" h$ @; R9 @
: e/ j: ~5 A, P$ C' l( P
该文件中的注释是我为了方便大家理解加上去的,实际.do文件的注释符为#,且只能独立成行,不能与命令在同一行。7 b2 K, u3 Y1 ]
保存该文件,在Modelsim中新建工程8 T- b$ a1 u! b# I1 n, o' M) A
![]()
& R+ [. x' C1 ?) {
" s, z$ D/ U' b/ M5 [5 v, m; A需要注意的是,需要在此指定拷贝到工程目录下的Modelsim.ini的路径,该路径中包含了编译的库的信息,相当于自动将之前已经编译好的库加入到工程之中,否则会提示找不到相关库文件。
1 L: u$ g8 ~- q R: R4 o4 f在Modelsim中运行前面编辑好的.do文件就可以进行仿真了。6 i0 N5 {9 n3 K# e8 f" l4 u
/ K% y; {& y6 r/ F
5 总结上面采用的方法是核心思想是借助了软件产生的相关文件,主要是.do文件,使用熟练后,可以每次直接新建Modelsim工程,使用自己写好的.do文件在Modelsim下仿真,其中有很多小技巧,大家可以自己探索。
+ I, H% K( w, W9 q8 u: L7 D4 i文章如有不足之处,欢迎大家批评指正,也欢迎大家来交流。3 y+ a- f( Z9 |1 o
2 W7 C1 M: z/ x- A
& s" Z0 h6 t- g# d, b/ u( ?+ ~3 Q' N" D3 \- Y! ^9 P4 O) K7 m1 S
3 q, `* ]% f9 x. y+ i8 a% K
2 R5 \9 V; X" U, ]! L |
|