本篇文章我们将与大家共同讨论时序约束方面的一个概念:output_delay。
Output_delay可选参数-max相对比较容易理解。为了全面性本文下面也进行了介绍。
Output_delay的另一个可选参数-min则比较难理解,这也是本文的主要目的。
我们以下面这个情况为例:
B表示整个设计中的一个模块,也是我们要进行约束的部分
P表示模块B的一个输出端口,output_delay设置的一个节点
F1表示模块B内部的一个触发器,同时也是P的驱动源
F2表示模块外部的一个触发器,用于采样P输出的数据
为了简单起见,我们假设F1和F2采用同一驱动时钟,而且也不存在时钟偏移。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
例如:set_output_delay 7 ……
在这里,7既表示-max参数设置也表示-min参数设置。
通常具体参数值表示最大外部延迟,正如上面最大延迟部分介绍的那样。
对于最小时间约束分析,这样设置是不起作用的,参数值偏大会引起内部最小延迟为一个较大的负值(例如本例为-7)。
内部信号会产生一个有限的+ve延迟——这会比偏大的负值还要大一些。
有时我们也要将-min参数设置为负值,这表示外部延迟是负值或者说外部延迟时间小于目标模块保持时间要求。
也就是说F1与P之间存在+ve延迟以保证保持时间满足F2的要求,因为F1与P之前的延迟是-min参数值的负值,这里我们使用双重负值,这就使得F1与P之间的最小延迟为正值,更实用一些。
我们欢迎有意向合作新工科课程改革项目的老师加入Xilinx大学计划,关于联合实验室建设、Vivado软件捐赠、校企共建课程、FPGA师资培训、学生竞赛、学生讲座等联系我们。
联系方式:edu@e-elements.com

E-Elements
FPGA我们是认真的!


