其实一般来说,时序逻辑信号要满足建立时间和保持时间并有一定的余量。只要满足这个条件,信号是可以不严格等长的。然而,实际情况是,对于高速信号来说(例如DDR2、DDR3、FSB),在设计的时候是无法知道时序是否满足建立时间和保持时间要求(影响因素太多,包括芯片内部走线和容性负载造成的延时差别都要考虑,很难通过计算估算出实际值),必须在芯片内部设置可控延时器件(通过寄存器控制延时),然后扫描寄存器的值来尝试各种延时,并通过观察信号(直接看波形,测量建立保持时间)来确定延时的值使其满足建立时间和保持时间要求。不过同一类信号一般只对其中一根或几根信号线来做这种观察,为了使所有信号都满足时序要求,只好规定同一类信号走线全部严格等长。
上面说的是高速并行信号。对于高速的串行信号,如果是带时钟的,时钟和串行数据也必须满足建立保持时间要求,所以也要控制好长度。
有些高速串行信号虽然带时钟,但这个时钟不是用来锁存数据而是一个频率较低的参考时钟,那么数据和时钟以及多个通道之间的数据的skew就可以宽松很多,不用严格等长,因为接收芯片是能够正确找出每个通道的起始位并且把参考时钟经过PLL倍频和相移来锁存数据的。例如TMDS信号,串行数据的差分对之间要严格等长,但数据之间的skew放宽到+/-20%的时钟周期。不过为了避免不必要的问题,一般来说像TMDS、PCI-E这些串行信号,通道间一般也要做等长,不过允许的偏差可以比较大,例如200ps以上。
至于低速信号,其建立保持窗口一般在ns级以上,这样就没必要做长度控制了,因为无论布线怎么差也很难搞出ns级的skew。