时序约束错误解决方法总结

        对于ISE编译中出现的时序约束,在上板调试之前必须要消除,否则会有系统功能异常情况,而且功能异常的情况可能会每次编译都表现不一样。
        有很多关于消除时序约束错误的方法,例如在UCF文件中对工程中使用的系统时钟信号频率进行约束,这是最基本的,我认为也是很必要的,但在UCF中做其他的时序约束我就觉得作用不大了,例如约束某个信号的from.....to....,控制延时,或者在UCF中约束某个功能模块编译区域,也就是把某个功能模块的布线限制在一个区域内。
       根据我的经验,与其花心思在UCF中进行时序约束,去干预编译器布线,不如花更多时间去优化自己代码,让编译器随便布线,这才是一劳永逸的方法。我们在实践中一般遇到的时序约束错误就是路径延时不满足系统时钟频率要求的那样,以下就解决路径延时不满足时序要求,分享一下我的经验。 
1 存储资源的使用,RAM或FIFO,对于RAM资源尽可能的使用block ram资源;使用distribute ram资源会给编译器的布线很大压力,如果ram使用深度又很大时,一般都会造成地址路径延时过多,出现时序约束不满足。
2  尽量不要使用组合逻辑实现功能;如果使用组合逻辑实现,造成路径延时过大,出现时序约束错误时,就只能对代码进行修改,在指向的时序约束错误路径中间添加寄存器,把整个路径用寄存器分割一下,时序就能达到要求,
(1)从a 寄存到c寄存之间的路径出现延时过大,则在a和c之间添加一个b寄存器,即路径变为a寄存到b寄存,再从b寄存到c寄存。
(2)从a寄存到c寄存,且还有a寄存到d寄存,路径延时过大,则可以现在a寄存和c寄存之间添加一个b寄存试试,一般是可以改善整个路径延时的,如果还不满足,则需要在a寄存和d寄存之间添加寄存器;
(3)在有组合逻辑时序约束不满足时,优化代码时,优先考虑位宽较大的并行信号,一般把位宽较大的并行信号进行优化后,整个工程的时序会改善很多。

你可能感兴趣的:(时序约束错误解决方法总结)