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

FPGA 第二讲 初始FPGA

时间:2024.11.4-11.5

一、学习内容

1.FPGA是什么

1.1名词解释:

FPGA(Field Programmable Gate Array,简称FPGA),现场可编程门阵列,一种以数字电路为主的集成芯片,属于可编程逻辑器件PLD(Programmable Logic Device)的一种。

 1.2发展历程

集成电路:

我们常说的IC,就是把一定数量的常用的电子元件,例如电容电阻、晶体管、二极管等以及这些元件之间的连线通过半导体工艺把它们集成在一起,使他们具有特定的功能。集成电路是当代电子领域发展的基石。

全定制电路和半定制电路的区别:

用户在使用过程中能否更改内部电路

 全定制电路:

用户只能使用,是不能更改内部的电路的,内部电路是固定的。

半定制电路:

用户可以通过专用的软件对内部电路进行更改,以实现自己的特殊需求。

     在可编程逻辑器件PLD发明之前,工程师通常是使用若干个逻辑门的离散逻辑芯片进行电路系统的搭建,这样造成了一个问题:复杂的逻辑功能实现起来非常困难。

      在20世纪70年代可编程逻辑阵列PLA问世,PLA包含固定数量的与门和非门,分别组成了与平面(与连接阵列/与连接矩阵)和或平面(或连接阵列/或连接矩阵),这两个连接矩阵是可编程的,因此PLA可以实现一些相对较复杂的与或多项式的逻辑输出。由于使用的是熔丝工艺,只可实现一次编程。

     PROM和PLA同时期出现,PROM是可编程只读存储器,与PLA相同,也是由与平面和或平面组成,采用熔丝工业,也只能进行一次编译。两者的区别是PROM的与平面是固定的,不可编程,只有或平面是可编程的。

 

     在20世纪70年代末出现了PAL可编程阵列逻辑,它是PLA的改进版,也是由与平面和或平面组成,它的特点是或平面是固定的,不可编程,只有与平面是可编程的。而且PAL根据输出电路模式的不同可以分为几类,有三态输出、寄存器输出和互补输出。PAL仍使用熔丝工艺,只能编程一次。

      随着技术的发展,在20世纪80年代在 PAL 的基础上,又发展出了通用阵列逻辑器件 GAL( Generic Array Logic),相比于 PAL 有两点改进:一是采用了电可擦除的 CMOS 工艺,可多次编译,增强了器件的可重配置性和灵活性;二是采用了可编程的输出逻辑宏单元 OLMC(Output Logic MacroCell),通过编程 OLMC 可将 GAL 的输出设置成为不同状态,仅用一个型号的 GAL 就可以实现所有 PAL 器件输出电路的工作模式,增强了器件的通用性。

      早期的可编程逻辑器件主要由上述四种类型的芯片组成,即 PROM、PLA、PAL 和
GAL。它们的共同特点是可以实现速度特性较好的逻辑功能,但由于其结构过于简单所以
只能实现规模较小的数字电路。

     随着科技的发展、社会的进步,人们对芯片的集成度要求越来越高。早期的 PLD 产品
不能满足人们的需求,复杂可编程逻辑器件 CPLD(Complex Programmable Logic Device)
诞生。CPLD 可以看成是 PLA 器件结构的延续,一个 CPLD 器件也可以看作若干个 PLA 和
一个可编程连接矩阵的集合

      FPGA 比 CPLD 早几年问世,和 CPLD 并称为高密度可编程逻辑器件,但它们有着本
质的区别。FPGA 芯片的内部架构并没有沿用类似 PLA 的结构,而是采用了逻辑单元阵列
LCA(Logic Cell Array)这样一个概念,改变以往 PLD 器件大量使用与门、非门的思想,
大量使用查找表和寄存器。
除此之外,在资源类型、速度等方面 FPGA 和 CPLD 也存在差异。

       FPGA 的类型从内部实现机理来讲,可以分为几类,分别是:基于 SRAM 技术、基于
反熔丝技术、基于 EEPROM/FLASH 技术

    就电路结构来讲,FPGA 可编程是指三个方面的可编程:

可编程逻辑块、可编程 I/O、可编程布线资源。

      可编程逻辑块是 FPGA 可编程的核心,我们上面提到的三种技术也是针对可编程逻辑块的技术。 

2.FPGA的技术优势

速度快:

       与常见的CPU相比,CPU一般采用冯诺依曼结构,CPU要执行某些指令需要指令存储器、译码器、各种指令的运算器等,会消耗一部分时间。同时,CPU还需要共享内存,从而会导致访问仲裁,从而使速度变慢。对于FPGA,每个逻辑单元的功能在编译的时候就已经确定了,执行不需要指令,也不需要内存共享,即硬件结构决定了它的速度快。 

效率高:

      FPGA由于硬件变形优势,打破了顺序执行的模式,在每个时钟周期内可以完成更多的处理任务。与传统顺序执行的单片机相比,FPGA的效率更高。

低延时:

       FPGA在完成多重任务时,相当于多条流水线工作,低延时。

可重构性:

       FPFA属于半定制电路,可用于专用集成电路的设计与验证,其可重构性可以节省专用集成电路的开发费用,缩短开发周期,降低设计风险。同时使用FPGA也有利于一些专用设备的升级。

开发灵活、方便:

      FPGA的I/O口资源具有数量多、可编程的特点,设计和使用过程中更加灵活,而传统的单片机的I/O口功能是固定的。同时FPGA厂商可以提供大量的IP核。IP核的使用可以大大缩短FPGA的开发周期,提高设计的稳定性,使FPGA的开发更加方便快捷。

接口丰富:

       FPGA芯片的普通I/O口资源可以分为几个不同的bank,每个bank均可支持输出电压的配置,支持CMOS、TTL电平标准,还支持LVDS差分输出,内置高速串行解码器。

      单片机功能强大,几乎无所不能,而 FPGA 与之相比只强不弱。因为只要单片机能实现的功能 FPGA 就一定能实现,当然这需要加一个大前提——就是要在 FPGA 资源足够大的情况下;但是 FPGA 能实现的功能单片机却不一定能够轻松做到。
      单片机的 价格 要远 远低于FPGA,而且 FPGA 的价格根据性能和资源的不同,价格也存在很大差异,单枚 FPGA 芯片价格从几十元到几十万元不等。与之相比,单片机的价格要便宜很多同样的功能我们如果可以用价格低廉的单片机实现就不会选择相对昂贵的 FPGA 了,除非单片机满足不了功能需求。所以公司自身开发为了节约成本可能会选择更加便宜的单片机,而不会选择选择相对较贵的 FPGA,因为单片机、ARM 这种微处理器的需求量很大,所以价格上更有优势。
      但无论是单片机、ARM 还是 FPGA 它们都只是一种帮助我们实现功能的工具,具体如何选择需要具体问题具体分析。总之没有万能的工具,只有符合生产需求的工具。我们不要对某种工具存在着偏见,要综合的考虑,同样当你了解更多的时候,你会发现这些工具你最终都需要掌握。

       教程涉及的的诸多例程和单片机、ARM 的类似,教程只是讲解FPGA 的基本设计方法,更准确一点说这是一本 FPGA 的入门教程,FPGA 有很多特殊的应用领域。

       FPGA 的应用场景远没有单片机和 ARM 这么多,主要针对单片机和 ARM 无法解决的问题。比如要求灵活高效、高吞吐量、低批量延时、快速并行运算、可重构、可重复编程、可实现定制性能和定制功耗的情况,这些工作只能 FPGA 胜任。
      而相 对 于 专 门 目 的 而 设 计 的 集 成 电 路 ( Application Specific Integrated Circuit ,
ASIC),FPGA 具有 3 点优势:


灵活性:

      通过对 FPGA 编程,FPGA 能够执行 ASIC 能够执行的任何逻辑功能。FPGA的独特优势在于其灵活性,即随时可以改变芯片功能,在技术还未成熟的阶段,这种特性能够降低产品的成本与风险,在 5G 初期这种特性尤为重要。

上市时间:

由于 FPGA 买来编程后既可直接使用,FPGA 方案无需等待三个月至一年的芯片流片周期,为企业争取了产品上市时间。

成本:

FPGA 与 ASIC 主要区别在 ASIC 方案有固定成本而 FPGA 方案几乎没有,在使用量小的时候,FPGA 方案由于无需支付一次性百万美元的流片成本,同时也不用承担流片失败风险,FPGA 方案的成本低于 ASIC,随着使用量的增加,FPGA 方案在成本上的优势逐渐缩小,超过某一使用量后,ASIC 方案由于大量流片产生了规模经济,在成本上更有优势。

3.FPGA的应用方向

        FPGA 是介于软硬件之间的一朵奇葩。你用它做接口、做通信,他就偏向硬件;你用
它做算法、做控制,他就偏向软件。而且随着人工智能、机器视觉的崛起,FPGA 更加偏
向软件算法的异构,有和 GPU 一争高下的潜力。

FPGA 软件方向:

      以软件开发为主,开发 FPGA 在数据分析、人工智能、机器视觉等
领域的加速应用能力,主要采用 OpenCL 和 HLS 技术实现软硬件协同开发。


FPGA 硬件方向:

      以逻辑设计为主,针对 FPGA 特定领域的应用设计和集成电路设
计,以及芯片验证能力。

通信方向:

        通信领域是 FPGA 应用的传统领域,发展至今依然是 FPGA 应用和研究热点。FPGA 和其他 ASIC芯片最大不同在于它的可编程特性。FPGA 在通信领域几乎是万能的,FPGA 能做什么,很大程度上取决于用户的设计能力。

有线领域:

      从广域网和城域网到移动回程接入网和基于 xPON 的接入网,FPGA 都可提供全套的解决方案进行产品的快速开发。如目前的 MSTP 产品,从 PDH 到 SDH,从EoP 到 EoS,所有的功能都可用 FPGA 实现; 如 PTN 产品,其 OAM、QoS、PTP、以太网协议转换等;再如 OTN 产品,从 ODU 到 OTU、以及 SAR、Interlaken、Fabric 等。以及目前接入的主流技术 XPON 产品,都可以用 FPGA 实现功能。

无线领域:

       由于 FPGA 自身嵌入了处理器(SOPC),其使其应用更加的广泛,具体应用领域如:实现语音合成,纠错编码,基带调制解调,以及系统控制等功能;实现基带调制解调功能;定时恢复、自动增益和频率控制、符号检测、脉冲整形、以及匹配滤波器等。但由于无线领域需要大量的复杂数学运算,对 FPGA 的要求非常高。

视频图像处理方向:

       视频图像处理至始至终都是多媒体领域最热门的技术,特别在不断追逐更高清、更真实图像的欲望驱使下,视频图像的处理数据量越来越大。用 FPGA 做图像处理最关键的一点优势就是:FPGA 能进行实时流水线运算,能达到最高的实时性。因此在一些对实时性要求非常高的应用领域,做图像处理基本只能用 FPGA。例如在一些分选设备中图像处理基本上用的都是 FPGA,因为在其中相机从看到物料图像到给出执行指令之间的延时大概只有几毫秒,这就要求图像处理速度极快且延时固定,只有 FPGA 进行的实时流水线运算才能满足这一要求。如今嵌入式视觉的概念很宽,包括图像处理(ISP),视频处理,视频分析等,这些功能都能在 FPGA 上面实现。在 ISP 方面,比如降噪、宽动态、去雾,3A 等;在视频处理方面,比如缩放、去隔行、全景拼接、鱼眼矫正等;在视频分析方面,包括边缘,形状,纹理提取,物体检测、分类、背景建模等。产品例子包括全景相机、4K 智能相机、高清微投、大屏显示等。

数字信号处理方向:

      无线通信、软件无线电、高清影像编辑和处理等领域,对信号处理所需要的计算量提出了极高的要求。传统的解决方案一般是采用多片 DSP 并联构成多处理器系统来满足需求。但是多处理器系统带来的主要问题是设计复杂度和系统功耗都大幅度提升,系统稳定性受到影响。FPGA 支持并行计算,而且密度和性能都在不断提高,已经可以在很多领域替代传统的多 DSP 解决方案。例如,实现高清视频编码算法 H.264。采用 TI 公司 1GHz 主频的 DSP 芯片需要 4 颗芯片,而采用 Altera 的 StrtixII EP2S130 芯片只需要一颗就可以完成相同的任务。FPGA 的实现流程和 ASIC 芯片的前端设计相似,有利于导入芯片的后端设计。

高速接口方向:

       FPGA 可以用来做高速信号处理,一般如果 AD 采样率高,数据速率高,这时就需要 FPGA 对数据进行处理,比如对数据进行抽取滤波,降低数据速率,使信号容易处理,传输,存储。在实际的产品设计中,很多情况下需要与 PC 机进行数据通信。比如,将采集到的数据送给 PC 机处理,或者将处理后的结果传给 PC 机进行显示等。PC 机与外部系统通信的接口比较丰富,如 ISA、PCI、PCI Express、PS/2、USB 等。传统的设计中往往需要专用的接口芯片,比如 PCI 接口芯片。如果需要的接口比较多,就需要较多的外围芯片,体积、功耗都比较大。采用 FPGA 的方案后,接口逻辑都可以在 FPGA内部来实现了,大大简化了外围电路的设计。在现代电子产品设计中,存储器得到了广泛的应用,例如 SDRAM、SRAM、Flash 等。这些存储器都有各自的特点和用途,合理地选择储存器类型可以实现产品的最佳性价比。由于 FPGA 的功能可以完全自己设计,因此可以实现各种存储接口的控制器。

人工智能机器学习方向:

       近年来 FPGA 在人工智能机器学习中的应用越来越广泛,主要集中在前端和边缘侧。具体来讲,在 ADAS/自动驾驶上可以实现车辆、行人、车道、交通标志以及可行驶区域检测,可以做传感器融合;在智能安防上,可以实现车辆、车型、车牌、交通违规、车流量、人流量、人脸等检测;在无人机上,可以实现自动避障、自动跟随等功能;在医疗影像设备上,可以进行医疗图像的分析,帮助医生判断是不是可能有癌症或异常;在机器人上,可以实现增强学习,让机器人学习新的技能。


IC 原型验证:

      FPGA 在数字 IC 领域中是必不可少的,已经被用于验证相对成熟的RTL,因为相比用仿真器,或者加速器等来跑仿真,FPGA 的运行速度,更接近真实芯片,可以配合软件开发者来进行底层软件的开发。在纯硬件方面,由于 FPGA 供应商尽快转向最先进的制造工艺节点,FPGA 原型设计变得更加简单和强大。FPGA 验证在代码设计完成,功能验证以后。目的是保证设计的功能可以在 FPGA 上实现,也就是做硬件仿真。这样能进一步保证在 FPGA 上验证的结果和流片的结果相同,当然最后还牵涉到后端设计和工艺。如果做的 IC 比较大,就需要裁减原来 IC 的功能再进
行 FPGA 验证了。最终的目的也是为了保证芯片设计符合要求,顺利流片。可以看到在芯
片制造出来之前,很多精力会花费在 RTL 代码验证工作上,另外软件的相关开发工作,也
会在得到芯片前开始,这两方面都需要借助 FPGA 原形来模拟芯片的行为,帮助硬件开发
和软件开发者,共同提升工作效率。

4.国内外FPGA产业现状


http://www.kler.cn/a/391017.html

相关文章:

  • ABC334
  • 不对称信息
  • [CKS] K8S ServiceAccount Set Up
  • 开源vs闭源:你更看好哪一方?
  • PostgreSQL中的COPY命令:高效数据导入与导出
  • git之 revert和rebase
  • 数据分析那些事儿——关于A/B实验
  • 【LeetCode】【算法】34. 在排序数组中查找元素的第一个和最后一个位置
  • 微信小程序的云开发
  • 13、DHCP和FTP协议
  • 利用AI制作《职业生涯规划PPT》,10分钟完成
  • 【Linux】————信号
  • leetcode21:合并两个有序列表
  • [Linux]IO多路转接(上)
  • 微波无源器件 OMT1 一种用于倍频程接收机前端的十字转门四脊正交模耦合器(24-51GHz)
  • Java-03
  • SQL50题
  • ubuntu 20.04 NVIDIA驱动、cuda、cuDNN安装
  • Python 类私化有笔记
  • 【深度学习遥感分割|论文解读2】UNetFormer:一种类UNet的Transformer,用于高效的遥感城市场景图像语义分割
  • 量化交易系统开发-实时行情自动化交易-3.4.2.2.Okex交易数据
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(十三)SpringBoot连接MongoDB
  • 请求接口时跨域问题详细解决方案
  • 前端开发调试之 PC 端调试
  • 使用 `RestTemplate` 获取二进制数据并返回 `byte[]`:解决方案与示例
  • Java 多态 (Polymorphism)详解