多个OCC需求:
当一个设计中存在多个PLL时,输入到每个PLL单元的参考时钟必须是测试模式下的自由运行时钟(PLL的输入时钟必须是free-run的,不能被阻塞,否则PLL会停止震荡导致PLL出错)。必须注意确保OCC控制器不会插入到会阻塞到下游PLL单元的自由运行时钟的位置。
在上图这个设计示例中,名为UPLL1的主PLL接收输入参考时钟(从PAD port进来的板子上稳定的高精度晶振时钟)并生成PLL输出时钟。该PLL输出时钟然后馈送第二PLL(作为UPLL2的参考时钟)或时钟分频器单元(分频对象时钟),产生第二级联PLL输出信号。
针对该clock结构的电路设计,有如下两种OCC-insert的设置:
1. 错误的做法:OCC controller直接插在两个PLL的输出端,这种在UPLL1输出端直接插OCC controller就是错误的做法。
这种OCC-insert设置就会有如下情况:
①OCC controller会被直接插在UPLL1的output端;
②导致输入到UPLL2 reference clock不能free-run,而会被第一个OCC controller阻断,导致UPLL2没有reference clock而出现UPLL2错误、无法正常震荡。
2. 正确的做法:在UPLL1的输出端到FF1的clock分支加个buffer U1,然后在UPLL2和和buffer U1后面插入OCC controller。
这样,使用一个buffer 去隔离第一个OCC controller驱动的下游扇出fanout的负载,这样第一个OCC controller就不会影响到UPLL2的输入reference clock了。
这种OCC-insert 设置就会出现如下情况:
①OCC controller会被插入到由UPLL1驱动的buffer U1的输出端
②这样使得UPLL1的输出时钟free-run clock能直接传送到UPLL2的输入端作为UPLL2的reference clock,从而UPLL2能够正常操作、稳定输出free-run的PLL clock。
注:你必须使用一个set_dont_touch命令或者set_size_only命令或者是使用hierarchy synthesis flow等来确保隔离buffer U1不会被综合过程优化掉。OCC controller插入之后,生成的test protocol 其reference clock是指定到PLL pin的。
DFTC userguide原文:
You must ensure that the isolation buffer is not optimized away by applying a set_dont_touch
command, applying a set_size_only
command, or using hierarchy. After the clock controller is inserted, the resulting test protocol references the specified pin as a PLL pin.