FPGA内部资源介绍(1)-逻辑资源块

近期有许多小伙伴私信小编,希望小编出一些FPGA基础知识,能对FPGA有初步的认识。小编立马奋笔疾书,熬夜整理了一些学习FPGA必备的基础知识,双手呈上~~,每天一个干货,一星期带你入门FPGA!

敲黑板!都是干货!

逻辑资源块是FPGA中最重要的资源,它在FPGA芯片中占的比重最大。Xilinx公司称它为时B.即ConffgurabeLogic Bock:而Altera公司称它为AM即 Adapive logic Module。Xilinx把一个CLB划分为若干个slice,每个slice中一般又包含若干个LUT、寄存器、异或门和复用器等;Altera把一个ALM划分为若干个ALUT 和寄存器等,而每个ALUT 中一般又可包含若干个LUT,全加器和复用器等。因此虽然逻辑资源块在不同的器件中叫法不一样(当然结构上也会有略微的差别),但它们的本质是类似的。在FPGA芯片中,逻辑资源块是均匀分布的,不过在列的方向上,它们的排列一般更加紧密些,这估计是为了减少加法进位链的延迟和实现高性能的寄存器链吧。

下面,我们给出 Xilinx公司 Virtex-5系列芯片中的基本slice结构图(图1)和Altera公司StratixN系列芯片中的基本ALM结构图(图2)供大家对比。

对比图1和图2可以看出,无论是CLB还是ALM,它们包含的基本元素都是相似的。下面我们详细介绍一下这些基本元素。

1.LUT

LUT 即查找表的意思,它是FPGA芯片与其他可编程逻辑芯片之间最大的区别。LUT可以有多个输入引脚,但只能有一个输出引脚。我们可以用 ROM 的概念来理解 LUT,即,般来说,一个N输人的查找表,它的行为相当于一个地址总线为N位,单位存储量为1bit,总存储量为2bit的单口 ROM。例如,对于一个2输人的查找表,如果按照“逻辑与”的真值表去配置其内部ROM的存储内容,那么它的行为就相当于一个与门;如果按照“逻辑或”的真值表去配置其内部ROM的存储内容,那么它的行为就相当于一个或门;如果固定住一个输人引脚,也可以很方便地模拟非门的行为;如果恰当地组合两个2输人的LUT,也可以很方便地实现任意3输人逻辑:以此类推。因此,只要通过恰当的连接,我们可以用该LUT实现任意的组合逻辑功能。进一步分析,通讨结合【共同语言→数字逻辑电路基础知识→数字锣辑的化简】中关于最小项概念的介绍,我们可以知道,LUT中的每一个存储单位都对应于逻辑表达式中的一个最小项,因此,LUT可以方便地描述任何组合逻辑。目前来说,FPGA中的基本 LUT一般都是4输入,6输人甚至更多输人引脚的,那么它们所能实现的逻辑功能就更加复杂、灵活和多变。

图1

图2

除此以外,LUT不仅仅可以实现灵活、多变的组合逻辑,通过恰当地配置,它甚至可以模拟寄存器的行为,例如图3用LUT完美地模仿了一个寄存器的行为(前提是 LUT中的存储空间被正确配置)。

图3

其中,两个LUT分别模仿了两个锁存器的行为,上面的4输人LUT模拟了一个高电平冼通的latch行为,下面的5输人LUT模拟了一个低电平选通的latch行为而两个LUT中的反馈回路是模拟 latch 在阻止状态下保持原值的关键。

注意,在LUT模仿寄存器的例子中,使用了反馈结构。对于组合逻辑来说,使用反馈结构是很危险的,因为一不小心引入了负反馈就会造成逻辑的混乱。在使用 LUT的时候也是一样,要注意不要引人负反馈。不过LUT 有一个区别于与或非门逻辑的显著特点,那就是 LUT 虽然可以很好地模拟任何组合逻辑,但它实际上不是一个纯粹的组合逻辑,因为组合逻辑的电路是没有记忆的,而LUT是有记忆的,虽然这种记忆一旦建立起来就不会改变直到掉电或下一次电路配置。这是因为LUT有内部存储单元,而它的实现形式可以是ROM、 RAM、寄存器或者MUX加一系列到电源或地的开关等。当然了,由于LUT的实现形式多种多样,因此在 FPGA 中,也可以用 LUT 实现 ROM、RAM甚至移位寄存器。

2.加法器

加法是所有二进制运算的基础,因此它在 FPGA 中的地位非常重要。而二进制加法中最重要的功能元素就是异或操作,因此,为了实现高性能的加法,Xilinx采用了专门的异或门,而 Altera也是引人了专门的全加器。虽然LUT也可以模拟异或门的功能,但是它的延迟相比于专有的异或门来说还是太大,尤其是两个多位数据的相加时,由于级联效应,会导致处理变慢。因此,目前在FPGA的逻辑资源块中,都是留有专门的异或门外加专门的进位链布线资源,再配合相关资源实现全加器的。不过 LUT可以配合异或门实现超前进位加法器,进一步提高加法器的性能。

3.寄存器

FPGA中有丰富的寄存器资源,这也是它区别于CPLD的地方。寄存器是时序逻辑的基础,由于它对电路状态的保持和记忆特性,才使得数字电路具有千变万化的功能。FPGA中的寄存器一般可以被配置为D类型的触发器或者锁存器。配置为D类型的触发器时,根据生产厂商以及型号的不同,可能会有一些其他的功能管脚,例如异步复位、同步复位、时钟使能、同步置位等。FPGA中寄存器的输出一般都会连到附近一个寄存器的输人MUX中,通过配置该 MUX,可以将多个寄存器串联起来形成寄存器链,实现移位寄存器电路。

4.MUX

MUX就是复用器,也叫多路选择器。FPGA的逻辑资源块中,有很多MUX,根据用法可以分为两类:一类是配置MUX,它的选通是在配置FPGA的时候确定的,因此它决定了所处逻辑资源块的功能;另一类是逻辑MUX,它的选通是由此时的内部逻辑决定的,因此它是内部逻辑的一部分。由此可见配置MUX在FPGA中的作用更大一些,通讨改变配置 MUX的选通情况,可以让逻批资源块定现多种名样的功能。例如,通过改变配置MUX的选通情况我们可以只使用逻辑资源块中的组合逻辑部分,也可以只使用其中的寄存器,甚至可以同时使用这两部分,但它们却分别隶属于不同的功能模块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/491795.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何查询电脑是否被锁定了IP地址?锁定IP会出现什么问题?

前言 电脑刚到手的时候,基本上是通过路由器DHCP进行IP分配的。路由器DHCP分配IP给电脑的好处是网络不会出现IP冲突,网络能正常使用。 有些电脑可能在DHCP自动获取IP时出现错误,所以小伙伴就会通过手动设置IP让电脑可以正常上网。 这样的操…

springboot企业级抽奖项目业务四(缓存预热)

缓存预热 为什么要做预热: 当活动真正开始时&#xff0c;需要超高的并发访问活动相关信息 必须把必要的数据提前加载进redis 预热的策略: 在msg中写一个定时任务 每分钟扫描一遍card_game表 把(开始时间 > 当前时间)&& (开始时间 < 当前时间1分钟)的活动及相…

扫描电子显微镜如何对焦

扫描电子显微镜&#xff08;SEM&#xff09;的对焦过程是确保获得清晰、高分辨率图像的关键步骤。与传统光学显微镜相比&#xff0c;SEM使用电子束来照射样品&#xff0c;并通过检测样品发射的二次电子或背散射电子来生成图像。因此&#xff0c;对焦方法和原理也有所不同。以下…

模板设计模式经典案例

模板设计模式讲究的是将不变的设置为基类&#xff0c;将变的设置为虚函数来让子类实现。下面就以这样的写下模板设计模式的例子。 例子场景 一个工程步骤分为step1,step2&#xff0c;其中step1由总工程指定&#xff0c;step2由子工程指定&#xff0c;最后由一个函数串起来&am…

python 蓝桥杯之枚举、尺取法

文章目录 幸运数字组合型枚举排列型枚举python 排列函数子集尺取法 幸运数字 对于该题的思路&#xff1a;我们可以采用直接暴力枚举的方法 幸运数字就是 3 i 3^i 3i 5 j 5^j 5j 7 k 7^k 7k 的形式&#xff0c;那么我们就确定一个终极范围&#xff0c;直接用三层循环来遍历即可…

ruoyi-nbcio-plus基于vue3的flowable任务切换的主文件ElementTask.vue的升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

Linux:Jenkins全自动持续集成持续部署(4)

在上一章部署好了之后&#xff0c;还需要点击一下才能进行部署&#xff0c;本章的效果是&#xff1a;当gitlab上的代码发生了变化后&#xff0c;我们不需要做任何事情不需要去点击构建按钮&#xff0c;Jenkins直接自动检测变化&#xff0c;然后自动去集成部署Linux&#xff1a;…

vue3路由代码示例

路由简单分三步吧 第一定义路由&#xff1a; 包括访问地址&#xff0c;对应组件 第二使用&#xff1a;在index.html中使用它 下面是代码示例&#xff1a; components/Person.vue <template><router-link to"/test/hello">跳转</router-link>&…

RocketMQ学习笔记:分布式事务

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、分布式事务的难题2、解决方式2.1、半事务消息和事务回查2.2、代码样例2.2.1、TransactionListener2.2.2、TransactionMQProducer2.2.3、MessageListenerConcurrently2.2.4、流程图 1、分布…

浅谈双亲委派模型

本文浅析了双亲委派的基本概念、实现原理、和自定义类加载器的正确姿势。 对于更细致的加载loading过程、初始化initialization顺序等问题&#xff0c;文中暂不涉及&#xff0c;后面整理笔记时有相应的文章。 JDK版本&#xff1a;oracle java 1.8.0_102 基本概念 定义 双亲委…

智慧城市解决方案大全:标准规范顶层设计指南、整体解决方案、厂商售前宣讲PPT、招投标、智慧城市白皮书等全套680份,一次性打包下载

关键词&#xff1a;智慧城市&#xff0c;智慧城市解决方案&#xff0c;智慧城市发展的前景与趋势&#xff0c;智慧城市概念主力流出&#xff0c;智慧城市项目包括哪些方面&#xff0c;智慧城市项目方案&#xff0c;智慧城市宣传片&#xff0c;智慧城市白皮书&#xff0c;智慧城…

Linux如何将桌面版转为mini版-解决中文字体变为英文字体

中文字体转为英文字体 我们进入Rocky-Linux后&#xff0c;ls或者打开文件夹发现有中文 我们执行命令 sudo localedef -i en_US -f UTF-8 en_US.UTF-8将其转为英文&#xff0c;并且重启机器 此时中文转化为英文 桌面版linux转为MINN版 1. 我们可以卸载桌面版 sudo dnf gr…

c++ 跳转搜索(Jump Search)

与二分搜索一样&#xff0c;跳转搜索是一种针对排序数组的搜索算法。基本思想是通过按固定步骤向前跳跃或跳过某些元素来代替搜索所有元素来检查更少的元素&#xff08;比线性搜索&#xff09;。例如&#xff0c;假设我们有一个大小为 n 的数组 arr[] 和一个大小为 m 的块&…

PEReDi 完全隐私的央行数字货币方案

第一个对完全隐私保护建模的方案&#xff0c;基于账户模型&#xff0c;要求交易双方都在线。 角色分类 中央银行 B B B&#xff1a;负责发行数字货币和货币政策&#xff0c;但不控制用户账户的状态&#xff0c;没有能力对交易的发送者或接收者进行去匿名化或披露与特定交易相…

数据结构-队列-005

1链式队列 运行结果如下&#xff1a; 1.1链式队列结点定义 /*自定义一个数据类型*/ typedef struct student {char name[32];char sex;int age; }DATA_TYPE;/*定义一个链式队列结点*/ typedef struct link_queue_node {DATA_TYPE data;//数据域struct link_queue_node *pne…

SpringBoot和SpringCloud面试题

1、SpringBoot 1.1 和Spring对比 1.2 SpringBoot自动装配 springboot的自动装配实际上就是为了从spring.factories文件中获取到对应的需要进行自动装配的类&#xff0c;并生成相应的Bean对象&#xff0c;然后将它们交给spring容器来帮我们进行管理 原理 SpringBootApplicatio…

BUUCTF-Misc13

[ACTF新生赛2020]outguess1 1.打开附件 2.outguess outguess -k "abc" -r mmm.jpg flag.txt “-k “abc”” 表示使用密码 “abc” 进行解密&#xff1b; “-r” 表示提取信息的操作&#xff1b; “mmm.jpg” 是包含隐藏信息的源图像文件&#xff1b; “flag.txt” …

共用体详解

1 共用体的概念 有时需要使几种不同类型的变量存放到同一段内存单元中。例如,可把一个整型变量、一个字符型变量、一个实型变量放在同一个地址开始的内存单元中(见图11.24)。以上3个变量在内存中占的字节数不同,但都从同一地址开始(图中设地址为1000)存放。也就是使用覆盖技术…

“数据持久化”和“缓存与数据库不一致”到底有什么区别?

之前&#xff0c;我一直把“数据持久化”和“缓存与数据库不一致问题”给搞混了。我当时复习的时候基本上就没有思考&#xff0c;就是纯背诵&#xff0c;数据持久化是什么&#xff0c;数据持久化有两种方式&#xff0c;这两种方式特点是什么&#xff0c;然后巴拉巴拉一堆。缓存…

LC 100.相同的树

100. 相同的树 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a; p [1,2,3], q [1,2,3] 输出&#xff1…