FPGA扫盲——CLB篇

本文主要介绍CLB基本概念及其构成元素,包含LUT、FF、CARRY4、MUX。

CLB

CLB,即可编程逻辑单元。隶属于Tile层级。

CLB由两片Slice构成,其中Slice由两种类型:

  • SliceM: M即Menmory,表示内部的LUT为可写,可以实现移位寄存器和DRAM等存储功能;
  • SliceL: L即Logic,表示内部LUT只读,仅拥有基本的查找功能。

CLB只能由两片SliceL,或者一片SliceM和一片SliceL构成,不能两片Slice均为SliceM。其中,芯片内的SliceL和SliceM的整体数量比值约为2:1。

Slice

Slice构成为:

  • 4个LUT
  • 3个MUX
  • 1个CARRY4
  • 8个FF

下面依次介绍LUT、MUX、CARRY4、FF。

LUT

Slice中的LUT通常为LUT6,即6输入、64位深的ROM/RAM,是FPGA实现组合逻辑的基础。

实现组合逻辑有两种办法,一种是使用逻辑门电路,另一种则是将组合逻辑的真值表存入ROM/RAM,根据输入直接查表。在FPGA中,显然使用的为后者,而LUT即为存入组合逻辑真值表的专用存储器件。使用LUT实现组合逻辑,和纯逻辑电路相比,电路将变得更加复杂,面积也变大,功耗也变高,但是通用型显著提高,这对于FPGA是至关重要的。

只得注意的是,LUT为纯组合逻辑器件,没有同步概念;同时LUT没有复位的接口

左移位寄存器SRL

一个LUT6可以实现32位的左移寄存器(SRL),其中一个输入接入数据,其余5个输入接入移位数的相关逻辑输入。一片SliceM最多拥有4片LUT,最高可实现128位的左移寄存器,其源语为:SRL16E,SRLC32E,均为无复位器件。

DRAM

DRAM(分布式RAM),由于LUT是纯组合逻辑器件,由LUT实现的DRAM只能是写同步,读异步的,其源语为:RAM64X1S、RAM32X1D等,以实现不同大小和位宽的DRAM。

MUX

Slice中的MUX为两个F7MUX和一个F8MUX,均为二选一数选器。其中F8MUX的输入硬连接到两个F7MUX的输出

一个LUX6可以实现MUX4,两位输入为选择位,其余四个输入为数据位。一个SliceM最高可以实现MUX16,使用4个LUT6和一个MUX。

CARRY4

CARRY4本质是实现两个4bit数字加减运算的超前进位加法器,但不是严格意义上的超前进位加法器,不做过多赘述。

FF

FF为触发器。值得注意的是,需要区别触发器和寄存器概念的区别。简单来说,一个或者多个触发器可以相应构成一位或者多位的寄存器,类似码元与bit的关系。一个寄存器可以有位宽的概念,即对应多个触发器。

在Slice的8个FF中,只有4个可以构成锁存器(Latch),但是一旦配置为锁存器,其余四个FF将不可使用,会造成资源浪费。

FF可以被配置为不同形式的触发器,其源语为:

  • 异步复位(FDCE)
  • 异步置位(FDPE)
  • 同步复位(FDRE)
  • 同步置位(FDSE)

Latch

Latch(锁存器),即由电平触发的逻辑器件。在控制引脚上,高电平时输入和输出直接导通,低电平时将断开,同时输出管脚保持上一时刻的电平值。

和触发器有较大区别,触发器为边沿触发,可以做时序分析;而锁存器存在空翻现象,在高电平期间,将无条件传递上一级电路的毛刺,同时拥有锁存器的电路无法进行时序分析。

代码会综合Latch的条件为:在组合逻辑中的条件判断(if/case)不全。但在时序逻辑中,即使条件不全,也不会综合出锁存器

作者

LiXintao

发布于

2025-09-24

更新于

2025-09-24

许可协议

评论