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

目录

碎碎念!

1. 什么是LUT?

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

3. LUT可以怎么用?

3.1 实现组合逻辑

3.2 搭建LUT_RAM(分布式RAM)

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=A[1]、I2=A[0]、I1=B[1]、I0=B[0],若输入出现有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(B[0]), // 1-bit input: LUT
.I1(B[1]), // 1-bit input: LUT
.I2(A[0]), // 1-bit input: LUT
.I3(A[1]) // 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 ^

Read more

Python(29)Python生成器函数深度解析:asyncio事件循环的底层实现与异步编程实战

Python(29)Python生成器函数深度解析:asyncio事件循环的底层实现与异步编程实战

目录 * 引言 * 一、生成器与异步编程的渊源 * 1.1 技术背景与发展 * 1.2 关键结合点:协程概念 * 1.3 实际应用演进 * 1.4 底层实现原理 * 1.5 生成器的基础特性代码 * 1.6 协程的进化之路代码 * 二、asyncio事件循环深度解析 * 2.1 事件循环架构 * 2.2 生成器调度流程 * 三、高级特性实现 * 3.1 生成器双向通信 * 3.2 异常处理机制 * 四、性能优化实战 * 4.1 内存管理对比 * 4.2 执行时间优化技巧 * 五、实践建议 * 5.

By Ne0inhk
Python 小游戏实战:打造视觉精美的数独小游戏

Python 小游戏实战:打造视觉精美的数独小游戏

Python 小游戏实战:打造视觉精美的数独小游戏 Python 小游戏实战:打造视觉精美的数独小游戏,数独是一款经典的逻辑推理数字游戏,通过填充数字 1-9 到 9x9 的网格中,使得每行、每列和每个 3x3 子网格都包含 1-9 的所有数字,不重复。本文将带大家使用 Python 的 Pygame 库实现一个视觉精美、交互友好的数独小游戏。 一、前言     Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、Web开发、自动化)

By Ne0inhk
【Java房屋租赁系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案

【Java房屋租赁系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案

房屋租赁系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对房屋租赁管理等问题,对房屋租赁管理进行研究分析,然后开发设计出房屋租赁系统以解决问题。 房屋租赁系统主要功能模块包括主页、个人资料、公共管理(轮播图、公告信息)用户管理(管理员、出租用户、承租用户)信息管理(新闻列表、新闻分类列表)房屋信息、看房申请、租赁申请、合同信息、缴费信息、退租申请、留言信息、房屋评价、房屋类型管理,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,采用SSM框架、Java技术、Ajax技术进行业务系统的编码及其开发,实现了本系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。针对房屋租赁系统的各项需求以及技术问题进行分析,证明了系统的必要性和技术可行性,然后对设计系统需要使用的技术软件以及设计思想做了基本

By Ne0inhk
Python:从数据科学到星辰大海,无所不能的编程“瑞士军刀”

Python:从数据科学到星辰大海,无所不能的编程“瑞士军刀”

🌟 Hello,我是蒋星熠Jaxonic! 🌈 在浩瀚无垠的技术宇宙中,我是一名执着的星际旅人,用代码绘制探索的轨迹。 🚀 每一个算法都是我点燃的推进器,每一行代码都是我航行的星图。 🔭 每一次性能优化都是我的天文望远镜,每一次架构设计都是我的引力弹弓。 🎻 在数字世界的协奏曲中,我既是作曲家也是首席乐手。让我们携手,在二进制星河中谱写属于极客的壮丽诗篇! 摘要 我时常被问到一个问题:“在众多编程语言中,为何你对 Python 情有独钟?” 每当这时,我总会微笑着回想起初次接触它时的情景。那时的我,还在为 C++ 的指针和内存管理而焦头烂额,为 Java 繁复的样板代码而感到窒息。直到 Python 如同一股清流,以其极致的简洁和优雅,瞬间俘获了我的心。它就像一把瑞士军刀,看似小巧,却集成了你所能想象到的几乎所有功能。我的探索之旅始于用它编写简单的自动化脚本,将我从繁琐的重复性工作中解放出来,让我第一次真切地感受到了“用代码改变生活”的魔力。随着探索的深入,我驾驶着 Python 这艘飞船,驶入了 Web 开发的广阔星域。借助 Django

By Ne0inhk