当前位置: 首页 > news >正文

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

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

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

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

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

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

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

例如

实现A&B&C&D

(1)求解真值表

AB00011011
CD
000000
010000
100000
110001

(2)数据下载

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

(3)数据输出

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

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

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

举例:I[3:0]=4'b0101

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

O=I[3]&I[2]&I[1]&I[0];

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定义为:Q[1] = LUT2的输出,Q[0] = LUT1的输出。

输入 B输出 Q (二进制)输出 Q (十进制)解释 (A + B)
000000 + 0 = 0
010110 + 1 = 1
100111 + 0 = 1
111021 + 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的进位逻辑相连,实现数据运算时的进位操作。

http://www.dtcms.com/a/276038.html

相关文章:

  • Nginx访问日志实时分析在云服务器环境的Python实现方案
  • 树状数组优化动态规划
  • 【技术面试提+HR面试题】Python中循环与循环嵌套的基础知识以及Python中循环的基础编程题
  • 【设计模式】适配器模式(包装器模式),缺省适配器模式,双向适配器模式
  • OneCode 3.0架构升级:注解驱动与开放接口生态详解
  • 1068万预算!中国足协大模型项目招标,用AI技术驱动足球革命
  • [es自动化更新] 策略体系 | 策略源(容器镜像)
  • Java_Springboot技术框架讲解部分(一)
  • 使用Java完成下面程序
  • Vue3 学习教程,从入门到精通,Vue3指令知识点及使用方法详细介绍(6)
  • 组合数学学习笔记
  • Stance Classification with Target-Specific Neural Attention Networks
  • Linux解决vim中文乱码问题
  • SE机制深度解析:从原理到实现
  • tiktok 弹幕 逆向分析
  • 缺陷特征粘贴增强流程
  • 李宏毅(Deep Learning)--(三)
  • python内置函数 —— zip
  • MyBatis实现分页查询-苍穹外卖笔记
  • 在 Android 库模块(AAR)中,BuildConfig 默认不会自动生成 VERSION_CODE 和 VERSION_NAME 字段
  • docker基础与常用命令
  • 如何让AI更高效
  • 留学真相:凌晨两点被海关拦下时,我才明白人生没有退路
  • 如何用Python编程实现一个简单的Web爬虫?
  • Echarts学习方法分享:跳过新手期,光速成为图表仙人!
  • 【Lucene/Elasticsearch】 数据类型(ES 字段类型) | 底层索引结构
  • 易混淆英语单词对比解析与记忆表
  • 股票的k线
  • BKD 树(Block KD-Tree)Lucene
  • 以太坊重放攻击