时序问题除了复位信号用set_false_path以约束的方式来进行优化,大多数问题在设计的时候就避免了。比如跨时钟问题(CDC,Clock Domain Crossing),通过加入一个异步FIFO即可解决。此外,多周期时钟尽量做到同源,即由同一个MMCM生成。
在配置RAM、乘法器等IP核时,按照建议的pipeline stage设置(根据代码时序需要可设置的更大),最后,根据动态规则检查(DRC,Dynamic Rule Check)以及时序报告(Timing Report)的提示,在代码相应部分添加pipeline,时序改变后注意保持原代码功能。
总之,写代码时为避免思路混乱,多加几个状态机就简洁了。时序优化时,多加几个pipeline也就解决了。(补充,问题模块前加(* keep_hierarchy = “true” *)也会有一定改善,问题模块增加复位信号--上一模块传递过来的启动信号往前打一拍可作复位信号用。)
其他:FPGA时序优化八大忠告