Quartus & ModelSim 踩坑小记与使用技巧
本文分享了一些 Quartus 和 ModelSim 的使用技巧,适合从事 FPGA 开发的学生党/工程师参考。
在 Quartus 部分,介绍了引脚分配和未使用引脚设置的优化方法,避免 LED 微亮问题,并提供了利用 Tcl 脚本快速分配引脚的操作流程。此外,文章还分享了门级仿真的配置步骤及快速重编译的方法。
在 ModelSim 部分,介绍了保存和载入波形设置的操作、快速重启仿真的方法,以及对 Simulink 生成代码进行仿真的操作流程,并附示例脚本,便于参考和实践。
Quartus 部分
Pin Planner 引脚分配
Unused Pin设置
默认的设置是三态门,并带有弱上拉,这可能导致 LED 微亮。可以通过以下步骤修改为不带上拉的三态门:
工具栏,Assignment -> device
,右侧中部
Device and Pin Options...
,左侧切换到
Unused Pins
,在右侧选择
As input tri-state
.
列表中找不到用户的 Pin
输入完原理文件后,需要在左侧中部小窗先跑一下
Analysis & Synthesis
,随后在 菜单栏打开
Assignments-Pin Planner
,列表中才会出现管脚。
这个也很合理,类似于 Vivado 中需要 Elaborate design 以后,对文件进行分析后,才能够进行 Pin 的分配。
利用 tcl 快速分配引脚
首先是将有关分配引脚的 tcl 脚本导出,在 Pin Planner 左上角的
File - Export
,输出类型选取 tcl 即可。
在新的工程导入时,需要点击菜单栏的
Tools - Tcl scripts
,选中刚刚导出的 tcl 脚本,点击
Run,运行完成后,引脚就导入了。(建议写完 top
并综合完以后,再执行此导入操作)。
Simulation 仿真
多个仿真时需要设置 Top-evel Entity
仿真前:需要在 Project Navigator
处,切换显示方式为
Files
,右键待仿真的子模块,将其设定为
top,随后重新综合一下,才可以正确仿真。
仿真波形看不到门延迟
在以下三个方面可以检查:
testbench 中时间精度 timescale 设置得精细一点。
只有 Gate-level 仿真才会有延迟。
在 Quartus 中进行相关设置:
打开工具栏中
Assignments->settings->Simulation->more EDA netlist write settings
。将其中generate netlist for functional simulation only
,从默认的 on 改为 off。设置完后删除工程目录下的simulation文件夹,然后重新全编译quartus工程,否则门级网表不更新还会出现不延时现象。(出处:知乎)
另:V 系列器件不支持门级仿真,仅 Stratix IV 和 Cyclone IV 器件系列支持门级时序仿真。(出处:Intel 社区)
编译与综合
快速重编译
在左侧 Task 栏目切换为 Rapid Recompile,有利于在修改设计文件后,快速重新编译。
ModelSim 部分
保存与载入上一次添加的波形
使用 Quartus 联合仿真,默认只添加 Testbench 的波形,有时候我们会手动添加一些内部信号,但在 Quartus 重新调用后这些信号默认不显示,比较不方便。
解决方法:
- 在 Modelsim 添加好想要观察的波形后,切换到
Wave,点击左上角菜单,
File - Save Format
,保存波形的wave.do
文件,即可导出波形设置信息。 - 在重新开始仿真时,首先在 Modelsim 选中全部已有的波形,删除掉。
- 打开菜单
File - Load - Macro File
,载入wave.do
。 - 打开菜单
Simulation - Restart
,然后Simulation - Run - Run All
。
快速重新开始仿真
在 ModelSim 的命令行界面按一下“向上”方向键,会加载出一个 do 脚本文件,这实际上就是 Quartus 传递给它的命令,按下回车再执行一次,仿真就可以重新开始了。
注意:
- 这适用于仅修改了 tb 后重新开始仿真的情况(因为 tb 是在 modelsim 编译),如果修改了其它设计文件,还是在 Quartus 重新综合再启动仿真吧。
- 有时候 ModelSim 会检测到外部文件变化,注意在弹出的窗口选择
Reload
,如果选错,外部修改会被 ModelSim 中的旧版本覆盖掉!
仿真 MATLAB Simulink 生成的代码
首先启动 Modelsim,选中菜单的 File - Change Directory...
,将工作目录更改到 MATLAB 生成的代码所在的文件夹。
随后,在命令行窗口中分别执行下面两个 do 脚本,进行编译和仿真,例如:
do xxx_tb_compile.do
do xxx_tb_sim.do
注意,需要在 Simulink 中勾选了 “生成 testbench“ 才会有对应的测试文件。(否则默认是没有的)
这里给出两个文件的内容供手动编写仿真文件参考:
fir_16bit_tb_compile.do
1 | vlib work |
fir_16bit_tb_sim.do
1 | onbreak resume |
持续更新中,欢迎补充。