FPGA基本结构和简单原理

news2024/12/22 23:16:21

前言:   

    FPGA全程为(Field Programmable Gate Array)现场可编程逻辑阵列,以基本的逻辑为主可以实现大多数芯片可以实现的功能,比如说:ASIC芯片等,在半导体领域有着重要的作用。           本文以Xilinx公司生产的XC7K325T和XC7K480T开始介绍,注意这里不对Xilinx的Kintex-7000的功能和特点介绍,主要分别讲解内部结构和简单原理,因此本文主要针对所有通用型FPGA的原理。

        本文部分内容参考书籍《Vivado从此开始》和《FPGA原理和结构》,本文基于Vivado仿真结果进行讲解

FPGA基本结构:

        在Xilinx的FPGA开发工具在实时综合时可以看到仿真生成的图像,这就是FPGA内部使用资源的情况,下图是打开了芯片布线资源的预览图。

        这个芯片就是XC7K480T,这个和芯片的型号关系不大,主要是内部的结构,如果放大了看会看到很多的线以及各种的逻辑门。

        上图是FPGA的资源表,可以看到很多的参数,这些参数很大程度上决定了内部逻辑单元的多少,这些参数和FPGA的性能息息相关

基本逻辑单元(LC):

        逻辑单元LC是(Logic Cell)是Xilinx定义的一种标准逻辑单元,作为FPGA的最基本参数,它的多少决定了FPGA的性能有多强大(更准确的说是处理的能力有多强大)。要注意的是这里的逻辑单元是LC,不是CLB(可配置逻辑单元),LC是用于完成用户最小逻辑的单元这两个不一样,在下面统称为基本逻辑单元。

        基本逻辑单元主要分为SLICEM和SLICEL两种,这两种内部都含有4个6输入查找表,3个数据选择器(MUX),和1个进位链(Carry Chain),以及8个触发器(Flip-Flop)组成。

       上图就是SLICE(包括SLICEM和SLICEL)内部基本结构,虽然它们之间的结构大体相同,但是它们在功能上有一点差别,下面分别对这两种结构分别进行介绍。

SLICEM:

        从Vivado中可以看到这个逻辑单元的基本结构,和上面的SLICE结构相似但是所支持的功能有所不同。

        SLICEM支持逻辑函数发生器,ROM,分布式RAM以及移位寄存器,这个基本逻辑单元在基础上做了一些添加,参见下图(截取了4个查找表中的两个)。

        标准的SLICE上是由4个6输入查找表,在SLICEM上明显多了很多的接口这些的作用就是扩展基本逻辑单元,可以说SLICEM是SLICE的升级版。

SLICEL:

        从Vivado中可以看到这个逻辑单元的基本结构,和上面的SLICE结构相似但是所支持的功能有所不同。

        SLICEL支持逻辑函数发生器,ROM,它支持的要比SLICEL要少,是一个比较基础的基本逻辑单元,参见下图(截取了4个查找表中的两个)。

        上图可以看出内部是6输入的查找表,它就是基本的逻辑单元。

总结:

        下图就是SLICEM和SLICEL两种结构的区别表格。

         这个就是参数手册上说明的内部逻辑单元的数量,它可以指的是SLICEM或SLICEL两种型号的多少,比如说:XC7K480T指的是有SLICEM或SLICEL共计有480K个(基本逻辑单元数量)。

可配置逻辑单元(CLB):

        可配置逻辑单元(Configurable Logic Block,CLB),这个逻辑单元是配置的就是最小运行模块(基本逻辑单元LC需要驱动模块,才能像可配置逻辑单元那样运行),当然一个FPGA中CLB单元是很丰富的。

        在Xilinx中可配置逻辑单元主要分为两种分别是CLBLL和CLBLM这两种,在里面有着两个基本逻辑单元(LC)和驱动控制块,CLBLL的内部由两个SLICEL组成,CLBLM的内部由SLICEL和SLICEM组成

CLBLL:

        CLBLL的内部由两个SLICEL和控制单元组成,下图是两个可配置逻辑单元连接示意图,省略了CLB控制单元,

        ViVado综合后预览图由两个SLICEL单元和控制器组成。

        在上图可以看出控制器下标注CLBLL控制单元,灰色线从查找表输入端到输出端都连接着控制单元,最后再连接到输出部分

CLBLM:

        CLBLM的内部由SLICEL和SLICEM组成,下图是两个可配置逻辑单元连接示意图,省略了CLB控制单元,

        ViVado综合后预览图由SLICE和SLICEM两个单元和控制器组成。

        在上图可以看出控制器下标注CLBLM控制单元,灰色线从查找表输入端到输出端都连接着控制单元,最后再连接到输出部分

FPGA布线资源:

        几乎不难发现FPGA内部所有的块都用着线段来进行连接,上文中讲解可配置逻辑单元几乎所有的内容都有布线,在Vivado中可以看到两种布线,第一种是绿色的线条,第二种是灰色的线段,Vivado通过这两种线段来区分线段是否使用,在芯片内部所有的线都是连接好的,只取决于开关块是否使用或开启这一条线

        绿色的线条指示的是使用过的,这经常会在Vivado综合之后出现,显示出布线使用的情况。

        灰色的线指的是没有使用过的布线资源,

        在FPGA内部通过开关块来控制布线的使用,里面的布线资源很多几乎是全连接模式,它们是通过开关块来进行选择使用的是什么布线

触发器:

        在每个SLICE模块中包含8个存储单元,其中4个只能作为触发器使用另外4个可以配置为触发器或锁存器使用在FPGA中的触发器可以是‌D触发器(D Flip-Flop)、T触发器(T Flip-Flop)、‌JK触发器(JK Flip-Flop)等。这些触发器通常嵌入在FPGA的查找表(LUT)中,或者作为独立的存储单元存在。

        触发器在进位链的后面是在基本逻辑单元里面的一个模块,触发器的数量有很多,主要是控制输出的触发等操作,最后传输到CLB控制单元中,虽然简单但可以实现很多的功能,比如说:边沿触发,存储功能,同步触发,异步触发等内容。

        上图是在基本逻辑单元中的触发器,最左边两个两个为一组组成FF触发器,最右边两个两个为一组组成一个FF触发器和T触发器的共同体(可以进行两种触发器之间的切换)

FPGA简单原理:

        上文介绍了FPGA基本的结构,当然这样的结构算不上FPGA,只能算的上是PLD(可编程逻辑器件),是FPGA就少不了RAM,触发器,DSP单元等内容。

       通过介绍FPGA常用块来介绍基本原理,和各部分使用情况,在这里要知道在Xilinx的FPGA中一个芯片被化为了很多的区域,这些不同的区域除了有可配置逻辑单元,开关块,有着不同的功能,以XC7K480T为列,参见下图:

        可以看到FPGA内部主要单元块是由竖向排列的,蓝色的线是可配置逻辑单元和开关块上面的看起来是红色的小点点是放大后会看到是BRAM(片上内存)上面的看起来是绿色的小点点是放大后会看到是DSP(数字信号处理器),这个的数量在FPGA中是很多的。

 FPGA开关块:

        上面介绍了最基本的可配置逻辑单元,在FPGA中还少不了开关块这样的控制逻辑的单元,说真的开关块的关系和可配置逻辑单元(CLB)的关系很微妙,有的可配置逻辑单元有着两个快关块(这样的配置是相对来说较少的),有的可配置逻辑单元有着一个开关块,在连接到外围电路时列如DSP,BRAM是才是两个开关块

        开关块的布局很有规律,几乎是每一个可配置逻辑单元都有一个,但是仍有许多的可配置逻辑资源有两个开关块,把开关块这一章节放到FPGA简单原理中是因为它涉及到了基本原理

        单开关块结构,这样的结构是很标准的每一个可配置逻辑单元都有一个开关块,控制着可配置逻辑单元打开和关闭情况

        他们主要是一个可配置逻辑单元+开关块进行连接然后在FPGA中一列的形式排序相连,多个这样的结构组成一列组,这样的结构在FPGA中随处可见。

        双开关块结构,这样的结构在FPGA中少于单开关块,他们不是单纯的可配置逻辑单元+开关块的结构,主要是出现在一个列组的边缘,在下图的最左面(下图像没有照到)通常连接的是BRAM或是DSP等元件

        开关块的布线使用,下图就是开关块使用时候的情况可以看到块内部的基本布线很乱,连接到外部布线很整齐,包括了可配置逻辑单元控制器(这里单指CLB控制器)也是很乱。

         为什么布线会很乱,这其实是Vivado生成的简化显示,真实的开关块内部结构很复杂,这就要谈论开关块内部的基本原理。

开关块的基本原理:

        开关块主要分为几种结构:第一种是基于闪存的可编程开关(非易失存储),第二种是静态存储器,最后一种是反熔丝式(几乎已经不常用了)

        先来说明第一种,如果对单片机的寄存器结构有一定的研究就很好理解,它们的结构和存储存芯片的结构相似,主要是浮栅晶体管和场效应管的共同作用

        它的原理就是一个存储器每次可存储一个字节,就是这一个字节就可以控制开关块的打开和关闭的状态。

        当然了光有浮栅晶体管可不行还要有FPGA信号的传输才行,于是就出现了基于闪存的可编程开关

        在注释中可以知道两个开关共用浮栅和控制栅极。左边的小开关用于编程,右边的大开关用于连接FPGA信号把栅极共用当浮栅晶体管最左边的通过编程后存储了开关信号(布尔信号,只有0和1),到了右边FPGA用户信号就是连接到开关块的外部信号

        这也就是说FPGA的开关块里面有多少个输出或输入端子就说明内部有多少个基于闪存的可编程开关。

        第二种是基于静态存储器原理,这个是比较常用的,不用保存的连接数据,更符合FPGA的JTAG调试状态,这个存储器断电后数据丢失,开关块的连接线路也会重新定义

         静态存储器由两个CMOS反相器(等效为非门电路)构成的触发器和两个传输晶体管组成,输出的Q信号再连接MOS管控制着开关块单个单元的开启和关闭,同时静态存储器利用触发器的双稳态记录数据,而数据通过PT进行。

FPGA片上RAM:

        下面主要拿XC7K480T芯片的X1Y1模块组讲解RAM部分,由于FPGA是时序逻辑电路所以片上的RAM是不可获取的一部分,已知的FPGA片上RAM有两种分别是:BRAM(FPGA中定制的RAM资源,属于是片上),DRAM(是由片上逻辑单元拼凑出来的主要是用到了触发器),下图就是BRAM片上RAM资源。

                                        

         片上RAM的结构类似于内存芯片(DDR结构),或者类似于D触发器的结构,上面的图中是简单的构造, 在图中可以可以得知一个BRAM主存储的附近有很多的辅助的模块。

        其中在里面有BRAM_CASC_MUX_R(或L)这个模块主要的作用是控制模块多个BRAM相连接,他们的连接关系是通过控制模块来进行相连接的并不是直接相连,再通过模块和模块之间相连接就类似于总线控制器

         可以看到一个BRAM存储器连接着有着5个单独的开关块(是所有的结构都是这样的)和可配置逻辑单元+开关块的结构,在外边有着辅助接口控制器组成,当然这些放大后都是可以看到具体的端口号

DSP单元:

        下面主要拿XC7K480T芯片的X1Y1模块组讲解DSP部分,DSP数字信号处理器,在FPGA中主要作用是对一些开关块的信号和数字信号进行处理,可以实现很多的功能,这里的DSP是DSP48在这里可以实现48个核心功能比如说:乘法,加法,累加等基本运算

        DSP单元的外围辅助模块要比BRAM的要少,因为DSP之间的连接主过DSP辅助模块相连接的,上图的下面的那个模块就是DSP连接控制单元,DSP的内部结构主要是由Xilinx公司官方定制的,只知道主要用途,至于内部的结构还是不得而知了。

        但是基于DSP48的基本结构还是有的。

        在内部有预加法器,乘法器,后加法器和逻辑单元等内容,实现各种信号处理的功能。

        在直接连接到DSP单元的是开关块控制其它内容(所有结构都是这样的),这样的连接主要是为了方便对可配置逻辑单元的控制。

FPGA-I/O块:

        下面主要拿XC7K480T芯片的X0Y0模块组讲解I/O块部分,说真的FPGA内部由几百K个逻辑单元和数百万调连接线,以及几十K个开关块,这样多的逻辑资源却要映射到几百个I/O端口上,可想而知这样的I/O接口块是很复杂的

        下图就是基本的I/O接口块,内部的东西很多但是没有BRAM单元,没有DSP单元,没有可配置逻辑单元,只有开关块,I/O总线块,电平信号转换模块以及输出接口模式设定块

        开关块的作用和在可配置逻辑单元中的作用相似,只不过是没有可配置逻辑单元,并且两个开关块相连接进行输出前的基本信号控制。

        上图就是I/O接口输出模块前端,这主要实现对信号数据的汇总和输出信号的输出驱动,接口驱动芯片部分和开关块相似里面对信号的基本处理。

        针对图中橘色的块有两个作用:一个是辅助I/O块逻辑的(上图中没有连接到外部I/O接口的部分),另一个作用就是并行数据转串行数据的作用

        上图就是逻辑块用作数据类型转换的作用,绿色的部分就是I/O输出接口模块。

        仔细观察就会发现这里面有上下拉电阻,以及输出电平转换(因为芯片内部逻辑电压很低大约有1V),和各种接口类型的支持的电路这就包括上下拉电阻(三态,高电平,低电平,高阻),输出驱动管(场效应管等)虽然要比单片机的模式少很多,但是针对FPGA来说是足够使用了。

结尾:

        本文主要讲解FPGA的基本结构和简单原理,通过上面的基本的模块和单元就能组成简单的FPGA当然了这只是针对纯逻辑的FPGA的介绍如果是ZYNQ系列(内部嵌入了ARM内核),还是要单独来介绍的,如果是Xilinx公司的Ultra Scale+系列的内部结构还是不一样的

        本文共计5700字,如果你细心看完一定会有收获,了解了很多关于FPGA内部结构和原理,如果善于研究会发现为什么内部时钟会有延时,Vivado的仿真就是针对内部布线资源的信号延迟进行验证,基本原理是什么,手册上的一些重要的参数指的又是什么,或许你应该会知道怎样使用FPGA内部资源才能做到尽量的节省,有更多的关于FPGA的知识和内容都要从学习中才能知道。

————————【完】———————

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3. 轴指令(omron 机器自动化控制器)——>MC_MoveAbsolute

机器自动化控制器——第三章 轴指令 4 MC_MoveAbsolute变量▶输入变量▶输入输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 示例程序1▶参数设定▶动作示例▶梯形图▶结构文本(ST) 示例程序2▶参数设定▶动作示例▶梯形图▶结构文…

【智路】智路OS 应用开发

1 总览 1.1 功能 智路OS的应用基于框架提供的服务数据,实现场景理解、指标计算、V2X核心功能实现,应用包括但不限于: V2X应用场景实现交通事件检测交通流指标计算系统监控路径规划控制 开发者可以基于智路OS框架和数据,实现自…

【CSS in Depth 2 精译_030】5.2 Grid 网格布局中的网格结构剖析(下)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

Python编程 - 线程

目录 前言 一、线程的使用 (一)基础使用 (二)等待线程完成 (三)多个线程 (四)守护线程 (五)线程同步 (六)总结 二、队列对象 …

编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动

找了很多编译博文,都错误。最后找到了正确编译办法: https://zhuanlan.zhihu.com/p/567883165 直接下载编译好的源码及dll文件 https://download.csdn.net/download/quantum7/89760587 安装VS Virsual Studio 2022 Community D:\Program Files\Micr…

Double Write

优质博文:IT-BLOG-CN 一、存在的问题 为什么需要Double Write: InnoDB的PageSize是16kb,其数据校验也是针对这16KB来计算的,将数据写入磁盘是以Page为单位的进行操作的。而计算机硬件和操作系统,写文件是以4KB作为基…

Spark Streaming基础概论

1. 简介 1.1 什么是 Spark Streaming? Spark Streaming 是 Apache Spark 的一个扩展模块,专门用于处理实时数据流。它通过将数据流切分为一系列小批次(微批次)进行处理,使得开发者能够使用与批处理相同的 API 来处理…

免费还超快,我用 Cursor 做的“汉语新解”插件开源了

前两天,你是否也被 汉语新解 卡片刷屏,却苦恼于无法快速生成? 记得当时,微信群里、朋友圈里、某书上以及公众号里,到处都在谈论这些生动有趣的“汉语新解”卡片。 这是由提示词大神 @李继刚老师 在 Claude 3.5 上开发的提示词。其辛辣的风格和全新的视角,令人耳目一新。…

SpringBoot+vue集成sm国密加密解密

文章目录 前言认识SM2后端工具类实现引入依赖代码实现工具类:SM2Util 单元测试案例1:生成服务端公钥、私钥,前端js公钥、私钥案例2:客户端加密,服务端完成解密案例3:服务端进行加密(可用于后面前…

Linux下root用户共享conda环境给其他用户

首先可以先用命令查看环境存储位置 conda env list 比如我的root用户的base环境 # conda environments: # base * /usr/local/miniconda3 在root下先给环境添文件夹加普通用户的权限 chmod -R 755 /usr/local/miniconda3 接下来新建一个用户&#xff0…

基于springboot酒店管理系统

酒店管理系统 552酒店管理系统 摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,…

【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑

目录 🍸前言 🍻一、台式电脑基本组成 🍺二、组装 🍹三、安装系统 👋四、系统设置 👀五、章末 🍸前言 小伙伴们大家好,上篇文章分享了在平时开发的时候遇到的一种项目整合情况&…

记录一题---位示图

注意题目条件:盘块号、字号、位号到底是从0开始还是从1开始 盘块号、字号、位号从0开始,若n表示字长,则: (字号,位号)(i,j)的二进制位对应的盘块号bnij b号盘块对应的字号ib/n,位号jb%n 若字号、位号从1开始,n表示字长…

纯小白安装pytorch(快速上手)

1.首先进入你的虚拟环境(不进入也没关系) 在anaconda prompt中打开,输入activate 虚拟环境2.查看自己的conda源 conda config --show channels3.清空自己的conda源 conda config --remove-key channels4.添加源 conda config --add channels https://mirrors.tu…

Matlab simulink建模与仿真 第十六章(用户定义函数库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、用户定义函数库中的模块概览 注:MATLAB版本不同,可能有些模块也会有差异,但大体上区别是不大的。 二、Fcn/Matlab Fcn模块 1、Fcn模块 双击Fcn模块,在对话…

JavaScript 事件处理

一、简介 ​ 事件:发生在HTML元素上的事情,可以是用户的行为,也可以是浏览器的行为,如 用户点击了某个HTML元素用户将鼠标移动到某个HTML元素上用户输入数据时光标离开页面加载完成 ​ 事件源:事件触发的源头&#xf…

【课程系列12】某客时间AI大模型微调训练营

某客时间AI大模型微调训练营 链接 百度网盘地址:https://pan.baidu.com/s/1ZC-fOC_QQjNM6wyVjQcYOg 课程内容 https://u.geekbang.org/subject/finetuning?utm_sourceu_nav_web&utm_mediumu_nav_web&utm_termu_nav_web 深度解读 AI 发展四轮浪潮 技术浪…

PMP--一模--解题--111-120

文章目录 10.沟通管理111、 [单选] 干系人感觉他们收到的信息十分复杂,难以理解,因此,不能正确做出决定。若要解决这个问题,应该怎么做? 14.敏捷--角色--产品负责人PO–职责–1.创建待办列表并排序;2.确认工作优先顺序…

【网络】TCP/IP 五层网络模型:数据链路层

文章目录 认识以太网mac 地址mac 地址和 IP 地址的区别 类型ARP 协议 MTU 日常开发主要是应用层,传输层和应用层密切交互,传输层用到的也不少。网络层以及再往下,日常开发就涉及到的非常少了 认识以太网 插网线的上网方式 80211 是无线 WiF…

Encountered error while trying to install package.> lxml

Encountered error while trying to install package.> lxml 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城…