【原创】关于setup和hold的深入浅出【Verilog】
Abtract
在后仿真过程中经常会遇到关于setup和hold violation的问题,但是关于setup和hold time的产生原因和由来很少有人细究。
本文将对setup和hold的实质简要归纳总结,如有不当,敬请指教。
Introduction
1.触发器原理
上图为触发器的简要示意图。T1和T4同时导通,T2和T3同时导通,且T1、T4和T2、T3导通状况互反。其中T1、T2、T3、T4均为传输门(关于传输门可以翻看相关电路方面资料,这里暂不涉及具体内容),均为电平敏感,所以所谓的时钟跳变可以理解为高低电平的相互跳变所致。而电路中实际的延时信息主要由于电信号导通时通过电子器件时耗费的时间。
1.1触发器工作过程
低电平时,T1和T4导通,此时数据进入到`D,因为此时T4导通,由于一对反相器形成双稳态结构,图中绿色箭头线中的数据保持上一拍的数据结果。
当高电平到来时,T1和T4关断,T2和T3导通,双稳态结构保证②中的数据维持稳定,通过T3输出至Q端,同时B点和C点的数据保持一致稳定;当低电平到来时,T2和T3关断,T1和T4导通,因为此时B点和C点数据一直稳定,因此可以保证绿色箭头线部分有稳定一致的数据通过Q端发送出去。所以,可以看到在上跳沿采样的数据可以保持一个时钟周期。
2setup和hold踪迹
2.1 clk上跳沿之前
setup时间(tsu):输入数据D必须在时钟上升沿之前必须有效的时间。为了得到有效的数据,必须保证A点和`D点的数据保持一致稳定。因此,可以这样理解,所谓的建立时间是指输入数据D经过多长时间才能使`D的数据稳定可靠。所以setup指的是数据从D到达`D的时间。
2.2上跳沿之后
hold时间(thold):因为此处触发器模型的问题,这里关于hold的理解只能yy的想象下触发器的模型来帮助理解hold时间。
在clk上跳沿发生之后,如果A点的数据受到D点的影响,从而导致A点和D点数据不一致,也就是在上跳沿发生后,即T2、T3导通时,②中循环的数据不能保持稳定一致,从而导致Q端数据不稳定。因此,thold可以理解为D端数据通过T1,再经过②到达A点,保证A和`D点数据一致稳定的时间。
传输延时(tc-q):clk上跳沿出现后,T1和T4关断,T2和T3导通,数据从`D到达Q端所需要的时间被定义为传输延时,可以理解为时钟跳变后稳定`D点数据经过tc-q后输出至Q端,传输路径即③。
3 时钟周期和频率
3.1最小时钟周期
T≥tc-q + tp-logic + tsu
当两级触发器之间的数据传输在一个时钟周期内完成时,其传输周期为最小。而当tc-q + tp-logic + tsu大于T时,后续的触发器的setup时间将得不到满足。
3.2最大时钟频率
f≥1 / (tc-q + tp-logic + tsu)
3.3最小维持时间
tc-q min + tp-logic min + tsu min ≥ thold
当电路的hold时间大于tc-q min + tp-logic min + tsu min时,可能出现因为数据传递过快,也就是在后一级触发器采样的时候,有可能出现一个时钟沿传递两个数据的情况,后一级触发器采样数据可能误采样,导致有效数据被覆盖,因此,为保证后续电路能够采样到稳定的数据,hold时间必须小于等于 tc-q min + tp-logic min + tsu min。
Conclusion
通过此处对setup和hold的简要阐述,希望能够加深对这些基本概念的了解,文中若有不当之处敬请指出,不胜感激。