1.03k likes | 1.25k Views
设计实现和时序仿真. 何宾 2011.09. 设计实现和时序仿真 - 本章概要. 本章首先对建立用户约束文件的方法和设计分区进行 了介绍。 随后,本章对 ISE 设计流程的实现过程进行了详细的 介绍,其中包括翻译、映射和布局布线的过程。在每个 实现步骤中,介绍了属性参数的设置以及查看时序报告 的方法。 在此基础上,对布局布线后的设计进行了时序仿真, 对设计进行时序仿真分别使用了 Modelsim 仿真器和 ISE 仿真器完成。. 设计实现和时序仿真 - 实现过程概述. 在 ISE 中的实现( Implement )过程,是将综合输出的逻
E N D
设计实现和时序仿真 何宾 2011.09
设计实现和时序仿真-本章概要 • 本章首先对建立用户约束文件的方法和设计分区进行 • 了介绍。 • 随后,本章对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。
设计实现和时序仿真-设计实现过程 • 如果从这章开始设计,需要下载Xilinx提供的前面综 • 合后的设计文件,在ISE中创建一个功能,并且把设计 • 文件添加到工程中。 • 1、解压缩文件wtut_edif.zip到空的工作目录下; • 2、在Zip文件中包含表9.1所给出的文件
设计实现和时序仿真-设计实现过程 • 3、打开ISE • 在ISim仿真器界面的工作台窗口下的ISim>提示 • 符后面输入ise • 在PC机上,选择开始->所有程序->Xilinx ISE Design • Suite 11->ISE->Project Navigator。
设计实现和时序仿真-设计实现过程 • 4、创建一个新的工程,然后添加EDIF网表: • 1)选择File->New Project • 2)输入EDIF_Flow作为工程名 • 3)选择EDIF作为top_level SourceType(顶层源文件类型) • 4)点击“Next”按钮 • 5)选择stopwatch.edf作为输入设计文件 • 6)选择stopwatch.ucf作为约束文件 • 7)点击“Next”按钮
设计实现和时序仿真-设计实现过程 • 8)选择下面: • --Device Family : Spartan3a • --Device : xc3s700a • --Speed Grade : -4 • --package : fg484 • 9)其它属性设置为默认值 • 10)点击“Next”按钮 • 11)点击“Finish”按钮 • 12)复制timer_preset.ngc到EDIF_Flow目录中 • 在Source标签下,选择顶层模块,stopwatch.edf或者 • stopwatch.edn,这使设计可以被实现(implement)。
设计实现和时序仿真-设置实现属性参数 • 实现属性决定了软件映射,布局布线及优化过程。这 • 一部分介绍如何在设计实现中设置其属性的过程,下面给 • 出了设置属性的步骤和方法: • 1、在Source Tab选项卡中,选择顶层文件stopwatch; • 2、在Processes选项卡中,右键单击Implement • Design; • 3、选择右键菜单栏中的Properties选项,Processes • Properties对话框提供了Translate(翻译),Map(映 • 射),Place and Route(布局布线),Timing Report(时 • 序报告)等属性,注意设计实现中不同方面的属性类型;
设计实现和时序仿真-设置实现属性参数 • 4、如图9.1,在对话框的右下角,设置属性的显示 • 级别为Advanced,这个全局性的设置,可看到所有可 • 用的属性; • 5、点击Place & Route Properies分类。 • 6、修改Place & Route Effort Level(Overall)为High, • 该属性提高布局布线时的努力级别。
设计实现和时序仿真-创建时序约束 • 用户约束文件(UCF)提供了一个无需回到设计输入工 • 具就能约束逻辑设计的构造方法。可使用约束编辑器和平 • 面图编辑器的图形化界面进行时序和管脚约束。启动约束 • 编辑器,下面给出创建时序约束的步骤: • 1、在Source Tab选项卡中,选择Stopwatch; • 2、在Processes选项卡中,展开User Constraints层级目 • 录; • 3、双击Create Timing Constraints,如图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.3所示,约束编辑器产生一个有效的UCF文件, • 翻译步骤(NGDBuild)通过使用UCF文件和其设计源网 • 表文件,产生一个新NGD文件。映射过程读取NGD文 • 件。 • 在该设计中,stopwatch.ngd 和stopwatch.ucf文件自动输 • 入到约束编辑器中。 • 在下面一部分中,与PERIOD,全局OFFSET IN,全局 • OFFSET OUT和TIMEGRP OFFSET IN有关的约束条件将 • 写入UCF并在随后的实现过程中使用。如图9.6所示,时序 • 约束的全局分支自动显示设计中的所有时钟网络。
设计实现和时序仿真-时序约束 • 下面给出在约束编辑器中编辑约束的步骤: • 1、双击与时钟网络CLK相关的周期单元,打开时钟周 • 期对话框; • 2、为定义时钟信号,选择Specify Time:可明确地定义 • 时钟的周期; • 3、在Time框中输入7.0;
图9.5 INPUT JITTER约束值 设计实现和时序仿真-时序约束 • 4、在单元选择下拉菜单中选择ns; • 5、在输入抖动部分, Time框中输入60; • 6、在单元选择下拉菜单中选择ps; • 7、单击OK,通过全局时钟约束设定来更新周期单元(默认为50%运行周期); • 8、在Constraint Type tree(约束类型树视图)中的 • Timing Constraints(时序约束),选择Input分支条件; • 9、双击Global OFFSET IN约束表中的“clk”信号,来打 • 开创建建立时间(OFFSET IN)向导;
设计实现和时序仿真-时序约束 • 10、如图9.6所示,保持第一页的默认值,然后点击“Next”
图9.7 OFFSET IN约束 设计实现和时序仿真-时序约束 • 11、如图9.7所示,在“External setup time”(外部建立时间)(offset in)域中,输入6ns;
设计实现和时序仿真-时序约束 • 12、在“Data Valid duration”(数据有效周期)域中,输 • 入6ns;这为CLK信号创建一个Global OFFSET IN约束。 • 13、点击“Finish”按钮 . • 14、在Constraint Type tree(约束类型树视图)中 • 的Timing Constraints(时序约束),选择Output分支条 • 件; • 15、双击Global OFFSET OUT约束表中的“clk”信 • 号,来打开创建建立时间(OFFSET OUT)向导;
设计实现和时序仿真-时序约束 • 16、如图9.8所示,在“External clock to pad”(外部时钟 • 到引脚)(offset out)域中,输入38 ns;这为CLK信号创建一 • 个Global OFFSET OUT约束。 • 17、点击“OK”按钮
设计实现和时序仿真-时序约束 • 18、如图9.9所示,在没有约束的输出端口表中,使 • 用Shift-Click多重选择sf_d<0>到sf_d<7>信号 。
设计实现和时序仿真-时序约束 • 19、右击,选择Create Time Group(创建时间 • 组); • 20、在Create Time Group(创建时间组)对话框中, • 输入display_grp,并点击“OK”按钮; • 21、当提示if you would like to create an offset • constraint(是否想创建offset约束),点击“OK”按钮。
设计实现和时序仿真-时序约束 • 22、如图9.10 • 所示,在 • “External clock to • pad(offset out)”域 • 中输入32ns;
设计实现和时序仿真-时序约束 • 23、点击“OK”按钮; • 24、在约束编辑器中选择File->Save • 25、选择File->Close,关闭约束编辑器。
设计实现和时序仿真-使用PlanAhead分配I/O位置 • 利用PlanAhead能添加和编辑定义在NGD文件中的管 • 脚位置和面积组约束。PlanAhead写约束到工程用户约束 • 文件(User Constraint File,UCF)文件。当工程中有多个 • UCF文件的情况下,将问设计人员新的约束写到哪个约 • 束文件中。如果修改了已经存在的约束,它们将写回到 • 最初创建的约束文件中。PlanAhead也提供了设备指定的 • 设计规则检查(Design Rule Check,DRC),来帮助进行引 • 脚规划和布局。
设计实现和时序仿真-使用PlanAhead分配I/O位置 • 翻译步骤中使用UCF文件和设计网表文件来产生 • 一个新的NGD文件。下面主要介绍输入输出模块 • (IOB)分配信号的过程: • 1、在Sources窗口中,选择stopwatch模块; • 2、单击+展开User Constraints目录层级; • 3、如图9.11所示,双击I/O Pin Planning • (PlanAhead)-Post-Synthesis,将完成用户约束
设计实现和时序仿真-使用PlanAhead分配I/O位置 • I/O引脚规划可以在综合前和综合后实现。推荐使用 • 综合后运行I/O引脚规划,这是因为设计包含I/O所需要 • 的信息和时钟相关的设计规则检查,然后能通过 • PlanAhead执行。 • 这个过程启动PlanAhead。如果设计没有完成综合, • ISE将自动运行综合过程,然后再打开PlanAhead。
设计实现和时序仿真-使用PlanAhead分配I/O位置 • 如图9.12所示,在Welcome to PlanAhead(欢迎 • PlanAhead)屏幕中提供了详细的文档,辅导和其它培训 • 材料的链接,帮助设计人员更好的了解这个工具。更详 • 细的信息可以参考先关的网站。 • 4、点击图9.12界面上的“Close”按钮,进入到 • PlanAhead处理过程中。
图9.12 PlanAhead欢迎界面 设计实现和时序仿真-使用PlanAhead分配I/O位置
设计实现和时序仿真-使用PlanAhead分配I/O位置 • 5、如图9.13所示,在I/O端口标签中,在所有端 • 口下展开Scalar Ports。将为lcd_e,lcd_cs,lcd_rw信号 • 创建引脚分配。
图9.13 PlanAhead界面 设计实现和时序仿真-使用PlanAhead分配I/O位置
设计实现和时序仿真-使用PlanAhead分配I/O位置 • 6、如图9.14所示,定 • 位lcd_e输出信号,然后 • 点击和拖拽该信号到封 • 装查看界面(Package • view),然后将其放到 • AB4引脚位置。
设计实现和时序仿真-使用PlanAhead分配I/O位置 • 7、重复前面的过程,放置其它的输出信号: • LCD_RS: Y14 • LCD_RW: W13 • 如图9.15所示,也可以在I/O Port Properities标签中的\ • Site域中输入引脚的位置。
设计实现和时序仿真-使用PlanAhead分配I/O位置 • 8、使用拖拽方式,或者输入I/O引脚的方式,将 • 下面的信号放到合适的I/O引脚位置: • LAP_LOAD → T16; • RESET → U15; • MODE → T14; • STRTSTOP → T15; • 9、一旦管脚锁定,选择File→Save Project,那么 • 所有修改将被保存在当前目录下的stopwatch.ucf文件 • 中; • 10、选择File→Exit,关闭PlanAhead工具;
设计实现和时序仿真-设计映射及时序分析 • 当设计实现策略已经定义完毕(属性及约束) • 时,可以开始设计映射过程。下面给出实现映射过 • 程的步骤: • 1、在Sources窗口中,选择stopwatch模块; • 2、在Processes选项卡中,右键单击Map并选择 • Run(或双击Map);
设计实现和时序仿真-设计映射及时序分析 • 设计映射到CLBs和IOBs,映射完成以下功能: • 1、为设计中的所有基本逻辑单元分配CLB和IOB资 • 源; • 2、处理布局和时序约束,完成目标器件的优化过程, • 并在最终的映射网表中执行设计规则的检查。每一步骤都 • 将产生该处理过程的报告,如下表所示:
设计实现和时序仿真-设计映射及时序分析 • 下面给出浏览报告的步骤: • 1、如图9.16,打开Design Summary/Report窗口;
设计实现和时序仿真-设计映射及时序分析 • 2、在Design Summary(设计总结)中的Detailed • Reports(详细报告)部分,选择Translation Report(翻译 • 报告)或Map report(映射报告); • 3、查看报告 • 4、设计总结将提供设计结果的总结,并且列出了实 • 现过程中所有的消息(错误,警告、信息)。
设计实现和时序仿真-使用时序分析评估块延迟设计实现和时序仿真-使用时序分析评估块延迟 • 映射完成后,在映射后静态时序报告(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,那么分析过程自动启动 • 并显示报告;
设计实现和时序仿真-时序约束选项中报告路径设计实现和时序仿真-时序约束选项中报告路径