Timing 一个永远逃不开的话题,大到社会环境,小到个人生态,时间无处不在的影响着每一个个体,同样在芯片的世界里也有自己的时间法则。本系列将带你揭开STA(静态时序分析) 神秘的面纱。
理想情况下经过验证的仿真理论上芯片的功能是保证了。但是真实的电路中电流的传导是有延时的。延时导致了信号到达的时间产生了差异,这种差异会导致芯片的工作产生错误,为了解决这种问题,需要在芯片设计的步骤中,加入时序分析(static timing analysis)。时序分析从电路设计的起始就开始考虑(大部分是从综合阶段,每个公司的流程会有差异),直至到后端的signoff ,贯穿整个设计流程。 经常聊的PPA 其中的performance 就是指的timing。
STA诞生的原始得从基本电路说起,电路中存在大量的寄存器,比如触发器,锁存器。一个简单的触发器电路图如下。
如图是一个D触发器工作简图,两个黑色的方框是两个锁存器,两个锁存器合在一起就组成了一个触发器。当触发器工作的时候CP低电平0时刻绿色传输管开启。时钟CP高电平时刻两个黄色的传输管开启。D 采样进来的信号需要在时钟低电平到高电平这个时间段完成红色线所标识的路径形成一个正反馈把信号保存下来。这个所需要的时间就是建立时间(setup time)。当信号D被锁存后并不是立刻在输出Q端产生一个稳态的信号。为了产生稳态信号D穿过传输门是需要时间的。这个时间就是保持时间(hold time)。为了更好的表述这个问题,我们从波形上来看。
如图。 Setup time 是时钟上升沿到来之前,信号需要稳定的时间。而时钟上升沿后信号需要稳定的时间是hold time。这里我想抛出一个问题,从理论上讲建立时间和保持时间能否为负值呢?
答案是可以的。如图红色的圈表示建立时间为负值的状态,当信号已经超过了上升边沿但是还在抖动。 而紫色的圈表示的是保持时间为负值的状态,在上升沿前信号就开始了抖动。
那么是否建立时间和保持时间可以同时为负值呢?答案是不可以的必须满足setup + hold > 0。从上图来看的话如果setup + hold < 0 那么D信号会一直是不稳定的状态且不稳定的状态会相互重叠。这个是个不可能的悖论。
在综合过后电路会被映射成每一个元器件,每一个元器件都有自己的库(liberty)。例如D触发器。而D触发器的建立保持时间会通过库文件里面的check arc 来描述。类似于有一条arc (时序弧)是从CK - > D。
建立保持时间会通过查找arc 的查找表(lookup table) 来得到相对应的值。关于查找表和arc的概念在后续文章会介绍。在这里只需有有个概念。
接下来我们来看一下在电路中建立保持时间是如何体现的。我们先来看建立时间(setup time)
如图是数字电路中最常见结构两个触发器之间夹杂着组合电路。
Launch path → 是图中红色的路径。时钟CK 经过时钟路径到达触发器的CK 穿过触发器的CK-> Q 穿过组合逻辑L 到达后级触发器的D端。
Capture path → 是图中绿色的路径。在下一次的时钟上升沿到来时(时钟信号经过时钟路径,到达后一个触发器的CK pin 经过check arc CK → D 。
当绿色路径已经准备采集信号而红色路径的信号还没有到达稳定,那么此时就会采集到错误的信号。造成setup violation. 当绿色路径准备采集信号而红色路径的信号早就到达稳定等待采集,那么就会采集到正确的信号。这个红色路径早已到达等待的时间就是slack (裕度)。
那么最悲观的情况就是绿色信号路径传播的非常快。而红色路径信号传播的非常慢。如果在这种情况下都可以正确的捕捉到信号那么这个电路在时序上是没有问题的。在setup 或者说late check 下这个电路的slack > 0
好比男孩女孩约会,男孩需要尽可能的想办法不要迟到。而如果男孩早到, 那么等待对方的时间就是slack(裕度)。最早的情况可能就是男孩因为种种原因例如走红色路径来的非常迟,而女孩走绿色路径早早到达。结果… 你懂的。
上面是建立时间的描述,下面来描述保持时间。稍稍有一些不同。
我们来想象一下这样的场景。IN1 进来了两个数据, 数据1和数据2。 数据1先,数据2后。时钟的上升沿如图中红色绿色所示(在本例中红色绿色的时钟沿是同一个时钟边沿。为了区分用不同颜色画出来)。
Capture path → 红色路径 CK 经过时钟路径到达后一级触发器的CK pin 经过保持时间的延时来保持数据1。
Launch path → 于此同时呢,这个时钟边沿也在发射数据2走绿色路径。经过时钟延时穿过CK → Q 穿过组合逻辑L 到达后面的触发器D端。
如果绿色路径传播数据2过快,而同时红色路径还在保持数据1。 那么就会产生冲突。导致电路时序出错。最悲观的情况就是capture path 非常慢。很晚才到来保持数据1, 而launch path 非常快,很早就到达。如果这种情况都满足那么这个电路在hold 或者early check 下slack >0。 否则就是hold violation slack < 0
Hold time check 好比一辆车正在等红灯,绿灯刚亮前车还没有开走。后面的来车就由于车速过快发生了追尾。
特意在这里强调时序分析针对的都是同步时序电路。异步电路是无法做STA的。之前所讲的例子中所有的clock 都是同源的。
一个电路时序正常需要同时满足setup hold (late early) check。建立时间约束了组合逻辑L的最大延时,而保持时间约束了组合逻辑L的最小延时。电路的组合逻辑延时需要处于最大最小延时的这个范围内,否则就会导致时序为例。
在本节的末尾抛出一个问题。也是一个经常被问到的问题。建立保持时间哪一个相对而言更重要呢?
答案在下一个文章哦
写文章不易,请关注转发公众号。ElabTalk小编在这里谢谢大家。
作者水平有限如有错误还请包涵指出。欢迎大家私信留言评论。