当前位置:   article > 正文

[源码]Vivado调用Questa Sim仿真小技巧

vivado如何导出仿真文件给questasim仿真

Vivado调用Questa Sim或ModelSim仿真中存在的一些自动化问题的解决方案。

Vivado调用Questa Sim仿真中存在的一些问题

首先说明一下Modelsim与Questa Sim都可以与Vivado联调,也比较相似,但是Questa Sim比Modelsim功能更加广泛,对于System Verilog的语法支持更加完善,本文以Questa Sim为例说明一下Vivado调用第三方仿真软件查看波形的过程中存在的一些问题。

1、添加新的观测信号需要重新仿真

Vivado直接调用Modelsim/QuestaSim进行仿真时,波形文件里默认只会出现仿真最顶层中包含的信号,若此时将仿真运行一段时间后,想要查看其他模块信号波形时,需要重新仿真或者运行do XXX_simulate.do方可。

以图1所示工程为例,

e22b40a4a00a8b8e6a3a1cee5a08041a.jpeg

图1 vivado示例工程

在这个工程中,我们调用Questa Sim进行仿真,可以看到顶层模块会自动跑100ns,如图2所示

952247b21406941cfe7c021abe7b1270.jpeg

图2 QuestaSim仿真波形

此时,我们若想查看l_ethernet_0_pkt_gen_mon这个模块的波形时,直接进入波形界面进行添加,结果如图3所示。

28e607ffb97086a20dede241141d6044.jpeg

图3 QuestaSim仿真波形

从图3中可以看到,当模块的信号被添加进来后,已经运行过的仿真时间内,新加入的信号没有仿真结果。

2、修改逻辑代码后,需要重新调用仿真器

在代码调试过程中,修改部分逻辑代码后(不包括IP核),如果想要查看修改后工程的仿真结果,需要关闭当前的仿真器,从vivado中重新调用方可。其原因是vivado在生成XXX_compile.do文件时,会在其末尾自动添加“quit -force”语句,而更改了相应的代码文件后,我们需要执行“do XXX_compile.do”命令重新编码整个库,然而在运行此文件时,当前的仿真器会被强制退出。

解决方案

为了解决上述问题,同时更加方便使用,本文使用TCL语言,编写了一个较为方便的do文件,其可以实现如下功能:

1、对XXX_compile.do自动修改

对XXX_compile.do自动修改,去除其末尾的“quit -force”,并生成新的compile.do文件,其对应的源代码如下:

  1. set filename [glob *_compile.do]
  2. set content [open $filename r+]
  3. set row 0
  4. while {![eof $content]} {
  5.     incr row
  6.     gets $content line
  7.     set list($row) $line
  8. }
  9. close $content
  10. set filename2 "compile.do";
  11. set content [open $filename2 w+]
  12. for {set i 1} {$i <= $row} {incr i} {
  13.     if {![string match "quit -force" $list($i)]} {
  14.         puts $content $list($i)
  15.     }    
  16. };
  17. close $content
2、使用“log -r /*”命令

该命令可以让modelsim/Questa Sim在进行仿真中,对所有信号同步进行仿真,从而解决新加入的观测信号没有仿真结果的问题;

3、保证仿真器不退出

当修改工程中的逻辑代码(不含IP核)后,只需要运行该do文件,其自动进行编译和仿真,且使用修改后的compile.do文件,保证仿真器不退出,其对应的源代码如下:

  1. set filename compile.do
  2. do $filename
  3. set filename [glob *_simulate.do]
  4. do $filename
  5. log -r /*
  6. restart -force
  7. run 1ms

例程

在使用该do文件之前,需要首先通过vivado调用modelsim/ questasim,然后将do文件拷贝到工程对应的behave文件夹下。

仍以图1所示工程为例,当修改了代码内部分逻辑后,在QuestaSim的transcrip界面,输入命令do auto_update_sim.do即可自动重新编译、仿真,结果如图4所示(默认仿真时间设置为1ms)

630dacea01fae9799cdbdad6e10a56af.png

图4 QuestaSim仿真波形

添加了l_ethernet_0_pkt_gen_mon这个模块,可以发现仿真过的时间内同样有仿真结果,如图5所示。

452fa0512337c8e9944eaf71dcf3d8bd.jpeg

图5 QuestaSim仿真波形

完整源码

  1. set filename [glob *_compile.do]
  2. set content [open $filename r+]
  3. set row 0
  4. while {![eof $content]} {
  5.     incr row
  6.     gets $content line
  7.     set list($row) $line
  8. }
  9. close $content
  10. set filename2 "compile.do";
  11. set content [open $filename2 w+]
  12. for {set i 1} {$i <= $row} {incr i} {
  13.     if {![string match "quit -force" $list($i)]} {
  14.         puts $content $list($i)
  15.     }    
  16. };
  17. close $content
  18. set filename compile.do
  19. do $filename
  20. set filename [glob *_simulate.do]
  21. do $filename
  22. log -r /*
  23. restart –force
  24. run 1ms

全文完。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/598027
推荐阅读
相关标签
  

闽ICP备14008679号