浅谈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四个)。
    在这里插入图片描述
  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 结构图
    在这里插入图片描述
  2. 工作原理
    这个分布式 RAM的深度是 128位,读取宽度是 1 位,并且有一个读写端口在开始写入时,写入使能 WE处于高电平,此时输入 D 连上地址总线 A。这个在上升沿发生不久后进行,并且输出 SPO也会和输入 D的值相同(稍作延时)。当写入使能 WE处于低电平时,会开始进行异步读取,其中指定内容的数据通过地址总线异步输出 到SPO。读端口可以进行异步操作,通过改变输入 DPRA 的 值来读取不同位 置的存储器值,并将改输出 到DPO。
  3. RAM128X1D端口描述
    在这里插入图片描述
四、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一样。
    在这里插入图片描述
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摆渡沧桑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值