当前位置:数码通 > 动态

Vivado调用第三方仿真软件查看波形时存在一些问题

来源于 数码通 2023-10-01 10:02

Vivado 调用 Questa Sim 或 ModelSimsimulation 来解决一些自动化问题。

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

首先说明一下,Modelsim和Questa Sim都可以和Vivado联合调试,比较相似。不过Questa Sim比Modelsim拥有更广泛的功能,对SystemVerilog有更完整的语法支持。本文以Questa Sim为例,说明Vivado调用第三方仿真软件查看波形时出现的一些问题。

1. 添加新观测信号需要重新模拟

当Vivado直接调用Modelsim/QuestaSim进行仿真时,波形文件中默认只会出现仿真顶层包含的信号。如果运行仿真一段时间后想查看其他模块的信号波形,需要重新仿真或者运行do XXX_m.smtshopping.cn即可。以图1所示工程为例,

图1 vivado示例项目

在本项目中,我们调用Questa Sim进行仿真,可以看到顶层模块会自动运行100ns,如图2所示。

图2 QuestaSim仿真波形

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

图3 QuestaSim仿真波形

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

2.修改逻辑代码后,需要再次调用模拟器

在代码调试过程中,修改了一些逻辑代码(不包括IP核)后,如果想查看修改后工程的仿真结果,需要关闭当前仿真器,然后从vivado中重新调用。

原因是vivado生成XXX_compim.smtshopping.cn文件时,会自动在其末尾添加“quit -force”语句,并且更改后相应的代码文件,我们需要执行“do XXX_m.smtshopping.cn”命令来重新编码整个库。然而,当运行这个文件时,当前的模拟器将被强制退出。

解决办法

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

1.自动修改XXX_m.smtshopping.cn

自动修改XXX_m.smtshopping.cn,去掉最后的“quit -force”,生成新的m.smtshopping.cn文件。对应源码如下:

setf文件名[glob*_m.smtshopping.cn]
setcontent[打开$文件名+]
设置行0
而{![eof$内容]}{
乌鸦
获取$内容行
曲目列表($行)$行
}
关闭$内容
setfilename2"编译.do";
setcontent[打开$文件名2w+]
对于{seti1}{$i<=$row}{incri}{if{![stringmatch"quit-force"$list($i)]}{
放置$内容$列表($i)
}
};
关闭$内容

2.使用“log -r /*”命令

该命令允许modelsim/Questa Sim在仿真时同时仿真所有信号,从而解决新添加的观测信号没有仿真结果的问题;

3.确保模拟器不退出

修改工程中的逻辑代码(不包括IP核)后,只需要运行do文件,就会自动编译并仿真,并使用修改后的m.smtshopping.cn文件保证仿真器不退出,其对应的源码如下:

设置文件名编译.do
do$文件名
setfilename[glob*_m.smtshopping.cn]
do$文件名
对数-r/*
强制重启
运行1毫秒

日常

在使用这个do文件之前,需要先通过vivado调用modelsim/questasim,然后将do文件复制到项目对应的beeve文件夹中。

仍以图1所示的项目为例,修改代码内部的部分逻辑后,在QuestaSim的transcrip界面中输入命令do auto_update_m.smtshopping.cn即可自动重新编译并仿真。结果如图4所示(默认仿真时间设置为1ms)

添加l_ethernet_0_pkt_gen_mon模块后,可以发现在仿真时间内也有仿真结果,如图5。

图5 QuestaSim仿真模型

完整源码

setfilename[glob*_m.smtshopping.cn]
setcontent[打开$文件名+]
设置行0
而{![eof$内容]}{
内嵌
获取$内容行
曲目列表($行)$行
}
关闭$内容
setfilename2"编译.do";
setcontent[打开$文件名2w+]
为{seti1}{$i<=$row}{incri}{
if{![stringmatch"quit-force"$list($i)]}{
放置$内容$列表($i)
}
};
关闭$内容
设置文件名编译.do
do$文件名
setfilename[glob*_m.smtshopping.cn]
do$文件名
对数-r/*
强制重启
运行1毫秒





审核编辑:刘清

-->
登录后参与评论