1. 在ISE下分析和约束时序
3.1 ISE的时序约束工具入门
像TimeQuest一样,ISE软件工具也有自己的时序约束及分析工具。ISE界面的processes当中,有一个user constraints列表,其中的Creat Timing Constrain可以提供用户添加指定的时序约束。
ISE使用的时序约束信息跟其他的物理约束,电气约束等信息全部都放置在后缀名为ucf(user constrain file)的文件中,在使用图形化界面编辑约束后,用户还可以直接编辑UCF文件对时序等要求进行修改。
此外,PlanAhead Post synthesis工具在提供管脚,区域约束等功能之外,也提供了时序约束及分析的功能。所以设计者在约束设计时序时可以有多种方法。
使用Creat Timing Constrain时界面的约束类型部分如下图所示:
图ISE时序约束类型
从图中我们看到,这个工具对于时序约束的理解与altera的一致,需要约束时钟,输入输出信号,以及指定一些时序例外,也有将约束组成Group的功能。Xilinx公司对于其FPGA约束的名称与altera略有不同,但含义一样。分别是Period constrain(时钟周期约束),OFFSET constrain(输入输出偏移约束),以及FROM TO constrain,当然也有multi-cycle constrain等。
双击unconstrainedclks窗口的clk项,出现的以下对话框可以对设计的时钟信息进行指定。
图 ISE下约束时钟界面
这个界面可以设置时钟的周期,占空比,以及初始边沿是上升沿还是下降沿。或者如果这个时钟是从其他指定的时钟生成的,也可以指定生成的关系从而软件自己计算生成时钟的信息。unconstrained clks窗口将设计中没有约束的时钟列出来,在对每个时钟一一指定之后,窗口内容逐一消失。而其上方另一个窗口将显示约束的具体信息,并且也可从中选择一条约束进行逐一修改。
约束类型菜单下的Inputs 选中双击后,会出现如下图所示的对话框,指定了输入偏移约束的类型之后,选择next。这里的OFFSET IN 的类型包括,输入信号是源同步还是系统同步(时钟的来源不同),是单边沿触发还是双边沿触发的信号,以及有效边沿类型。通常在设计中,若非特殊的DDR数据,或者使用了外部随路时钟,就选择SDR以及系统同步即可。
图 指定输入偏移约束的类型
指定了偏移约束类型后选择next会出现下图所示页面,在这个页面中可以约束输入信号的时序。
图 OFFSET IN 约束设置页面
在这个页面中,左上角表明了系统中使用的时钟的信息。若有多个时钟,则可以选择输入信号建立相关的时钟。在Input pad timegroup/net中,可以选择要指定约束的目标端口。若没有对信号合并分组,就选择input pad net,然后选择需要约束的输入管脚即可。画红色*号的必须指定的地方,会有External setup time,此即为需要设置的offset in 约束。通过计算外部器件输出时序以及电路板上延时之后,设计者可以在此指定一个值,表示的是输入端口信号建立时间与时钟信号有效边沿的延时。
仿照上面OFFSET IN的设置,读者可以设置OFFSET OUT的约束。它约束的是输出端口信号与参考时钟有效边沿之间的延时关系。其数值需要查阅下一级芯片输入数据时钟的建立关系及电路板上时钟,信号线延时关系计算获得。
约束了设计中使用的时钟,同时约束了输入输出端口的时序之后,整个设计的约束就是完整的。但完整的约束不一定是正确的,过于严格的约束会挤占布局布线的资源从而造成无法进行最优布线。所以还需要对一些不必要的,过于严格的约束进行时序例外的声明。这些读者可以通过尝试软件工具及阅读软件用户手册来学习。
保存了设置的时序后,在工程目录下的Ucf文件将进行更新,最新设置的时序结果将以文本形式体现在ucf文件中,例如以下字段:
#Created by Constraints Editor (xc5vsx50t-ff1136-3) -2011/09/04
NET "clk" TNM_NET = clk;
TIMESPEC TS_clk = PERIOD "clk" 20 ns HIGH50%;
NET "bu" OFFSET = IN 2 ns VALID 20 ns BEFORE"clk" RISING;
这些不仅包括了时序约束,还以注释的形式将约束生成的日期以及针对的器件型号列出了。设计者甚至可以通过编辑修改这里的文本来快速修改时序约束。
生成的ucf已经是在工程下了。添加了约束后XST工具不需要重新运行,但是ImplementDesign下每一步都需要重新执行。重新执行时,便是在我们设置的约束下进行映射及布局布线了。
下面是PlanAhead Post synthesis工具启动后设置时序约束的页面。
图 PlanAhead Post synthesis工具下的时序约束界面
从上图可以看出这里的时序约束包括了Clk period,Pad-clk offset,pathdelay,Time group,False path以及off chip delay等项。双击其中的任何一项可以出现下图所示的对话框:
图 设置新的时序约束对话框
这个对话框列出了所有能够设置的时序约束,这里的约束设置比Creat Timing Constrain工具更加简洁,如图中所示,在选择了Input pad to clk offset 之后,右边出来的界面中,选择data arrival为Before clock,时钟选择的clk为系统时钟,有效边沿选择上升沿,勾选Delay value,设置为2ns。Pad net勾选后可以选择需要设置的端口名称。这样的设置与前文所述的Creat Timing Constrain工具约束输入端口时序是一致的。可见这个工具会更加简洁。
3.2 ISE下查看时序结果
查看时序报告时,在ISE工具下也有多种方式。比如,在ISE工具下可以选择Timing,然后在出现的对话框选择run analysis。会出现下图所示界面。在这个界面中可以选择需要分析的pad, net或者是寄存器(Flip-Flop)。这样工具会给出你选择的路径的时序分析报告。
图 Run Timing Analysis对话框
或者不选择分析的具体内容,而是直接在tools下选择Timing Analyzer,或者是在Place&Route下选择Generatepost-Place&Route Static Timing下面的Analyze post-Place&Route Static Timing,都会出现一个以工程头文件命名的后缀为twx的一个报告框,这里面将包含设计的时序信息。
其中Timing summary下会有诸如以下的英文:
Timing summary:
---------------
Timing errors: 0 Score: 0 (Setup/Max: 0, Hold: 0)
Constraints cover xxx paths, xx nets, and xx connections
Design statistics:
Minimum period: xxx ns{1} (Maximum frequency: xxx MHz)
从这个报告一眼可以看出是否会存在时序错误,以及错误路径数量。还包括时序约束信息覆盖的路径,网络以及连接关系,最后是最小周期,同时计算出该设计最高能够正确运行的频率。
在Timing constraints下,能够看到设计的一些时序约束信息,并且给每一条约束进行对应的分析,给出报告看是否能够满足约束。
典型摘录下来的一段如下:
Paths for end point cnt_21(SLICE_X24Y43.CIN), 20 paths
--------------------------------------------------------------------------------
Slack (setup path): 18.421 ns (requirement - (data path -clock path skew + uncertainty))
Source: cnt_0 (FF)
Destination: cnt_21 (FF)
Requirement: 20.000ns
Data Path Delay: 1.404ns (Levels of Logic = 6)
Clock Path Skew: -0.140ns (1.095 - 1.235)
Source Clock: clk_BUFGPrising at 0.000ns
Destination Clock: clk_BUFGP rising at 20.000ns
Clock Uncertainty: 0.035ns
Clock Uncertainty: 0.035ns ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE
Total System Jitter (TSJ): 0.070ns
Total Input Jitter (TIJ): 0.000ns
Discrete Jitter (DJ): 0.000ns
Phase Error (PE): 0.000ns
Maximum Data Path: cnt_0 to cnt_21
Location Delay type Delay(ns) Physical Resource
Logical Resource(s)
------------------------------------------------- -------------------
SLICE_X24Y38.AQ Tcko 0.346 cnt<3>
cnt_0
SLICE_X24Y38.A4 net (fanout=1) 0.278 cnt<0>
SLICE_X24Y38.COUT Topcya 0.384 cnt<3>
Mcount_cnt_lut<0>_INV_0
Mcount_cnt_cy<3>
SLICE_X24Y39.CIN net (fanout=1) 0.000 Mcount_cnt_cy<3>
SLICE_X24Y39.COUT Tbyp 0.082 cnt<7>
Mcount_cnt_cy<7>
SLICE_X24Y40.CIN net (fanout=1) 0.000 Mcount_cnt_cy<7>
SLICE_X24Y40.COUT Tbyp 0.082 cnt<11>
Mcount_cnt_cy<11>
SLICE_X24Y41.CIN net (fanout=1) 0.000 Mcount_cnt_cy<11>
SLICE_X24Y41.COUT Tbyp 0.082 cnt<15>
Mcount_cnt_cy<15>
SLICE_X24Y42.CIN net (fanout=1) 0.000 Mcount_cnt_cy<15>
SLICE_X24Y42.COUT Tbyp 0.082 cnt<19>
Mcount_cnt_cy<19>
SLICE_X24Y43.CIN net (fanout=1) 0.000 Mcount_cnt_cy<19>
SLICE_X24Y43.CLK Tcinck 0.068 cnt<22>
Mcount_cnt_xor<22>
cnt_21
------------------------------------------------- ---------------------------
Total 1.404ns (1.126ns logic, 0.278ns route)
(80.2% logic, 19.8% route)
该报告分析了从cnt_0到 cnt_21的路径中延时最大的一条。列出了数据传递路径上的每一步通过的逻辑单元的延时,最后计算出数据路径总的延时,然后给出时钟路径的间隙,按照公式:
Slack(setup path): (requirement - (data path - clock path skew + uncertainty))
计算出该路径的建立时间裕度。该报告甚至还给出了时钟不确定性的统计公式。裕度(slack)为正值表明时序没有违例。
分析报告会按照时序约束一一对应给出分析结果。如果存在不满足的约束,就会在对应的约束上画上红色的叉,并且将出错约束的路径里面slack最优的路径和最差的路径快捷列出,方便设计者查看。如下图所示,即为约束不能满足时的报告。
图 时序约束不满足时的报告
我们注意到,在时序报告中存在大量蓝色的带下划线的字体,他们都是时序分析路径上部件或者路径的快速链接。双击或者在右击他们出现的对话框中选择show in FPGAEditor,如果FPGA Editor工具开启,将自动链接到FPGA Editor工具下显示对应的逻辑单元或者路径,并且将其标红,设计者可以在FPGA Editor下查看该路径的布线情况,及在FPGA内部的位置。如下图所示:
图 FPGA Editor将时序报告的路径标红显示
如果精通FPGA Editor工具,还可以对路径进行手动修改。
当然,ISE的时序约束以及分析工具还远不止本书中的内容,而且这些功能在随着软件改版飞速改进。设计者在学习了第一节中时序分析原理之后,就能够对各种时序分析工具有一定的预期。在需要使用这些工具时,还需要不断地查找help以及Xilinx的User Guide文档,一边用一边学。
对比两家公司的时序约束和分析工具,作者觉得目前Altera的TimeQuest工具功能更加集中,且界面对用户更加友好容易上手;而Xilinx的ISE12.3版本下约束时序的工具则显得较为杂乱,但两者的时序分析报告都非常详尽,并且两家公司的时序分析工具仍然处于快速改进当中,这也间接说明了时序分析在未来FPGA设计中的重要性。