导言:
UltraRAM 原语(也称为 URAM)可在 Xilinx UltraScale +™ 架构中运用,并且可用来高效地完成大容量深存储器。
因为巨细和功用方面的要求,一般这类存储器不适合运用其他存储器资源来完成。
URAM 原语具有完成高速内存拜访所需的可装备流水线特点和专用级联衔接。 流水线阶段和级联衔接是运用原语上的特点来装备的。
本篇博文描绘的是经过将 URAM 矩阵装备为运用流水线寄存器来完成最佳时序功用的办法。
留意:本文由 Pradip K Kar、Satyaprakash Pareek 和 Chaithanya Dudha 一同编撰。
流水线需求:
经过在矩阵结构中衔接多个 URAM,从可用的 URAM 原语完成大容量深存储器。
矩阵由 URAM 的行和列组成。一列中的 URAM 运用内置级联电路级联,且多列 URAM 经过外部级联电路互连,这被称为水平级联电路。
作为示例,图 1 示出了针对 64K 深 x 72 位宽存储器的 4×4 URAM 矩阵的矩阵分化。
图 1:4 行 4 列的 URAM 矩阵(可完成 64K 深 72 位宽的存储器)
在没有流水线规划的状况下,深度联结构会导致内存拜访呈现大的时钟输出推迟。 例如,在默许状况下,上述 URAM 矩阵能够到达约 350 MHz。要以更快的速度拜访内存,应刺进流水线。假如在网表中指定了必定数量的输出时延,Vivado Synthesis 即会主动完成此功用。
指定 RTL 规划中的流水线:
有两种办法能够用来指定 RTL 规划中的流水线的用处,能够经过运用 XPM 流程,也能够经过行为 RTL 来揣度内存。
假如 RTL 规划经过 XPM 流程来创立 URAM 内存,则用户能够将对流水线的要求指定为 XPM 实例的参数。参数“READ_LATENCY_A/B”用于捕获内存的时延要求。
可用的流水线阶段数是 LATENCY 值减去 2。 例如,假如 Latency 设置为 10,则答应 8 个寄存器阶段用于流水线操作。别的两个寄存器可用来创立 URAM 自身。
图 2:运用 XPM 设置流水线规划
假如用户运用 Vivado 用户攻略中供给的模板来编写 RTL,并经过此办法来创立 URAM,那么,他们能够在 URAM 的输出时创立尽可能多的寄存器阶段。仅有的要求是,与数据一同,流水线寄存器的启用也需求流水线化。
图 3 显现数据和流水线的启用。
图 3:URAM 块输出时的数据及流水线启用标准
图 4 示出了 RTL 级 RAM 流水线规划示例。
图 4:用来指定数据和流水线启用的 verilog 模板
剖析日志文件:
Vivado Synthesis 依据上下文环境和场景发布与 URAM 流水线相关的不同音讯。下表阐明要在 vivado.log 文件中查找的一些音讯和要采纳的相应操作。
请留意,引荐的流水线阶段依据可完成最高功用 (800 MHz+) 的彻底流水线化的矩阵。此主张不受实践时序束缚的约束。
状况 | 音讯 | 操作 |
无流水线规划的 URAM | WARNING: [Synth 8-6057] Memory: “uram00/ram1/mem_reg” defined in module: “top_sp_no_pipe” implemented as Ultra-Ram has no pipeline registers. It is recommended to use pipeline registers to achieve high performance | 添加时延或刺进一些流水线阶段。 |
URAM 严峻受流水线约束 | CRITICAL WARNING: [Synth 8-6013] UltraRAM uram00/ram1/mem_reg is under-pipelined and may not meet performance target : Pipeline stages found = 1; Recommended pipeline stages =8 | 添加时延或刺进一些流水线阶段。 |
带有合理流水线规划的 URAM | INFO: [Synth 8-5813] UltraRAM uram00/ram1/mem_reg: Pipeline stages found = 4; Recommended pipeline stages =8 | 查看是否满意时刻要求。假如不满意功用,则添加时延。 |
流水线多于需求的 URAM | INFO: [Synth 8-5813] UltraRAM uram00/ram1/mem_reg: Pipeline stages found = 10; Recommended pipeline stages =8 | 减少时延,不然 FF 利用率将明显添加。 |
流水线规划成果 | INFO: [Synth 8-5814] Pipeline result for URAM (uram00/ram1/mem_reg): Matrix size= (4 cols x 4 rows) | Pipeline stages => ( available = 10, absorbed = 8 ) |
时刻功用估量:
下表阐明流水线寄存器的数量与可完成的最大估量频率之间的联系。
请留意,实践的时刻数仍将取决于终究地址和道路成果。
下列数字依据 speedgrade-2 Virtex® UltraScale+™ 部件以及咱们运用 4×4 矩阵完成的 64K x 72 URAM 示例工程。
流水线阶段 | URAM 中吸收的流水线 | 所用流水线资源 | 要害途径上的数据途径推迟 (ns) | 估量的最大频率 |
0 | 0 | 不适用 | 2.7 | 370 MHz |
1 | 1/1 | OREG | 2.15 | 465 MHz |
2 | 2/2 | OREG,FDRE | 1.632 | 612 MHz |
4 | 4/4 | OREG,REGCAS,FDRE,IREG_PRE | 1.376 | 726 MHz |
6 | 6/6 | OREG,REGCAS,FDRE,IREG_PRE | 1.376 | 726 MHz |
8 | 8/8 | OREG,REGCAS,FDRE,IREG_PRE | 1.1 | 909 MHz |
10+ | 8/10+ | OREG,REGCAS,FDRE,IREG_PRE | 1.1 | 909 MHz |
数据途径推迟具有以下一个或多个组件。
Tco = 1.38 ns, Clk To CascadeOut on URAM
Tco = 0.82 ns, Clk To CascadeOut on URAM with OREG=true
Tco = 0.726 ns, Clk to Dataout on URAM with OREG=true, CASCADE_ORDER = LAST
URAM -> URAM 级联推迟 = 0.2 ns
URAM -> LUT 信号网络推迟 = 0.3 ns
LUT 传输推迟 = 0.125 ns
LUT -> LUT 信号网络推迟 = 0.2 ns
LUT5 -> FF 推迟 = 0.05
定论:
URAM 原语是创立容量非常大的 RAM 结构的有用办法。 它们被设置为易于级联以便在您的规划中创立容量更大的 RAM。
可是,太多这类结构级联在一同可能会经过 RAM 发生很大的推迟。从长远来看,花时刻让您的 RAM 彻底流水线化会带来许多优点。
URAM 原语是创立容量非常大的 RAM 结构的有用办法。 它们被设置为易于级联以便在您的规划中创立容量更大的 RAM。
可是,太多这类结构级联在一同可能会经过 RAM 发生很大的推迟。从长远来看,花时刻让您的 RAM 彻底流水线化会带来许多优点。