相关阅读
静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm=1001.2014.3001.5482
在静态时序分析中,保持时间检查约束了触发器时钟引脚(时钟路径)和输入数据引脚(数据路径)之间的时序关系,以满足触发器的保持时间要求。简单来说就是,保持时间要求数据在时钟的有效沿到达之后依然稳定一段时间,这是为了数据被有效(锁存)捕获。
通常来说,在分析一条时序路径时会有一个发射触发器,即发射数据的触发器(后面我们会知道,就算是输入端口也会有一个假象的发射触发器);还有一个捕获触发器,即捕获数据的触发器(后面我们会知道,就算是输出端口也会有一个假象的捕获触发器),每条时序路径会分析捕获触发器的保持时间是否满足。在进行保持时间检查时,我们会使用最小路径即延迟最小的时序路径。
有一点需要特别注意,发射触发器和捕获触发器的时钟并不一定是同一个时钟,虽然在同步设计中常常能保证这一点。保持时间检查是从发射时钟的某个有效沿到其后捕获时钟的最近有效沿(不包括同时)的前一个有效沿,这里的先后并不考虑时钟延迟(包括时钟网络延迟和时钟源延迟)、时钟不确定度的,即考虑理想情况。在同步设计中,由于理想情况下时钟是对齐的,因此发射(捕获)时钟的任何一个沿的分析都是等效的。例如对于图1,图中有两个同步的D触发器,其中发射触发器是左边的t_reg是发射触发器而右边的data_out_reg是捕获触发器。
图1 一个简单的例子
图2是时钟的波形图,周期为10ns,假设D触发器是上升沿触发,则发射触发器会在5ns、10ns、15ns...发射数据,而捕获触发器则相应的会在5ns、10ns、15ns...捕获数据并分析保持时间是否满足要求(注意,保持时间检查是在发射沿后的下一个捕获沿之前的一个捕获沿)。
图2 时钟波形图
使用report_timing命令可以报告时序分析结果,如图3所示就是从t_reg触发器的时钟引脚CK到data_out_reg触发器的输入引脚D的时序路径的报告。
图3 保持时间时序报告
从图3中可以看出,发射时钟选择了5ns时的上升沿而捕获时钟也选择了5ns时的上升沿,在报告的最后给出了时序分析的裕度(slack),在满足时序要求的设计中,裕度应该是正的并且留有一定的余量(注意在这个例子中,DFF触发器的保持时间甚至为负,这是可以做到的)。
下面来看一个发射时钟和捕获时钟不是同一个时钟的例子。还是拿图1作为例子,但t_reg触发器的时钟改为clk_1,周期为16,如图4所示;而data_out_reg触发器的时钟改为clk_2,周期为14,如图5所示。
图4 时钟clk_1的波形图
图5 时钟clk_2的波形图
根据我们的规则,易知发射时钟的有效沿在8ns、24ns、40ns、56ns...而捕获时钟的相应的有效沿在7ns、21ns、35ns、49ns...。在进行保持时间时序分析时,会对最难满足条件的时钟沿时刻组合进行分析,即相隔最小的一组时刻(发射时钟有效沿一定与对应的捕获时钟的有效沿同时或更晚),在本例中为发射时钟在8ns而捕获时钟在7ns时。图6的时序报告证明了这一分析。
图6 保持时间时序报告