little小蔡

TimeQuest约束外设之ddio的潜规则

0
阅读(7009)


最近调试了下altera里的ddio模块,在Timequest约束ddio_out输出时,遇到了一个其实不算是问题的问题。

ddio_out模块如图1所示。
图1
DH和DL在clk上升沿采样,时钟的高电平随即使能DH通道输出高位数据,下降沿到来时使能DL通道输出低位数据,这样就实现了数据的双边沿输出。

为了实现ddio_out的数据和时钟的源同步,必须要对输出ddr_out进行约束,简化后工程如图2所示。
图2

整个约束过程和其他外设类似,详情可以查看http://blog.chinaaet.com/detail/25677.html。首先创建衍生时钟,然后set output delay from衍生时钟 to ddr_out,最后查看输出的建立保持余量。

奇怪的事情发生了,Timing报告里只有sysclk (pll_inst|altpll_component|auto_generated|pll1|inclk[0]其实就是sysclk,下文都用sysclk代替) 到ddr_out的路径,如图3所示。按经验,约束一个系统的输出延迟,Timequest会自动列出输出寄存器的路径,ddio_out模块的输出寄存器有DH和DL,但是DHDL到ddr_out的时序路径报告哪去了呢?

图3

查看set false path,是否有将data_l和data_h到输出设为伪路径,结果sdc文件里没有关于ddio的伪路径。
查看Technology map viewer,DHDL寄存器是否被优化了,结果两个寄存器都还健在。
更改时序报告生成方式,试了Report Setup Summary、Report ALL I/O Timings...结果都一样。
最后换工程、换quartus 11(当前是9.1)、换电脑...就差没换人品了,Timing报告就是不显示DHDL的输出路径。

对于我非常确定及其肯定的经验,最终,还是妥协了,现在从头开始分析ddio_out的工作本质。Technology map viewer sysclk分析唯一的线索从sysclk到ddr_out的路径,如图4所示。源寄存器不在ddio里,而在pll模块里,Timequest将这条看似毫无关联的路径认为是影响ddr_out输出延迟的关键路径,嗯,这个问题开始有点意思。
图4


绘制出ddio_out的时序图如图5所示,sysclk和sysclk(sel)为同一个时钟,都由pll驱动,前者为DH和DL的采样时钟,后者控制选择器的选择端,由于路径不同,存在一定的sysclk_skew,Tco为约束对象ddr_out的输出延迟。
图5

假设改变DL、DH的输出dataout_ldataout_h的路径延迟,保持sysclk(sel)的延迟不变,ddr_out延迟会怎么变化呢?结果如图6所示,ddr_out的输出延迟没有变化。
图6

假设保持图6中的dataout_ldataout_h的路径延迟,增大sysclk和sysclk(sel)的延迟sysclk_skew,ddr_out还会不变吗?结果如图7所示,ddr_out的输出延迟变大了。
图7

从上述3个图的假设和结果可以证明,sysclk(sel)才是真正的关键路径,决定了ddr_out的输出延迟,而dataout_ldataout_h的路径应该就是伪路径了,所以Timequest只显示出这条路径信息,但是伪路径为什么没有出现在sdc文件的set false path呢? 我的回答是:它们不能算是伪路径。

dataout_ldataout_h的路径延迟虽然不会影响输出延迟,但会改变输出数据,如图8所示,同时增大dataout_ldataout_h的路径延迟,输出数据变混乱了,由于dataout_h延迟过大,在sysclk(sel)的高电平的前半阶段,仍然会输出上一个高位数据,dataout_l延迟过大也导致低电平阶段前期会输出了上一个低位数据。
图8

数据混乱,当然不是我们所期望的,所以dataout_ldataout_h的路径肯定还是要被约束的,既然在Timequest里都没有显示,我们肯定是没法操作了,那最大的可能就是被潜规则了,Timequest自己完成了这两条路径的约束,可以从图8推测出这条潜规则:0 < Tco_datah < sysclk_skew,sysclk_skew< Tco_datal < T/2。

综上所述,推测Timequest约束ddio_out输出延迟的过程:
1.根据约束要求,改变sysclk到ddr_out的路径延迟,满足约束要求。
2.潜规则,sysclk到ddr_out的路径延迟确定后,sysclk_skew也就定了,约束ddio_out的Dl,DH寄存器满足0 < Tco_datah < sysclk_skew,sysclk_skew< Tco_datal < T/2,保证输出正确数据。

为了简化用户的操作,Timequest内部还会有很多类似的潜规则约束。虽然无法得知DH、DL被潜规则后的心情是否和XXX一样无奈,只希望大家在遇到此类问题,不用再纠结了。