FPGA学习日记-时序约束

文章目录

  • 简介
    • 问题-方法
      • 某次运算的组合逻辑多:
      • if-else组合逻辑多导致的延时长:
      • 多次运算组合逻辑导致延时长
      • 位宽大(进位链很长):
      • fanout大
      • reset信号多
      • 多周期路径
      • 异步路径
      • 亚稳态两级寄存器
      • 布局走线很长
      • 最后的方法
    • 多使用IP、DSP

简介

时序约束对于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:

  1. 从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试逻辑,静态或准静态逻辑。
  2. 从时序上考虑,我们在综合时不需要分析的那些路径,比如跨越异步时钟域的路径。

亚稳态两级寄存器

在芯片设计中利用两级触发器防止信号的亚稳态传播,此时两级触发器的第一级是不做时序检查的,因此在设计约束中也需要将其设置为False path来避免对第一级触发器进行时序分析。

布局走线很长

可以试着使用planhead对每个模块进行区域划分,这样能保证走线不会很长。

最后的方法

以上方法都使用之后,只能调布局布线策略,或者换更快的片子(走线延时下降)。

多使用IP、DSP

自己写的代码远不如调用ip和dsp好,因为FPGA在设计时dsp等内核已经有规律放置指定位置,所以布局布线更好过。

你可能感兴趣的:(FPGA)