对input_delay和output_delay的理解

来源:互联网 发布:mac调试 trinitycore 编辑:程序博客网 时间:2024/06/09 13:38

input_delayoutput_delay的理解

觉得对input我应该知道的是对端其间的tco,对于output我们应该知道对端器件的setuphold,因为我以前就是拿来对端器件比如一个ADC的数据手册它上面就这么写的,然后我按照它写的参数来约束保证接口时序。

     想了一会发现,其实对这个问题是应该这样理解的,我们现在是做芯片的了,是我们自己要写芯片手册了,我们该写到手册里的就应该是上面这样的参数,这个参数有可能是一些经验值,有可能是参照其他同类芯片的参考值,也有可能就是根据与自己的芯片对接的芯片的参数确定的(就像FPGA一样),但是我们写在手册上的好像就应该是这样的值。

理解了这点,但是还是觉得不知道怎么约束,因为我得到参数并不是我想要的,对于这点其实只要理解了约束input_delayoutput_delay的那几个词到底都指得是什么东西可能就好理解了。

还是看这个时序分析的图,我们要约束的是图中Input_Path这条路径,那么约束这条路径到底是为了什么呢,是为了让软件求出图中x的最大和最小值,无论是综合还是STA都是这样。实际上这条链路上有两个量是未知的,clk0clk1的关系是未知的,信号从clk0到芯片输入端总的tco是未知的。其他信息包括clk1本身时钟的一些特性,内部寄存器的setuphold等等这些量都是已知的。

2

    那么实际上这句set_input_delay就是在告诉软件这两个未知量的值,首先在约束前会创建一个虚时钟如图 3,这个时钟就代表clk0,在DT003里根据需求创建了一个100M,相位为0,即与clk1相同相位的时钟。

3虚拟时钟创建

但这里并没有完全解决第一个未知条件,实际上clk0clk1的即使在单板上由同一个时钟芯片产生,但到达两个芯片的延时也不会相同,所以两个时钟的相位不是理想的相差为0,这里我们把两个时钟的相位关系这一部分时延折算到了Input_delay里面,这里把从clk0MY chip输入端口上面所有的时延称作Rtco,而将时钟原点到clk1clk0的延时之差称作clk_dly(Delay_clk1  –  Delay_clk0),那么Input_delay值和Rtco以及clk_dly的关系可又下图所示。

4  input_delay的真实含义

从上面图中可以看出,input_delay = Rtco – clkdly这样我们把两个未知量合并成一个未知量,在我们的约束语句中用max_delaymin_delay的形式给出约束范围。这么看应该可以解释为什么约束input_delay时会有负值,当clk1clk延后时间大于Rtco时,那如果我们依然认为信号是从vir_clk0打出来的话,真实信号就是有着负tco的。

讨论到这里现在来看下根据DT003给的Timing Spec我们要怎样约束input_delay,表中给了DT003这个端口的Setup要求为最小3nshold要求为最小-0.5ns,这里已经按上面的方法把真实路径通过input_delay折算到了vir_clk0clk1这条理想路径上来了,如果我们芯片要求3ns的最小建立时间,那么对接芯片加上单板时延就一定得在满足这个要求我才能正常工作,所以看到max_input_delay从图 5中得出,为周期-setup

5

对于hold这里给出了一个负值-0.5,意思是说在我芯片管脚位置,我的时钟有效边沿来的时,其实在最多0.5ns之前输入信号就已经变化成下一个值了,即便这样我的芯片还是能保证对数据的正常采样,因为有我们的x在。如图 6所示,min_input_delay =hold,是个负值。

6

    于是有了我们的约束:把不知道的时钟指定成创建的虚拟时钟,把不知道的input_delay的最大最小值指定一下,这样就完成了约束,软件也就知道了x的取值范围。

 

对于output_delay的约束同样看下下图。Output_Path是我们要约束的路径,还是为了求图中的x而进行约束。

7

对于同样的这次我们clk1是不知道的,创建一个虚拟时钟vir_clk1,同样的我们把时钟相位的延时折算到output_delay里面了,在约束output _delay时认为采样寄存器本身的SetputHold时间都是理想的0,可以理解为把他们本身也折算到output_delay这个值里面了,这样我们就又得到了一个经典时序分析模块型了。

看看给我们的参数,My chipTCO最大值为5ns,最小值为1ns。就是说我芯片最大可能有5nsTCO那么对接芯片和单板设计要保证我TCO=5时必须可以使对端芯片正确采样数据,那么他们最多只有“周期-maxTCO”这么多时间可以用,也可如图 8所示。

8

     我们芯片的最小TCO可能是1ns,就是说对数据我们芯片最小也能提供1ns的延时,那么如果当刚好满足到对端芯片寄存器Dhold0的临界要求。我们芯片可以允许外面的东西带来一个-1nsoutput_delay,这里负值同上面输入时说的是折算时钟相位延时得到的。如果再小就满足不了hold要求了,那么就是说这个最小的output_delay就是“-TCOmin”,如图 9所示。

9

根据上面所述将output_delay约束为:

上面的约束值都是STA时的值,综合时候需要加入一定的余量,就是max在约大一点点0.几个nsmin在约小一点点,让综合工具更努力些。