Modelsim的仿真之路(仿真工程的使用)

前言

上一篇介绍了基础仿真的流程,本篇将以工程的形式来介绍ModelSim的仿真使用,工程一般由:根目录+源码+work库+资源库+仿真设置+元数据组成,其中元数据就是工程的一些设置数据,会以一个 .mpf 后缀的文件存在于指定路径,在这之中会包换:编译的设置,编译顺序还有文件的映射之类的。

开始今天的使用吧~

工程使用

创建工程

将本篇使用到的文件放置到自己的工程路径下,然后选择菜单栏 File > New > Project

image-20211031211836325

在弹出的界面中填写工程的名字、工程的路径、以及工程默认库的名字,使用默认的work就好了、还有就是初始化配置文件的路径,配置文件选安装路径下的modelsim.ini即可,然后选择Copy Library Mappings,这样就可以把这个文件直接加到这个工程中了,使用Reference也可以;

image-20211031212256129

都填好后,直接OK,这时就改进入工程的设置了,由于是一个空的工程,所以系统会弹出添加东西到工程的窗口,在这窗口,可以创建新的文件、添加已有的文件、创建仿真的配置以及创建文件夹,因为已经准备好了文件,所以就直接点 Add Existing File;

image-20211031212917150

点完后,又出现了一个新的窗口,提示要从哪添加文件,点Browse,然后将counter.v和tcounter.v加进来,最下方的选项,因为工程已经和这两个文件在一个目录下了,所以选择Reference即可,如果是其他路径下的,就可以考虑Copy过来进行管理;

image-20211031213350647

接着OK,然后Close掉添加东西到工程的界面,这时候注意Project的栏中,多了刚添加的两个文件,且Status显示的是一个蓝色问号,这代表该文件还未编译;Order就是两者的一个编译顺序以及文件改动的时间;

image-20211031213727124

文件编译

如果想改变编译顺序,右键 > Compile > Compile Order

image-20211031214057341

使用这两个箭头来改变文件的编译顺序,点Auto Generate 就会以Top层开始进行编译,如果顺序不正确,它也会自动循环跑,然后找到这个Top层往下一层层的编,可以的话,就自己用箭头先把顺序按正确的来设置好。

image-20211031214217952

除了用上面的Auto来编译外,还可以直接单个编译,或者选全部编译,图中两个箭头所指

image-20211031214942015

编译成功后,状态会变为绿色的勾,如果代码出问题了,就是个红色的X,这时候就有根据Transcript 的信息去改代码了,跳到Library的窗口,从原本empty的状态变为了一个带 + 号的状态

image-20211031215338769

点开 + 号,可以看到两个编译的结果,名字、类型和路径都在信息里,选中test_counter,右键 > Simulate,进入仿真界面

image-20211031215446896

在Sim窗口含仿真文件的层次结构,接着的基本仿真使用就和上一篇的一样了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UkT8X28O-1635695080048)

在Transcript窗口输入:quit -sim,退出仿真,准备接下来的

文件管理

因为是举例,所以使用到的文件比较少,但是平常做项目的适合,文件就多了,这时候如果没有管理好文件的类别,那就看着有点头疼了,接下来用文件夹的形式来管理文件;

在刚开始创工程的时候,就有个Create New Folder的选项,可以在这时候就创建好文件夹,在工程创建好后还需要新建文件夹来管理,就接着往下操作;

回到Project的窗口,右键 > Add to Project > Folder ,在弹出的窗口输入文件夹的名字,按正常的文件夹格式来对文件夹取名就好了,然后OK

image-20211031221613420

在Project窗口中也多了一个文件夹的图标

image-20211031221718372

只有一个文件夹的话,显然,如果是一堆文件,那就还需要做细分,这边就按激励文件和模块文件来分类,继续 右键 > Add to Project > Folder ,填写子文件夹的名字,且将该文件夹放置在Design Files的文件夹下,然后OK

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4DQsBG7f-1635695080054)

重复上述的操作,再加入一个Source的子文件夹,然后效果如下

image-20211031222223962

然后就该把文件添加到对应的文件夹下进行管理了,选中 counter.v(如果是多个文件,就选中多个) 然后右键 > Properties

image-20211031222515394

在属性窗口,可以从 Place In Folder 看到文件放在Top层,修改它,将其放置在Source层,然后OK

image-20211031222706553

重复上述操作,将tcounter.v放入testbench文件夹下,这时的效果如下

image-20211031222902276

会发现状态又变成了问号,这是因为改变了文件的位置,工程已经不知道编译结果是否依然有效,所以需要重新编译才能继续使用。

仿真配置

仿真配置就是将模块和仿真的选项存在了一个文件中,然后直接使用该文件就可以自动按设置好的启动仿真,举个例子:假设你的某个模块需要对仿真的时间精度然后还需要做一些自检啥的,这时候就可以直接用配置文件来操作,以省去不必要的步骤。

在Project窗口 右键>Add to Project > Simulation Configuration ,在出现的界面中,填入配置文件的名字,以及放置的文件夹,这边选则放在testbench文件夹下;

image-20211031225154956

接着选中work库下的 test_counter,仿真精度(Resolution)改为ps

image-20211031225205494

选中Verilog的窗口,将Enable hazard checking (-hazards) 的选项打勾,然后点Save进行保存

image-20211031225314514

在文件夹下就有了该仿真配置,直接双击它

image-20211031225407717

然后在Transcript 窗口可以看到仿真的命令和之前的有了一些不同,是按照刚刚的设置启动了仿真

image-20211031225636299

结束

本篇关于仿真工程的使用就介绍到这了,如果工程未关闭,下次启动modelsim时,则会自动打开该工程,要关闭的话,File > Close Project ,再点“是”就好了。

image-20211031230331581


传送门

更多精彩,等你发现~


### 解决ModelSim仿真中`-novopt`选项导致优化关闭的问题 在ModelSim仿真过程中,`-novopt`选项的使用会导致仿真器禁用所有优化功能,从而显著降低仿真速度。以下是几种替代方案或解决方法,以避免因`-novopt`选项而导致的性能问题。 #### 替代`-novopt`选项的方法 1. **使用`+acc`选项** ModelSim支持通过`+acc`选项来实现对设计信号和变量的访问,而无需禁用优化功能。此选项可以与`vsim`命令结合使用,例如: ```bash vsim -voptargs=+acc -lib work top_module ``` 该命令允许在保持仿真优化的同时提供全面的调试功能[^2]。 2. **调整编译参数** 在编译阶段,可以通过指定适当的参数来确保生成的仿真模型兼容性良好。例如,在编译Verilog代码时,可以使用以下命令: ```bash vlog -work work +incdir+/path/to/include /path/to/source/*.v ``` 此外,添加`-dbg`选项可以生成调试信息,而不影响仿真优化[^3]。 3. **使用PLI/DPI接口** 如果需要在仿真中集成外部C/C++代码,可以使用PLI(Procedural Language Interface)或DPI(Direct Programming Interface)。这些接口允许在不完全禁用优化的情况下实现复杂的交互逻辑。例如: ```bash vsim -pli /path/to/pli.so -lib work top_module ``` 4. **启用部分优化** 在某些情况下,可以通过限制优化范围来减少对`-novopt`的需求。例如,使用`-voptargs`参数指定特定的优化选项: ```bash vsim -voptargs="+acc=npr" -lib work top_module ``` 这里的`+acc=npr`表示仅对非保护信号和过程进行访问控制[^1]。 #### 提高仿真速度的其他建议 1. **清理仿真环境** 定期清理工作库并重新编译所有文件可以避免残留数据导致的性能下降。例如: ```bash vdel -all -lib work vlib work vmap work work ``` 2. **分块仿真** 对于大规模设计,可以将仿真分为多个小块进行,以减少单次仿真的复杂度。这种方法尤其适用于测试特定模块的功能行为。 3. **升级工具版本** 使用最新版本的ModelSim或其他仿真工具(如Vivado Simulator)可以获得更好的性能和兼容性。新版本通常包含针对大型设计的优化改进[^2]。 #### 示例脚本 以下是一个完整的ModelSim仿真脚本示例,展示了如何通过调整参数避免使用`-novopt`: ```bash # 清理工作库 vdel -all -lib work vlib work vmap work work # 编译设计文件 vlog -work work +incdir+/path/to/xilinx_libs /path/to/design_files/*.v # 启动仿真并应用优化参数 vsim -voptargs=+acc -lib work top_module do wave.do run -all ``` ### 总结 通过使用`+acc`选项、调整编译参数、启用PLI/DPI接口以及限制优化范围等方法,可以有效避免`-novopt`选项带来的性能问题。此外,定期清理仿真环境、分块仿真和升级工具版本也是提高仿真效率的重要手段。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值