1、modelsim 仿真库配置
首先双击 Modelsim图标 ,依次点击菜单栏中 File -> Change Director 选项进入路径切换页面,如下图所示:
点击 Change Director 按钮,在打开文件夹里面,去找Modelsim软件的安装目录,如下图所示:
点击选择文件夹,之后在菜单栏依次点击 File -> New -> library 选项,打开新建库界面,如下图所示:
在弹出来的界面中选择第一项 a new library , library Physical Name 输入库名称,比如我们的 FPGA 是 Gowin 2A 系列的器件,取名为 GW2A ,然后点击 OK,如下所示:
添加成功后在 library 列表中出现了 GW2A(empty)库,且路径为前面设置的位置(工程根目录下),则表明库新建完成,如下图所示:
接下来该添加 Gowin 的器件库文件,首先在 Modelsim 软件的菜单栏中依次点击 Compile -> Compile 以打开编译库文件界面,如下图所示:
在打开的界面,一定先下拉选择 library 选择我们刚刚新建的 GW2A ,然后修改文件路径为 Gowin 软件的 GW2A 系列器件的库路径,具体为 \Gowin\Gowin_V1.9.9Beta-6\IDE\simlib\gw2a ,如下图所示:
进入 gw2a 找到 prim_tsim.v 文件,然后点击 compile 按钮开始进行编译,如下图所示:
此时 Modelsim 的 transcript 窗口会快速刷新各种编译过程信息,编译完成之后,Transcript 界面会显示 0 错误,0 警告,并且 GW2A 这个库下面会出现各种元件,如下图所示:
如何点击 Done 按钮以完成编译,如下图所示:
接下来就该把该 GW2A 设置为Modelsim 默认库列表,找到 Modelsim安装位置,在该路径下有个名为 modelsim.ini 的文件,这是一个只读文件,如下图所示:
右键选中Modelsim.ini 文件,点击属性,在属性设置界面,将其只读属性勾选去掉,如下图所示:
然后用记事本打开文件,然后在该文件的 [Library] 下面,加上 GW2A 库的指定语句 GW2A = $MODEL_TECH/../GW2A 并保存,如下所示:
最后在恢复 modelsim.ini 的只读属性,就完成器件的添加了,如下图所示:
2、Modelsim 环境验证
由于我们只讲如何搭建环境,不讲 Verilog 语法,后续我们有专门的 Verilog 语法章节。
首先我们打开 led 程序(可以使用其他方式验证),如下图所示:
然后,在工程管理区 空白处 右击选择 New File... 如下图所示:
会弹出新建文件的的对话框,选择创建 Verilog File 文件,选择 OK 按钮,接下来该对这个新建的 Verilog 文件进行命名,如下图所示:
我们将用于仿真的文件后面都加上以 mod 结尾,此文件是仿真的例化文件,用于仿真软件使用。
接下来我们需要更改路径,用于仿真的文件我们一边只将其存在 sim 文件夹中,所以我们将依次点击 Browse... ,来更改路径,本工程下面的 sim 文件夹,点击选择文件夹,再点击 ok,按键及可完成添加,如下图所示:
添加完以后将测试代码复制到 led_mod.v 文件中。
`timescale 1ns/1ns //时间尺度预编译指令 时间单位/时间精度。
//第一个 1ns 是时间单位(每个时间单位表示 1 纳秒)。
//第二个 1ns 是时间精度(时间精度决定了仿真时间的分辨率,也就是说,模拟器能区分的最小时间间隔为 1 纳秒)。
module led_mod();
//reg define
reg sys_clk; //定义仿真文件全局时钟。
reg sys_rst_n; //定义仿真文件全局复位,下降沿有效。
//wire define
wire led; ////定义仿真文件 led 端口。
always#10 sys_clk = ~sys_clk; //#10 表示延时 10ns。
//也就是说,每 10ns sys_clk就反转一下。
initial begin //初始化
sys_clk = 1'd0;
sys_rst_n = 1'd0; //将复位信号拉低。
#200; //#200 表示延时 200ns。
sys_rst_n = 1'd1; //将复位信号拉高。
#200; //#200 表示延时 200ns。
end
led u_led(
.sys_clk(sys_clk), //将仿真文件的sys_clk 和 led_light 的时钟进一个绑定。
.sys_rst_n(sys_rst_n),
.led(led)
);
endmodule
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
仿真模块讲解:
第 1 行 :时间尺度预编译指令 时间单位/时间精度,第一个 1ns 是时间单位,第二个 1ns 是时间精度。
第 7-11 行:就是我们再 led 文件里面需要的一些信号。
第 14 行: 初始化是将 sys_clk 的信号先拉高,每 10 ns 再将 sys_clk 进行翻转。
第 18-26 行:将复位信号 和 时钟信号 拉低,延时 200ns ,再将复位信号拉高后,在延时 200ns 开始仿真。
第 28-32 行:将 led 所需的信号进行绑定
接下来需要将 led_mod.v 文件给失能掉,让它无法参与高云 Gowin 的编译当中来,首先我们选中 led_mod.v 这个文件,然后鼠标右键 -> Disable ,如下图所示:
选中完毕后,如下图所示:
这样的话,仿真文件将不再影响我们正常是 FPGA 开发了。
由于我们仿真是以 ns 进行的,而我们使用的程序是以 S 为单位进行的,则我们这里需要将 Scends 改为等于 50 ,记得保存哦~ ,如下图所示:
接下来我们该验证搭建的 Modelsim 环境,打开 Modelsim 软件,在 Modelsim 建立一个新的 project。选择 “File -> New -> project”,如下图所示:
进入新工程的设置界面,在 Project Name 一栏中填写工程名。这里我们把工程命名为相对应的工程名 led , Project Location 是工程路径,点击 Browse 进行设置,根据需要我们把仿真工程保存到我们设计工程下,找到刚刚新建sim文件夹并选择,如下图所示:
在点击 OK 之后,出现如下图所示的界面,从图中可以看出,有四种操作可以选择:Create New File(创建新文件)、Add Existing File(添加已有文件)、Create Simulation(创建仿真)和 Create New Floder(创建新文件夹),我们这里选择“Add Existing File”。
在弹出的对话框中,选择 Browse 选择本次实验需要添加的工程设计文件 led.v 、 led_mod.v 。
首先我们添加 led_mod.v 文件,其路径在 Gowin -> led_text-> sim -> led_mod.v ,(若路径不一致的,则按照正确路径添加即可)如下图所示:
接下来我们在此添加 led.v 文件,其路径在 Gowin -> led_text-> pro -> src -> led.v ,如下图所示:
添加完成之后,点击 Close 按键关闭,如下图所示:
可以在 Modelsim 软件中看到我们添加的工程文件,如下图所示:接下来就是编译仿真文件,编译的方式有两种:第一种 Compile Selected(编译所选文件),编译所选文件功能需要先选中一个或几个文件,执行命令之后可以完成对选中文件的编译;第二种是 Compile All(编译全部文件),该命令是按编译顺序对工程中的所有文件进行编译。这里,我们选择编译所有文件,选择 Compile->Compile All ,如下图所示:
编译完成之后,文件后面的 Status 从“ ? 变为 √ ”表示编译通过。下方的 Transcript 也提示文件编译成功,如下图所示: 注:有两个设计中不希望出现的状态:编译错误(显示红色的 × )和包含警告的编译通过(对号的后面会出现一个黄色的三角符号)。编译错误即 Modelsim 无法完成文件的编译工作。通常这种情况是因为被编译文件中包含明显的语法错误,Modelsim 会识别出这些语法错误并提示使用者,使用者可根据 Modelsim 的提示信息进行修改。在project 状态栏中找一个空白地方,右键点击,然后选择 Add to Project -> Simulation Configuration… 并点击,如下图所示:
进入 Add Simulation Configuration 页面,我们在 Design 标签页面找到并选择中 work 库中的 led_mod 模块作为设计顶层,接下来点击Optimization Options… ,如下图所示:
进入弹出 Optimization Options..子窗口中选择 Apply full visibility to all modules(full debug module) ,点击OK,如下图所示:
将Design Unit(S)的名字复制到,Simulation Configuration Name 框中,确保命名保持一致,如下图所示:
首先点击 libraries 设置栏,在 Search libraries(-L) 一栏中点击 Add… 添加我们新建的高云的库文件 GW2A ,然后点击 OK 确认,如下图所示:
Search Libraries First(-Lf) 也和上面操作一样,然后点击 OK 确认,再点击 Save 保存设置,如下图所示:
接下来双击新生成的仿真文件 led_mod ,进入 sim 界面,如下图所示。
sim 界面如下图所示:
在 sim 界面我们可以添加我们想要观察模块的波形,选中模块,右键点击选择 Add Wave ,如下图所示:
添加好波形后回到 Library 栏 -> 右键单击 led -> 点击 Update ,将 led_mod 文件更新在 led 项目下面,如下图所示:
点击 Run all,开始跑仿真,如下图所示:
“ 注:有些同学的波形显示面板在最右边可以拉过来,如下图所示:”
此时点击 Zoom Full 可以快速观察到波形,如下图所示:
仿真波形(如果想查看波形,同时按住 Ctrl + 鼠标滑轮 进行缩放,或者点击 Zoom Full 旁边的 Zoom in 或者 Zoom out ),如下图所示:
在开发过程中,在更改设计文件后,点击保存并检查语法无误后重新运行程序。在 Modelsim 中,我们进入 Library 界面,在 Work 目录下对 led_top.v 和led_light.v 进行重新 Recompile ,重新进行仿真波形的加载。
“ 到此我们的Modelsim 环境搭建和验证就完成了,希望大家多多多练习一下我们 Modelsim 环境验证这一部分,后期也会经常使用,此文档只用于教学,请大家多多支持正版。”