FPGA基本结构和简单原理

前言:   

    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片上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公司官方定制的,只知道主要用途,至于内部的结构还是不得而知了。

        在直接连接到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+系列的内部结构还是不一样的

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的校园社团活动管理系统设计与实现

文未可获取一份本项目的java源码和数据库参考。 一、设计(论文)研究背景与意义 在当今的社会,可以说是信息技术的发展时代,在社会的方方面面无不涉及到各种信息的处理。[1]信息是人们对客观世界的具体描述,是人们进行…

【GO语言】Go语言详解与应用场景分析,与Java的对比及优缺点

Go is an open source programming language that makes it easy to build simple, reliable, and efficient software. Go是一种开源编程语言,可以轻松构建简单、可靠和高效的软件。 文章目录 一、引言二、Go语言详解1. 简史2. 特点3. 核心库 三、应用场景四、与Ja…

苍穹外卖Day01

文章目录 目录 文章目录 前端环境搭建 后端环境搭建 后端-数据库环境搭建 前后端联调 前端环境搭建 打开文件夹(确保nginx在英文目录下)双击ngnix.exe启动nginx服务,访问端口号80在地址栏输入localhost打开界面 后端环境搭建 熟悉项目…

揭开OpenAI草莓模型神秘面纱——重塑大语言模型的逻辑能力

OpenAI即将发布“草莓”模型 来源:medium 据报道,OpenAI计划在未来两周内发布其新的AI模型Strawberry(草莓)。据 Seeking Alpha周二(9 月 10 日)援引The Information 的一篇付费文章报道,新模型…

4------维修手机工具 解锁 刷机 保资料修复 修改参数等多工具合集 工具预览与操作解析

此款工具可能很多维修技术都使用过。早期知名手机维修加密狗。目前已经修改为可以任何人使用。此工具集合了多个版本以及加密狗工具。所谓的这些手机维修仪器工具。只是把很多工具直接整合到他里面。然后按需运行。其实查看解压后的文件会在其中找到有些小工具集合。类似基带修…

【jvm】记一次hive堆heap内存溢出的排查

先看下java的内存模型 监控jvm工具:visualVM 摘录一下内容: 由c开发的jvm,它巧妙地设计了java的设计理念——即万物皆对象。并设计了这些对象应该如何存储,如何调用,并通过不断迭代设计让对象的存储和回收&#xff0…

关于API淘宝数据接口

淘宝API接口概述 淘宝API接口是一组允许开发者与淘宝平台进行数据交互的接口,覆盖了商品信息、订单信息、物流信息、用户信息等多个方面。通过这些接口,开发者可以实现商品查询、订单管理、用户认证等功能,实现与淘宝平台的无缝对接。 淘宝A…

Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)

前言 我在上一篇文章中《Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用(text2sql)》 利用langchain 中create_sql_agent 创建一个数据库代理智能体,但是实测中发现,使用 create_sql_agent 在对话中&#x…

【鸿蒙】HarmonyOS NEXT星河入门到实战7-ArkTS语法进阶

目录 1、Class类 1.1 Class类 实例属性 1.2 Class类 构造函数 1.3 Class类 定义方法 1.4 静态属性 和 静态方法 1.5 继承 extends 和 super 关键字 1.6 instanceof 检测是否实例 1.7.修饰符(readonly、private、protected 、public) 1.7.1 readonly 1.7.2 Private …

C++函数在库中的地址

本文讲述C如何直接调用动态库dll或者so中的函数。 首先我们准备一个被调用库,这个库里面有两个函数,分别是C98 与 C11 下的,名称是run2和run1。 被调用库 相关介绍请看之前的文章《函数指针与库之间的通信讲解》。 //dll_ex_im.h #ifndef…

蓝牙耳机是入耳式的好还是开放式的好?2024开放式耳机推荐

个人推荐入开放式耳机,戴起来更舒服,主要有以下几方面原因: 减少对耳部的压迫: 不入耳设计:开放式耳机通常不需要插入耳道,避免了对耳道的直接压迫。入耳式耳机的耳塞长时间塞在耳道内,会对耳…

校园水电费管理|基于java的校园水电费管理小程序系统 (源码+数据库+文档)

校园水电费管理 目录 基于java的校园水电费管理小程序系统 一、前言 二、系统设计 三、系统功能设计 小程序端 后台功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕…

Python基础知识学习(2)

一,分支条件判断语句 在python中,分支条件语句如下: 1,判断条件:if exception: 2,接着判断的语句为:elif exception: 3,最后的条件为:else: 4,通过缩进来表示…

46.面向对象综合训练-文字版格斗游戏

1.首先创建标准的Javabean类 import java.util.Random;public class 格斗游戏 {private String name;private int blood;public 格斗游戏() {}public 格斗游戏(String name, int blood) {this.name name;this.blood blood;}public String getName() {return name;}public vo…

基于A2C与超启发式的航天器星载自主任务规划算法-笔记

1. Actor-Critic 模块 主要文件:AC.py, PolicyNet.py, ValueNet.py作用:该模块实现了 A2C(Advantage Actor-Critic)强化学习算法。其中,ActorCritic 类是核心,它同时管理策略网络(Actor&#x…

2-95 基于matlab的模板定位

基于matlab的模板定位。利用①相关匹配(Correlation Matching)、②基于Hausdorff距离匹配方法 及③考虑对场景图象距离变换(Distance Transform)的Hausdorff距离匹配方法,实现模板目标在场景图象中的定位。程序已调通,…

PMP--一模--解题--81-90

文章目录 4.整合管理81、 [单选] 一位先前不活跃的干系人参与程度突然增加,这种意外的参与导致了一些变更请求。项目经理应该做什么? 4.整合管理82、 [单选] 公司的新产品系列将在两个月内发布,95%的项目任务均已完成。但是,管理层…

开发一款通过蓝牙连接控制水电表的微信小程序

增强软硬件交互 为了更好的解决师生生活中的实际问题,开发蓝牙小程序加强了和校区硬件的交互。 比如通过蓝牙连接控制水电表,减少实体卡片的使用。添加人脸活体检测功能,提高本人认证效率,减少师生等待时间。 蓝牙水电控展示 蓝…

jdk相关介绍

JDK,全称Java Development Kit,是Java语言开发的基础工具包。它包含了Java运行时环境(JRE)以及用于开发Java应用程序的各种工具和库。JDK为Java程序员提供了编译、调试和运行Java应用程序所需的全部环境。 JDK的主要组成部分包括&…

瞳孔检测系统源码分享

瞳孔检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …