3.7 设计实现和分析 |
|
本节将对实现过程进行详细说明,并对实现过程不同阶段的结果进行分析。
Vivado集成设计环境的实现处理过程,包括对设计的逻辑和物理转换。表3.3给出了ISE设计工具和Vivado设计工具在设计实现过程中的比较。
表3.3 ISE和Vivado实现过程比较
本节将介绍设计实现选项参数,以便在后面对设计实现选项进行修改时,能够理解这些参数的含义。如图3.37所示,在“Flow Navigator”窗口下,找到并展开“Implementation”选项。在展开项中,找到并单击“Implementation Settings”选项。
弹出如图3.38所示的工程设置对话框。在该对话框的左侧窗口中,单击“Implementation”图标按钮,可以看到右侧窗口出现实现过程选项设置界面。
图3.37执行实现处理过程
图3.38 工程设置对话框
从图3.38中可以看出,Vivado集成设计套件包含预定义的策略集。设计者也可以创建自己的策略。
根据策略的目的,将其分解为不同的类,类的名字作为策略的前缀。表3.4给出了类及其用途,表3.5给出了实现策略的种类和功能描述。
表3.4类及其用途
表3.5 实现策略的种类和功能描述
包含SLL或者SLR的策略,只用于SSI器件。
“Opt Design”选项用于控制逻辑优化过程,图3.39给出了该选项参数设置界面。执行该过程为布局提供最优的网表,包括对来自综合后RTL、IP模块的网表进行更进一步的逻辑优化,即:
图3.39 “Opt Design”选项设置界面
(1)对输入的网表执行逻辑裁剪。
(2)除去不必要的静态逻辑。
(3)LUT等式重映射。
在工程模式流程中,自动使能该过程;在非工程模式批处理流程中是可选的(但是强烈推荐)。例如,需要裁减掉MIGIP中未使用的块单元。
“power_opt_design”选项控制功耗优化过程。图3.40给出了“power_opt_design”选项设置界面。该过程包含细粒度时钟门控解决方法,它能降低大约30%的功耗。如图3.41所示,在整个设计中,自动执行智能时钟门控优化,而对已经存在的逻辑或者时钟不产生变化。此外,在设计的所有部分,算法执行分析。
图3.40 “power_opt_design”选项设置界面
在这个过程中,自动降低功耗:
(1)关闭设计中没有使用的部分。
(2)不要求深入的系统级知识。
在全局和对象级上,Vivado集成开发环境提供了优化控制,包括:
(1)用于优化设计的全局命令:power_opt_design。
(2)用于局部一级的控制的SDC命令:set_power_opt。
① 实例级:包含/排除实例,用于功耗优化过程。
② 时钟域:优化由指定时钟驱动的实例。
③ 单元类型级:块RAM、寄存器和SRL等。
图3.41时钟门控方法
“Place Design”选项用于控制布局过程。图3.42给出了“Place Design”选项设置界面。在布线过程中,可以使用一个输入的XDEF作为起始点。该过程是一个完整的布局阶段,执行:
图3.42 “Place Design”选项设置界面
(1)预布局DRC。
① 检查不能布线的连接,有效的约束,是否过度使用资源。
② 执行I/O和时钟布局。
(2)宏和原语布局。
① 采用时序驱动和线长度驱动策略。
② 拥塞感知。
(3)详细的布局。
① 改进小形状的位置,如触发器、LUT。
② 封装到切片。
(4)提交后优化。
“Post-Place Phys Opt Design”选项用于控制物理综合过程,该过程在“Place Design”和“Route Design”过程之间。图3.43给出了“Post-Place Phys Opt Design”选项设置界面。通过选择/不选择“is_enabled”前面的复选框,选择执行/不执行该步骤。该过程基于时序驱动,在该过程中,复制和放置带有负松弛时间的高扇出驱动器。
图3.43 “Post-Place Phys Opt Design”选项设置界面
如果改善时序,才复制它。
松弛必须在一个严格的范围内,大约是WNS的10%。
“Route Design”选项用于控制布线过程。图3.44给出了“Route Design”选项设置界面。该过程是一个完整的布线阶段,执行:
图3.44 “Route Design”选项设置界面
(1)特殊网络和时钟的布线。
(2)时序驱动的布线。
① 优先考虑关键的建立/保持路径。
② 交换LUT输入引脚改善关键路径。
③ 修复合理的保持时间冲突。
默认地,在执行该过程时,布线器启始于布局后的设计,并且尝试布线所有的网络。而对于非工程模式批处理的可重入模式下,布线器可以布线/不布线,以及锁定/不锁定指定的网络。
在该过程中,可以使用“report_route_status”命令生成布线状态的报告。在报告中,给出检查单个网络的布线状态,即:
(1)对于完全布线的网络,列出布线资源。
(2)给出失败的布线。
本节将执行设计实现过程,并且分析实现后的结果。
实现设计的步骤如下所示。
第一步 :在源窗口中,选择“top.vhd/top.v”文件(读者根据自己设计所使用的HDL语言选择)。
第二步 :在Vivado左侧的流程处理窗口下,找到并展开“Implementation”选项。
第三步 :在展开项里,用鼠标左键单击“Run Implementation”选项,Vivado开始执行设计实现过程。或者在Tcl命令行中,输入“launch_runs impl_1”脚本命令,运行实现。
如果前面已经运行过实现,在重新运行实现前,必须执行“reset_run impl_l”脚本命令,然后再执行“launch_runs impl_1”脚本命令。
查看布局布线结果的步骤如下所示。
第一步 :当实现过程结束时,如图3.45所示,弹出“Implementation Completed”(比特流生成完成)对话框。该对话框内提供了3个选项:
(1)Open Implemented Design(打开实现后的设计)。
(2)View Reports(查看报告)。
(3)Generate Bitstream(生成比特流)。
在该设计中,选择“Open Implemented Design”选项。
图3.45 “Implementation Completed”对话框
第二步 :单击【OK】按钮,如果弹出“Critical Messages”(危险消息)对话框,在该设计中不用考虑。
第三步 :如图3.46所示,在Vivado右上角的Device标签窗口下出现器件的结构图。
图3.46 Artix FPGA器件内部结构图
第四步 :单击图3.46界面左侧一列工具栏内的 (放大视图)按钮,放大该器件视图。并调整视图在窗口的位置。如图3.47所示,在器件右下角视图上,看到标有橙色颜色方块的引脚,表示在该设计中已经使用这些IO块。
图3.47 Artix FPGA器件所用IO引脚
第五步 :单击图3.47所示界面左侧一列工具栏内的 (显示布线资源)按钮和 (缩小视图)按钮,并调整视图在窗口的位置。
第六步 :如图3.48所示,显示了该设计的布线。其中绿色的线表示设计中使用的互连线资原。
图3.48该设计的布线关系
第七步 :放大视图,并调整其在窗口的位置。如图3.49所示,给出了该设计所使用的逻辑设计资源,可以看到其内部的结构,包括查找表LUT、多路复用器MUX、快速进位链、触发器资源。
思考题3.6: 结合作者《Xilinx FPGA设计权威指南》一书中,对Xilinx 7系列FPGA内部结构的介绍。仔细查找时钟管理单元、块存储器、数字信号处理模块,以及其他设计资源在FPGA硅片上的布局。
图3.49 该设计使用的逻辑资源
思考题3.7: 将鼠标放到每个逻辑资源上,查看XILINX对每个逻辑资源的位置定义。这个对于后面读者进行相应的位置约束描述也是至关重要的。
第八步 :关闭器件视图界面。
虽然在Vivado左侧“Flow Navigator”窗口中“Implementation”选项下的“Implemented Design”中提供了最重要的报告,但是在Vivado当前工程界面下的“Reports”标签窗口中包含了一些其他有用的报告。图3.50给出了“Reports”标签窗口视图界面,该视图界面内容包括:
(1)Post Optimization DRC Report(优化后DRC报告),列出已经完成的I/O DRC检查。
(2)Post Power Optimization DRC Report(功耗优化后DRC报告),列出已经完成的功耗DRC检查。
(3)Place and Route Log(布局和布线日志),描述实现过程,以及遇到的任何问题。
(4)IO Report(IO报告),列出用于设计的最终的引脚分配。
(5)Clock Utilization Report(时钟利用率报告),描述使用的时钟资源,以及基于区域到区域的时钟利用率资源。
(6)Utilization Report(利用率报告),以文本格式显示使用的FPGA资源。
(7)Control Sets Report(控制集报告),描述如何对控制信号进行分组。
读者可以双击每个条目,以文本格式显示具体的信息。
图3.50 “Reports”标签窗口界面
读者也可以在“Flow Navigator”面板窗口内的“Implemented Design”下,找到并双击“Report Utilization”选项,出现“Report Utilization”对话框界面,单击【OK】按钮,以表格形式打开报告。图3.51为以表格形式给出的利用率报告。
图3.51 从图表形式给出的利用率报告
图3.52给出了I/O报告。该报告中提供了一个表格,列出了每个信号、信号的属性,以及它在FPGA上最终的位置。
图 3.53给出了时钟利用率报告。该报告给出了设计中所用到的时钟资源,包括BUFG、BUFH、BUFHCE、MMCM和时钟域分析。
图3.52 I/O报告
图3.53时钟利用率报告
图3.54给出了控制集报告。该报告描述了设计中控制集的个数(理想的,这个数字应该尽可能小)。控制集的个数用于描述如何对控制信号进行分组,具体体现在:
(1)这确定了工具的能力,即能达到高器件利用率。
(2)由推断出的置位、复位和时钟使能信号确定设计中控制集的个数。
(3)如果设计者希望在设计中尽可能共享控制信号,可以减少控制信号的个数。
图3.54 控制集报告
本节简单介绍静态时序分析的作用,在后面将详细介绍静态时序分析的具体过程。
对于一个设计来说,它是由单元和网络的互连组成。很明显:
(1)一个设计的功能由RTL设计文件决定。
(2)由仿真工具验证设计功能的正确性。
(3)一个器件的性能由构成设计单元的延迟所决定,它可以通过静态时序分析(StaticTiming Analysis,STA)验证。
(4)在STA中,设计元器件的功能显得并不重要。
(5)对于设计中的每个元器件,都需要花费时间执行它的功能。表现在:
① 对于一个LUT来说,存在从它的输入到输出的传播延迟。
② 对于一个网络来说,存在从驱动器到接收器的传播延迟。
③ 对于一个触发器来说,在它的采样点周围的一个要求时间内有稳定的数据。
(6)这些延迟取决于下面的因素:
① 由FPGA的组件和设计实现决定,即元素的物理特性(也就是构成结构)和对象的位置(一个对象相对于其他对象的位置)。
② 由环境因素决定,包含器件处理工艺的不同、单元上的电压、单元的温度。Xilinx提供了元器件和网络的延迟,通过对量产元器件的特性细化得到这些延迟。
(7)在STA时,使用在合适拐点的特性化延迟。
在FPGA的设计过程中,STA的必要性体现在:
(1)很多FPGA实现的过程基于时序驱动。典型的,表现在综合器用于电路的结构、布局器用于优化单元的位置、布线器用于选择布线的元素。
(2)必须对工具进行约束,以确定所期望的性能目标。
(3)在设计的过程中使用STA,然后生成报告。
(4)STA确定最终的设计是否提供了所期望的性能。
实现过程结束后,可以在“Implemented Design”选项下面选择“Report Timing Summary”选项,生成带有真实时序信息的时序报告。图3.55给出了时序总结报告。
图3.55时序总结报告
(1)Worst Negative Slack(WNS)(最坏负松弛):所有时序路径上的最坏松弛,用于分析最大延迟。WNS可以是正数或者负数。当WNS为正时,表示没有冲突。
(2)Total Negative Slack(TNS)(总的负松弛):当只考虑每个时序路径端点最坏的冲突时,所有WNS的和。当满足所有的时序约束时,为0ns;否则,有冲突时,为负数。
(3)Number of Failing Endpoints(失败端点的个数):有一个冲突(WNS<0ns)端点总的个数。
Worst Hold Slack(WHS)(最坏保持松弛):对应于所有时序路径上的最坏松弛,用于分析最小延迟。WHS可以是正数或者负数。当WHS为正时,表示没有冲突。
Worst Pulse Width Slack(WPWS)(最坏脉冲宽度松弛):当使用最小和最大延迟时,对应于以上所列出的所有时序检查中最坏的松弛。
图3.56给出了一个静态时序路径描述。一个静态时序路径是指:
图3.56静态时序路径
(1)开始于一个时钟控制的元素。
(2)经过任意个数的组合元素和互连这些元素的网络。
(3)结束于一个时钟控制的元素。
时钟控制的元素包含触发器、块RAM、DSP切片等。
组合元素包含LUT、宽的多路复用器MUX、进位链等。
在下一个时钟事件之前,检查在一个时钟控制元素的变化需要传播到另一个时钟控制元素需要的时间。图3.57给出了建立检查的示意图。
图3.57建立检查的示意图
在相同的事件到达目的元件前,检查由一个时钟事件所引起的,在一个时钟控制元件上逻辑变化没有传播到目的时钟控制元件的时间。通常是指从时钟的上升沿到该时钟相同的边沿。保持检查所有时序路径。图3.58给出了保持检查示意图。
最短的延迟用于源时钟和数据路径延迟,最长的延迟用于目的时钟延迟。
图3.58保持检查示意图