FPGA结构:DRAM(分布式随机存取存储器)和 CLB(可编程逻辑功能块)介绍

FPGA 系列文章

  • 如果你想学习有关FPGA的专业术语,可以参考这一篇:《FPGA专业术语介绍》
  • 最近由于工作比较忙文章更新频率比较慢,争取逐渐恢复ヽ(ˋ▽ˊ)ノ


一、DRAM(分布式随机存取存储器)是什么

一句话概括,在FPGA中,DRAM指用LUT实现的分布式随机存取存储器。

《FPGA结构:LUT(查找表)和 MUX(多路选择器)介绍》的 " LUT(查找表)是什么 " 章节中曾经提到,LUT本质上是一个RAM,具有写功能的LUT能够作为存储器使用。由于一个6-LUT的真值表大小为64bit,其可以用于存储64bit的数据。

以下是一个具有写功能的6-LUT的示意图:

请添加图片描述
其中:

  • DI代表数据端口。
  • A6:A1代表读地址端口。
  • W6:W1代表写地址端口。
  • WEN代表写使能端口。

具有写功能的,4个以内的6-LUT能够组成以下的分布式RAM:

RAM端口配置原语6-LUT数量
32 x 1-bit单端口RAM32x1S1
32 x 1-bit双端口RAM32x1D2
32 x 2-bit四端口RAM32M4
32 x 6-bit简化双端口RAM32M4
64 x 1-bit单端口RAM64x1S1
64 x 1-bit双端口RAM64x1D2
64 x 1-bit四端口RAM64M4
64 x 3-bit简化双端口RAM64M4
128 x 1-bit单端口RAM128x1S2
128 x 1-bit双端口RAM128x1D4
256 x 1-bit四端口RAM256x1S4

表格中端口配置的含义如下:

单端口:

  • 具有一个用于同步写入和异步读取的通用地址端口。

  • 读取和写入地址共享同一地址总线。

双端口:

  • 具有一个用于同步写入和异步读取的端口。

  • 第一个输入连接到第一个RAM的共享的读和写端口地址,以及第二个RAM的共享的写端口地址。

  • 具有一个用于异步读取的端口。

  • 第二个输入连接到第二个RAM的只读端口地址。

简单的双端口:

  • 具有一个用于同步写入的端口(写入端口没有数据输出/读取端口)。

  • 具有一个用于异步读取的端口。

四端口:

  • 具有一个用于同步写入和异步读取的端口。

  • 具有用于异步读取的三个端口。

以官方文档中具有双端口的RAM64x1D为例子:

请添加图片描述

其中,A[5:0]可以用于两个RAM的同步写,DRPA[5:0]仅可以用于下面RAM的异步读,同步读可以通过配置FF的方式实现。

剩下的分布式RAM由于篇幅原因就不进行详细的讲解了,如果好奇的话可以查阅UG474官方文档。

BRAM和DRAM的区别?

BRAM是FPGA中定制的RAM资源,与DRAM主要存在两个区别:

  1. BRAM一定是时序逻辑输出,因为它的地址输入端口有一组寄存器。而DRAM可以是纯组合逻辑输出(给出地址后直接输出数据)。
  2. BRAM有较大的存储空间,而DRAM是由LUT拼出来的。这使得DRAM在牺牲LUT资源的基础上增加了灵活性。

二、CLB(可编程逻辑功能块)是什么

一句话概括,在FPGA中,CLB(可编程逻辑功能块)指能够配置实现特定的逻辑功能的一种基本单元。它可以由两个SLICEL组成,也可以由SLICEL+SLICEM组成。

想理解CLB,就需要理解其中关键的组成部分SLICE。Xilinx工具使用X和Y表示每一个SLICE的位置,SLICE在CLB中的摆放示意图如下:

请添加图片描述

SLICEM的结构图如下:
请添加图片描述
SLICEL的结构图如下:
请添加图片描述

结构图中可以看到,SLICEM和SLICEL均由LUT(查找表),MUX(多路选择器),CARRY LOGIC(进位逻辑)和LATCH/FF(存储单元)构成,可以结合之前的文章加以理解:

LUT(查找表)

是否具备写功能是SLICEM和SLICEL的关键区别点。SLICEM中的LUT具有写功能,而SLICEL中的LUT不具有写功能。

MUX(多路选择器)

SLICEM和SLICEL中的MUX具有四个功能:

  1. 与红框中的LUT组合构成更高位数的多路选择器,这一点在《FPGA结构:LUT(查找表)和 MUX(多路选择器)介绍》的 " 6-LUT"章节中有涉及。

  2. 与红框中具有写功能的LUT组合构成移位寄存器,这一点可以参考《浅谈XILINX FPGA CLB单元 之 移位寄存器(移位寄存器、SRLC32E、SRL16E》),之后会专门写文章介绍。

  3. 作为进位逻辑的组成部分,这一点在下文会涉及。

  4. 将LUT与CARRY LOGIC,CARRY LOGIC与LATCH/FF分隔开来, 使得CARRY LOGIC与LATCH/FF既可以由外部的AX,BX,CX,DX驱动,也可以由来自左边电路的输出驱动,以下是CARRY LOGIC中的一个MUX:

请添加图片描述
这个MUX主要用于在左边LUTA的输出信号和外部的AX信号之间进行选择,但实际上左边电路的输出还有很多,这里不再赘述。

CARRY LOGIC(进位逻辑)

放大一下上图中的棕色部分:
请添加图片描述

从最下面的进位逻辑开始,每个进位逻辑都会把它的高位输出(进位)传给上一级,并把它的低位传给右边的电路。以《FPGA原理与结构》中给出的单个进位逻辑为例子:
请添加图片描述

以下为该电路的真值表:

输入1(ln0)输入2(ln1)进位(Cin)高位输出(Cout)低位输出(Sum)
00000
00101
01001
10001
11010
10110
01110
11111

这里补充说明一下超前进位加法器的概念,对于上文的进位逻辑,由于每一级都需要等到上一级输出结果再开始计算,因此级数很高时会出现组合逻辑延时过长的情况。为了解决该问题,有人提出了超前进位加法器的概念,超前进位加法器能够并行计算每一个进位的电路,但其能够进行计算的位宽也固定。由于无法预先获知特定应用下具体实现的加法器的位宽,FPGA中并未将超前进位加法器作为基本单元,超前进位加法器更多被ASIC应用。想要了解的小伙伴可以参考这篇文章:《数电——超前进位加法器》

LATCH / FF(存储单元)

放大一下上图的绿色部分:
请添加图片描述
可以看到,每一个SLICE中都包含八个存储单元,其中的四个可以配置为LATCH/FF,另外四个只能配置为FF。LATCH与FF的区别可以参考这一篇文章:《FPGA结构:LATCH(锁存器)和 FF(触发器)介绍》

参考文档

(UG474官方文档)7 Series FPGAs Configurable Logic Block

如何理解FPGA的配置状态字寄存器Status Register

FPGA User Guide 之 Xilinx CLB (一)

FPGA User Guide 之 Xilinx CLB (二)

FPGA从入门到精通(3) - DRAM

FPGA从入门到精通(6) - 存储单元&CLB总结

FPGA的基础架构,什么是CLB?

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值