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 ^

相关推荐
坏孩子的诺亚方舟10 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐10 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
FPGA小徐10 天前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
Saniffer_SH11 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
zlinear数据采集卡11 天前
双核架构深度解析:ARM+FPGA如何让数据采集卡实现500Ksps高性能?
arm开发·fpga开发·架构
徕卡11 天前
GT收发器
fpga·gt
9527华安11 天前
FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·gth·aurora 8b10b·transceivers
FPGA小徐12 天前
FPGA 数字信号处理(二):并行 FIR 滤波器的 Verilog 全流程设计与实现
fpga开发
国科安芯12 天前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
ALINX技术博客12 天前
【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术
fpga开发·i2c