高云FPGA ModelSim中的仿真
前言
高云(Gowin)的IP核及其原语,仅在特定的开发平台(如Gowin IDE)中使用。第三方工具Modelsim无法直接获取IP核和内部运行逻辑结果,因此无法直接进行仿真。这就需要对高云的库进行编译。
这个编译步骤只需在首次使用时执行。首次编译的库,在后续使用ModelSim进行仿真时,可以随时调用,无需再次编译。
本文以 Modelsim SE-64 10.6d 版本为例,演示完整的操作流程。
一、编译高云仿真库(首次设置)
1.1 切换工作目录
打开 ModelSim 软件,依次点击菜单栏中 【File】→【Change Directory】 选项进入路径切换页面。

在打开的选择文件夹页面,定位到 Modelsim 软件安装目录,例如 C:\modeltech64_10.6d,点击 选择文件夹 。

1.2 新建库
在菜单栏依次点击 【File】→【New】→【library】 选项,打开新建库界面。在打开的界面中选择第一项 "a new library" ,"library Physical Name" 输入库名称。

比如我们编译的是 Gowin 5A 系列的器件,取名为 "gw5a",然后点击 OK。

如果在 library 列表中出现了 gw5a(empty) 库,且路径为前面设置的位置(工程根目录下),则表明库新建完成。
1.3 编译库文件
在菜单栏中依次点击 【Compile】→【Compile】 以打开编译库文件界面。

在打开的界面中,一定先下拉选择 library 为我们刚刚新建的 gw5a,然后修改文件路径为 Gowin 软件的 gw5a 系列器件的库路径。例如默认安装路径为:
C:\Gowin\Gowin_V1.9.11.03_Education_x64\IDE\simlib\gw5a

打开路径后进入后,一共有四个文件,大家可以拖动查看,选择 .V 的文件 ,然后点击 Compile 按钮开始进行编译。
1.4 验证编译结果

编译完成之后,Transcript 界面会显示 0 错误,0 警告,并且 gw5a 这个库下面会出现各种元件。器件已经成功添加到模型中。
二、设置 Modelsim 默认库路径以自动加载 Gowin 库
我们希望该库能被 Modelsim 自动发现并添加使用。因此,我们需要将该库设置为 Modelsim 的默认库之一。
2.1 找到 modelsim.ini 配置文件
首先,需要打开 Modelsim 的安装路径,找到名为 modelsim.ini 的配置文件。

2.2 修改配置文件

将其 只读属性勾选去掉,然后用记事本或者 Notepad++ 打开文件。
在该文件的 第 17 行左右,加上 gw5a 库的指定语句:
ini
gw5a = $MODEL_TECH/../gw5a
保存后,恢复 modelsim.ini 的只读属性。
说明: 这一步的作用是让 ModelSim 在每次启动时自动识别并加载 gw5a 库,避免每次新建工程都要手动添加库路径。
三、Modelsim 仿真验证流程
以一个 LED 灯的简单工程创建激励文件进行仿真,看看效果。

语法没问题,综合通过。
3.1 新建 ModelSim 工程
打开 Modelsim,在 Modelsim 建立一个新的 project。选择 File → New → Project。

进入建立新工程的设置界面,在 "Project Name" 一栏中填写工程名。这里我们把工程命名为相对应的工程名 "led_flash" ,"Project Location" 是工程路径,点击 "Browse" 进行设置。根据需要我们把仿真工程保存到我们设计工程下,新建一个 sim 文件夹并选择。

3.2 添加设计文件
随后在弹出的对话框中,选择 Browse 选择本次实验需要添加的工程设计文件 "led_flash.v" 、"led_flash_tb.v"。

在 Modelsim 软件中看到我们添加的工程文件。

3.3 编译工程文件
编译的方式有两种:
- Compile Selected(编译所选文件):编译所选文件功能需要先选中一个或几个文件,执行命令之后可以完成对选中文件的编译。
- Compile All(编译全部文件):该命令是按编译顺序对工程中的所有文件进行编译。
这里,我们选择编译所有文件,选择 Compile → Compile All。

编译完成之后,文件后面的 Status 从 "?" 变为 "√" 表示编译通过。下方的 "Transcript" 也提示文件编译成功。
四、配置仿真环境
4.1 添加仿真配置
具体操作是右键点击空白处选择 "Add to Project" ,然后选择 "Simulation Configuration"。这将带我们进入配置界面。

进入 Add Simulation Configuration 页面。

4.2 设置 Design 标签
我们在 Design 标签页面中选择 work 库中的 "led_flash_tb" 模块作为设计顶层,点击 Add Folder... 粘贴文件名。

仿真配置 "Simulation Configuration Name" 的命名,确保命名保持一致。在复杂的工程设计中,我们可以设计多个不同的仿真配置顶层对工程进行仿真测试。

注意:选中的tb_led_flash设置成Modelsim为顶层文件
"ModelSim 需要设置顶层吗?" 需要。
4.3 设置 Optimization Options
点击 "Optimization Options..." ,在 "Optimization Options..." 设置栏中选择 "Apply full visibility to all modules (full debug module)" ,点击 "OK"。

说明: 选择 full debug module 模式后,仿真时可以观察到所有模块内部的信号,方便调试。
4.4 设置 Libraries 标签
点击 "libraries" 设置栏,在 "Search libraries (-L)" 一栏中点击 "Add..." 添加我们新建的高云的库文件 "gw5a" ,在 "Search Libraries First (-Lf)" 同样选择库文件 "gw5a" ,最后点击 "Save" 保存设置。

通过上述步骤完成了对仿真环境配置,保存配置后,我们可以看到在 "project" 栏产生了仿真配置文件 "led_flash_tb"。
五、仿真界面波形观察
5.1 启动仿真
我们首先需要双击新生成的仿真文件 "led_flash_tb" ,进入 "sim" 界面。


5.2 添加波形信号
在 "sim" 界面我们可以添加我们想要观察模块的波形,选中模块,右键点击选择 "Add Wave"。

信号已经被全部加入。但此时,由于路径过长,可能不利于观察。那么,我们可以通过点击下方特定图标来隐藏其模块路径。

5.3 更新并运行仿真
因为我们的信号是后加进去的,所以我们这里先回到 "Library" 栏,右键单击 "work" 点击 Update 将 "led_flash_tb" 文件更新在 "work" 栏。

点击 Run all,开始跑仿真。

5.4 设置信号显示格式

右键点击选择 counter 设置为 十进制。

当 counter 接收到 49999999 时,LED 会发生翻转。

提示: 若在设计中发现问题并进行修改后需要重新进行仿真,操作步骤为:进入 library 界面,对 work 进行 update,即更新我们刚刚添加的波形信号,然后重新启动仿真的过程。
六、保存波形文件
在使用 Modelsim 进行仿真时,对于一些很耗时间的仿真,可以保存仿真波形结果,方便下次直接打开查看。
6.1 保存 Dataset
第一步保存 dataset sim,打开 sim 窗口,点击 File → Save Dataset Sim 或在 sim 界面点击保存 .wlf 文件,并给文件命名。

6.2 保存波形配置
第二步,Wave 界面保存波形。点击保存图标之后,波形文件 "wave.do" 会默认保存在工程的仿真文件 sim 中。


说明:
- .wlf 文件:保存的是仿真数据(波形值),可以用 ModelSim 直接打开回放。
- .do 文件:保存的是波形窗口的显示配置(哪些信号、显示格式等),下次加载后自动恢复波形显示布局。
七、常见问题与注意事项
7.1 编译库时提示找不到文件
请确认 Gowin 安装路径是否正确,不同版本的 Gowin IDE 路径可能不同。一般库文件位于:
<Gowin安装目录>\IDE\simlib\<器件系列>\
7.2 仿真时提示 "cannot find module"
检查是否在 Libraries 标签中正确添加了 gw5a 库,以及 modelsim.ini 中的路径配置是否正确。
7.3 修改代码后仿真结果不变
修改代码后需要重新编译(Compile All),并在 Library 栏右键 work 选择 Update,再重新运行仿真。
7.4 波形不显示或显示异常
确认 Add Wave 时选中的是正确的信号层级,必要时展开模块层级查找内部信号。
八、总结
本文完整介绍了高云 FPGA 在第三方工具 ModelSim 中进行仿真的全流程,核心步骤如下:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 切换工作目录 | 定位到 ModelSim 安装目录 |
| 2 | 新建库 | 创建 gw5a 库 |
| 3 | 编译库文件 | 编译高云 .V 仿真库文件 |
| 4 | 配置 modelsim.ini | 设置默认库路径,实现自动加载 |
| 5 | 新建仿真工程 | 添加设计文件和激励文件 |
| 6 | 配置仿真环境 | 设置顶层模块、优化选项、库路径 |
| 7 | 运行仿真 | 添加波形、运行、观察结果 |
| 8 | 保存结果 | 保存 .wlf 和 .do 文件 |
关键点: 编译高云库只需首次执行一次,后续所有工程均可直接调用,大大提升了仿真效率。