找回密码
 注册
关于网站域名变更的通知
查看: 1586|回复: 3
打印 上一主题 下一主题

使用Modelsim独立仿真Altera及Xilinx IP核

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-17 02:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
) q3 Z9 P( Y, y. ~
使用Modelsim进行仿真非常方便,可以通过.do文件完成一些重复性的界面操作,但是使用Modelsim仿真IP核的时候经常会因为没有库文件的问题而纠结,网上不乏一些相关教程,但是在使用过程中总会遇到这样那样的问题,于是我痛定思痛,决定彻底解决这个问题,为了帮助大家解决相同的烦恼,决定写这篇文档,帮助大家避免走我曾走过的弯路,这也是我的第一篇教程,希望能帮到大家!) D) I' I  r+ f- Y/ A2 R
1       软件环境:操作系统 win7 旗舰版 64位, u2 ?3 {6 K9 h. e+ G# q, R
Modelsim SE10.1a! k& k: L; w, B5 l& a
Quartus II13.0sp1 (64-bit)
# n: G) Y3 r" l: W) ?Vivado 2016
6 C0 P/ F8 F* _9 A+ A" ]) P3 J" X2       思路说明不管是Altera还是Xilinx的软件都有直接调用Modelsim仿真的功能,但是其缺点在与每次调用时都会重复编译相同的库,耗时较长,而且每次调用后仿真波形都是默认的,需要我们再次手动添加波形,无形中耗费了大量时间。同时Modelsim具有编译快,仿真快的优点,在这里就不多说了。" Z9 [; m. n1 R
其实软件在调用Modelsim的时候回生成相应的.do文件,仔细研究生成的文件会发现里面包含了完成Modelsim仿真的几乎所有命令,包括相关库的编译,而我们要做的就是利用该.do文件,在其基础上进行修改,达到我们想要的结果。0 @/ ^- R/ D% F8 @3 e9 e* x
3       Quartus下使用Modelsim独立仿真3.1 设置Quartus中仿真软件及仿真脚本首先你要有一个自己的要仿真的工程,如果没有,可以参考网上其他资料新建一个最简单的PLL分频的工程,然后打开Quartus II 13.0sp1,设置Modelsim的安装路径。
! N- r! |" y7 e' J% C% `3 a3 T3 N
然后在Setting里设置仿真工具,选择Modelsim,设置仿真用到的testbench,该文件需要自己提前写好。
5 a" C% x% u5 z* Z1 _
8 Q  w+ S( O; x; X, i! I& ^& J
点击Test Benches->New
0 F  I# R* Q6 `( D" b4 v; p" h3 C$ t6 R+ A
先点击Add,根据路径选择你已经写好的testbench,然后根据填写下图中第一和第二行的内容,注意,Test bench name指的是你具体文件的名字,后面要有文件名后缀,我是自己写的,所以是.v,如果用Quartus自动生成的,是.vt,二者没有本质区别,下一行Top level module in test bench 要填写的是你testbench中module的名字,如果注意规范的话,可以把文件名和module名命名成一样的,同时命名中加tb表示其为testbench。7 B. `3 s, }/ p# s& S0 H# L: O

: }; S6 p. x: b4 l2 B, C& @. j  E/ J/ L  d4 A% g1 h
最后,点击Tools Runsimulation tool  RTL simulation,程序会自动调用Modelsim进行仿真,同时编译相关库。! M% m) h  r. V
完成以上操作,软件会自动调用Modelsim完成仿真,到这一步,恭喜你已经学会了使用Quartus与Modelsim联合仿真的方法。
4 K; s- n+ a# O0 q3 V" T& b/ F3.1 查看Modelsim记录但是联合仿真并不是我们的目的,下一步我们在Modelsim中查看软件的记录,发现实际上是执行了一个名为sdram_test_run_msim_rtl_verilog.do文件(Modelsim中的脚本文件)。: q& y2 _6 O4 k

0 [' x/ ^& x- n7 p9 H) G' c+ `/ F" C7 a( v! d3 V- p$ Q8 A# |  |) n
我们找到并打开该文件,一般该文件位于工程目录下名为Modelsim的仿真文件目录下,可以使用everything搜索找到,内容如下:6 P& E! z5 d7 \

3 [( z5 H& {2 O' P4 p( F0 p1 y. t% M- R6 K# c% F
该文件的功能实际上是建立库,生成映射,然后编译源文件。
! V1 r% v4 Y6 n2 b; i简单分析各语句功能,第2、3行是检测是否有库文件存放的目录,如果没有,新建一个名为Verilog_libs的路径。vlib是新建一个仿真库,vmap将逻辑库映射到实际的物理地址,其后面参数依次为逻辑库和实际库地址,“.”的意思为当前目录,“..”为上一层目录,知道这个可以很好的利用相对路径,如果用过Lunix应该对这个比较熟了。) P/ {- ~! g+ }
下面是编译生成的库" J* S/ L! M7 t3 F9 ^! K: h
4 }  T8 F4 [7 ?' q

  J5 Z& |; Y  l接下来要做的就是新建一个工程,然后想办法调用这些自动生成的库,以后就可以摆脱联合仿真,这么做有几点好处1不用每次都编译Altera的库,2 可以直接在Modelsim中进行操作了,而与Quartus没有关系了。3.Modelsim编译.v文件比较快。
+ |, t* C; v. c. X- X) L4 ]' Q! p7 n" I也有相关教程教大家一次性编译Altera所有的库文件然后放到指定文件夹备用,本教程方法可以借助软件自动生成的.do文件,省去自己从头编写的麻烦,具体大家可以自己探索。7 d/ c, d+ J. H: g! K& J
3.3      新建Modelsim工程新建工程的方法就不在这累述了,建完之后添加目前的设计文件,可以直接添加Quartus工程下的文件,这样的好处是不用重复复制文件,同时文件只有一个备份,避免在Modelsim调试时做更改而Quartus工程下的文件没有更新,毕竟,最后仿真完成了还是要回到Quartus的。  [( ?, D! n: k( Q+ ^
% W/ h" ?% I7 r6 g+ e3 ^. z5 P

% x# s% s' i+ h0 ]! q: s6 E  J: O将sdram_test_run_msim_rtl_verilog.do文件复制的Modelsim工程目录下并打开,翻到红线所示行,之前的代码只留下库映射的语句,其余用#注释掉,这样就不用每次都编译相关库文件了。下面解释下代码具体功能。7 C, O9 p) E6 e$ l( A) [  S
vlibrtl_work         建立一个名为rtl_work的库(物理)
2 n4 S4 p/ X! gvmap workrtl_work       将逻辑库work 映射到物理库rtl_work
7 i) c% y  c1 s& z3 G+ G  j5 K: Z: k" Uvlog-vlog01compat -work work +incdir+E:/99_ZJ_IP/12_sdram_test{E:/99_ZJ_IP/12_sdram_test/sdram_pll.v}     
, B% f1 V" `% V" d& ]0 jvlog是编译.v文件的命令,“-”之后表示编译参数,后面是文件的路径,可以不用修改,直接使用,
; K0 C# g- q3 |) Y8 X1 L1 v3 Wvsim -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# c. Z% u. B( b4 h  r8 [" Z
仿真tb_sdram_test,即我们的testbench
# Y7 m# h5 S* v3 B( D6 m; Cadd wave *      添加testbench中的所有信号& i: Y: h( g: j* B
view structure                  打开structure窗口
8 s7 a* Y$ u9 C( ]5 kview signals     打开wave窗口1 R7 ~" E0 y) j# S+ c8 R
run –all 运行,-all表示一直运行至所有信号被调用,可以手动修改运行时间,例如run 3us
. Z/ C$ V7 z" \至此,就可以愉快的使用Modelsim进行仿真了* X2 |# ^9 d7 p2 T

2 f( N  B' W$ S6 e' _. W4  Vivado下使用Modelsim独立仿真4.1      编译库Vivado软件本身自带了编译仿真库的功能,用时较长,只需要执行一次,可以将所有的库编译并存放到指定文件夹,一劳永逸。8 }4 N* w4 ~* s2 i/ z

5 n6 ^! E) Y* j' ]8 `
- r: X. F2 Q( @5 [; y/ X) L- B- A5 l6 e' X% {: h! S! o
4.2设置仿真选项
1 E8 B3 Y9 {9 m( v0 Q- X* y
3 B( k3 E/ v# n( h# H7 h4.3 运行行为级仿真7 H% \' H0 _2 v) x' i

4 u5 G. W5 A3 u% H. w+ j" ~0 H, P( p* a' n$ S
4.4 找到自动产生的仿真文件
2 d# p& Q; o& |+ }. ?9 }8 ^) a1 z
0 }. |* S+ e% Z- u5 b到此为止,就可以摆脱vivado了7 i) X& B6 E3 `
4.5 新建Modelsim工程新建仿真文件夹,路径与文件夹behav同级,这样.do文件不需要再修改编译文件路径。9 V0 E7 P$ F8 E: D* B) O2 Y
拷贝上图中画红线的文件到新建的文件夹中,
' D( C# b5 ^, V1 Z修改两个.do文件中的内容合并成一个文件,只保留必要的内容,比如我只保留如下内容:* I8 ~; I2 G- C$ H6 [  P
+ D$ b1 t  A2 p. b$ V4 _- W
$ `$ q. D. Q( M! y/ T8 D
该文件中的注释是我为了方便大家理解加上去的,实际.do文件的注释符为#,且只能独立成行,不能与命令在同一行。
  A- W* p; U0 G0 F6 u" R保存该文件,在Modelsim中新建工程) E$ F/ Y! v2 I
) z7 j# M9 k6 J2 h5 X' t& {! z
" p8 n% N/ I  T
需要注意的是,需要在此指定拷贝到工程目录下的Modelsim.ini的路径,该路径中包含了编译的库的信息,相当于自动将之前已经编译好的库加入到工程之中,否则会提示找不到相关库文件。
* t4 [9 o% h" H8 Q7 Q8 S; ]在Modelsim中运行前面编辑好的.do文件就可以进行仿真了。
1 |0 B6 E! b$ D' D
5 V( y- L# Z7 [9 p  `! {- `) N! h1 S5 总结上面采用的方法是核心思想是借助了软件产生的相关文件,主要是.do文件,使用熟练后,可以每次直接新建Modelsim工程,使用自己写好的.do文件在Modelsim下仿真,其中有很多小技巧,大家可以自己探索。
! m4 v% d) o2 l文章如有不足之处,欢迎大家批评指正,也欢迎大家来交流。
" {8 S2 y. H. f& f- z$ [* A- n. O4 u" J7 D7 T  R# v# b6 q
9 e) z8 y! f  M5 P5 b

9 q/ n. x- l5 y% @. [) y7 W. p* J% F7 Y

' A, s; e  R3 |

该用户从未签到

3#
发表于 2019-4-19 22:09 | 只看该作者
为啥看不到图?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-21 21:40 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表