电子说
时序约束出现时序违例(Slack为负数),如何处理?
答:
一. 首先指出一个误区:当约束出现错误时,想当然地认为是“时序约束做得不对”,所以应该怎么去改“时序约束”,从而让这些错误消失,这是一个错误的观念。
二. 时序约束的作用:在于检查“设计是否满足时序要求”,它是用来审视自己设计的,很多情况是,要改设计代码来满足时序要求。
三. 当时序约束提示有错误时,应该阅读“时序报告”,从报告中分析时序路径(数据到达时间、时钟到达时间和数据要求时间等),根据报告分析错误的原因,并根据原因来实行不同的方法。
以建立时间违例,说明具体方法如下:
1. 时序报告中,找到提示错误的路径,即目的寄存器,以及源寄存器。注意,这是两个寄存器的点。
2. 首先判断,源寄存器的时钟,与目的寄存器的时钟,是否相同。如果不同,可以认为是异步时序,见步骤3;如果是相同,则看步骤4。
3. 如果是异步电路,那么处理方法如下:
A. 确认做了异步处理。对于数据,则是通过异步FIFO来做异步处理;如果是控制信号,则要经过打两拍来处理。
B. 确认做了异步处理后,仍然会报“时序违例”的。这个时候,可以该路径设置成set false path,不用再检查。
4. 同步电路下,具体处理如下:
A. 查看两个寄存器点之间,经过了多少加法器、乘法器、除法器等。
B. 对于除法器,要特别留意,一般是1个时钟计算不完的。那么可以 a.想办法不用除法;b. 通过使能信号控制获取除法器结果的时间。
C. 对于乘法器和加法器,或者其他组合电路较多的。想办法分隔成流水线来实现。可以参考MDY 流水线的内容。
5. 如果是IP核的违例,检查是否时钟不满足IP核的要求。如果没问题,就不用管。
6. 如果是ILA等在线调试工具路线的违例,则一般不用处理。
7. 如果是线延时太长的,可以尝试打一拍处理。即A->B的线太长,可以打一拍,变成A->C->B,这样线延时就小了。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !