输出延迟是怎么回事?

作者:Sanjay Churiwala,赛灵思公司工具与方法学应用专家

本篇文章我们将与大家共同讨论时序约束方面的一个概念:output_delay

Output_delay可选参数-max相对比较容易理解。为了全面性本文下面也进行了介绍

Output_delay的另一个可选参数-min则比较难理解,这也是本文的主要目的

我们以下面这个情况为例:

B表示整个设计中的一个模块,也是我们要进行约束的部分

P表示模块B的一个输出端口,output_delay设置的一个节点

F1表示模块B内部的一个触发器,同时也是P的驱动源

F2表示模块外部的一个触发器,用于采样P输出的数据

为了简单起见,我们假设F1和F2采用同一驱动时钟,而且也不存在时钟偏移。P端口的output_delay设置也参照同一时钟源

P端口的output_delay设置也参照同一时钟源

为了更容易理解,我们使用一些具体的参数值

假设时钟周期是10ns

最大延迟

假设信号从端口P输出后经过最大延迟7ns被F2捕获

7ns的延迟时间包括:信号从B到下一模块的传输时间和下一模块F2捕获信号前需要的时间和F2的建立时间要求

我们需要这样进行约束:set_output_delay 7 –max ……

反过来就意味着信号有至多3ns的时间达到端口“P”,紧随时钟沿后面

或者说信号在时钟沿后最多3ns到达端口“P”

从时序分析的角度来看,假设外部的触发器建立时间要求为7ns

也就是说output_delay的参数DMax表示模块的延迟必须小于或者等于时钟周期(-DMax)

最小延迟

假设从端口P输出后,信号被F2捕获前消耗最小延迟2ns

同时我们也假设F2的保持时间为0.5ns

因此,输出延迟约束设置为:set_output_delay 1.5 –min

参数1.5是2 - 0.5得来的(外部延迟 – 目标触发器的保持时间)

这也表示信号在时钟沿前最快1.5ns到达端口P

“时钟沿1.5ns”是信号到达P的最快时间。信号被约束到达P的时间大于这个值

因此,模块的最小延迟时间 = -(最小输出延迟时间)。注:负号表示在时钟沿之前

这看起来好像还不是很清晰,参考下面推导过程:

推导过程

假设所有时钟沿转换都是理想情况,时钟沿转换点为参照原点(时刻0)

信号到达P的时刻为-1.5(信号到达P的最早时间)

从P到F2的消耗时间是:2ns

因此信号到达F2的最早时刻 = -1.5+2=+0.5

保持时间要求 = 0.5

最小约束时间使用实践

一般情况下都有一定的传输时间。尤其系统设计越来越大,信号从一个模块传到另一个模块将需要传输更长的距离

由于数据通路的延迟,保持时间设置应最大化满足目标触发器的要求,而最小约束设计没有收到相应的重视

对于大部分设计,我们只看到:set_output_delay ,并没有带参数-min和-max

例如:set_output_delay 7 ……

在这里,7既表示-max参数设置也表示-min参数设置

通常具体参数值表示最大外部延迟,正如上面最大延迟部分介绍的那样

对于最小时间约束分析,这样设置是不起作用的

参数值偏大会引起内部最小延迟为一个较大的负值(例如本例为-7)

内部信号会产生一个有限的+ve延迟——这会比偏大的负值还要大一些

有时我们也要将-min参数设置为负值

这表示外部延迟是负值或者说外部延迟时间小于目标模块保持时间要求

也就是说F1与P之间存在+ve延迟以保证保持时间满足F2的要求

因为F1与P之前的延迟是-min参数值的负值,这里我们使用双重负值

这就使得F1与P之间的最小延迟为正值,更实用一些

原文链接: https://forums.xilinx.com/t5/Technical-Blog/Output-Delay/ba-p/678682