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,随后重新综合一下,才可以正确仿真。

仿真波形看不到门延迟

在以下三个方面可以检查:

  1. testbench 中时间精度 timescale 设置得精细一点。

  2. 只有 Gate-level 仿真才会有延迟。

  3. 在 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 重新调用后这些信号默认不显示,比较不方便。

解决方法:

  1. 在 Modelsim 添加好想要观察的波形后,切换到 Wave,点击左上角菜单,File - Save Format,保存波形的 wave.do 文件,即可导出波形设置信息。
  2. 在重新开始仿真时,首先在 Modelsim 选中全部已有的波形,删除掉。
  3. 打开菜单 File - Load - Macro File,载入 wave.do
  4. 打开菜单 Simulation - Restart,然后 Simulation - Run - Run All

快速重新开始仿真

在 ModelSim 的命令行界面按一下“向上”方向键,会加载出一个 do 脚本文件,这实际上就是 Quartus 传递给它的命令,按下回车再执行一次,仿真就可以重新开始了。

注意:

  1. 这适用于仅修改了 tb 后重新开始仿真的情况(因为 tb 是在 modelsim 编译),如果修改了其它设计文件,还是在 Quartus 重新综合再启动仿真吧。
  2. 有时候 ModelSim 会检测到外部文件变化,注意在弹出的窗口选择 Reload,如果选错,外部修改会被 ModelSim 中的旧版本覆盖掉!

首先启动 Modelsim,选中菜单的 File - Change Directory... ,将工作目录更改到 MATLAB 生成的代码所在的文件夹。

随后,在命令行窗口中分别执行下面两个 do 脚本,进行编译和仿真,例如:

do xxx_tb_compile.do

do xxx_tb_sim.do

注意,需要在 Simulink 中勾选了 “生成 testbench“ 才会有对应的测试文件。(否则默认是没有的)

这里给出两个文件的内容供手动编写仿真文件参考:

fir_16bit_tb_compile.do

1
2
3
vlib work
vlog fir_16bit.v
vlog fir_16bit_tb.v

fir_16bit_tb_sim.do

1
2
3
4
5
6
7
8
9
10
11
12
onbreak resume
onerror resume
vsim -voptargs=+acc work.fir_16bit_tb

add wave sim:/fir_16bit_tb/u_fir_16bit/clk
add wave sim:/fir_16bit_tb/u_fir_16bit/reset_x
add wave sim:/fir_16bit_tb/u_fir_16bit/clk_enable
add wave sim:/fir_16bit_tb/u_fir_16bit/Input_rsvd
add wave sim:/fir_16bit_tb/u_fir_16bit/ce_out
add wave sim:/fir_16bit_tb/u_fir_16bit/Output_rsvd
add wave sim:/fir_16bit_tb/Output_rsvd_ref
run -all

持续更新中,欢迎补充。