【精品博文】4.8、静态时序分析之——如何编写有效地时序约束(三)

静态时序相关博文连载目录篇:

http://blog.chinaaet.com/justlxy/p/5100052092

例子依然是(一)中给出的例子,这篇博文主要聊的是

|-4、INPUT_SETUP

|-5、CLOCK_TO_OUT

|-6、CLKSKEWDIFF

这三个方面。

首先,我们来聊一聊输入建立时间的约束(INPUT_SETUP)

前面的文章介绍过,BLOCK ASYNCPATHS 是一种全局约束,主要用来禁止TRACE分析输入到寄存器路径的时序信息,如INPUT_SETUP等。那么,如果没有使用BLOCK ASYNCPATHS呢?此时,Diamond会根据时钟的约束(周期或者频率约束)自动计算INPUT_SETUP的值,很显然,这是不准确的值,将会导致设计处于欠约束(Under-Constrained)状态。为了准确的描述INPUT_SETUP,需要设计者根据实际的电路(PCB)时序要求计算出精确的输入建立时间的值,并将其写入到LPF文件中。

补充说明1:如何计算?之前说过了啊!

4.3、静态时序分析之——如何计算时序参数

http://blog.chinaaet.com/justlxy/p/5100052115

补充说明2:关于LPF文件。

这里说写入LPF文件,实际上有多种方式,如用户通过文本编辑器直接写入(适合有经验的高级玩家)、通过Spreadsheet View进行写入以及通过Timing Analysis View和TPF文件写入等方式。以后有时间的话,打算用一片单独的文章详细的介绍一下Diamond中的LPF的作用、操作方法等内容……

回到正题,INPUT_SETUP,首先,将LPF修改为如下形式:

此时,data1的INPUT_SETUP被设置为2ns,而不是默认的3.333ns。那么data2呢?1.5ns?显然不是……应当注意,在图中红框框下面还有一行:CLK_OFFET 1.500000 X;CLK_OFFSET参数可以通过周期乘以某一数值来调整INPUT_SETUP的值。在上面的这个例子中,data2的输入建立时间计算过程如下:

此时TRACE的报告如下:

接下来,再来聊一聊时钟到输出的约束(CLOCK_TO_OUT)

和前面聊的INPUT_SETUP一样,如果用户没用明确定义CLOCK_TO_OUT约束的话,Diamond会根据时钟的约束(周期或者频率约束)自动计算CLOCK_TO_OUT的值,很显然,这也是不准确的值,将会导致设计处于欠约束(Under-Constrained)状态。为了准确的描述CLOCK_TO_OUT,需要设计者根据实际的电路(PCB)时序要求计算出精确的时钟到输出时间的值,并将其写入到LPF文件中。如图:

这里补充说明一下,在定义CLOCK_TO_OUT约束的时候,设计者还可以使用时钟输出(clock output,如果有的话)作为参考时钟(reference clock),例如:

最后,来聊一聊CLKSKEWDIFF

在前面的博文中有简单的提到过:对于跨时钟域的路径(Cross-clock Paths)需要设计者通过CLKSKEWDIFF约束告知时序分析工具时钟与时钟之间的相位(时序)关系。

当用户没有使用CLKSKEWDIFF约束时,TRACE的相关的报告如下:

现在,添加如下约束:

此时TRACE的报告为:

应当注意的是:CLKSKEWDIFF只能对顶层(top-level)的时钟进行约束,对于模块内部的时钟信号不能进行约束。如果用户使用CLKSKEWDIFF对模块内部的时钟信号进行约束,会被分析工具直接忽略掉!

(0)

相关推荐