通常我们在计算时序问题时,一般重点遵循以下两个条件以保证足够的Timing Margin:
1. Tflightmax + Driver(Tcomax) + Skew + Jitter + Crosstalk + Receiver(Setup)< Clock Period
2. Tflightmin + Driver(Tcomin) - Receiver(Hold) - Skew - Crosstalk > 0
其中Driver的Tco一般可以从器件的Datasheet上查到。
Tco其实包括器件的内部逻辑延时和I/O缓冲延时(Buffer delay),一般通过加一个测试负载(通常为50ohm)来测量,即时钟信号到Driver开始至测量点信号上升到测量电平(Vms)的时延。[器件datasheet上查到的Tco就是这个值]
我们通常想通过仿真工具,是得到最大/最小 Flight time. 在Cadence SpecctraQuest里面:
Tflightmax一般被称为 Final settle delay
而 Tflightmin 也称为 First switch delay
分别指器件经过Buffer的输出波形达到Vms开始到接收端到达最大/小阈值电压的时间。
尽管Cadence也是这样定义的,但是在实际仿真中,如果默认仿真参数Buffer delay选From library的话,通常计算出的Final settle delay/First switch delay是从零时刻开始到接收端到达最大/小阈值电压的时间,也就是说里面已经包含了缓冲延时(是Tco的一部分),这样,如果我们再使用上面提到的公式1,2来计算时许的时候就会造成Tco中的Buffer delay被重复计算。
解决的方法就是要修正仿真出来的Tflightmax和Tflightmin,减去一个Buffer delay.
有两种可能:
1.如果IBIS的测试负载和器件手册上注明的Tco的测试负载相同的话,我们可以通过Cadence工具直接计算出来,只要将Buffer delay设置为On-the-Fly模式下,这时仿真结果会自动计算出减去Buffer delay后的真正的最大/最小Flight Time,也可以在其模型编辑器直接看器件的上升波形,测量其上升到Vms的时间,就可以大致确定Buffer Delay的时间,经过试验,发现两者计算出来的偏差在0.01ns左右。
2.如果IBIS的测试负载和器件手册上注明的Tco的测试负载不同的话,则可以用Cadence模型编辑器修改IBIS的端接负载和测量Tco的一致,然后从仿真出来的波形中得出Tco中的测量Buffer delay。
几点疑问:
1. 选用On-the-fly模式除了在计算buffer delay上,其他方面和选From Library有何不同?好像对仿真结果没有什么影响(除了Help文档上说的On-the-fly时Driver只能加Pulse激励)。
2. 如果IBIS模型中没有提供Vms ,Cadence将如何计算?其默认值是多少?
3. 上面对时序以及Cadence工具的理解是否有误?