一文搞懂FPGA中LUT用作分布式RAM的原理
FPGA与信号处理工坊 2025-12-23

一、为何LUT能充当分布式RAM

下图中左边为SLICEM中的LUT结构,右边为SLICEL中的LUT结构。

SLICEL只有查找表的功能,SLICEM除了能当查找表使用外,还能当移位寄存器、RAM、ROM使用,本文介绍RAM的使用,前文为什么xilinx FPGA中的LUT可以当作移位寄存器使用?90%的工程师都不知道已经介绍移位寄存器的使用。LUT各个管脚功能如下,作为存储器使用时不用MC31脚。

管脚 功能
DI1、DI2 数据输入
O5、O6 数据输出
A6-A1 读地址
W6-W1 写地址
WEN 写使能,高电平有效
CK 时钟

从上表不难看出这些引脚足够用来形成RAM了。RAM的工作原理为根据写地址在WEN为高电平时将数据同步写入,根据读地址将数据异步读出

写操作是同步的。读操作是异步的,即A6-A1变化后,O5、O6的值立马变化(仅有器件延迟)。

下图为四个LUT的布局,从图中可以知道,四个LUT的写地址相同,LUTD的读写地址相同,LUTA、LUTB、LUTC的读地址独立,这决定了LUT可配置为四种分布式RAM。

1、单端口模式

单端口用于同步写入和异步读取的公共地址端口,读取和写入地址共享同一地址总线。

64×164×1

2、双端口模式

一个端口用于同步写入和异步读取,一个端口用于异步读取。

64×164×1

3、简单双端口

一个端口用于同步写入,一个端口用于异步读取。

32×632×6

4、四端口模式

一个端口用于同步写入和异步读取,三个端口用于异步读取。

64×164×1

最后,需要说明的是,除了以上介绍的RAM,LUT也可以当ROM使用,原理类似,此处不再赘述。要想LUT作为存储器使用,代码中不能使用复位。

二、FPGA编程仿真验证

下面是一段128×1的单端口RAM的verilog代码。

module ram128x1 (  input  wire        clk,        // 写时钟  input  wire        we,         // 写使能  input  wire [6:0]  wa,         // 地址 0..127  input  wire        din,        // 写数据 1bit  output reg         dout        // 读数据 1bit(异步读) ); reg mem [0:127]; always @(posedge clk) //写 begin  if (we) mem[wa] <= din; end always @(posedge clk) //读 begin  dout <= mem[wa]; end endmodule 

实现后的电路如下图,可见128×1的RAM是由两个LUT加一个选择器组合形成的。由于代码是同步读出,所以输出端加了一级寄存器。


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。 微信联系小助理
0
评论
  • 相关技术文库
  • FPGA
  • 可编程
  • PLC
  • verilog
下载排行榜
更多
评测报告
更多
广告