本文由本人原创翻译于ALTERA的官网上Educational_Materials->Digital_Logic->Tutorials->Timing_Analysis_Tutorials下一篇名为Using TimeQuest Timing Analyzer的文章,个人觉得ALTERA官网上很多教程都很不错,有机会可以锻炼下专业英语水平,随便也可以把这些不错的教程和大家分享。原文档包含在下面的附件中,有兴趣的可以查看。
TimeQuest Timing Analyzer的文章,个人觉得ALTERA官网上很多教程都很不错,有机会可以锻炼下专业英语水平,随便也可以把这些不错的教程和大家分享。原文档包含在下面的附件中,有兴趣的可以查看。
一、介绍
本文将介绍TimeQuest Timing Analyzer的基本功能,并演示了怎样使用TimeQuest建立时序约束和获取实现电路的时序信息。
内容:
介绍时序分析概念
设置Quartus II使用TimeQuest
使用TimeQuest
建立时序约束
二、背景
时序分析是一个分析逻辑电路的延时从而决定电路是否能满足可靠运行条件的过程。这些条件包括但不仅仅是,如电路的最大时钟频率fmax。一个关于最大时钟频率fmax的计算的简单例子如图1所示。
图1 时序分析示例
在这个例子中,左边的4个寄存器驱动由与门组成的组合电路,组合电路的输出再被处于右边的寄存器所储存。为了得到正确的结果,时钟频率受到该电路最长延时路径的限制。我们假设每个寄存器clock-to-Q时延和建立时间都是1ns,每个与门的延时是1ns,则在该电路中最大的时钟频率可以这样计算:
计算fmax是一个时序分析器的基本功能,时序分析器可以用来引导CAD工具完成逻辑电路的实现。例如,图1中展示了使用2输入与门来实现一个4输入逻辑功能。如果没有任何时序要求,图中所示的电路实现方法是可以接受的。但是,如果一个使用者需要电路能够运行在250MHz的时钟频率下,上述的实现方法就显得不恰当了。通过设置最大时钟频率这项时序约束,有可能会指导CAD工具去尝试新的方法来实现该电路,从而满足时序要求。CAD工具可能会如图2所示来实现该电路,新的电路fmax达到250MHz,满足了时序约束。
图2 同一功能电路不通的电路结构
在本文中,我们将演示如何获得时序信息以及怎样使用TimeQuest时序分析器来进行时序约束。
要点:本例电路中仅仅含有一个时钟信号,当电路中含有多时钟信号时,时序分析器的初始行为会有稍许不同,这里建议使用下面的例子来进行之后的TimeQuest的使用练习。关于多时钟信号,我们将在第六小结详细讨论。
三、设计实例
我们使用一个输入为3个8位的加法器来作为例子。加法器的输入A、B和C分别通过一级输入寄存器reg_A、reg_B和reg_C,这3个寄存器的输出作为加法器的输入,然后加法器的运算结果保存在寄存器reg_sum中,寄存器reg_sum的输出直接驱动输出口sum。加法器的原理图如图3所示。
图3 例中加法器原理图
加法器的Verilog代码如图4所示。注意到代码中的注释“synthesis keep”,这个注释插入到代码中,用来命令Quartus II软件在最后的电路实现中保留指定的节点和该节点的名称。这样做可以允许我们以保留的节点作为参考。
图4 示例中加法器Verilog代码
在Quartus II中建立新工程,输入示例中给出的Verilog代码。
四、设置Quartus II使用TimeQuest
当Quartus II工程第一次建立时默认的时序分析器是使用经典时序分析器Classic TimingAnalyzer。要使用TimeQuest,有必要更改工程设置。通过选择菜单Assignments->Settings来打开一个工程设置窗口,然后在窗口左边分类中选择Timing Analysis Settings。在Timing Analysis Settings中我们可以选择使用Classic或者TimeQuest时序分析器。单击Use TimeQuest Timing Anlyer选项前的单选按钮lai告诉Quartus II软件使用TimeQuest进行时序分析,如图5所示,最后单击OK。
图5 使用TimeQuest作为时序分析器
编译工程,查看时序分析结果。当工程进行全编译后,可以在编译报告中查看这些时序分析结果。在本文中,我们将使用TimeQuest图形用户界面来查看时序分析结果。
五、使用TimeQuest
选择菜单Tools->TimeQuest Timing Analyer来启动TimeQuest。TimeQuest启动后的界面如图6所示。
图6 TimeQuest界面
5.1 TimeQuest图形用户界面
TimeQuest窗口由几个部分组成,包括顶端的主菜单,左上的报告面板report pane,左侧的任务面板task pane,右边的查看面板view pane还有底部的控制面板console。主菜单用来和TimeQuest进行交互和输入命令。报告面板包含使用TimeQuest生成的所有时序报告。任务面板含有用来执行获得时序报告的一系列命令动作。查看面板用来显示开打的报告窗口,TimeQuest刚打开时,查看面板里含有TimeQuest用户界面的简要说明。底部的控制窗口可以给予我们通过指令来使用TimeQuest。
我们重点关注两个面板:任务面板和报告面板,如图7所示。任务面板提供了获得一个设计的时序信息的一系列命令动作,这些命令动作包括建立时序网表creating a timing netlist,读取时序约束文件reading a timing constraints file,执行时序分析performing timing analysis,生成报告generating reports和保存时序约束文件saving a timing constraints file。报告面板包含了设计的详细时序信息,这些报告使用任务面板的命令动作来生成。
为了展示如何使用时序分析器,在本例中,我们通过一系列基本的步骤来获得时序信息。首先,双击任务面板中的Create Timing Netlist命令来生成时序网表,该网表用来进行时序分析。然后双击Read SDC File来告诉分析器读取一个Synopsys Design Contraints(SDC)文件并应用该约束文件来进行时序分析。设定约束可以让分析器知道设计电路中的哪些部分满足了时序要求哪些没有满足时序要求从而可能运行不正确。如果没有进行约束则软件会自动默认进行1GHz的时钟信号约束。最后,双击Update Timing Netlist命令来使用指定的约束来查看电路中哪些路径没有满足时序约束。一旦时序网表得到更新,就可以生成时序报告了。
图7 TimeQuest任务和报告面板
5.2 时序分析报告
双击报告面板中需要生成的报告名称来生成时序报告。例如,双击Setup Summary报告,将显示如图8所示的查看面板内容。
图8 Setup Summary
Setup Summary报告显示了每个时钟域的时序摘要。Setup Summary报告中的参数有slack和total negative slack(TNS),两者结合在一起可以了解到我们的设计在每个时钟域满足了多少setup约束。在这个例子中,设计电路没有达到默认的1GHz频率约束,因为电路中最长的路径延时比1GHz时钟周期还要大2.497ns(从slack这一列可以看出)。我们可以获取更详细的时序信息,右键所给时钟所在行然后选择右键菜单中的选项Report Timing。如图9所示。
图9 弹出菜单选择更查看更详细的时序报告
选择Report Timing后打开的新窗口如图10所示。在这个窗口中有若干区域用来指定需要生成报告的数据。第一个区域是Clock区域,在这个区域中,我们可以指定需要报告的路径的类别。更精确的说就是指定发出数据的时钟信号到锁存数据的时钟信号。例如,在To clock和From clock选项中选择名称为clock的信号。这样做将让分析器仅报告寄存器到寄存器路径。
图10 时序报告生成窗口
第二个区域是目标区域targets field。目标区域更明确得指定设计电路中需要报告的特定路径。我们可以在From和To字段中选择我们感兴趣的路径的起始点和结束点。另外,我们也可以查看经过特定节点的路径。在这个例子中,我们使From、To和Through这些地方留着空白不填,这样分析器就会报告所有的指定时钟路径。
接下来的两个区域是Analysis type和Paths区域。Analysis type区域用来指定分析的时序类型,比如说建立时间(setup)、保持时间(hold)、恢复时间(recovery)和移除时间(removal)。这些不同的时序分析类型都反映了设计电路中不同的时序特征。例如,建立时间分析可以看出在给定的时钟约束下,数据到达寄存器的时间是否足够早以至于寄存器有足够的时间可以把数据正确的锁存在寄存器中。Paths区域可以指定最多报告的路径数量和包含在报告中的路径最大允许的slack。在我们的例子中,选择分析类型为Setup并选择最多报告10条路径,时序分析器将生成一份建立时间分析报告和显示10条最大的负的slack路径(违反时序约束的路径)。
下一个设置区域output可以指定输出的格式和报告的详细程度。报告可以显示在查看窗口或者文件中。在本例子中,我们采用默认的选项,即Detail level选择Path only 并输出在查看窗口中。窗口默认名字Setup:clock,该名字标识了报告的类型,在报告面板中我们也可以看到以该名字命名的报告。
最后一个区域是Tcl command区域。该区域显示了用来生成所需报告的可执行命令。我们通常不需要编辑这个区域。单击Report Timing按钮可以生成报告,报告内容如图11所示。
图11 所给定的寄存器到寄存器路径的详细建立时间信息
图11所示的时序报告由3个部分组成。报告的顶部的部分包含了含有时序信息的路径列表。其中一列叫做slack显示了信号达到目的寄存器所需要的不同时间的差额,也就是系统时钟周期和信号实际达到时间的余量。如果slack的值为负,说明该路径违反了我们的时序约束。在本例子中,期望的时钟周期是1ns,一些路径的延时超过了所要求数据到达时间2.497ns。单击列表中的一条路径,在查看面板的另外两个部分中可以查看关于这条路径的更详细的时序分析信息。
查看面板的两外两个部分由图表所组成。这些图表显示了路径摘要、统计数值、数据路径和波形图。左手边的部分默认显示波形图,波形图可以直观的解释时序违规是怎样发生的。右手边的部分显示了路径所经过的元件和该元件的延时。
波形图是理解一个电路的时序分析的有力工具。它包括指定路径的数据延时和时钟到达源寄存器和目的寄存器的延时。初看一眼,时序分析波形图对熟悉的人来说非常直观,但对一些陌生的人可能就不会这样。这是因为显示的时序信息与输入信号出现在FPGA设备的输入引脚的时间有关。例如,第一行显示的时钟信号出现在设备的引脚上,稍后它传递到源寄存器的时钟输入引脚。在图12中我们展示了如何理解图11的波形图的信息。
图12 理解指定寄存器到寄存器路径的建立时间信息
图中前3个波形显示了时钟信号从源寄存器到达目的寄存器所要求的约束时间是1ns。发动时钟沿和锁存时钟沿在图中用粗线表示。接下来的两个波形显示了同一时钟信号达到源寄存器和目的寄存器的时间,即发动时钟沿和锁存时钟沿的有效时刻。这两个波形显示了源寄存器发动数据和目的寄存器锁存数据的时间。
Data Arrival和Data Delay两个波形显示了信号从源寄存器传播到目的寄存器的时间。注意到数据延时Data Delay是从寄存器的发动时钟时刻Launch Clock开始计算的。倒数第2个波形叫做Data Required,该波形指示了数据被正确锁存在目的寄存器中所要求的最大到达时间,这个时间已经把最后一行显示的寄存器建立时间(uTsu)计算在内了。
从该波形图中我们可以看到数据到达目的寄存器的时间滞后于时序约束的所需达到时间,因此,时序约束没有满足。一个负的倾斜值(slack)用来显示时序违规。相反,正的slack则表示满足时序约束。
5.3 在设计中建立时序约束
TimeQuest可以通过Constraints菜单在你的设计的下一次编译中应用指定的时序约束。指定时钟约束,可以通过选择菜单Constraint->Create Clock,将打开如图13所示的窗口。
图13 TimeQuest建立时钟约束窗口
在这个窗口中,可以设定需要约束的时钟信号。首先,在Clock name输入框中为约束的时钟信号起个名字,在本例中和电路的时钟信号名字相同,都为clock。然后,在接下来的Period输入框中设定约束的时钟周期为4ns。接下来的Waveform edges区域中的Rising何Falling输入框用来定义时钟信号从0变到1和从1变到0的时刻。让这些区域留着空白可以定义时钟的上升沿时刻为0,下降沿的时刻是时钟周期的一半。最后,在Targets区域中选择信号clock,表示以上的时序约束应用于电路中名称为clock的时钟信号。完成后单击Run按钮来应用这些约束并双击Write SDC File命令保存约束文件到名为example.sdc的约束文件,如图14所示。
图14 保存时序约束文件
一旦保存了约束文件,就可以在Quartus II编译的过程中告诉软件使用该约束文件。如图15所示,我们可以在TimeQuest timing analyzer settings窗口中添加需要使用的约束文件。添加了约束文件后,重新编译工程,然后按照之前的步骤打开setup summary报告,这时,我们会发现时序约束已经达到要求。
图15 添加约束文件到Quartus II工程中
6.包含有多时钟信号的设计
TimeQuest能够分析含有多时钟信号的电路,包括设计者在电路中使用多个不同时钟,或者自动的支持比如SignalTap II逻辑分析仪或者JTAG接口的时钟信号。读者需要做这样的设计时需要注意TimeQuest的使用可能会与上述的演示不同。设计中使用多个时钟信号,在执行时序分析之前记得给每个时钟信号作以约束。这样做才可能使时序分析器产生于上面延时的相同的报告。
7.结论
本文展示了TimeQuest时序分析器的基本使用方法。在本例的简单电路中,我们进行了时序分析的说明,并在电路中进行了基本的时序约束。在更大更复杂的设计中,TimeQuest提供更为强大的功能保证电路得以正确的约束。
用户1859462 2015-10-26 10:27
用户1662232 2012-7-24 19:31
用户342243 2012-2-22 15:54
用户1528479 2010-12-2 09:08