Modelsim使用基础1
注意,不建议使用Modelsim进行代码编辑!易乱码。
软件界面:
下图是基本界面,左边是库和工程;右边是Transcript用于显示信息及输入命令。其他界面在使用到相应功能时会自动出现,如Memory List、Wave等,当然也可以从菜单栏的View中主动点出。
通过Transcript可以学习如何写do脚本命令!
仿真使用:
大体上分成使用do脚本和使用gui界面两种,但是实际上熟练之后就无所谓了,完全可以混合,怎么方便怎么来。
使用GUI进行仿真
1.GUI建立工程Project
1.1建工程操作
1.2填写工程相关信息
包括工程名和工程保存路径设置:
1.3添加源文件
一般情况下都是使用外部编辑器写好.v
文件,然后通过Add Existing File
将文件添加入工程。
添加时逐文件夹添加,同个文件夹下的可多选一次性添加。
然后会自动切换到Project界面,并显示刚刚添加的源文件,并且其状态显示为问号,该状态指示:文件发生过更改还未编译。
2.编译
2.1界面认识
通过编译按钮启动编译,三种按钮分别表示:编译所选中的文件、编译所有变化了的文件和编译所有文件。
点击编译后,会显示编译情况,如果有明显语法错误,Transcript窗口将显示出来。
2.2仿真
在获得了0 failed with no errors
的编译结果之后,才可以进行仿真。
仿真分成两种:无ip和有ip
2.2.1 无ip的仿真:
- 在Library窗口中找到work,点开work,找到工程的顶层文件;
- 右键点击该顶层文件,选择
Simulate without Optimization
,不带优化的仿真,此选项可保证所有信号都能保留。所谓顶层文件,其实也是相对的,不一定要使用整个Project的顶层,也可以直接对单个模块启动“Simulate”操作,从而对该模块及被其例化的模块进行仿真。
此时,Transcript窗口能看到相应的指令:
- 如果选择
Simulate
(或直接双击左键),则是带优化的仿真:
点击仿真之后,Modelsim的界面会“剧烈变化”,莫慌。
2.2.2有ip的仿真
- 在菜单栏点击
Simulate--Start Simulation...
- 在Start Simulation窗口中,选择Libraries页,添加所需要的ip库
- 然后回到Design页,选中要仿真的模块(选中后在Design Units下能看到work.xxx,xxx为你所选中的模块),注意不要启用optimization(优化)。然后点击ok运行。
2.3查看波形
- 点击仿真并且没有报错的情况下,会出现sim窗口,窗口中按照例化逻辑会将所有被例化的模块罗列出来。
- 而在右侧Objects窗口中则会展示sim窗口当前被选中的模块中的信号;
- 当在模块上右键选择Add Wave时,会出现Wave窗口,并将本模块中所有reg和net类型的信号一齐添加到Wave窗口中;
- 注意,可以分批次将多个模块的信号添加到Wave中。同时也可以在右侧的Objects窗口中在信号名称上右键Add Wave。对于parameter类型的信号,必须使用此方法才能进行绘制。
- Add Wave窗口就是绘制波形的窗口,只有将所需观察的信号添加到该窗口中才能观察信号变化。
3.仿真
3.1界面认识
- Wave窗口中,有几个重要部分包括:1仿真运行相关按钮、2显示区域相关按钮、3Cursor相关按钮、4Wave信号列表和5绘图区。注意,并不是每次生成的Wave窗口的工具栏都有所有上述按钮,如果没有可从Modelsim主窗口中找到。
- 通过在信号(可用ctrl、shift多选)上点击每个信号都可以设置数据格式包括:进制格式和信号格式(数字或模拟)。对于如正弦波等波形数据可设置Format为Analog,此时信号显示区域高度很大很多,可以展示波形变化。常用设置均已框出。
- 信号列表中,信号可以拖动调整位置,也可以通过Ctrl+x剪切Ctrl+V粘贴进行对多个信号的同时调整顺序,也可以delete删除。
3.2运行仿真
- 仿真时长设置。具体数值根据顶层模块的`timescale以及顶层模块所生成的时钟频率来考虑,单位可直接填写(如ps ns us ms)。注意,仿真时长不宜太长,不要使用s的单位。如果运行结束发现长度不够可以再次点击
run
来运行,会自动接着已有的时间继续运行,并最终确定总时间需要多少。
- 运行完,如果发现代码需要更改,改好之后。如果只是更改了简单的逻辑,没有增减信号等情况,可直接重新“Compile”,然后点击Restart和“Run”运行仿真。
- 如果代码逻辑有大的更改,则需要重新进行“Compile”、“Simulate”、“Add Wave”和“Run”四步操作。
- 在波形界面上,右键可呼出显示区域相应的操作的菜单,菜单右侧为其快捷键(英文输入模式下)。蓝色线为高阻z,红色为未知x,深绿色为单bit信号有数据的情况(0、1)、浅绿色为多bit总线有数据的情况。
4仿真数据保存
4.1 Wave信号列表保存
- 点击Wave窗口内任意未知,然后Crtl+s,呼出波形保存界面
- 设置文件名,
xxx.do
,然后“ok”,在工程目录下可找到该do文件。 - do文件的使用则需要靠运行命令
do xxx.do
来进行,该命令可直接写在Transcript窗口中,也可以写在其他do脚本中来运行。 - 该do文件中自动记录了与Wave窗口设置相关的所有东西,包括信号名列表、信号顺序、列表宽度、信号的进制与格式、显示的时间区间等信息,可用编辑器打开观察学习。
4.2波形数据保存
- 波形数据的保存需要通过设置Cursor来进行,且至少需要两个Cursor。默认会有一个,须再建一个。
- 然后通过拖动Cursor光标来调整位置,两个Cursor之间的区域即为所选择的要保存的区域。
- 在Cursor所在行上,点击右键
- 点击
Filter Waveform...
,然后弹出Wave Filter对话框
- 设置Wave Filter,包括:起点、终点、保存路径及文件名
xxx.wlf
和保存的信号范围。如果勾选Filter Selected Signals Only则保存所选中的单个或多个信号(在Wave的信号列表中进行选择),否则自动保存列表中的所有信号。其中Now选项即为仿真运行的终点。
wlf文件可直接用modelsim打开,可快速恢复工程和所选信号的波形。