浅谈XILINX FPGA CLB单元 之 分布式RAM (Distributed RAM Available in SLICEM Only、RAM128X1D、Verilog原语描述)

浅谈XILINX FPGA CLB单元 之 分布式RAM (Distributed RAM Available in SLICEM Only、RAM128X1D、原语primitive描述)

一、分布式RAM(Distributed RAM)

SLICEM中的函数发生器添加一个据输入端口和使能就将 其拓展成一个分布式 RAM。分布式 。分布式 RAM的资源可以在 SLICE中配置, 中配置。

  1. Xilinx FPGA分布式RAM资源配置情况
    下表显示了每种分布式RAM配置占用的LUT数量(每个slice四个)。
    浅谈XILINX FPGA CLB单元 之 分布式RAM (Distributed RAM Available in SLICEM Only、RAM128X1D、Verilog原语描述)_第1张图片
  2. 主要原理、特点
    一个 SLICEM中的多个查找表可以不同方式组合来存储更多的数据。
    分布式 RAM的主要特点是快速,本地化并且对于小数据缓存区、 先进出、以及寄存器文件有着理想的效果
    对于更大储需求,可考虑用 18K 分区 RAM来实现。
二、SLICEM中配置RAM元素可实现以下配置
  1. 一个SLICEM可以扩展的分布式RAM的所有形式
    • Single-Port 32 x 1-bit RAM
    • Dual-Port 32 x 1-bit RAM
    • Quad-Port 32 x 2-bit RAM
    • Simple Dual-Port 32 x 6-bit RAM
    • Single-Port 64 x 1-bit RAM
    • Dual-Port 64 x 1-bit RAM
    • Quad-Port 64 x 1-bit RAM
    • Simple Dual-Port 64 x 3-bit RAM
    • Single-Port 128 x 1-bit RAM
    • Dual-Port 128 x 1-bit RAM
    • Single-Port 256 x 1-bit RAM

  2. 使用分布式RAM需要注意的地方
    1)分布式RAM模块是同步(写)资源。 可以使用触发器在同一片中实现同步读取。
    2)通过使用该触发器,可以通过减少触发器的时钟输出值的延迟来提高分布式RAM的性能。
    3)但是,添加了额外的时钟延迟。 分布式元素共享相同的时钟输入。
    4)对于写操作,必须将由SLICEM的CE或WE引脚驱动的写使能(WE)输入设置为高

  3. 分布式RAM配置包括:
    •单口RAM
    •双端口
    •简单的双端口
    •四端口

三、以RAM128X1D 为例(128位的 1位输出的随机存储器)
  1. 下图是RAM128X1D 结构图
    浅谈XILINX FPGA CLB单元 之 分布式RAM (Distributed RAM Available in SLICEM Only、RAM128X1D、Verilog原语描述)_第2张图片
  2. 工作原理
    这个分布式 RAM的深度是 128位,读取宽度是 1 位,并且有一个读写端口在开始写入时,写入使能 WE处于高电平,此时输入 D 连上地址总线 A。这个在上升沿发生不久后进行,并且输出 SPO也会和输入 D的值相同(稍作延时)。当写入使能 WE处于低电平时,会开始进行异步读取,其中指定内容的数据通过地址总线异步输出 到SPO。读端口可以进行异步操作,通过改变输入 DPRA 的 值来读取不同位 置的存储器值,并将改输出 到DPO。
  3. RAM128X1D端口描述
    浅谈XILINX FPGA CLB单元 之 分布式RAM (Distributed RAM Available in SLICEM Only、RAM128X1D、Verilog原语描述)_第3张图片
四、Xilinx 官方 Vivado中RAM128X1D的原语(primitive)描述
  1. primitive描述
    更多关于primitive 的描述见这篇博客
//  RAM128X1D  : In order to incorporate this function into the design,
//   Verilog   : the following instance declaration needs to be placed
//   instance  : in the body of the design code.  The instance name
// declaration : (RAM128X1D_inst) and/or the port declarations within the
//     code    : parenthesis may be changed to properly reference and
//             : connect this function to the design.  All inputs
//             : must be connected.

//  <-----Cut code below this line---->

   // RAM128X1D: 128-deep by 1-wide positive edge write, asynchronous read  (Mapped to two SliceM LUT6s)
   //            dual-port distributed LUT RAM
   //            Artix-7
   // Xilinx HDL Language Template, version 2017.4
   
   RAM128X1D #(
      .INIT(128'h00000000000000000000000000000000)
   ) RAM128X1D_inst (
      .DPO(DPO),   // Read port 1-bit output
      .SPO(SPO),   // Read/write port 1-bit output
      .A(A),       // Read/write port 7-bit address input
      .D(D),       // RAM data input
      .DPRA(DPRA), // Read port 7-bit address input
      .WCLK(WCLK), // Write clock input
      .WE(WE)      // Write enable input
   );

   // End of RAM128X1D_inst instantiation
  1. Verilog 中 关键部分(需要例化的部分)
RAM128X1D #(
   .INIT(128'h00000000000000000000000000000000)
) RAM128X1D_inst (
   .DPO(DPO),   // Read port 1-bit output
   .SPO(SPO),   // Read/write port 1-bit output
   .A(A),       // Read/write port 7-bit address input
   .D(D),       // RAM data input
   .DPRA(DPRA), // Read port 7-bit address input
   .WCLK(WCLK), // Write clock input
   .WE(WE)      // Write enable input
);					
  1. VHDL中关于RAM128X1D的原语(primitive)描述
    开始需要声明库,但基本和Verilog一样。
    浅谈XILINX FPGA CLB单元 之 分布式RAM (Distributed RAM Available in SLICEM Only、RAM128X1D、Verilog原语描述)_第4张图片

你可能感兴趣的:(数字IC设计-FPGA,FPGA硬件基础)