你的FPGA设计有这些缺陷吗
- 2019 年 12 月 17 日
- 笔记
上期内容:
UltraScale系列FPGA与7系列FPGA时钟资源有哪些不同

本文关注点:
缺陷1:过高的逻辑级数
缺陷2:过重的流水
缺陷3:直接实例化F7MUX、F8MUX或F9MUX
缺陷4:用LUT实现大位宽数据存储
FPGA设计,尤其是高速设计即主时钟频率超过300MHz,都会或多或少出现时序违例。而时序违例并不是单一的问题,它可能设计中的多个缺陷导致的。本文关注常见的以下几个设计缺陷。
缺陷1:过高的逻辑级数
所谓逻辑级数(Logic Level)是指时序路径起点和终点之间的组合逻辑单元的个数,这些逻辑单元可能是查找表(LUT)、进位链(Carry Chain)、数据选择器(F7MUX/F8MUX/F9MUX)等。如下图所示路径,其逻辑级数为4。

逻辑级数会清晰地显示在时序报告中,对于上图所示时序路径,其时序报告如下图所示。图中红色方框标记的部分即为逻辑级数,同时也显示了逻辑级数的构成单元。

逻辑级数过高带来的后果是组合逻辑延迟很大。如下图所示的报告,可以看到该时序路径逻辑级数为15,逻辑延迟(Logic Dealy)为1.319,占总延迟的13.427%。逻辑级数过大,很大程度上与RTL代码风格相关,因此,为降低逻辑级数,通常要从优化代码的角度考虑。这种改动通常比较大,建议在设计初期就做好逻辑级数的评估。

缺陷2:过重的流水
对于逻辑级数较高的路径,典型的优化方法是插入流水寄存器,将组合逻辑打断。这往往会给很多初学者一个误导:流水寄存器越多,时序越容易收敛。本质上,这两者并没有必然的关系。只能说,在合理范围内,流水寄存器会对时序收敛带来一定的好处。过多的流水寄存器,一方面造成输入到输出的Latency增大,另一方面也增加了触发器的利用率。触发器利用率的增加意味着其控制集(时钟、使能、复位/置位)很有可能增大,从而可能导致布线拥塞。
缺陷3:直接实例化F7MUX、F8MUX或F9MUX
无论是7系列FPGA还是UltraScale系列FPGA,其SLICE中都包含F7MUX和F8MUX,UltraScale系列FPGA中的SLICE还包含F9MUX。这些MUX在如下情况时会被工具自动推断而被使用:
一个8:1MUX需要2个LUT和1个F7MUX;
一个16:1MUX需要4个LUT、2个F7MUX和1个F8MUX,其中F8MUX的输入分别来自于这两个F7MUX的输出;
一个32:1MUX需要8个LUT、4个F7MUX、2个F8MUX和1个F9MUX,其中F8MUX的输入分别来自于这两个F7MUX的输出;F9MUX的输入分别来自于这两个F8MUX的输出。
F7MUX、F8MUX、F9MUX都是2:1的MUX,有些工程师觉得没用这些资源挺可惜,于是就直接通过原语(Primitive)的方式使用,这实际上会造成SLICE端口密度增大,尤其是使用量比较大的时候,最终导致的后果就是布线拥塞。
缺陷4:用LUT实现大位宽数据存储
SLICEM中的LUT可以用做RAM或ROM,例如,可以存储滤波器系数、FFT的旋转因子等。作为一种轻量级的存储资源,其在速度和功耗上都有一定的优势。但如果是存储大位宽的数据,例如位宽为256或1024等,即使深度只有16或32,在高速设计中,仍然建议使用BlockRAM,而不是LUTRAM。毕竟每个LUT只提供1bit输出,256的位宽意味着至少需要256个LUT,而这些LUT必然分布在不同列的SLICEM中,无论对布线还是时序都会带来负面影响。
文 | Lauren 图 | Laur
Copyright @ Lauren的FPGA
转载事宜请私信 | 获得授权后方可转载