-
合理处理参数
不同于软件算法中将参数作为形参传入算法,FPGA设计中需要将参数作为编译参数,参数的确定和调试工作交给软件完成,以降低资源的消耗。*资源消耗过多会给时序收敛带来挑战,原则上资源消耗为FPGA50%的总资源是合理的,超过80%就要考虑资源优化问题。 -
资源及模块复用
通过使用复用器可以让设计中的多个部分共享一个昂贵的资源,但需要满足以下条件:1.建立该资源的开销 > 共享该资源的开销;2.该资源只能被部分使用,不能完全被使用,否则会减慢系统速度;3.若该资源必须被多个模块同时使用,需要创建副本[注1]。
防止冲突,即限制对资源进行多个同时访问,有两种方式:1.设计仲裁电路;2.计划性访问[注2]。
[注1]在 FPGA 中创建资源副本通常是为了提高性能、减少延迟或增加系统的容错能力。您可以使用以下方法在 FPGA 中创建资源的副本:
1.逻辑复制:对于逻辑电路,您可以简单地复制逻辑代码以创建副本。这意味着您需要在 HDL(如 Verilog 或 VHDL)中多次实例化相同的逻辑模块。
2.资源复制:对于硬件资源(如存储器、DSP 块等),通常可以通过在综合阶段或布局阶段指定资源的多个实例来创建副本。在综合时,您可以使用综合工具的指令或约束来控制资源的复制数量。
3.区域复制:在某些 FPGA 架构中,可以通过将逻辑放置在特定的物理区域来实现资源的副本。这种方法可以通过布局约束或者综合时的区域指令来实现。
流水线化:另一种常见的方法是通过流水线化来创建资源的副本。这种方法将逻辑或计算任务分解成多个阶段,每个阶段可以并行执行,从而提高性能。
[注2]在 Verilog 中实现计划性访问的方式有很多种,具体取决于所需的访问模式和设计需求。常见的实现手段包括:
1.使用循环:可以使用 for 循环或 repeat 循环来遍历存储器的位置或执行重复的操作。
2.使用计数器:可以使用计数器来控制访问的次数或位置。
3.使用状态机:可以设计一个状态机来控制计划性访问的顺序和行为。
- 防止亚稳态
亚稳态主要发生异步信号检测、跨时钟域信号传输及复位电路等常用设计中,只要系统中存在异步元件,就无法避免。其存在会导致逻辑判断错误,甚至还会使下一级产生亚稳态。
【异步多拍处理】模块引入异步信号(与本地时钟不同域的信号)必须进行多拍处理防止亚稳态,通常采用“三级寄存器同步”方式,使亚稳态的出现概率降为0。适用于同频不同相的异步时钟域,并且对少量错误不敏感的功能单元。
【FIFO异步缓存】适用于不同频不同相的异步时钟域,进行带宽匹配。
【异步复位,同步释放】它是指在系统中发生故障或异常情况时,首先通过异步复位将系统恢复到一个安全的状态,然后在确定系统稳定后再进行同步释放,使系统可以继续正常运行。通常使用一个或多个寄存器来实现异步复位,使用FPGA的时钟网格和逻辑资源来实现同步释放。