【FPGA】LUT如何实现组合逻辑、时序逻辑

FPGA是如何利用LUT实现组合逻辑功能的-电子工程专辑

FPGA的基本可编程逻辑单元一般都采用了基于SRAM的查找表结构,查找表(LUT,Look Up Table)一般为四输入,用于完成组合逻辑功能

小容量的ROM?把输入当做地址信号,对LUT里面预存的内容进行寻址

本质上就是一个RAM。它把数据事先(很重要,由分析综合工具完成)写入RAM后,每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。

输入的信号 <====> 输入的地址 ===> 输出结果

下图是四输入查找表的基本结构,核心元件是二选一多路选择器,四个输入通过控制二选一多路选择器的状态实现所需结果的输出

例如

实现A&B&C&D

(1)求解真值表

|----|----|----|----|----|
| AB | 00 | 01 | 10 | 11 |
| CD | 00 | 01 | 10 | 11 |
| 00 | 0 | 0 | 0 | 0 |
| 01 | 0 | 0 | 0 | 0 |
| 10 | 0 | 0 | 0 | 0 |
| 11 | 0 | 0 | 0 | 1 |

(2)数据下载

在代码下载的过程中,真值表中的数据会下载至LUT对应的SRAM中

(3)数据输出

在代码运行的过程中,四个输入通过控制二选一多路选择器的选通状态来输出不同的数据

4输入查找表,包含4个输入端口I3:0,包含一个输出端口O,还包含存储初始值的16个DFF触发器

四个输入信号I(4级选择器),构成的输入值一共有16种情况。每个输入值对应一个DFF,提前把值对应的输出值初始化在DFF内,这就构建了一张16*1的表格。根据输入值,选择某个DFF输出到O端,从而实现相应的逻辑功能

举例:I3:0=4'b0101

复制代码
LUT4 #(
.INIT(16'h0000)
)LUT4_inst(
.O(O),
.I0(I0),
.I1(I1),
.I2(I2),
.I3(I3)
);

O=I3&I2&I1&I0;

复制代码
LUT4 #(
.INIT(16'h8000)
)LUT4_inst(
.O(O),
.I0(I0),
.I1(I1),
.I2(I2),
.I3(I3)
);

6输入查找表内部结构

LUT是如何实现千万种逻辑结构的_lut电路-CSDN博客

C=A+B

该电路实现了两个1位输入A和B的加法功能(C = A + B)。输出Q是一个2位二进制数,表示加法的和(即Q的十进制值等于A + B)。电路使用两个查找表(LUT):

  • LUT1 初始化为4'h6(二进制4'b0110),地址输入由{B, A}组成(B为高位,A为低位)。

  • LUT2 初始化为4'h8(二进制4'b1000),地址输入由{A, B}组成(A为高位,B为低位)。

    输出Q定义为:Q1 = LUT2的输出,Q0 = LUT1的输出。

| 输入 B | 输出 Q (二进制) | 输出 Q (十进制) | 解释 (A + B) |
|------|------------|------------|------------|-----------|
| 0 | 0 | 00 | 0 | 0 + 0 = 0 |
| 0 | 1 | 01 | 1 | 0 + 1 = 1 |
| 1 | 0 | 01 | 1 | 1 + 0 = 1 |
| 1 | 1 | 10 | 2 | 1 + 1 = 2 |

  • 当 A=0, B=0:LUT1 地址={B,A}=00=0,输出位0=0(4'h6=0110,位0=0);LUT2 地址={A,B}=00=0,输出位0=0(4'h8=1000,位0=0)。因此 Q = {LUT2输出, LUT1输出} = {0, 0} = 00。

  • 当 A=0, B=1:LUT1 地址={B,A}=10=2,输出位2=1(4'h6=0110,位2=1);LUT2 地址={A,B}=01=1,输出位1=0(4'h8=1000,位1=0)。因此 Q = {0, 1} = 01。

  • 当 A=1, B=0:LUT1 地址={B,A}=01=1,输出位1=1(4'h6=0110,位1=1);LUT2 地址={A,B}=10=2,输出位2=0(4'h8=1000,位2=0)。因此 Q = {0, 1} = 01。

  • 当 A=1, B=1:LUT1 地址={B,A}=11=3,输出位3=0(4'h6=0110,位3=0);LUT2 地址={A,B}=11=3,输出位3=1(4'h8=1000,位3=1)。因此 Q = {1, 0} = 10。

查找表1被初始化为4'h6(3'b110),查找表2被初始化为4'h8(3'b1000)

A=0,B=0

2个查找表输入的地址都为0,因此第1个查找表输出4'h6(3'b110)第0位0,第2个查找表输出4'h8(3'b1000)第0位0,Q的值为2'b00;==> 0 + 0 = 0

A=1,B=0

第1个查找表输入的地址为1,第2个查找表输入的地址为2,因此第1个查找表输出4'h6(3'b110)第1位1,第二个查找表输出'h8(3'b1000)第2位0,因此Q的值为2'b01 = 1; ==> 1 + 0 = 1

A=0,B=1

第1个查找表输入的地址为2,第2个查找表输入的地址为1,因此第1个查找表输出4'h6(3'b110)第2位1,第二个查找表输出'h8(3'b1000)第1位0,因此Q的值为2'b01 = 1; ==> 0 + 1 = 1

A=1,B=1

两个查找表输入的地址都为3,两个因此第一个查找表输出4'h6(3'b0110)第3位0,第二个查找表输出'h8(3'b1000)第3位1,因此Q的值为2'b10 = 2。 ==> 1 + 1 = 2

CLB作为FPGA里的最小逻辑单元

CLB是由2个slice构成

7系列FPGA的slice包含4个部分:

(1)逻辑功能产生器,也就是咱们常说的查找表,1个slice里包含4个6输入的查找表。

(2)存储单元,也就是常说的触发器,1个slice里包含8个触发器。每4个触发器为一组,可配置成D触发器或锁存器。

(3)多路复用器,也就是1位宽的数据选择器,数量非常多,足够使用。

(4)进位逻辑,它与本列的上下slice的进位逻辑相连,实现数据运算时的进位操作。

相关推荐
ARM|X86+FPGA工业主板厂家13 小时前
RK3588+FPGA+EtherCAT异构架构解析|工业场景如何同时保住AI算力与微秒级运动实时性
人工智能·fpga开发·架构
zlinear数据采集卡18 小时前
从“脏信号”到“纳伏级纯净”:硬核拆解DABL7606的多级抗混叠滤波与24位过采样算法
arm开发·科技·嵌入式硬件·fpga开发·开源
尤老师FPGA1 天前
HDMI数据的接收发送实验(二十)
fpga开发
千寻xun2 天前
三、实战篇-NVME SSD控制之FPGA实现(一)
fpga开发·nvme ssd·nvme协议
XMAIPC_Robot2 天前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
upper20202 天前
从零开始设计riscv cpu记录之七
fpga开发·riscv·riscv设计·btb·分支预测
ARM|X86+FPGA工业主板厂家2 天前
AI视觉跟随运动控制实战|RK3588 NPU检测+FPGA EtherCAT多轴联动精准跟随方案,适用于半导体视觉对位等
人工智能·fpga开发·硬件工程·ethercat·实时系统
XMAIPC_Robot2 天前
RK3588+FPGA半导体设备量产踩坑大全|发热、时序漂移、推理抖动、成像干扰、EMC干扰方案
人工智能·嵌入式硬件·fpga开发·arm+fpga
凡亿卓达方案设计3 天前
FPGA硬件开发怎么选靠谱方案商?
fpga开发
Eloudy3 天前
QSFP28、RoCEv2、RFSoC-4x2 数据传输与器件链路
网络·fpga开发·rocev2