Document

第十章
EDA设计的仿真和测试
主要内容
• 对仿真的概念进行了简单说明
• 以Modelsim6.3se版本为例,重点介绍了
Modelsim软件的使用方法。
10.1 仿真简介
• 仿真是指在软件环境下,验证电路的行为和设计意图是否
•
一致。
简化的仿真验证系统框图如下:
DUT
测试内容
TestVector
测试向量
Testbench
测试模板
仿真系
统软件、
硬件运
行
比较判断
输出、存
储结果
10.1 仿真简介(续1)
• 仿真与验证主要包括3个方面的内容:
第一是仿真系统的组织原则,主要是如何有效的测试目标
系统的理论和方法;
第二是测试模板与测试向量的设计;
最后是仿真工具的使用。
• 一般来说,仿真分为三种类型,即功能仿真、综合后功能仿真
和时序仿真,分别对应于设计输入后、综合完成后、布局布线
完成后等步骤,这些步骤也是仿真的切入点。
10.1 仿真简介(续2)
1、功能仿真
• 功能仿真也称为前仿真,主旨在于验证电路功能是否符合设计要求,
其特点是不考虑电路门延时与路径延时,考察重点为电路在理想环境
下的行为和设计构想是否一致。
• 可综合FPGA仿真代码是用RTL级代码语言描述的,功能仿真的输入是
设计的RTL代码,也就是HDL源文件与Testbench.。
2、综合后仿真
• 综合后仿真的主旨在于验证综合后的电路结构是否与设计意图相符,
是否存在歧义综合结果。
• 综合后仿真的输入是从综合得到的一般性逻辑网表抽象出的仿真模型
和综合产生的延时文件,综合时的延时文件仅仅能估算门延时,而不
包含布线延时信息,所以延时信息不十分准确。
10.1 仿真简介(续3)
3、时序仿真
• 时序仿真也称为布局布线后仿真或者后仿真,是指电路已经映射到特
定的工艺环境后,综合考虑电路的路径延时与门延时的影响,验证电
路的行为是否能够在一定时序条件下满足设计构想的功能。
• 时序仿真主要目的在于验证电路是否存在时序违规,其输入为从布局
布线抽象出的门级网表、Testbench以及扩展名为SDO的标准延时文
件。
• 一般来说,时序仿真是必选步骤,通过时序仿真能检查设计时序与
FPGA的实际运行情况是否一致,确保设计的可靠性和稳定性。
10.2 Modelsim简介
• Modelsim是一种第三方EDA仿真工具。
• Modelsim仿真工具是Model公司开发的,它支持Verilog、VHDL
以及两者的混合仿真,可以将整个程序分步执行,它在程序执
行的任何步骤任何时刻都可以查看任意变量的当前值,可以查
看某一单元或模块的输入输出的连续变化等。
• 其主要特点是仿真速度快,仿真精度高,而且支持VHDL、
Verilog HDL以及两者的混合使用,是目前业界最流行最通用的
仿真器之一。
10.2.1 Modelsim的图形用户界面
• Modelsim 6.3软件在默认的条件下提供了主窗口、源文件窗口、信号
窗口、波形窗口、数据流窗口、进程窗口、存储器窗口、列表窗口等
不同窗口,如下图。
10.2.1 Modelsim的图形用户界面(续1)
• 主窗口:主窗口main在Modelsim启动时直接打开,是其他窗口运行的
•
•
•
•
•
•
•
基础。
源文件窗口:源文件窗口source主要用来显示和编辑HDL源文件代码。
波形窗口:波形窗口是最常用的窗口之一,主要是用来查看仿真结果。
数据流窗口:数据流窗口Dataflow是一般仿真软件都提供的一个通用
窗口,通过该窗口可以跟踪设计中的物理连接、事件的传播,也可以
用来跟踪寄存器、网线和进程等,极大的丰富了调试方法并对其进行
显示,也可以显示设计中的内部连接。
列表窗口:列表窗口使用表格的形式显示仿真结果。
进程窗口:进程窗口显示了仿真中用到的所有进程列表。
信号窗口Object主要是用来选择需要查看的信号,同时可以在仿真过
程中强制某一个信号的值发生变化,也可以通过信号窗口的
Edit/Force和Edit/Clock命令将任意信号强制转化成时钟信号。
寄存器窗口Memory可以显示设计中寄存器的内容。使用此窗口可以
通过加载源文件或改变存储器内容的方式对设计中的存储器进行初始
化,同时窗口中的内容也可以保存成一个存储器文件,以便日后使用。
10.2.1 Modelsim的图形用户界面(续2)
• 在Modelsim的主窗口的工具栏中常用快捷键图标的功能如下表:
图标
名称
用途
对应菜单
对应命令
Redo
撤消最后一步操作
Edit > Redo
Find
在当前窗口查找文本
Edit > Find
Collapse All
隐藏当前窗口所有的例程
Edit > Expand > Collapse All
Expand All
显示当前窗口所有的例程
Edit > Expand > Expand All
Compile
打开编译对话框编译源文件
Compile>Compile
Vcom
Compile all
编译工程中的所有文件
Compile > Compile All
vcomvlog
Simulate
指定设计进行仿真
Simulate > Start Simulation
vsim
Break
停止当前仿真
Simulate > Break
Environment up
返回上一层
Environment back
返回到前一次选择的内容
Environment forward
返回到后一次选择的内容
Restart
装载设计,将仿真复位到零, Simulate > Run > Restart
vlog
restart
重新仿真
Run Length
设定单步仿真步长
Simulate>Runtime Options
run
Run
单步运行当前仿真
Simulate > Run >Run length
Run length
Continue Run
继续仿真直到仿真结束
Simulate > Run > Continue
run-continue
Run -All
运行所有仿真到仿真结束
Simulate > Run > Run -All
Run-all
打开一个语言模板
Source>Show
Show
Templates
Language
LanguageTemplates
10.2.2 Modelsim仿真步骤
• Modelsim仿真步骤分为以下5步:
(1)建立库;
(2)映射库到物理目录;
(3)编译源代码,包括所有的HDL代码和Testbench;
(4)启动仿真器并加载设计顶层;
(5)执行仿真
注:本章主要介绍在界面模式下modelsim的使用方法
10.2.2 Modelsim仿真步骤(续1)
1、建立库
仿真库是指存储已经编译设计单元(design units)的目录。
Modelsim中仿真库可以分为工作库(Working)和资源库(Resource)
两大类。
建立仿真库的常用方
法有两种:一是在界面模
式下,执行主菜单命令
File/New/Library,打开
Create a New Library对
话框,选择第一项生成一
个新库并映射它,如右图
图所示。二是在命令行模
式下也可以在主窗口执行
vlib命令建立新库,语法
格式如下:
Vlib<library_name>
10.2.2 Modelsim仿真步骤(续2)
2、映射库到物理目录;
映射是将已经编译好的设计单元映射为一个库,库路径内的文件应该是
已经编译好的。
常用操作方法有两种:一是
在界面模式下,执行主菜单命令
File/New/Library,打开Create a
New Library对话框,选择第二
项映射已经编译好的库,单击
browse按钮选择所已经编译好
的库,如右图所示;第二种方法
是命令模式下主窗口执行vmap命
令,语法格式如下:
Vmap<logical_name><direcetory_path>
10.2.2 Modelsim仿真步骤(续3)
3、编译源代码
• GUI图像界面模式下编译文件的快捷方式是建立一个工程,
在工程中添加所要编译的文件,然后执行主窗口的
Compile子菜单中的各种命令或者是右键单击工程中的文
件执行Compile的不同命令。
• 如果编译的是VHDL源文件,其编译顺序由文件的排列顺
序决定,如果是Verilog源文件,其编译顺序也是由文件的
排列顺序决定,但文件编译的顺序并不重要。
10.2.2 Modelsim仿真步骤(续4)
4、 启动仿真器并加载设计顶层
(1)执行主
菜单中的命令
Simulate/
Start Simulate
打开仿真对话
框,指定需要
仿真的设计单
元,然后点击
OK,如图所示
10.2.2 Modelsim仿真步骤(续5)
4、 启动仿真器并加载设计顶层
(2)在主窗口中出
现Object窗口,右键单
击Object窗口中的任
意信号,选择add to
wave/ signals in region
或者是右键选中sim
窗口中加载的顶层设
计名,选中add to wave,
就可以打开波形窗口,
并将所有信号都加载
到波形窗口当中 。
如右图所示。
10.2.2 Modelsim仿真步骤(续6)
5、 执行仿真
执行主菜单命令下的Simulate/Run,选中相
应的
选项来执行仿真,也可以选
中使用等快捷键按钮来进行仿真 ,仿真结果将会
显示在Wave窗口中。
10.2.3 Modelsim功能仿真
在本节中,用一个简单的计数器设计实例来演示功能
仿真的具体操作流程,此处使用的QuartusII版本为7.2。
步骤如下:
1、新建一个名为counter的文件夹,在QuartusII新建
一个同名工程,选择合适的器件。在此例中选择的目标芯
片为CycloneIIEP2C35F672C6N。
2、计数器的HDL源文件可以在Modelsim中编写,也可
以在QuartusII中编写或者利用MegaWizard生成的IP核以
及直接调用LPM等方式生成。在这里选择利用MegaWizard
生成的简单的IP核作演示使用,在定制中生成的IP核的语
言选择VHDL。
10.2.3 Modelsim功能仿真(续1)
生成后的 IP核如下图所示
10.2.3 Modelsim功能仿真(续2)
3、回到QuartusII主窗口,点击Project选项卡,选择
add/Remove Files in Project;点击添加刚生成的
counter.vhd文件到工程中,添加后如下图所示。至此,
HDL源文件创建完毕。
10.2.3 Modelsim功能仿真(续3)
4、编写测试文件Testbench。
先建立一个新的工作库如work。Testbench文件可以
在Modelsim中新建的VHDL(或verilog)文档编辑页面中
进行编辑,同样也可以在QuartusII中新建一个VHDL(或
Verilog)空白模板来编写。
除了直接编写测试文件,Modelsim还提供了很多
Testbench模板,可以直接调用以减少工作量,但前提是
设计的顶层HDL源文件已经编译到工作库当中 。
5、映射库到物理目录,编译源文件。
10.2.3 Modelsim功能仿真(续4)
6、新建一个仿真工程。
使用工程可以简化编译和仿真的操作。 在Modelsim的主窗口
中选择File/New/Project,设置工程名并向工程中添加文件,设置如
下二图。
设置完成后编译所有文件。
10.2.3 Modelsim功能仿真(续5)
7、启动仿真仿真器加载顶层文件。指定仿真的设计单元
为测试文件counter_tb
8、执行仿真,仿真结果如下图:
10.2.4 综合后仿真
•
综合后仿真的步骤和功能仿真的前面四步相同,从第五步开始,操
作如下:
1.在工作库work下建立一个工程project_zh,方法和功能仿真中建立
prtoject_gn相同;
2.工程中需要添加的文件有顶层设计文件counter,测试文件
counter_tb和由QuartusII编译生成的网表文件;
在QuartusII中编译生成的网表文件方法如下:
• 选中QuartusII主窗口中的Assignments/EDA tools settings在弹出来
的对话框如图10.28;
• 双击对话框中的Simulate弹出下一页对话框如图10.29所示。在tool
name中选Modelsim,输出语言为VHDL,Output directory中可以设
置文件的输出路径,此处指定为counter文件夹;
• 点击More Setting...,在弹出来的对话框如图10.30,选中 Generate
netlist functional simulate only,在set后的栏内选中on,点击OK保存;
• 在QuartusII中编译顶层设计文件ounter.vhd,编译完成后在counter
文件中能看到一个名为counter.vho的文件,此文件就是综合后仿真
所需要的网表文件;
10.2.4 综合后仿真(续1)
图10.28 打开EDA tools settings
图10.29 设置网表输出项目
10.2.4 综合后仿真(续1)
图10.30 设置网表输出项目
10.2.4 综合后仿真(续2)
3.启动仿真器,加载仿真文件counter_tb,进行仿真,观察
仿真波形。本次需要Altera仿真库的元件库cycloneII,如
果资料库中没有,则需要加载该库。
仿真结果如下:
10.2.5 时序仿真
时序仿真的步骤跟综合后仿真大致相同,所不同的是
添加的文件不完全一样。其具体步骤如下:
1、在工作库work下建立一个工程project_shx,方法和功能
仿真中建立prtoject_gn一样;
2、工程中需要添加的文件有顶层设计文件counter,测试文
件counter_tb、QuartusII中编译生成的网表文件和延时
文件_vhd.sdo;
_vhd.sdo文件的生成可以参考综合后仿真中网表
文件的生成方法,所不同的是在图10.30的设置中将
Generate netlist functional simulate only置为
“off”,点击OK保存设置,回到QuartusII主窗口后编译
文件,编译完成后,在counter文件夹下面能看到一个名
为counter_vhd.sdo文件,这个文件就是综合后仿真所需
要的延时文件。
10.2.5 时序仿真(续1)
3、启动仿真器,加载仿真文件counter_tb,进行仿真。加载文件如下
左图所示 。在左图对话框中Libraries中可以指定仿真所缺少的库文件,
在SDF中指定延时文件。在SDF栏中点击Add,在弹出来的Add SDF
Entry对话框中指定counter_chd.sdo文件,Apply to Region的“/” 右
边填入被测试的程序名称,本例中为DUT,整个波形仿真的设置完成,
如下右图所示。
加载仿真顶层文件
加载延时文件
10.2.5 时序仿真(续2)
时序仿真结果如下:
10.2.6 Altera仿真库的添加
• Modelsim仿真中会调用四种常用的仿真库:
(1)lpm,调用lpm元件的设计仿真时需要;
(2)altera_mf,调用MagaFunction的设计仿真时需要;
(3)primitive,调用altera的原语(primitive)设计仿真时
需要;
(4)元件库,例如cycloneII元件库,在仿真中必用的特定
型号的FPGA/CPLD的库。
• 前三种库是调用了相应的Altera设计模块进行设计时,仿
真所必备的库,元件库则是进行时序仿真时不可缺少的资
源库。
10.2.6 Altera仿真库的添加(续1)
• 以新建一个lpm库为例,Altera仿真库的添加步骤如下:
1、新建一个文件夹altera_lib,用来存放Altera编译后的库
文件,文件夹的位置最好是在
Modelsim的安装目录下;
2、打开Modelsim软件,
新建一个名为lpm的Library,
在Library Physical Name里
面输入lpm库存放的路
径,点击OK,如图所示;
10.2.6 Altera仿真库的添加(续2)
3、将lpm仿真原型文件编译到lpm库中。
点击Modelsim主窗口中
的Compile/Compile,在
Library里面选中lpm,然后
在QuartusII安装目录下的
…\quartus\eda\sim_lib文
件里选中仿真原型文件
220pack.vhd和
220model.vhd文件,点击
Compile,编译完成后点击
done.
10.2.6 Altera仿真库的添加(续3)
完成以上步骤一个lpm库就建立好了,进行仿真时根
据需要在仿真器的Library中点击Add可以直接添加,如下
图所示。如果使用Verilog语言,编译时只需要编译
200model.v文件即可。
10.2.6 Altera仿真库的添加(续4)
按照同样的方法可以添加其他3个库,编译的文件如下:
1、altera_mf库:
在VHDL中先编译altera_mf_components.vhd文件,后编译
altera_mf.vhd文件,而在Verilog中则只编译altera_mf.v文件;
2、Primitiv库:
在VHDL中先编译altera_primitive_components.vhd文件,后编译
altera_primitive.vhd文件,而在Verilog中只编译altera_primitive.v文
件;
3、元件库,如cycloneII库:
在VHDL中先编译cycloneii_atoms.vhd文件,后编译
cycloneii_components.vhd文件,而在Verilog中只编译
cycloneii_atoms.v文件;如果是其他系列的元件库则只要把对应的
cycloneii改成其他系列的名称即可,如cyclone库则文件改为
cyclone_atoms.vhd、cyclone_components.vhd或cyclone_atoms.v。
10.2.6 Altera仿真库的添加(续5)
4、 修改初始化文件Modelsim.ini
为了避免在仿真中反复添加库 ,需修改Modelsim.ini文件;
Modelsim.ini是一个只读文件,右键点Modelsim.ini文件选择“属性”,去掉
“只
读”,然后双击打开文件,可以看到文件的内容。
$MODEL_TECH/../指的是Mdelsim的安装目录,也可以直接写成新建库的保
存路径,如G:\modesim63\...。
在[Library]和 [vcom]加上类似的的语句如下:
[Library]
std = $MODEL_TECH/../std
ieee = $MODEL_TECH/../ieee
……
primitive = $MODEL_TECH/../altera_lib/primitive
cycloneii = $MODEL_TECH/../altera/vhdl/cycloneii
altera_mf = $MODEL_TECH/../altera/vhdl/altera_mf
lpm = $MODEL_TECH/../altera/vhdl/220model
……
[vcom]
保存文件,恢复为只读属性。
10.2.6 Altera仿真库的添加(续6)
至此,Altera
仿真库完全建立好
了。打开任一工程
或设计,在
Library窗口中都
可以看到新添加的
库文件,仿真时不
需要再添加这些库,
如右图所示。
本章小结
• 本章重点介绍了EDA设计中仿真验证的概念和
Modelsim仿真工具,
• 着重说明了Modelsim仿真工具的特点和使用方法,
包括三种仿真在该软件中的具体操作流程。
• 希望能够引导用户快速建立仿真概念、熟悉
Modelsim的仿真验证环境、掌握其操作流程。