设计实现和时序仿真

Download Report

Transcript 设计实现和时序仿真

EDA 原理及应用
何宾
2008.09
9
第九章
第 章
设计实现和时序仿真--主要内容
本章首先对建立用户约束文件的方法和设计分区进行了介绍。
随后,本章对ISE设计流程的实现过程进行了详细的介绍,
其中包括翻译、映射和布局布线的过程。在每个实现步骤中,
介绍了属性参数的设置以及查看时序报告的方法。
在此基础上,对布局布线后的设计进行了时序仿真,对设
计进行时序仿真分别使用了Modelsim仿真器和ISE仿真器完成。
● 设计实现和时序仿真-实现过程概述
第九章
在ISE中的实现(Implement)过程,是将综合输出的逻辑网表
翻译成所选器件的底层模块与硬件原语,将设计映射到器件结构
上,进行布局布线,达到在选定器件上实现设计的目的。
实现过程主要分为3个步骤:翻译(Translate)逻辑网表,映
射(Map)到器件单元与布局布线(Place & Route)。
●
设计实现和时序仿真-实现过程概述
第九章
翻译的主要作用是将综合输出的逻辑网表翻译为Xilinx特定器
件的底层结构和硬件原语。
映射的主要作用是将设计映射到具体型号的器件上。
布局布线的主要作用是调用Xilinx布局布线器,根据用户约
束和物理约束,对设计模块进行实际的布局,并根据设计连接,
对布局后的模块进行布线,产生PLD配置文件。
● 设计实现和时序仿真-建立约束文件
第九章
前几章仿真设计的秒表系统,包括5个输入:CLK,RESET,
LAP_LOAD,MODE和SRTSTP。如果已经通过原理图或HDL输
入创建了工程,并设计输入了源文件和EDIF网表文件。创建UCF
文件的步骤:
1、在Source Tab选项卡中,选择顶层文件stopwatch;
2、选择Project→New Source,选择Implementation Constraints
File;
3、输入 stopwatch.ucf 作为文件名,单击Next;
4、在列表中选择stopwatch文件作为UCF的约束对象文件
(UCF一般情况下是对顶层文件的约束),单击Next,最后单击
Finish。
第九章
●
设计实现和时序仿真-设置实现属性参数
实现属性决定了软件映射,布局布线及优化过程。这一部分
介绍如何在设计实现中设置其属性的过程,下面给出了设置属性
的步骤和方法:
1、在Source Tab选项卡中,选择顶层文件stopwatch;
2、在Processes选项卡中,右键单击Implement Design;
3、选择右键菜单栏中的Properties选项,Processes Properties对
话框提供了翻译,映射,布局布线,仿真和时序报告等属性,注
意设计实现中不同方面的属性类型;
4、如图9.1,在对话框的右下角,设置属性的显示级别为
Advanced,这个全局性的设置,可看到所有可用的属性;
第九章
●
设计实现和时序仿真-设置实现属性参数
图9.1 静态时序报告属性设置
第九章
●
设计实现和时序仿真-设置实现属性参数
5、单击Post-Map Static Timing Report Properties类型;
6、将报告类型改为Verbose Report,这个报告将会在映射完成之
后产生;
7、单击Post-Place & Route Static Timing Report Properties(布局
布线后静态时序报告)类型;
8、将报告类型改为Verbose Report,这个报告将会在布局布线完
成之后产生;
9、单击Place & Route Properties类型;
10、如图9.2,将Place & Route Effort Level (Overall)设置为High,
这个选项将提高在实现过程中全局布局布线的水平;
11、单击OK退出Process Properties对话框;
第九章
● 设计实现和时序仿真-设置实现属性参数
图9.2 布局布线属性设置
第九章
●设计实现和时序仿真-创建分区
在逻辑设置中一个实例创建一个分区是为了表明在实现过程
中这个实例可与重复利用。分区可以嵌套分级并在任何一个设计
的HDL模块中定义。在Verilog中分区设置基于模块实例,而在
VHDL中,分区设置是基于实体构造。一个由多个实例构成的模
块将有多个分区—一个分区对应一个实例。HDL设计的顶层有一
个默认分区。分区自动识别输入源的变化,包括HDL的改变,约
束改变和命令行的改变。分区的创建在综合工具中完成。下面给
出完成设计中的分区操作使能的步骤:
第九章
● 设计实现和时序仿真-创建分区
1、在Source Tab选项卡中,选择lcd_cntrl_inst 模块并右键单击;
2、在右键菜单中选项New Partition
3、同样对timer_state 执行上述操作
4、同样对timer_inst 执行上述操作
注意:在ISE9.1i中,如果分区设置在原理图模块中,那么不
允许进行反复映射。
第九章
●设计实现和时序仿真-创建分区
图9.3 创建新的分区
保存状态为继承关系,取决于顶层分区,顶层分区默认为
Routing,可以改为Routing,Placement,或Sysnthesis。可在
Partition Properties中进行设置。
第九章
●
设计实现和时序仿真-创建时序约束
用户约束文件(UCF)提供了一个无需回到设计输入工具就能
约束逻辑设计的构造方法。可使用约束编辑器和平面图编辑器的
图形化界面进行时序和管脚约束。启动约束编辑器,下面给出创
建时序约束的步骤:
1、在Source Tab选项卡中,选择Stopwatch;
2、在Processes选项卡中,展开User Constraints层级目录;
3、双击Create Timing Constraints,如图9.4,这时自动执行翻译步
骤,然后约束编辑器自动打开。
第九章
● 设计实现和时序仿真-创建时序约束
图9.4 创建时序约束
第九章
● 设计实现和时序仿真-设计翻译
在实现过程中,ISE管理文件的创建。ISE工具的属性对话框
对其进行设置,这将完全控制设计的实现(implement)过程。一
般情况下,先设置选项,然后双击Implement Design执行整个流程,
下面将给出设计实现过程中的每一步骤的详细过程。在翻译过程
中,NGDBuild程序完成以下功能:
1、将输入设计网表和写入的结果转换成单个综合NGD网表。这
个网表描述了设计逻辑,包括布局及时序约束;
2、完成时序规范及逻辑设计规则的检查校验;
3、从用户约束文件(UCF)中,将约束加入综合网表中;
● 设计实现和时序仿真-时序约束
第九章
当运行创建时序约束(Create Timing Constraints)时,这时自
动执行翻译步骤,然后打开约束编辑器。约束编辑器的作用主要
包括以下几个方面的内容:
1、编辑在原有UCF文件中的约束;
2、在设计加入新的约束;
约束编辑器中的输入文件包括:
1、NGD(Native Generic Database)文件
NGD文件为映射的输入文件,然后输出NCD (Native Circuit
Description)文件;
2、UCF (User Constraint File)文件
默认情况下,当NGD文件打开后,那么使用现存的UCF文件,
当然也可重新指定UCF文件;
● 设计实现和时序仿真-时序约束
图9.5 约束编辑器-全局分支
第九章
第九章
●设计实现和时序仿真-时序约束
如图9.5所示,约束编辑器产生一个有效的UCF文件,翻译步
骤(NGDBuild)通过使用UCF文件和其设计源网表文件,产生一
个新NGD文件。映射过程读取NGD文件。在该设计中,
stopwatch.ngd 和stopwatch.ucf文件自动输入到约束编辑器中。
在下面一部分中,与PERIOD,全局OFFSET IN,全局
OFFSET OUT和TIMEGRP OFFSET IN有关的约束条件将写入UCF
并在随后的实现过程中使用。如图9.6所示,时序约束的全局分支
自动显示设计中的所有时钟网络。
第九章
● 设计实现和时序仿真-时序约束
图9.6约束编辑器-全局分支
下面给出在约束编辑器中编辑约束的步骤:
1、双击与时钟网络CLK相关的周期单元,打开时钟周期对话框;
2、为定义时钟信号,选择Specify Time:可明确地定义时钟的周
期;
3、在Time框中输入7.0;
●设计实现和时序仿真-时序约束
第九章
4、在单元选择下拉菜单中选择ns;
5、在输入抖动部分, Time框中输入60;
6、在单元选择下拉菜单中选择ps;
7、单击OK,通过全局时钟约束设定来更新周期单元(默认为
50%运行周期);
8、单击选择时钟信号的Pad to Setup单元,并输入6ns:设置了输
入信号的Global OFFSET IN约束;
9、单击选择时钟信号的Clock to Pad 单元,如图9.7,输入38ns:
设置了输入信号的Global OFFSET OUT约束;
● 设计实现和时序仿真-时序约束
第九章
图9.7 时序约束
10、在Souces界面中,选择时序约束的端口(Port),左侧即为
当前的端口列表;
11、在Port Name栏中,选择SF_D<0>;
12、按住Shift键并选择SF_D<7>,即为选择了一组端口;
13、在Group Name框中,输入display_grp,并单击Create Group
按钮创建分组;
14、在Select Group下拉菜单中,选择你所创建的分组;
●
设计实现和时序仿真-时序约束
图9.8 管脚约束
第九章
● 设计实现和时序仿真-时序约束
第九章
图9.9 时序约束
15、单击Clock to Pad,Clock to Pad对话框被打开;
16、在Timing Requirement 中输入32;
17、在Relative to Clock Pad Net中选择CLK;
18、单击OK;
19、选择File→Save,那么所有的改动都将保存在当前目录下的
stopwatch.ucf文件中;
20、选择File→Close,关闭约束编辑器;
第九章
● 设计实现和时序仿真-管脚和面积约束
利用Floorplan编辑器能添加和编辑定义在NGD文件中的管脚
和面积约束。Floorplan 编辑器可以产生一个有效的UCF文件,翻
译步骤中使用UCF文件和设计网表文件来产生一个新的NGD文件。
Floorplan 编辑器主要是将各个模块进行类似于电路板的全局布局,
如Ram模块,数字时钟管理单元 (DCMs), 吉比特收发器 (GTs), 和
BUFGs等。
下面主要介绍输入输出模块(IOB)分配信号的过程。
Floorplan编辑器通过编辑UCF文件来添加新的布局布线约束。下
面给出添加新的布局布线约束的过程:
第九章
●
设计实现和时序仿真-管脚和面积约束
1、在Sources窗口中,选择stopwatch模块;
2、单击+展开Implement Design目录层级;
3、单击+展开Translate目录层级;
4、如图9.11所示,双击Assign Package Pins Post-Translate,那么
Floorplan编辑器自动启动;如果是EDIF工程,双击用户约束目
录下的Assign Package Pins;
5、如图9.12所示,选择工作区中的Package标签:视图显示器件
封装;
第九章
●
设计实现和时序仿真-管脚和面积约束
图9.11 编辑管脚位置
第九章
● 设计实现和时序仿真-管脚和面积约束
图9.12 Floorplan编辑器
6、选择Processes 面板中选择Design Object标签:窗口显示所有
设计对象;
7、在Design Object标签中, 在选择过滤器中将 ALL改为IOs, 并输
入“LCD_”;
第九章
● 设计实现和时序仿真-管脚和面积约束
图9.13 管脚约束
8、如图9.13所示,在LOC栏中,约束以下管脚:
LCD_E->AB4;
LCD_RS->Y14;
LCD_RW->W13;
第九章
●
设计实现和时序仿真-管脚和面积约束
9、在Design Object标签中,选择一下信号进行管脚关联:
LAP_LOAD → T16;
RESET → U15;
MODE → T14;
STRTSTOP → T15;
10、一旦管脚锁定,选择File→Save,那么所有修改将被保存在当
前目录下的stopwatch.ucf文件中;
11、选择File→Close,关闭Floorplan编辑器;
第九章
● 设计实现和时序仿真-设计映射
当设计实现策略已经定义完毕(属性及约束)时,可以开
始设计映射过程。下面给出实现映射过程的步骤:
1、在Sources窗口中,选择stopwatch模块;
2、在Processes选项卡中,右键单击Map并选择Run(或双击
Map);
3、展开Implement Design目录层级,可以实现完成情况;
第九章
● 设计实现和时序仿真-设计映射
设计映射到CLBs和IOBs,映射完成以下功能:
1、为设计中的所有基本逻辑单元分配CLB和IOB资源;
2、处理布局和时序约束,完成目标器件的优化过程,并在最
终的映射网表中执行设计规则的检查。每一步骤都将产生该处理
过程的报告,如下表所示:
●设计实现和时序仿真-设计映射
第九章
翻译(Translation)报告
包含在翻译过程中产生的警告和错误信息
映射(Map)报告
包含在目标器件的资源分配的信息,被删除
的逻辑和目标器件的资源利用情况
所有的NGDBUILD和MAP报告
对于更详细的映射报告,参考Development
System Reference Guide文挡。该文挡存在于ISE
的软件手册中,通过Help > Software Manuals,
或者http://www.xilinx.com/support /sw_manuals
/xilinx9/.
第九章
● 设计实现和时序仿真-设计映射
下面给出浏览报告的步骤:
1、如图9.14展开翻译(Translate)或映射(Map)目录;
图9.14 映射和翻译进度
第九章
● 设计实现和时序仿真-设计映射
2、双击翻译报告(Translate report)或映射报告(Map repor);
3、如图9.15,浏览报告并阅读Warnings, Errors和Information等
相关信息。设计概要(Design Summary)中也包含这些报告;
第九章
● 设计实现和时序仿真-设计映射
图9.15 对设计的实现报告
●
设计实现和时序仿真
- 使用时序分析评估块延迟
第九章
映射完成后,在映射后静态时序报告(Post-Map Static Timing
Report)中有逻辑水平的详细评价来评估设计中的逻辑路径。评
估验证了设计中模块延迟的合理性。由于设计还没有真正地布局
布线,所以报告中并没有给出实际的布线延迟信息。时序报告描
述了逻辑模块的延迟和估算的布局延迟。网络延迟给出了基于模
块之间的最优的距离。
●
设计实现和时序仿真
- 50/50 规则估计时序目标
第九章
在映射阶段之后,通过估算设计来预测设计的时延目标的可
行性。根据粗略估算准则(50/50 规则)规定在设计布局后在任
意一个路由中模块延迟占了总延迟的大概50%。
例如,模块延迟为10ns,那么布局布线后的延迟约束至少为
20ns。如果设计较为紧凑,那么映射后静态时序报告中会给出基
于模块延迟的和布局延迟的大概的延迟时序约束分析。这个分析
帮助计算时序约束是否满足条件,这个报告在映射之后,布局布
线之前生成。
设计实现和时序仿真
●
-时序约束选项中报告路径
第九章
使用映射后静态时序报告来计算布局布线过程中可能出现的
违反时序规则的情况。下面给出浏览映射后静态时序报告以及检
查PERIOD约束步骤:
1、在Processes选项卡中,单击+展开Map层级目录;
2、双击Generate Post-Map Static Timing;
3、如图9.16,打开映射后静态时序报告,双击Analyze Post-Map
Static Timing Report,那么分析过程自动启动并显示报告;
●
设计实现和时序仿真
-时序约束选项中报告路径
第九章
图9.16 处理映射后静态时序报告
4、如图9.17所示,选择timing constraint(时序约束)目录下的
TS_dcm_inst_CLKX_BUF;
设计实现和时序仿真
-时序约束选项中报告路径
第九章
●
图9.17 选择映射后时序约束
工作区域显示了所选择的约束报告,在这份报告的上方,会发
现选定的约束和经过映射工具后的获得的最小周期。默认情况下,
只有对三条路径时间约束显示,选择其中一个路由可以看到一个包
含的器件和路由的极限延迟。
●
设计实现和时序仿真
-时序约束选项中报告路径
第九章
需要注意的是,该报告显示逻辑的百分比和路由百分比
(例如逻辑的88.0 % , 12.0 %的路线)。未布局布线的层的延
迟估计根据最佳的模块布线给出。
5、报告浏览完毕,选择File → Close来关闭时序分析器。
第九章
● 设计实现和时序仿真-布局布线验证
设计进过映射后,就可以进行布局布线(PAR,Place & Route)
了。通过两种算法完成布局布线过程:
1、时序驱动布局布线:通过输入网表或是约束文件中的时序约
束来进行布局布线;
2、非时序驱动布局布线:布局布线过程中忽略所有时序约束;
一旦在前面的步骤中定义了时序约束,那么只会采用第一种算
法完成PAR过程;
第九章
●
设计实现和时序仿真-布局布线验证
下面给出PAR完成后,报告的浏览步骤:
1、在Processes选项卡中,双击Place & Route。布局布线执行完
毕后,同样可浏览其报告文件;
2、单击+展开Place & Route层级目录;
3、双击Place & Route Report;
如表9.2所示,同样可以浏览检查Pad Report和Asynchronous Delay
Report报告文件。
● 设计实现和时序仿真-布局布线验证
第九章
布局和布线(PAR)提供芯片的利用情况和延迟信息。使用这个报告验
报告
证设计成功的布线,并且满足时序约束条件。
Pad报告
包含芯片管脚的位置报告,使用这个报告验证所有
的管脚被约束到正确的位置上。
异步延迟报告
列出设计中所有的网络和所有网络负载的延迟
所有RAR报告
对于更详细的映射报告,参考Development System
Reference Guide文挡。该文挡存在于ISE的软件手
册中,通过Help >Online Documentation或者
http://www.xilinx.com/support /sw_manuals/xilinx9/.
● 设计实现和时序仿真-布局布线验证
如图9.18,给出了布局布线后的详细报告。
图9.18 布局布线后的报告
第九章
第九章
设计实现和时序仿真
●
-用FPGA Editor验证布局布线
使用FPGA Editor(FPGA)编辑器来显示和配置FPGAs,
FPGA编辑器可对NCD文件,NMC宏文件和PCF物理约束
(Physical Constraints)文件进行读写。FPGA编辑器的功能主要
有:
1、在执行自动布局布线之前,对关键性的元件进行布局布线;
2、可手动进行布局布线;
3、在目标器件上增加探针以监测信号状态;
4、可运行BitGen程序并将bitstream文件下载到目标器件中;
5、浏览或改变设置中连接到Integrated Logic Analyzer (ILA)核捕
获单元的网络;
●
设计实现和时序仿真
-用FPGA Editor验证布局布线
第九章
下面给出浏览实际的FPGA布局步骤:
1、单击+展开Place & Route层级目录,双击View/Edit Routed
Design (FPGA Editor),如图2.19所示,出现该界面;
图9.19 观察和编辑路径设计
●
设计实现和时序仿真
-用FPGA Editor验证布局布线
第九章
2、如图2.20所示,在FPGA编辑器中,将列表窗口选为All Nets:
将看到设计中的所有网络;
图9.20 FPGA编辑器列表窗口
● 设计实现和时序仿真
第九章
-用FPGA Editor验证布局布线
3、如图2.21所示,选择clk_262144K (时钟) 网络查看时钟网
络的输出;
图9.21 时钟网络
第九章
●
设计实现和时序仿真-评估布局后时序
设计的布局布线完成后,默认情况下会产生一个布局后时序
报告(Post Layout Timing Report)来验证设计是否满足时序要求。
报告评估逻辑块延迟及布线延迟。下面给出显示此报告的过程:
1、展开Generate Post-Place & Route Static Timing 层级目录;
2、双击Analyze Post-Place & Route Static Timing Report打开在
Timing Analyzer中的报告或者在Design Summary(设计概要)中
选择Timing Constraint超链接到Timing Analyzer;
第九章
● 设计实现和时序仿真-评估布局后时序
以下是stopwatch 设计的布局布线后静态时序报告(Post-Place
& Route Static Timing Report)的概要:
1、由于实际的布线延迟,最小周期值有所增加。Post-Map
timing 报告表明逻辑延迟占了最小周期80%―90%,而post-layout
报告表明逻辑延迟只占了30%―40%,为布线的层的相应值也改
变;
2、Post-layout报告的结果不需要遵循之前所描述的50/50规则,
因为最坏的路径主要包含了元器件的延迟;
第九章
● 设计实现和时序仿真-评估布局后时序
3、对于那些很难满足时序约束的情况,最坏的情况主要取决于
逻辑延迟,因为布线延迟只占了所有延迟的很小一部分,而且
要进一步减小这些布线延迟是不切实际的。一般来说,可以通
过减少设计中的逻辑层来减小模块延迟及改善设计性能;
4、在Sources 选项卡中选择Timing 标签,在Processes选项卡中选
择Timing Objects标签;
5、在时序分析器(Timing Analyzer)中
TS_DCM_INST_CLKFX_BUF 约束为高亮显示,选择Maximum
Data Path超链接,启动Floorplan Implemented窗口,相应的数据
路径则高亮显示;
第九章
●
设计实现和时序仿真-评估布局后时序
6、如图9.22所示,选择 View → Overlays → Toggle Simplified
和 Actual Views,这将使数据路径从简单视图显示为实际路径;
图9.22 Floorplan的实现-使用简化的路由的数据路径
第九章
●
设计实现和时序仿真-评估布局后时序
7、可选择图中不同网络的一部分路径来观察时间延迟及其他信
息;
8、选择File →Close,退出Floorplan Implemented视图;
9、再次选择File →Close,关闭Post-Place & Route Static Timing
report;
通过上面的过程,全面了解布局布线后静态时序。
第九章
● 设计实现和时序仿真-改变分区HDL
该部分将通过HDL的变更来更新设计。变更保存在
LCD_CNTRL_INST 模块中, 所以只有部分分区才需要重综合及重
实现。综合,映射和布局布线报告将显示哪些分区更新哪些分区
保留。
1、在Sources选项中,双击打开LCD_CNTRL_INST模块。
2、根据你的HDL语言作下列变更:
如果使用的是Verilog:在第377和564行,将代码sf_d_temp
=8’b00111010; // [colon]改为sf_d_temp = 8’b00101110; // [period]
如果使用的是VHDL:在第326和514行,将代码 sf_d_temp
<=“00111010”; -- [colon] 改为sf_d_temp <= “00101110”; -- [period]
第九章
●
设计实现和时序仿真-改变分区HDL
3、将变更保存到 LCD_CNTRL_INST, 选择File → Save
4、在Sources选项卡中, 选择顶层文件stopwatch,在Processes 选项
卡中,右键单击Place & Route.
5、在右键菜单选项中,选择Run,如图9.23,注意实现将比分区
快,因为实现工具只需要重实现LCD_CNTRL _INST模块,而其
他部分的实际可直接使用。
第九章
●
设计实现和时序仿真-改变分区HDL
图9.23 LCD_CNTRL_INST 分区过期
第九章
●
设计实现和时序仿真-改变分区HDL
6、在Design Summary中, 可浏览一下报告:

选择Synthesis Report, Partitions Report;

选择MAP Report, Guide Report;

选择Place and Route Report, 选择Partition Status;
需要注意,哪些是保留的哪些是重新使用的。
● 设计实现和时序仿真-时序仿真
第九章
时序仿真使用块和布线设计产生的布线延迟信息,从而能够
对最坏情况下的电路行为给出一个更精确的评估。因此,当设计
经布局布线后,需要进行时序仿真。
时序仿真(布局布线后仿真)是完整设计流程中一个非常重
要的步骤。时序仿真充分利用了布局布线后产生的详细定时和设
计布局信息。因此,时序仿真更能反映出器件真实的工作状态。
时序仿真还可以发现在只进行静态时序分析时没有发现问题。为
了对设计进行完整的验证,设计应该进行静态和动态的分析。本
章中,使用Modelsim仿真工具或Xilinx ISE仿真工具完成对设计时
序仿真。
●
设计实现和时序仿真-时序仿真
第九章
为了完成对设计的时序仿真,需要下面的文件:
1、HDL设计文件(VHDL或Verilog)
当完成了前一章的设计实现后,产生布局布线设计。本章中将使
用NetGen工具,从布局布线设计中产生仿真网表,用于描述该设
计的网表将被来完成时序仿真。
2、测试平台文件(VHDL或Verilog)
为了对设计进行仿真,需要一个测试平台。可以使用与行为仿真
同样的测试平台,如果工程中还没有测试平台的话,可以参考前
面章节中添加HDL测试平台的相关部分。
3、指定仿真器工具
● 设计实现和时序仿真-时序仿真
第九章
选择对设计的秒表进行仿真所需的仿真器,下面给出配置的步骤:
1)在Sources tab下,右击设备行(xc3s700A-4fg484),选择
Properties。在工程属性对话框,在仿真器值域处按向下箭头,从
而显示仿真器列表;
2)需要注意的是在ISE里的Project Navigater中,集成了
ModelSim仿真器和ISE仿真器。选择不同的仿真器(比如NC-Sim
或 VCS)将为Netgen设置正确的选项来创建一个仿真网表,但是
ISE中的Project Navigator不会直接打开仿真器。在仿真器域选择
正确版本和语言的ISE Simulator(VHDL/Verilog)或Modelsim;
●
设计实现和时序仿真
-使用ModelSim进行时序仿真
第九章
Xilinx ISE 提供了Mentor公司的ModelSim仿真工具的完整流程。
ISE提供创建工作目录的功能,在该目录下编译原文件、初始化仿
真和控制ModelSim仿真工具的属性。
需要注意的是,利用ISE仿真器进行仿真,跳转到该章的使
用Xilinx ISE 仿真器进行时序仿真部分即可。不管选择ModelSim
仿真工具还是ISE仿真工具,最后的仿真结果是一样的。
●
设计实现和时序仿真-设置属性
第九章
下面给出基于Modelsim仿真工具的仿真过程的属性设置步骤:
1、在Sources标签下,在sources for域中选择Post-Route
Simulation;
2、选择测试平台stopwatch_tb文件;
3、在Processes标签下,单击ModelSim Simulator处的+号,将其
分层显示;
●
设计实现和时序仿真-设置属性
第九章
需要注意的是,如果ModelSim仿真器处理选项不出现,可能
在工程属性对话框中ModelSim仿真器没被选上,或者ISE的项目
浏览器无法找到modelsim.exe.文件。如果安装了ModelSim但是
processes无法获取,那么工程浏览器参数可能没有被正确的设置。
设置ModelSim location,选择Edit>Preferences,单击ISE General处
的+号展开ISE参数。单击左边的Integrated Tools。在右边Model
Tech Simulator下,浏览modelsim.exe文件的定位。比如:
c:\modeltech_xe\win32xoem\modelsim.exe;
● 设计实现和时序仿真-设置属性
第九章
4、右击Simulate Post-Place & Route Model,选择Properties选择
Simulation Model Properties类选项,如图9.24所示。属性设置
NetGen在生成仿真网表时使用的选项。
图9.24 仿真属性设置窗口
●
设计实现和时序仿真-设置属性
第九章
确保将属性显示等级设置到Advanced。通过global setting可
以看到所有的可获得属性。以下使用缺省仿真模型参数。
 Display Properties类
该标签提供了对ModelSim仿真窗口的控制。在缺省状态时,
当ISE中的时序仿真开始时将打开三个窗口。分别是信号窗口,结
构窗口,波形窗口;
 Simulation Properties类
该参数如图9.25所示。这些属性设置一些ModelSim用来运行
时序仿真的选项。每个属性的详细描述,单击Help按钮。在
Simulation Properties栏,设置仿真运行时间Simulation Run Time属
性到2000ns。单击OK,关闭Process Properties对话框;
● 设计实现和时序仿真-设置属性
图9.25 Simulation Properties属性设置窗口
第九章
● 设计实现和时序仿真-设置属性
第九章
5、执行仿真
启动时序仿真,双击Simulate Post-Place and Route Model。
ISE将运行NetGen来创建时序仿真模型。ISE将调用ModelSim,创
建工作目录,编译源文件,加载设计,特定时间设置下运行仿真。
需要注意的是,本设计大部分运行在100Hz,需要占用很长
时间进行仿真。这就是为什么在很短的仿真时间内计数器看起来
好像没有工作一样。为了验证是否正确工作,以下只对DCM信号
进行监测。
第九章
● 设计实现和时序仿真-信号添加
仿真过程中需要对信号进行查看,必须首先添到这些信号
到Wave窗口。ISE自动添加所有顶层设计文件的端口到波形窗口。
附加信号在信号signal窗口中进行显示,其中信号(signal)窗口
基于在结构(structure)窗口中所选的结构。下面两种方法可以添
加信号到仿真工具的波形窗口:
1、从Signal/Object window中拖到Wave windows;
2、选择Signal/Object window中的信号,使其高亮显示,选择Add
> Wave >Selected Signals;
●
设计实现和时序仿真-信号添加
第九章
下面给出在设计层添加其他信号的步骤:
需要注意的是,如果现在使用的是ModelSim6.0版或者更高
版,所有窗口在缺省状态下都是未展开的。通过单击Undock图标,
可以展开所有窗口。
1、在Structure/Instance window窗口,单击uut旁边的+号进行层次
展开。图9.26显示了Structure/Instance窗口。Structure/Instance 窗
口针对Verilog或VHDL的图形和布局可能会不同;
2、单击Structure/Instance窗口,选择Edit > Find;
●设计实现和时序仿真-信号添加
第九章
3、在搜索框键入X_DCM,选择Entity/Module;
4、一旦ModelSim中存在X_DCM,选择X_DCM,单击
signal/objects窗口。DCM所有的信号名称都被列出;
5、选择signal/objects窗口,选择Edit > Find;
6、在搜索框键入CLKIN,选择Exact检查框;
7、单击CLKIN,并将CLKIN从signal/objects窗口拖到Wave窗口;
8、单击并将下列信号RST、CLKFX、CLK0 、LOCKED,从
signal/objects窗口拖到波形窗口;
● 设计实现和时序仿真-信号添加
第九章
注意:按住Ctrl键可以同时选择多个信号。代替使用拖拽方
法,可以选择Add to Wave > Selected Signals来完成。
图9.26 Structure/Instance 窗口
第九章
● 设计实现和时序仿真-信号分类
Modelsim可以在Wave窗口添加分类功能,从而更容易区分信
号。下面给出添加DCM信号分配器的步骤:
1、单击Wave窗口任意位置;
2、如果必要,展开窗口,将窗口最大化以便更好的观察波形;
3、右击Wave窗口,单击Insert > Divider;
4、在分配器名称栏输入DCM Signals;
5、单击并拖拽新创建的分配器到CLKIN信号的上方;
●设计实现和时序仿真-信号分类
第九章
需要注意的是,拉伸波形第一列,清晰地观察信号。通过选
择Tools > Options > Wave Preferences可以关闭信号名称项。在显
示信号路径栏输入2,单击OK;
6、图9.27给出了仿真波形的界面;
图9.27 波形显示窗口
●
设计实现和时序仿真-信号分类
第九章
注意,对于新添加的信号波形并没有显示出来。这是因为
Modelsim没有对这些信号数据进行记录。缺省状态下,在运行仿
真过程中,Modelsim只记录那些已添加到Wave窗口中的信号数据。
因此,当添加新信号到Wave窗口之后,需要重新运行仿真。
● 设计实现和时序仿真-仿真运行
第九章
下面给出,重启和重新运行仿真的步骤:
1、单击Restart Simulation图标;
2、打开重启对话框,单击Restart。根据ModelSim命令提示,输
入run 2000ns,按Enter键;
3、仿真持续运行2000ns。在Wave窗口将看到DCM波形;
● 设计实现和时序仿真-仿真运行
图9.27 波形显示窗口
第九章
第九章
● 设计实现和时序仿真-信号分析
分析DCM信号来验证它是否按所希望的情况工作。CLK0需
要设置为50Mhz,CLKFX应该设成26Mhz。在LOCKED信号变高
之后,应该对DCM信号进行分析。在LOCKED信号变高之前,
DCM信号输出是不正确的。
Modelsim可以添加光标,从而精确测量信号间的距离。下面
给出测量CLK0信号的步骤:
第九章
● 设计实现和时序仿真-信号分析
1、选择Add > Cursor两次,在波形观察窗口放置两个指针;
2、在LOCKED信号变高后,单击并拖拉第一个指针到CLK0信号
的上升沿;
3、单击并拖拉第二个指针到第一个指针的右侧;
4、单击Find Next Transition图标两次,移动指针到CLK0信号的下
一个上升沿;
5、观看波形底部,查看两指针间的距离。测量时每秒应该读
20000次,即50Mhz,test bench的输入频率,也是DCM CLK0的输
出;
6、按照同样的步骤测量CLKFX。测量时每秒应该读38462次,即
大约26Mhz;
第九章
● 设计实现和时序仿真-结果保存
ModelSim仿真器可以在Wave窗口保存信号列表。在添加新
信号后,或者仿真被重运行后保存信号列表。每次启动仿真,所
存的信号列表就会被加载。下面给出结果保存的步骤:
1、在Wave窗口,选择File > Save Format;
2、在Save Format对话框,对文件进行重命名,将wave.do重命名
为dcm_signal_tim.do;
3、单击Save;
重新运行仿真,在wave窗口选择File > Load重新加载文件;
● 设计实现和时序仿真
第九章
-使用ISE仿真器进行时序仿真
设置属性
通过以下的步骤完成基于ISE仿真工具的仿真过程的属性
设置:
1、在Sources标签下,选择Post-Route Simulation;
2、选择test bench文件(stopwatch_tb);
3、在Processes下,单击Xilinx ISE仿真器处的+,将其分层展
开;
4、右击Simulate Post-Place & Route Model,并选择Properties;
5、选择Simulation Model Properties类。这些参数设置NetGen
在生成仿真网表时使用的选项;
● 设计实现和时序仿真-设置属性
第九章
6、确保设置显示级别到Advanced。默认使用缺省仿真模型参数;
7、选择ISE Simulator Properties类。参数如图9.28所示。这些参数
设置仿真器运行时序仿真的相关选项;
图9.28 ISE仿真工具参数设置
●设计实现和时序仿真-设置属性
第九章
8、在Simulation Properties下,设置Simulation Run Time到
2000ns;
9、单击OK,关闭Process Properties对话框;
●
设计实现和时序仿真-运行仿真
第九章
启动时序仿真,双击Processes下的Simulate Post-Place and
Route Model。当仿真过程运行时,Project Navigator自动运行
NetGen,利用布局布线设计生成一个时序仿真模型。ISE仿真器
编译源文件,加载设计,运行仿真。
需要注意的是,本设计大部分运行在100Hz,需要占用很长
时间来进行仿真。因此,在进行短时间的仿真时计数器看起来好
像没有工作。检测DCM信号来验证是否正确工作。
● 设计实现和时序仿真-信号添加
第九章
在仿真期间观察信号,必须将它们添加到波形窗口。ISE自动
添加所有的顶层端口到waveform窗口中。Sim Hierarchy窗口将显
示所有的外部(顶层l端口)和内部信号。下面的过程解释了如何
在设计层添加额外的信号。下面给出添加DCM信号到波形窗口的
步骤:
1、在Sim Hierarchy窗口,单击uut附近的+号展开层次;
2、如图9.29,在Sim Hierarchy窗口中右键单击,选择Find。在
Find Signal对话框中键入locked,单击OK。选择
DCM_SP_INST/LOCKED信号,单击OK;
● 设计实现和时序仿真-信号添加
图9.29 VHDL流程的Sim分层结构
第九章
●
设计实现和时序仿真-信号添加
第九章
Sim Hierarchy窗口中原理图或VHDL流程中信号名和布局可
能不同;
3、从Sim Hierarchy窗口单击并拖拽LOCKED到waveform窗口;
4、从SIM Hierarchy窗口单击并拖拽下面的X_DCM_SP(RST、
CLKFX、CLK0、CLKIN)信号到波形窗口(注意:按住Ctrl键
可以选择多个信号)。信号名或者完全层次显示或者以缩略名
显示(省略了层次信息)。下面给出改变信号名的显示步骤:
● 设计实现和时序仿真-信号添加
图9.30 仿真结果波形
第九章
●
设计实现和时序仿真-信号添加
第九章
1、右击waveform窗口所需的信号,按照需要选择长名或者缩略
名。如图9.30所示,拉伸波形第一列以便清楚地查看信号。
注意对于新添加的信号波形没有显示出来。这是因为ISE仿真器
没有记录这些信号的数据。当仿真正在运行时,ISE仿真器只记录
那些已被添加到waveform窗口中的信号的数据。因此,当新信号
被添加到waveform窗口,需要重新运行仿真;
2、重启和重新运行仿真单击Restart Simulation图标;
3、根据Sim Console命令提示,输入run 2000ns,输入Enter键。
仿真将运行2000ns,Simulation窗口将显示出DCM波形;
● 设计实现和时序仿真-信号分析
第九章
DCM信号可以经过分析,验证其是否按所希望的状态工作。
CLK0需要50Mhz,CLKFX应该为26Mhz。LOCKED信号变高之
后,可以对DCM信号进行分析。
ISE仿真器可以通过添加指针来仔细测量两信号间的距离。
下面给出测量CLK0的步骤:
● 设计实现和时序仿真-信号分析
第九章
1、右击wave窗口,选择Add Measure。光标变成一个向上箭头形
式;
2、在LOCKED信号变高后,单击CLK0的上升沿。波形上将出现
两个垂直标记。如图3.31,单击并拖拽第二个标记到CLK0信号的
下一个上升沿;
需要注意,放大显示比例,将标志精确的放在时钟边沿。查看两
个标志的时间值,确定两个时钟沿间的距离;
3、测量读数单位为20ns。转换成频率为50Mhz,是test bench的输
入频率,同时也是DCM CLK0的输出;图9.31 添加时间标记
4、按照同样的步骤测量CLKFX。测量读数单位38.5ns,相当于
26Mhz。时序仿真完成便可以准备对器件进行编程了;
第九章
● 设计实现和时序仿真-信号分析
图9.31 添加时间标记
第9章
习题
1、说明ISE的实现过程中所包含的步骤,每个步骤的含义。
2、说明分区的含义和应用。
3、说明设计约束文件的内容和建立方法。
4、说明时序仿真的条件、含义和作用。
5、说明基于ISE仿真器的时序仿真步骤。
6、说明基于Modelsim仿真器的时序仿真步骤。
7、在计算机上实现该设计的实现过程,并完成时序仿真。