抖动(Jitter)
偏斜(Skew)
{signal: [
{name: 't1', wave: '1.0..1..0..1..0', period: 1, node: '.....a'},
{name: 't2', wave: '10101', period: 3, node: '..b'}
], edge:[
'a~b skew'
]}
扇出
扇出:单个逻辑门能够驱动的数字信号数量。一个典型的TTL逻辑门有10个扇出信号
扇入:单个逻辑门被驱动的数字信号数量,扇入越大,表示该模块被更多的上级模块共享
静态时序分析
{signal: [
{name: 'clk', wave: '01..0..1..0', period: 1, node: '.a.....h'},
{name: 'clk_reg1', wave: '0.1..0..1..0', period: 1, node: '..b'},
{name: 'data', wave: '2..3.....4..', period: 1, node: '...c', data: ['d1', 'd2', 'd3']},
{name: 'comb', wave: '2...3.....4..', period: 1, node: '....d.....g', data: ['d1', 'd2', 'd3']},
{name: 'clk_reg2', wave: '0.1..0..1..0', period: 1, node: '......e.f'},
], edge:[
'a~b Tclk1', 'b~c Tco', 'c~d Tcomb', 'd~e setup stack', 'e<-|->f Tsu', 'f~g Th', 'h~f Tclk2'
]}
- a:launch edge,静态时序分析的起点,第一个寄存器的有效沿
- f:latch edge,静态时序分析的终点,数据锁存的有效沿
- Tclk1,Tclk2:时钟到达两级触发器的偏斜(skew)
- Tco:Clock-to-Output Delay,有效沿开始后到数据从触发器输入到输出的时间
- Tcomb:组合逻辑时延
- Tsu、Tsetup:建立时间,触发器有效沿到来之前,数据需要保持稳定的最小时间
- Th、Thold:保持时间:触发器有效沿到来之后,数据需要保持稳定的最小时间
- Data Arrival Time:数据到达下一个触发器的时间,a + Tclk1 + Tco + Tcomb
- Clock Arrival Time:时钟到达下一个触发器的时间,h + Tclk2
- setup slack:建立时间裕量,数据要比有效沿早到Tsu,等有效沿到了,还要维持Thold,这样系统才是稳定的
- setup slack = Clock Arrival Time - Data Arrival Time
- setup slack = (T + Tclk2)-(Tclk1 + Tco + Tcomb - Tsu)>= 0,其中T是时钟周期
最高频率
- (T + Tclk2)-(Tclk1 + Tco + Tcomb - Tsu)>= 0(1),数据要提前时钟有效沿Tsu到达
- Tco + Tcomb <= Th(2),数据在有效沿来临后,从触发器输入端D传到输出端Q,要经历Tco(b->c),这段时间输入数据不能变,经历Tcomb(c->d),输入端D的数据也不能变,因为组合逻辑电平敏感,传过了组合逻辑才可以变化,所以(Tco + Tcomb)要小于保持时间
- 频率越高,T越小,(Tco + Tcomb)要变小才能满足(1),(Tco + Tcomb)太小,不能满足(2),这个存疑,不过大多数时候是建立时间违背,也就是Tcomb太复杂,建立时间不够
建立时间违背时的解决方案
- 降低频率,提高T
- 调整布局布线
- 修改组合逻辑,降低复杂度,插入流水线等
- 重新设计时钟树
- 改变工艺,减少器件或通路延时
https://wavedrom.com/editor.html
https://blog.csdn.net/fzhykx/article/details/80172034