[静态时序分析简明教程(九)]多周期路径set_multicycle_path

静态时序分析简明教程-多周期路径

    • 一、写在前面
      • 1.1 快速导航链接·
    • 二、多周期路径
      • 2.1 多周期路径的SDC命令
      • 2.2 路径常规约束
      • 2.3 建立/保持规格
      • 2.4 位移量
      • 2.5 多时钟周期案例
    • 三、总结

一、写在前面

一个数字芯片工程师核心竞争力是什么?不同的工程师可能给出不同的答复,有些人可能提到硬件描述语言,有些人可能会提到对于特定算法和协议的理解,有些人或许会提到对于软硬件的结合划分,作者想说,这些说法,其实对也不对,硬件描述语言,翻来覆去无非是always和assign这几个语句的反复使用,而一些基础的协议算法深究起来其实也并不复杂,于作者而言,在常规的技能以外,有两项额外的技能颇为重要,其中之一便为sdc/STA的分析能力,它的重要之处在于作为桥梁建立了前端和后端的连接,虽然对于DE工程师而言,初版交付的sdc往往不甚准确,也没有办法通过这份sdc生成一份无误的timing report,但sdc的内容体现却是完完整整的将时序约束从行为级的描述映射到了gate level这样一个真实的电路层次上面。
写此专栏,一为学习记录,二为交流分享,以犒粉丝读者。

1.1 快速导航链接·

静态时序分析简明教程(一)绪论
静态时序分析简明教程(二)基础知识:建立保持时间,违例修复,时序分析路径
静态时序分析简明教程(三)备战秋招,如何看懂一个陌生的timing report
静态时序分析简明教程(四)时钟常约束
静态时序分析简明教程(五)生成时钟
静态时序分析简明教程(六)时钟组与其他时钟特性
静态时序分析简明教程(七)端口延迟
静态时序分析简明教程(八)虚假路径
静态时序分析简明教程(九)多周期路径
静态时序分析简明教程(十)组合电路路径
静态时序分析简明教程(十一)模式分析与约束管理
静态时序分析简明教程(十二)浅议tcl语言

二、多周期路径

通常情况下,在本周期时钟边沿启动的数据,会在下一个时钟上升沿捕获,如下图所示
[静态时序分析简明教程(九)]多周期路径set_multicycle_path_第1张图片

但是也有些情况,我们希望在数个时钟周期后再进行捕获(比如为了确保复位信号有效的多周期低电平等),在时序分析中进行额外周期约束的方案,称为多周期路径
[静态时序分析简明教程(九)]多周期路径set_multicycle_path_第2张图片

2.1 多周期路径的SDC命令

set_multicycle_path		[-setup]
						[-hold]
						[-rise][-fall]
						[-start][-end]
						[-from from_list]
						[-to to_list]
						[-through through_list]
						[-rise_from rise_from_list]
						[-rise_to rise_to_list]
						[-rise_through rise_through_list]
						[-fall_from fall_from_list]
						[-fall_to rise_to_list]
						[-fall_through fall_through_list]
						path_multiplier
						[-comment comment_string]

2.2 路径常规约束

虚假路径相似的,多周期路径的约束过程中也出现了以下常规约束

[-rise],[-fall],
[-from],[-to],[-through],
[-rise_from],[-rise_to],[-rise_through],
[-fall_from],[-fall_to],[-fall_through]

具体的内容可以参考静态时序分析简明教程(八)虚假路径中的有关内容进行学习

2.3 建立/保持规格

对于多周期路径的约束而言,[-setup]和[-hold]的选项,理解起来可能会有些复杂。
[静态时序分析简明教程(九)]多周期路径set_multicycle_path_第3张图片
常规路径中,数据假如在A处启动,那么应该在B处进行捕获,换言之,建立时间的分析应该发生在A边沿,和B边沿;
而在多周期路径中,通过[-setup]选项,我们可以改变捕获沿,需要注意的是,这里改变的边沿是捕获沿位置,我们可以将捕获沿右移,留出更多的时钟周期,但是需要注意的是,假如移动了捕获沿到D后,不仅仅是建立时间的检查移动到了D处,保持时间的检查也同样会进行移动,我们当然可以在D处同时进行建立时间检查和保持时间检查,但是这存在一个问题,即对于综合工具而言,它会在时序路径上插入buffer类的缓冲器来满足严苛的保持时间检查,增大面积和功耗。

为了解决这个问题,我们可以使用[-hold]选项,将保持时间的检查左移回A处或B处。

举个例子,将建立沿移动三个周期至D沿,保持分析自动移动至C处,此时C对应的保持倍数为0,B对应的保持倍数为1,A对应的保持倍数为2
通过 [-hold] N 的选项,N为保持倍数,可以将检查边沿向左挪动
而对于[-setup] N来说,该选项指定的N为将建立沿挪动到第N个周期(需要注意和挪动了N个周期的区别)存在1个周期的差。以上图为例,D对应的N为4,换言之,挪动了3个周期。

2.4 位移量

2.3中,我们讨论的内容是捕获沿的移动,那么,对于建立沿来说,是否有办法,也可以使其左右移动呢?
答案是可以的,我们可以使用[-start] [-end]的选项来移动
总结来说:
-end意味着捕获沿的移动,采样沿可以理解为采样时钟信号的边沿
-start意味着启动沿的移动,启动沿可以理解为启动时钟信号的边沿

2.5 多时钟周期案例

让我们来举一个例子搞明白多周期路径的应用
[静态时序分析简明教程(九)]多周期路径set_multicycle_path_第4张图片
上面的图片是一个什么样的逻辑关系呢?

Cs驱动F1寄存器产生data信号,同时驱动F2寄存器产生enable信号,这个enable信号进入到FSM(即小云朵一样的图形中),经过N个周期输入给F3,F3寄存器再Cd的驱动下,接收到en拉高,采样data

我们发现,data信号不需要立即进入到F3寄存器中,它可能需要N个时钟周期才能抵达,因此在SDC中我们可以对其进行如下的约束

set_multicycle_path -from Cs -through F1/Q -setup N -end
set_multicycle_path -from Cs -through F1/Q -to Cd -hold N-1 -end

三、总结

DMUX或者异步复位同步释放的情境中,data或复位信号并不是单拍被下一级获取,而是需要经过几个时钟周期后才进行采样,因此,我们可以通过set_multicycle_path的SDC命令进行约束,该命令不仅可以约束建立时间检查或保持时间检查,也可以约束捕获沿或采样沿

你可能感兴趣的:(静态时序分析,fpga开发,verilog,fpga,芯片,面试)