本文由本人原创翻译于ALTERA的官网上Educational_Materials->Digital_Logic->Tutorials->Timing_Analysis_Tutorials下一篇名为Using TimeQuest Timing Analyzer的文章,个人觉得ALTERA官网上很多教程都很不错,有机会可以锻炼下专业英语水平,随便也可以把这些不错的教程和大家分享。原文档包含在下面的附件中,有兴趣的可以查看。

TimeQuest Timing Analyzer的文章,个人觉得ALTERA官网上很多教程都很不错,有机会可以锻炼下专业英语水平,随便也可以把这些不错的教程和大家分享。原文档包含在下面的附件中,有兴趣的可以查看。

attachment download

一、介绍

本文将介绍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提供更为强大的功能保证电路得以正确的约束。

使用TimeQuest时序分析器相关推荐

  1. Quartus II 订购版 和 网络版 软件功能 区别

    参见: http://www.altera.com.cn/products/software/products/quartus2web/features/sof-quarweb_features.ht ...

  2. 数字电路基础:关于锁存器latch

    锁存器是电平触发的控制器件,这与边沿触发的触发器是有着本质的区别的.锁存器是一种在异步时序电路系统中,对输入信号电平敏感的单元,用来存储信息.一个锁存器可以存储1bit的信息,通常,锁存器会多个一起出 ...

  3. TimeQuest约束外设之诡异的Create Generated Clocks用法

    最近在altera FPGA里设计一个外设的驱动模块,模块本身逻辑很简单如下图所示,但是模块和外设之间的时序约束问题搞的很头疼,今天先讲讲总结的一些Timequest下外设约束方法,特别是那毫无用户体 ...

  4. [原创]TimeQuest约束外设之诡异的Create Generated Clocks用法

    刚入驻博客园,先搬几篇之前在EDN原创的文章,EDN的链接http://bbs.ednchina.com/BLOG_13570357612_2000177.HTM 最近在altera FPGA里设计一 ...

  5. FPGA的设计艺术(6)STA实战之SmartTime时序约束及分析示例(I)

    前言 FPGA进行时序分析通常使用厂家的编译工具,进行时序分析,但是万变不离其宗,时序分析的知识通常都是通用的,原理都是一致的.下面根据SmartTime的资料来看下时序分析的实际操作是如何的,这在其 ...

  6. FPGA异步时序和多时钟模块

    第六章   时钟域 有一个有趣的现象,众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域.换句话说,只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口.虽然这样可 ...

  7. FPGA学习(第8节)-Verilog设计电路的时序要点及时序仿真

    一个电路能跑到多少M的时钟呢? 这和电路的设计有密切联系(组合逻辑的延时),我们知道电路器件都是由一定延迟的,所以信号的仿真很重要.如果延迟时间大于时钟,就会导致时序违例,出现逻辑错误. 项目要求30 ...

  8. VIVADO时序约束之Input Delay(set_input_delay)

    前言 I/O Delay约束主要有两个命令:set_input_delay和set_output_delay. I/O Delay约束的主要目的同时钟约束一样,是告诉编译器,外部输入输出信号与参考时钟 ...

  9. VIVADO时序约束之Output Delay(set_output_delay)

    前言 I/O Delay约束主要有两个命令:set_input_delay和set_output_delay. I/O Delay约束的主要目的同时钟约束一样,是告诉编译器,外部输入输出信号与参考时钟 ...

最新文章

  1. linux定时备份mysql_linux定时备份MySQL数据库并删除七天前的备份文件
  2. 转载:矩阵的掩膜操作实现图像对比度调整
  3. Problem E: 调用函数,整数逆序输出
  4. x86异常处理与中断机制(1)概述中断的来源和处理方式
  5. 工作几天被裁员,难受
  6. Yaffs2根文件系统制作
  7. 如何给小朋友解释单摆运动_模仿小天才钟美美:小朋友都是天生的演员?
  8. if和else同时执行_为什么大量的if else这么不受待见?怎么“干掉”它?
  9. 数据库学习--DML(数据管理语言)
  10. C++ STL 容器的合并、求差集、交集等操作实例 含详细注释版
  11. 用 Python 绘制了若干张词云图,惊艳了所有人
  12. 安卓手机无损把mp4视频格式转换成mp3音频格式的方法
  13. USGS下载Landset数据指南
  14. 团体力学理论(1944)--轉
  15. 鸡啄米教程之VS2010/MFC编程入门教程之目录和总结
  16. Excel VBA单元格数据自增1
  17. 西门子PLc程序,博途V16 V17版1200与多台G120变频器通过过modbus RTU485 通讯控制,模拟量转
  18. SpringBoot 阿里云短信功能使用
  19. python中base64 decode_python2解码base64中文乱码怎么解决?
  20. CSDN每日一练合集

热门文章

  1. boost::outcome模块containers相关的测试程序
  2. boost::hana::comparing用法的测试程序
  3. boost::geometry::detail::overlay::get_turn_info用法的测试程序
  4. boost::fusion::convert用法的测试程序
  5. boost::contract模块实现loop的测试程序
  6. ITK:向索引添加偏移量
  7. VTK:可视化算法之TubesFromSplines
  8. VTK:Rendering之AmbientSpheres
  9. C++圆形线性链表Cicular Linear Linked List算法(附完整源码)
  10. 经典C语言程序100例之五