1、分解深层存储器配置
,
实现功耗与性能平衡
在深层存储器配置中
,
可使用综合属性
RAM_DECOMP
实现更好的存储器分解并降低功耗。此属性可在
RTL
中设置。将RAM_DECOMP 属性应用于存储器时
,
存储器是在较宽的原语配置中设置的
,
而不是在较深且较窄的配置中设置的。
当
CASCADE_HEIGHT
属性与
RAM_DECOMP
属性搭配使用时
,
综合推断对级联具有更细化的控制权
,
因此可实现平衡的功耗与性能。此方法需要额外的地址解码逻辑,
但可减少任意时间点访问的块
RAM
数量
,
这有助于降低功耗。下图中的存储器配置 (32 × 16K)
显示了设置
RAM_DECOMP
和
CASCADE_HEIGHT
属性时分解存储器的方式示例。
如果应用属性
RAM_DECOMP
= power
和
CASCADE_HEIGHT
= 4
,
那么将按下图所示方式推断
16 RAMB36E2
并对存储器进行分解。
此处使用的基本原语为
32 × 1K
,
4
个块
RAM
通过内置功能进行级联
,
组成
32 × 4K
配置。
4
个此类并行结构可创建1 个深度为
16K
的存储器。输出通过多路复用来生成输出数据。
如果仅应用
RAM_DECOMP
= power
属性
,
则将按下图所示方式推断
16 RAMB36E2
并对存储器进行分解。
此处使用的基本原语为
32 × 1K
,
8
个块
RAM
通过内置功能进行级联
,
组成
32 × 8K
配置。
2
个此类并行结构可创建1 个深度为
16K
的存储器。输出通过多路复用来生成输出数据。多路复用器为
2:1 MUX
。
2、当存储器深度不为
2
的幂时
,
优化
RAMB
使用率
以下测试案例可用于观察由综合工具生成的
log
日志文件
,
了解是否可通过改进
RTL
来帮助工具改进。以下代码片段显示了 VHDL
中深度
40K
宽度为
36
位的存储器描述。地址总线需占
16
位。
通过使用
report_utilization
命令
,
可以看到综合工具生成
72
个块
RAM
,
如下图所示。
如计算针对
40K x 36
配置应推断的块
RAM
数量
,
所得到的块
RAM
数量将少于综合工具所生成的数量。
以下显示了此存储器配置的手动计算过程
:
•
40K x 36
可细分为
2
个存储器
:
(32K x 36)
和
(8K x 36)
• 需使用基于
MSB
地址位的地址解码器来支持其中一个存储器执行读写操作
,
并选择正确的输出数据。
•
32K x 36
存储器可通过
32
个
RAMB
实现
:
4 * 8 * (4K x 9)
•
8K x 36
存储器可通过
8
个
RAMB
实现
:
8 * (1K x 36)
• 总计需要
40
个
RAMB
才能以最优化方式实现
40K x 36
存储器。
为验证是否已推断出
RAMB
的最优数量
,
综合
log
日志文件包含
1
个会话
,
其中详列了每个存储器的配置方式及其映 射到 FPGA
原语的方式。如下图所示
,
存储器深度作为
64K
来处理
,
这表明深度不等于
2
的幂次方时
,
无法以最优化方式来加以处理。
综合工具使用的是
64K x 1
(
2
个具有级联功能的块
RAM
),
36
个此类结构
(
因为
36
位数据
)
。因此总计有
36 x 2 =72 个块
RAM
。下图显示的代码片段用于强制综合推断
RAMB
的最优数量。