EDA 原理及应用 何宾 2008.09
第九章 第9章 设计实现和时序仿真--主要内容 本章首先对建立用户约束文件的方法和设计分区进行了介绍。 随后,本章对ISE设计流程的实现过程进行了详细的介绍,其中包括翻译、映射和布局布线的过程。在每个实现步骤中,介绍了属性参数的设置以及查看时序报告的方法。 在此基础上,对布局布线后的设计进行了时序仿真,对设计进行时序仿真分别使用了Modelsim仿真器和ISE仿真器完成。
设计实现和时序仿真-实现过程概述 第九章 ● 在ISE中的实现(Implement)过程,是将综合输出的逻辑网表翻译成所选器件的底层模块与硬件原语,将设计映射到器件结构上,进行布局布线,达到在选定器件上实现设计的目的。 实现过程主要分为3个步骤:翻译(Translate)逻辑网表,映射(Map)到器件单元与布局布线(Place & Route)。
设计实现和时序仿真-实现过程概述 第九章 翻译的主要作用是将综合输出的逻辑网表翻译为Xilinx特定器件的底层结构和硬件原语。 ● 翻译的主要作用是将综合输出的逻辑网表翻译为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类型; ● 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 模块并右键单击; ● 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所示,时序约束的全局分支自动显示设计中的所有时钟网络。
设计实现和时序仿真-时序约束 第九章 下面给出在约束编辑器中编辑约束的步骤: 1、双击与时钟网络CLK相关的周期单元,打开时钟周期对话框; ● 图9.6约束编辑器-全局分支 下面给出在约束编辑器中编辑约束的步骤: 1、双击与时钟网络CLK相关的周期单元,打开时钟周期对话框; 2、为定义时钟信号,选择Specify Time:可明确地定义时钟的周期; 3、在Time框中输入7.0;
设计实现和时序仿真-时序约束 第九章 4、在单元选择下拉菜单中选择ns; 5、在输入抖动部分, Time框中输入60; ● 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约束;
设计实现和时序仿真-时序约束 第九章 10、在Souces界面中,选择时序约束的端口(Port),左侧即为当前的端口列表; ● 图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 编辑管脚位置
设计实现和时序仿真-管脚和面积约束 第九章 6、选择Processes 面板中选择Design Object标签:窗口显示所有设计对象; ● 图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标签中,选择一下信号进行管脚关联: ● 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,映射完成以下功能: ● 设计映射到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); ● 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完成后,报告的浏览步骤: ● 下面给出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 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窗口,相应的数据路径则高亮显示;
图9.22 Floorplan的实现-使用简化的路由的数据路径 第九章 设计实现和时序仿真-评估布局后时序 ● 6、如图9.22所示,选择 View → Overlays → Toggle Simplified 和 Actual Views,这将使数据路径从简单视图显示为实际路径; 图9.22 Floorplan的实现-使用简化的路由的数据路径
设计实现和时序仿真-评估布局后时序 第九章 7、可选择图中不同网络的一部分路径来观察时间延迟及其他信息; ● 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中, 可浏览一下报告: ● 6、在Design Summary中, 可浏览一下报告: 选择Synthesis Report, Partitions Report; 选择MAP Report, Guide Report; 选择Place and Route Report, 选择Partition Status; 需要注意,哪些是保留的哪些是重新使用的。
设计实现和时序仿真-时序仿真 第九章 ● 时序仿真使用块和布线设计产生的布线延迟信息,从而能够对最坏情况下的电路行为给出一个更精确的评估。因此,当设计经布局布线后,需要进行时序仿真。 时序仿真(布局布线后仿真)是完整设计流程中一个非常重要的步骤。时序仿真充分利用了布局布线后产生的详细定时和设计布局信息。因此,时序仿真更能反映出器件真实的工作状态。时序仿真还可以发现在只进行静态时序分析时没有发现问题。为了对设计进行完整的验证,设计应该进行静态和动态的分析。本章中,使用Modelsim仿真工具或Xilinx ISE仿真工具完成对设计时序仿真。
设计实现和时序仿真-时序仿真 第九章 为了完成对设计的时序仿真,需要下面的文件: 1、HDL设计文件(VHDL或Verilog) ● 为了完成对设计的时序仿真,需要下面的文件: 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进行时序仿真 第九章 设计实现和时序仿真 -使用ModelSim进行时序仿真 ● Xilinx ISE 提供了Mentor公司的ModelSim仿真工具的完整流程。ISE提供创建工作目录的功能,在该目录下编译原文件、初始化仿真和控制ModelSim仿真工具的属性。 需要注意的是,利用ISE仿真器进行仿真,跳转到该章的使用Xilinx ISE 仿真器进行时序仿真部分即可。不管选择ModelSim仿真工具还是ISE仿真工具,最后的仿真结果是一样的。
设计实现和时序仿真-设置属性 第九章 下面给出基于Modelsim仿真工具的仿真过程的属性设置步骤: ● 下面给出基于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、执行仿真 ● 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; ● 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图标; ● 下面给出,重启和重新运行仿真的步骤: 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两次,在波形观察窗口放置两个指针; ● 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。默认使用缺省仿真模型参数; ● 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。光标变成一个向上箭头形式; ● 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、说明设计约束文件的内容和建立方法。 第9章 习 题 1、说明ISE的实现过程中所包含的步骤,每个步骤的含义。 2、说明分区的含义和应用。 3、说明设计约束文件的内容和建立方法。 4、说明时序仿真的条件、含义和作用。 5、说明基于ISE仿真器的时序仿真步骤。 6、说明基于Modelsim仿真器的时序仿真步骤。 7、在计算机上实现该设计的实现过程,并完成时序仿真。