set input delay默认是基于时钟上升沿设置,TimeQuest不清楚用户的真实使用情况:上升沿发出的ddio_in数据到底是被DFFH采样还是被DFFL采样呢,所以默认源端上升沿发出的数据会同时被这两个D触发器采样,这就出现了上述rise to fall和rise to rise两条路径,第二条无关路径设置为伪路径后可以被去除。
双边沿约束的问题解决了,可是官方对fall的解释 the falling input delay 是神马意思呢?都是四级的词汇,凑在一起,就不是很明了了,数据下降延迟?听起来总感觉怪别扭的。一组输入数据变化时,哪有上升和下降之说?(数据从0010变为1001,你说是上升还是下降呢?),上升下降应该是针对某一根数据线的变化而言的(数据从0010变为1001,你可以说第0位上升了,第1位下降了),但是TimeQuest真的想知道你每根数据线的上升下降延迟吗?
No no no,回想下set input delay的本质是告诉Timequest最大输入延迟让其约束建立时间,和最小延迟约束保持时间,TimeQuest只想知道输入的最大最小延迟就可以了。源端发送数据的每一位的上升延迟和下降延迟可能会不一样,也有一个大小之分,比如第0位上升延迟为0.4ns,下降延迟为0.8ns,第1位的上升延迟为0.5ns,下降延迟为0.9ns,TimeQuest会用其中相对较大的0.9ns去分析建立时间,相对小的0.4ns去分析保持时间,而不会去关心数据具体某位是如何变化的。既然TimeQuest只关心延迟的大小,那只要在set input delay里设置max min delay不就可以了吗,何必设置rise和fall呢?
测试后发现,如果不设置rise和fall,会导致约束不精准。举个例子:源端发出数据的输入上升延迟Tdelay_rise为0.5ns,下降延迟为Tdelay_fall为0.8ns,路径最大延迟为2ns,最小延迟为1ns,只设置set input delay的 max delay为2.8ns,min delay 为1.5ns,其中ddio_in[1]的路径延迟报告如下图所示。
注意红色线标记,data path为2.129ns。
如果加上rise 和fall选项,设置 max fall 为2.8ns,max rise 为2.5ns,min fall 为1.8ns,min rise 为1.5ns,ddio_in[1]的延迟报告如下图所示。