0-1学习FPGA之底层资源——LUT

目录

碎碎念!

[1. 什么是LUT?](#1. 什么是LUT?)

[2. LUT 与传统逻辑门的对比](#2. LUT 与传统逻辑门的对比)

[3. LUT可以怎么用?](#3. LUT可以怎么用?)

[3.1 实现组合逻辑](#3.1 实现组合逻辑)

[3.2 搭建LUT_RAM(分布式RAM)](#3.2 搭建LUT_RAM(分布式RAM))

[3.3 移位寄存器](#3.3 移位寄存器)

碎碎念!

开这个专栏是为了重新巩固基础,温故而知新,顺便查漏补缺弥补之前的知识漏洞~内容会尽量写的清晰,0基础的小伙伴也能看懂,欢迎交流~如有问题请艾特我^ w ^

1. 什么是LUT?

LUT(look-up table)就是查找表,是FPGA中实现组合逻辑功能的基本单元。可以看做一个小SRAM,存储逻辑真值表,输入看做地址线,读取出对应的逻辑输出结果。(后面有举例)

LUT有LUT1、LUT2、LUT3、LUT4、LUT5、LUT6。分别指代的输入口的数量,输入口可以作为地址去读写"RAM"内的数据。譬如LUT4,代表4个输入地址Bit,可以读写总共0000~1111,也就是0~15个地址的bit数据。

图1.1 LUT4真值表

不同的LUT之间可以级联,LUT1可以和LUT1~6级联,一般来说LUT层级不要超过6,否则可能有时序问题,若LUT层级超过6就需要中间插入寄存器、降低频率的方式改善时序。

通过设置LUT的初始值来实现逻辑, 譬如实现2bit的A,B是否相等,可以这样安排输入:I3=A1、I2=A0、I1=B1、I0=B0,若输入出现有A=B的情况,就在该输入地址对应的位置上写入1。

A=B有以下情况:0000、1111也就是在0地址和15地址上写入1,其余为0,初始值应该设置为16'b1000_0001代码例化:

LUT4 #(

.INIT(16'b1000001) // Logic function

)

LUT4_inst (

.O(O), // 1-bit output: LUT

.I0(B0), // 1-bit input: LUT

.I1(B1), // 1-bit input: LUT

.I2(A0), // 1-bit input: LUT

.I3(A1) // 1-bit input: LUT

);

当输入为0000/1111时输出为1,A=B。

2. LUT 与传统逻辑门的对比

传统逻辑门为与或非等逻辑门,EDA工具首先将逻辑综合为门级电路,也就是RTL级通过与或非逻辑门搭建的电路,最后综合为LUT,为什么FPGA选择使用LUT查找表而不是直接选择通过门电路实现逻辑呢?这是一个很有意思的问题~我也去网上搜寻了这个问题,找到两个觉得很不错的回答,能满足我现在的疑问~以下是链接:

用大白话从底层理解FPGA------LUT(干货) - 知乎

为什么FPGA使用LUT而不是传统的逻辑门?-腾讯云开发者社区-腾讯云

我总结一下,第一个是从性能的角度解释:倘若使用门电路,每个逻辑门都有不同的时延,那么在一段组合逻辑中门逻辑越多,时延越长,为满足时序要求,不得不延长周期,整个系统的速度很容易有瓶颈。

而使用LUT则可以很好解决延时,无论多少逻辑门,只要输入位宽确定,就能确定组合逻辑中LUT的层级(级联的数量),LUT可以看成SRAM,内部早已写好逻辑输出结果,所以只要逻辑运行时给到输入,就能越过门电路的延时直接读取到输出结果。

第二个从FPGA的底层原理入手:FPGA(Field Programmable Gate Array)为现场可编程门阵列,是一种半定制电路,解决了定制电路的不足,又克服了原有可编程器件门电路有限的缺点。 FPGA可以反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构,也就是LUT查找表。LUT本质是SRAM,里面的初始值可以包含各种与或非门级电路的逻辑,因此FPGA可以做到不需要改变电路就可以重复改变逻辑。很神奇

~

3. LUT可以怎么用?

LUT一般来说有两种SLICEL、SLICEM。SLICEL的LUT只能用于实现组合逻辑,SLICEM的LUT有时钟输入口,可以实现数据存储、组合逻辑,内部结构比SLICEL的LUT更复杂。

3.1 实现组合逻辑

如第1点中的例子所示,通过改变初始值实现组合逻辑;

3.2 搭建LUT_RAM(分布式RAM)

FPGA中最多的就是LUT,在数据量不是很大的时候可以直接使用LUT搭建分布式RAM,节省BRAM。1个BRAM至少为18Kbit,倘若一些少量的存储需求就要花费一个BRAM实在浪费,BRAM在FPGA中资源有限。并且LUT搭建的分布式RAM读写为0周期,也能节省时间。

LUT_RAM都有IP可以直接用,具体使用看对应板卡的IP手册。

3.3 移位寄存器

除了寄存器外,通过级联多个LUT(SLICEM)可以实现多位宽的移位寄存器。SLICEM里的LUT带CLK时钟输入口,一个LUT6可以作为32位的移位寄存器。时间有点晚了,后续我再具体写这个如何实现,并补充SLICEL、SLICEM的LUT的区别~~^ w ^

相关推荐
TTGGGFF2 小时前
ModelSim SE 10.1c 超详细安装与激活保姆级教程(图文详解 2026 仅供学习)
学习·fpga开发
Aaron158812 小时前
无人机反制中AOA+TDOA联合定位技术与雷达探测定位技术的应用对比分析
arm开发·嵌入式硬件·fpga开发·硬件工程·无人机·信息与通信·信号处理
暴风雨中的白杨20 小时前
fpga复位电平与资源消耗对比测试
fpga开发
ALINX技术博客21 小时前
【黑金云课堂】FPGA技术教程Linux开发:NVMe/Qt/OpenCV人脸检测
linux·qt·fpga开发
第二层皮-合肥21 小时前
【数据采集专栏】触发模式的设计
fpga开发
第二层皮-合肥1 天前
【数据采集专栏】通道触发设计要点
fpga开发
高速上的乌龟1 天前
Lattice LFCPNX-100 HSB+Fpga开发详解:2.4 Hololink I2C外设控制深度全解析
fpga开发
Kent Gu1 天前
MCU & FPGA调试
单片机·嵌入式硬件·fpga开发
浩子智控1 天前
EtherCAT技术概述
嵌入式硬件·fpga开发·硬件工程·信号处理