在《delayline设计demo》一文中,我们知道delayline的具体delay值是通过其输入端口delay_ctrl来调节档位决定的。这个delay_ctrl可以接到寄存器中,通过MCU来配置;也可以接到某些特定电路的输出,通过硬件来配置。那在实际项目中,我们是如何是去确定delay_ctrl的具体值的呢?本文以flash控制器为例,提供几个思路,供大家思考。 思路一 delayline只加在clock上。在STA修timing的过程中,将data bus做齐。然后在实际使用中,通过校准电路去遍历所有的档位,对flash进行读写比对。倘若在第5档和第10档之间读出来的数据和写进去的数据都是可以比对成功的。那就说明采样窗口是5到10档之间,我们可以取中间值7或8。 优点: 占用的资源少。 缺点: 需要做读写操作,耗时长。 在STA中,很难保证所有corner都能够满足对齐的条件,特别是lib一致性不好的情况。 思路二 delayline只加在clock上,然后在系统中加上一个温度传感器,并在产品测试的过程中,给芯片设置不同的工作环境,例如三温测试。遍历所有的工作环境,并将每种情况的采样窗口中间值记录起来,最终得到一张表。在实际中,我们再将这张表存到一片memory里,根据温度传感器的输出去查找表中去相应的值。 优点: 在实际工作中不需要进行读写操作,可以缩短初始化和校准的时间。 缺点: 不仅要加传感器,还要加memory,增加制造成本。 增加了测试难度和测试成本。 思路三 delayline加在data bus上,或者同时加在data bus和clock上。使用思路一的方法去进行遍历。 优点: 于前面两种方案相比,兼容性更强。 缺点: 档位的组合太多,遍历时间太长。
原作者:七点班车 IC小迷弟
|