同步接口与异步接口约束
时间:10-02
整理:3721RD
点击:
DC综合最重要的就是约束了,如果约束不恰当,还真是画蛇添足,约束使得结果错误。
同步接口的确要用同步方法约束,set_input_delay。而异步接口就该是set_max_delay。有的时候,一个输入被很多时钟域使用,这个时候该是同步还是异步呢?异步吧,因为这些时钟本就是异步。但问题就是,这个max_delay也不好设置,因为首先要大于所有时钟的最大delay,要小于最快时钟的周期,其实这根本不是最好的,那么有没有约束让每个时钟的路径针对自己的时钟,好像是对这个port设置add inputdelay。然后对这些时钟间设置false path。
做约束前必须要做的工作是,画出每个接口的时序图。比如SPI的时钟是下降沿输出,那么路径只有半个时钟的长度可以用。当然,SPI一般很慢,怎么设置好像都不会有问题。如果时钟在先,数据在后的,就是同步逻辑。而异步逻辑没有时钟概念,但也有上升沿,而设计中一般也是拿这个沿来采集数据。感觉好像跟同步逻辑没有区别。这个时候好像按照同步设计更合理,因为一般你会为这个不是时钟的端口设为时钟,那么就有时钟延时,你当然希望数据也能够有那么点延时了。这个时候的输入延时就很大了,因为一般数据比时钟不会提前一个周期那么长吧。同样,如果是同步逻辑设计,虽然有时钟,但这个时钟在内部被作为使能在使用,就有必要注意了,一般输入来的时钟要比数据晚那么一点,比如一个寄存器的延时那么多,即上升沿来后数据有效,问题是这个怎么看都像是异步时序,还是两个时钟域,因此,需要考虑好,对于同步时序,有使能和数据两部分。用同一个时钟去采一般不会有问题,因为有保持建立时间约束到的,时钟作为输出,ICC做时钟树的时候,一般不会平衡这一部分,因为你没有指定是这个时钟的输出来采集相应数据,因此,有可能pt分析时候没有问题,但实际上有问题,因为,实际的时钟延时要比pt的延时还要大,导致保持时间不满足。
说道DC,就多说两句:
1、如果if语句在时序电路中加了eles a <=a;面积要比不加这句多余的大,因为DC会映射出个mux来。
2、如果一个逻辑要DC自己解析,比如状态机等,如果你约束时钟很慢,你会发现有可能给你的电路还真的慢的可以,我记得我有个除法器,要用到DW库,我约束40ns的时钟,他给的电路还是40ns的,我还以为就这么慢了,我认为不可能,所以改为4ns试试,结果令我大吃一惊,居然给出个只要6ns的除法器,而且DRC没有违例的。
最怕的是一个异步电路,内部使用的时候上下沿都在用,当然从时序上看,的确没什么问题。关键是怎么约束。使得上升沿的路径可以尽量短的同时下降沿的路径尽量长。
同步接口的确要用同步方法约束,set_input_delay。而异步接口就该是set_max_delay。有的时候,一个输入被很多时钟域使用,这个时候该是同步还是异步呢?异步吧,因为这些时钟本就是异步。但问题就是,这个max_delay也不好设置,因为首先要大于所有时钟的最大delay,要小于最快时钟的周期,其实这根本不是最好的,那么有没有约束让每个时钟的路径针对自己的时钟,好像是对这个port设置add inputdelay。然后对这些时钟间设置false path。
做约束前必须要做的工作是,画出每个接口的时序图。比如SPI的时钟是下降沿输出,那么路径只有半个时钟的长度可以用。当然,SPI一般很慢,怎么设置好像都不会有问题。如果时钟在先,数据在后的,就是同步逻辑。而异步逻辑没有时钟概念,但也有上升沿,而设计中一般也是拿这个沿来采集数据。感觉好像跟同步逻辑没有区别。这个时候好像按照同步设计更合理,因为一般你会为这个不是时钟的端口设为时钟,那么就有时钟延时,你当然希望数据也能够有那么点延时了。这个时候的输入延时就很大了,因为一般数据比时钟不会提前一个周期那么长吧。同样,如果是同步逻辑设计,虽然有时钟,但这个时钟在内部被作为使能在使用,就有必要注意了,一般输入来的时钟要比数据晚那么一点,比如一个寄存器的延时那么多,即上升沿来后数据有效,问题是这个怎么看都像是异步时序,还是两个时钟域,因此,需要考虑好,对于同步时序,有使能和数据两部分。用同一个时钟去采一般不会有问题,因为有保持建立时间约束到的,时钟作为输出,ICC做时钟树的时候,一般不会平衡这一部分,因为你没有指定是这个时钟的输出来采集相应数据,因此,有可能pt分析时候没有问题,但实际上有问题,因为,实际的时钟延时要比pt的延时还要大,导致保持时间不满足。
说道DC,就多说两句:
1、如果if语句在时序电路中加了eles a <=a;面积要比不加这句多余的大,因为DC会映射出个mux来。
2、如果一个逻辑要DC自己解析,比如状态机等,如果你约束时钟很慢,你会发现有可能给你的电路还真的慢的可以,我记得我有个除法器,要用到DW库,我约束40ns的时钟,他给的电路还是40ns的,我还以为就这么慢了,我认为不可能,所以改为4ns试试,结果令我大吃一惊,居然给出个只要6ns的除法器,而且DRC没有违例的。
最怕的是一个异步电路,内部使用的时候上下沿都在用,当然从时序上看,的确没什么问题。关键是怎么约束。使得上升沿的路径可以尽量短的同时下降沿的路径尽量长。
我觉得set_max_delay是用来设置内部组合逻辑的timing exception的,要是用来约束输入输出delay的时候有点不靠谱!我是做FPGA的,最近一直在研究STA,希望能够指教一下!对异步接口的约束也是差不多这样理解的!
我今天刚看到set_max_delay。就是不知道什么时候用。如果是两个时钟域的话我觉得设置虚拟时钟就可以了。不知道小编说的异步设计是指什么?异步设计DC是不能综合的!
异步设计是指什么