首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
资源利用率报告中的LUT和LUTRAM有什么区别
2
xilinx verilog语法技巧(三)--RAM的初始化
3
为什么推荐使用XPM?
4
Block RAM的基本结构
5
为什么要用XPM_MEMORY
6
Vivado中用于时钟操作的几个Tcl命令
7
影响FPGA时序的进位链(Carry Chain), 你用对了么??
8
动态时钟相位
9
动态时钟频率
10
如何缩短Vivado运行时间
11
你的FPGA设计有这些缺陷吗
12
report_utilization远比你想象的强大
13
vivado如何快速找到schematic中的object
14
FPGA中的CLOCK REGION和SLR是什么含义
15
FPGA中的BEL, SITE, TILE是什么含义
16
如何快速查找目标cell
17
都是pin,有什么区别
18
都是net,有什么区别
19
一张图看懂cell, pin, net, port
20
如何快速找到组合逻辑生成的时钟
21
【Vivado那些事】Vivado下头文件使用注意事项
22
Pblock可以这么画
23
关于Pblock的8个必知问题
24
常用的跟Pblock相关的Tcl命令
25
【Vivado】那些事儿-汇总篇
26
【Vivado那些事】Xilinx FPGA普通IO能不能直接接入PLL作为时钟输入
27
Storage Elements
28
D触发器都有哪几种类型?对应什么样的代码?
29
Xilinx 7系列FPGA逻辑单元理解
30
Vivado下查看芯片资源
31
对RAM初始化怎么做
32
干货:Vivado 直接修改RAM初始化文件,避免重新综合、实现的方法
33
借助Elaborated Design优化RTL代码
34
一张图理解什么是好的设计层次
35
9个关于SSI芯片的必知问题
36
Vivado 2018.3 report_qor_suggestions怎么用
37
Vivado 2019.1新特性(5):更新的report_qor_suggestions
38
Xilinx的高质量时钟输出ODDR原语【随路时钟】【全局时钟网络】【ZC706输出时钟】【ZYNQ】
39
FPGA中BEL Site Tile FSR SLR分别指什么?
40
跟I/O相关的几个命令
41
Vivado Non-Project模式
42
FPGA中降低时钟skew的几种方法
43
FPGA时序优化之Reduce MUXF Mapping
44
什么是Forwarded Clock?
45
几个常见问题
46
如何让同一层次的模块在布局时更紧凑一些
47
什么情况下要用OOC综合方式
48
Vivado 2019.1新特性(2):report_ram_utilization
49
URAM和BRAM有什么区别
50
write_first/read_first/no_change什么区别
清单首页FPGA文章详情

你的FPGA设计有这些缺陷吗

上期内容:

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

转载事宜请私信 | 获得授权后方可转载

下一篇
举报
领券