文章目录
简介
时序约束对于FPGA来说太重要啦。
时序优化手段主要是几种:改代码,位置约束,优化策略。
问题-方法
时序违例主要是三种:扇出大(如复位信号,扇出大导致驱动力不足),连线延时(布线较远),组合逻辑(可以减小位宽/多级流水线,插入寄存器解决)
某次运算的组合逻辑多:
改代码!
拆分为最简单的逻辑门。(优化组合逻辑)
if-else组合逻辑多导致的延时长:
将最长延时(经过逻辑门多)的条件项优先判断。
if -else if-else是优先译码器,而if-if-if是并行译码器。如果两者都是根据条件对out进行赋值,那么如果两者译码器所有条件都满足,优先译码器会执行第一个if,而并行译码器则执行最后一个if(这时候已经不是并行的译码器了,而是有先后顺序的MUX)
多次运算组合逻辑导致延时长
插入寄存器,即流水线。(这个算FPGA初学者能做的最多的时序优化了)
位宽大(进位链很长):
改代码!
保证位宽为4bit-6bit(因为fpga一般是4输入LUT,xilinx 7系列的能扩展为6输入LUT)。
使用流水线技术,如果是8bit位宽的乘法器就流水 log4(8)+1=3 级。
fanout大
设置约束 max fanout
reset信号多
只要不依赖复位信号的,都建议不要reset。(fpga同步置位/复位,不要使用negedge reset)
多周期路径
设置多周期路径约束
异步路径
异步路径不宜过多,最好分模块(不同位置用不同时钟)。
设置false path(伪路径)
在QuartusII的一个培训文档里面解释了什么时候要用到FALSE PATH:
- 从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试逻辑,静态或准静态逻辑。
- 从时序上考虑,我们在综合时不需要分析的那些路径,比如跨越异步时钟域的路径。
亚稳态两级寄存器
在芯片设计中利用两级触发器防止信号的亚稳态传播,此时两级触发器的第一级是不做时序检查的,因此在设计约束中也需要将其设置为False path来避免对第一级触发器进行时序分析。
布局走线很长
可以试着使用planhead对每个模块进行区域划分,这样能保证走线不会很长。
最后的方法
以上方法都使用之后,只能调布局布线策略,或者换更快的片子(走线延时下降)。
多使用IP、DSP
自己写的代码远不如调用ip和dsp好,因为FPGA在设计时dsp等内核已经有规律放置指定位置,所以布局布线更好过。