Timequest Timing Analyzer进行时序分析(三)

上面已经把DAC7512控制器中所有的时钟都创建好了。下面我们再额外讨论一下关于时钟属性方面的一些问题和在做时序分析时的处理方法。对于具有单一时钟的系统,设计和时序分析都相对简单。但是现在很多设计都有多个甚至几十个时钟乃至更多的时钟。比如说DAC7512控制器,在设计中用到的时钟实际上是有3个,CLK25M,CLK50M和DA_SCLK。在对多时钟设计进行时序分析的时候,我们首先要搞清楚各时钟之间的关系。

当设计中有多个时钟时,时钟之间可能存在三种关系,分别是同步,异步和互斥。如果两个或者多个时钟具有相同的source和固定的相位差,那么这些时钟是同步时钟。在DAC7512的控制器里,CLK25M,CLK50M和DA_SCLK的source都是CLK_IN,所以可以认为他们三个是同步的。

如果两个或者多个时钟之间没有任何关系,则称之为异步时钟。比如说CLKA来源于晶振A,而CLKB来源于其他系统的输入,CLKA和CLKB就为异步时钟。对于异步时钟来讲,两个时钟域的时钟沿有可能在任意时刻出现,相互之间不会有任何关系。如果一条timing path的起始点是在CLKA,而终点在CLKB,即这条timing path跨越了CLKA和CLKB两个时钟域,那么STA软件是不会对该timing path做分析的。实际上这等同于在这两个时钟之间设定了一条false path。

如果两个时钟不会相互作用,那么称这两个时钟为互斥的。举个例子来讲,PCIE GEN2可以工作在GEN1和GEN2两种模式,在GEN1模式下,时钟为125MHz,在GEN2的模式下,时钟为250MHz,但在某一个特定时间里,时钟只可能为125MHz或者250MHz,这两个频率的时钟不会共存,相互之间也不会有相互作用。

下图给出了时钟的三种关系的例子。

做时序分析时,在创建好所有的时钟后,需要定义这些时钟之间的关系。我们可以把同步时钟放到一个group中,然后在定义时钟之间的关系时,可以使用group来定义。在默认情况下,TimeQuest认为设计中所有的时钟都是同步的,并把所有的时钟都放在同一个group里。如果设计中有异步时钟,就需要用命令把异步时钟分组并定义出来。

在TimeQuest里,我们用set_clock_groups来定义时钟的group。下面是命令的语法,更详细的说明请参照quartusII的帮助系统。


Syntax


set_clock_groups [-h | -help] [-long_help] [-asynchronous] [-exclusive] -group <names> [-logically_exclusive] [-physically_exclusive]

关于选项说明:

-asynchronous: 时钟是异步不相关的,时钟有完全不同的时钟源;

-exclusive: 时钟是互斥的,即时钟不会再同一时刻同时有效;

实际上,这两个选项的效果是完全一样的,...TimeQuest treats both options,"-exclusive" and "asynchronous", as if they were the same.

这与对各个时钟使用set_false_path的效果是完全一样的,不过结构远比set_false_path简洁,而且时钟越多效果越明显。

如:

1 create_clock -period [0.000 10.000] -name clkA [get_ports sysclk[0]]
2 create_clock -period [0.000 10.000] -name clkB [get_ports sysclk[1]]
3 #set clkA and clkB to be mutually exclusive clocks
4 set_clock_groups -exclusive -group{clkA} -group{clkB}
5 #The previous line is equivalent to following two commands
6 set_false_path -from [get_clocks clkA] -to [get_clocks clkB]
7 set_false_path -from [get_clocks clkB] -to [get_clocks A]

在DAC7512控制器里,CLK25M,CLK50M和DA_SCLK三个时钟是同步时钟。默认情况下,它们已经被软件放到了同一个group里,所以我们不需要对其做任何的处理。

但假设CLK25M属于一个group,而CLK50M和DA_SCLK属于另外一个group,我们就要用set_clock_groups命令把二者设为异步时钟,命令如下:

1 set_clock_groups -asynchronous -group {CLK25M} -group {CLK50M DA_SCLK}

我们对比一下把CLK25M设定为CLK50M的异步时钟前后TimeQuest对时序分析的处理情况来看这个命令的作用。下面是在添加这个命令前后TimeQuest中Report clock transfer的结果。

在没有添加这个命令前,软件默认三个时钟都是同步时钟,所以会分析并报告出三个时钟之间所有的timing path。

那如果我们假设CLK25M和CLK50M是互斥时钟的话,又会是什么情况呢?用下面的命令将CLK25M和CLK50M设为互斥时钟:

set_clock_groups -exclusive -group {CLK25M} -group {CLK50M}

还是看TimeQuest中Report clock transfer的结果,可以发现CLK25M和CLK50M之间的timing path都被设定为false path了。

再看一下关于Clock uncertainty的知识

简单的说,Clock uncertainty是指时钟边沿实际到达时间与理论到达时间之间的差异和变化。在做时序分析的时候,是需要加上clock uncertainty来计算timing path的延时的。Clock uncertainty的大小是比较难确定的,在ASIC设计中,clock uncertainty的值往往要根据所使用的工艺,以往项目的经验等各种因素来决定。但在FPGA的设计中,我们能参考的资料不多,特别是对于PLL输出的时钟,因为我们对PLL本身的参数并不是非常的了解,所以很难给出合适的clock uncertainty的值。在FPGA设计中定义PLL的时候,我们要定义参考时钟的精度,这会直接影响到PLL输出时钟的clock uncertainty的值。如下图所示,25.000MHz即为输入基准时钟的精度。

有了输入时钟的精度,TimeQuest会根据PLL本身的属性,自动计算出各输出时钟的uncertainty值。如果要在设计中由软件加入clock uncertainty的值,可以使用下面的命令:

derive_clock_uncertainty

除非你对系统的时钟有充分的理解并确切知道时钟的属性,否则不建议使用set_clock_uncertainty命令直接定义FPGA中各时钟的uncertainty属性。推荐使用derive_clock_uncertainty命令由软件自动计算并添加。

时间: 2024-12-11 17:10:28

Timequest Timing Analyzer进行时序分析(三)的相关文章

Timequest Timing Analyzer进行时序分析(一)

一.概述 用Altera的话来说,TimeQuest Timing Analyzer是一个功能强大的,ASIC-style的时序分析工具.采用工业标准--SDC(synopsys design contraints)--的约束.分析和报告方法来验证你的设计是否满足时序设计的要求.本文中,将采用一个DAC7512控制器的verilog设计作为例子,详细讲解如何使用TimeQuest进行时序设计和分析. 二.TimeQuest 时序分析的基本概念 TimeQuest需要读入布局布线后的网表才能进行时

Timequest Timing Analyzer进行时序分析(五)

3. Creating Timing Exceptions 创建好时钟.定义好输入输出延迟后,就可以按照这些约束对设计进行时序分析了.默认的情况下,软件按照1T 原则分析所有需要检查的timing path.在综合.布局布线时,工具也会根据时序约束,尽可能使所有timing path都满足1T的要求.但工具也不是万能的,如果设计要求过高的话,有些timing path可能不能达到设计要求,这样不满足设计要求的timing path就会以timing violation的形式给出. 在很多情况下,

Timequest Timing Analyzer进行时序分析(二)

四.用TimeQuest对DAC7512控制器进行时序分析 在对某个对象下时序约束的时候,首先要能正确识别它,TimeQuest会对设计中各组成部分根据属性进行归类,我们在下时序约束的时候,可以通过命令查找对应类别的某个对象. TimeQuest对设计中各组成部分的归类主要有cells,pins,nets和ports几种.寄存器,门电路等为cells:设计的输入输出端口为ports:寄存器,门电路等的输入输出引脚为pins:ports和pins之间的连线为nets.具体可以参照下图(此图出自Al

Timequest Timing Analyzer进行时序分析(四)

设定输入/输出延迟(input/output delay).首先看输入延迟. 下面图示的系统是我们在做数字电路设计时经常会遇到的.External Device可能是其他的集成电路芯片,也有可能是其他的FPGA,为了与我们所要讨论的FPGA分开,称之为External Device.External Device中的寄存器D1的输出送给FPGA中的寄存器D2.D1和D2属于同一个时钟域(CLK).为了简化讨论,我们假设CLK source到两个寄存器之间的延时是相等的,也就是说延时CLK1等于延

FPGA时钟约束和timequest timing analyzer

FPGA时钟约束 时钟约束 #************************************************************** # Create Clock #************************************************************** create_clock -period 8 -name "ENET0_RX_CLK" [get_ports ENET0_RX_CLK] create_clock -perio

Quartus 12的TimeQuest Timing Analyzer

1.在Quartus II软件打开和设置设计 安装路径下\qdesigns\fir_fliter文件.在Processing 菜单上,指向Start,点击Start Analysis &Synthesis. 2.运行TimeQuest Timing Analyzer 在Tools 菜单中,单击TimeQuest Timing Analyzer,如图. 3.创建一个Post-Map时序网表 1. 在Netlist 菜单上,点击Create Timing Netlist. 出现Create Timi

时序分析Timing Analysis

以下内容来自Quartus II Handbook Version 13.1 Volume 3: Verification /Section II. Timing Analysis 6. Timing Analysis Overview Comprehensive static timing analysis involves analysis of register-to-register, I/O, and asynchronous reset paths. 综合的静态时序分析对象包括:寄存

timequest静态时序分析学习笔记之工具使用

第三章 工具使用 这里我通过几条约束命令来讲解timequest工具的简单使用. 3.1 creat_clock约束命令 相关代码: 图27 第一步,在quartus ii软件tools下来菜单中找到timequest timing analyze选项并打开,出现如图27的会话框: 图 28 报告窗口:通过这个窗口,我们可以知道timequest都执行了哪些任务. 任务窗口:通过这个窗口,让timequest执行你要求的任务,比如点击report clocks,timequest就会在信息显示窗

Quartus II 11.0 开始使用

一.Altera Quartus II 11.0套件介绍 所谓巧妇难为无米之炊,再强的软硬件功底,再多的思维创造力,没有软件的平台,也只是徒劳.因此,一切创造的平台——Quartus II 软件安装,由零开启的世界,便从此开始. 自从Bingo 2009年开始接触FPGA,Quartus II 版本的软件从n年前的5.1版本到今天的最新发布的11.0,都使用过:当然对于软件核心构架而言,万变不离其宗.虽然多多少少有点bug,但这10多个版本发展到了现在,能看到Altera一直在努力,致力于更完美