文章目录

  • 前言
  • 一、FPGA简介
  • 二、FPGA的用途
  • 三、FPGA比较
    • 1、FPGA与单片机比较
    • 2、FPGA与CPU比较
  • 四、为什么选择FPGA
  • 总结

前言

在正点原子的技术文档里面看到一个小故事,很有意思。刚开始接触FPGA的时候,这个故事让我眼前一亮,对FPGA有一种莫名的神秘感与期待感。

话说一个资深工程师出国的时候带了一块 FPGA 开发板。
海关问道:“这是什么东西?”
工程师说:“FPGA 开发板”。
海关又问:“FPGA 是什么?”。
工程师回答说:“你想让它是什么,它就是什么(It can be whatever you want)”

一、FPGA简介

FPGA(Field-Programmable Gate Array),即现场可编程门阵列,由Xilinx创造于1984年,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物,FPGA本质上是一种芯片,它并不是一种软件,也不是一个工具,和CPU、GPU相比,它们在本质上并没有什么区别,都是芯片的一种。
       FPGA有三个重要特点:现场、可编程、门阵列。
       首先FPGA有大量的逻辑门阵列组成,逻辑门是数字电路最基本组成单元,它基于布尔代数,对二进制数0和1进行操作,并完成不同的逻辑运算,比如与或非等等。举个例子,任何数和0相与都为0,和1相或都为1,非就是把0变1,把1变0,而FPGA可以使用逻辑门组成各种不同的逻辑功能。有些可能不太明白这个逻辑门阵列有什么好处,换句话说,拥有可配置的逻辑块,就意味着不再受到硬件的制约。您不会再遇到定时器或 UART 不够用的情况,只要您拥有逻辑单元便可创建更多定时器或 UART。
       其次,FPGA的另外一个特点就是可编程性 ,这里的可编程与我们平时所说的软件编程有着本质区别,对于CPU或者单片机的编程,一般是通过改变寄存器的配置来实现,但不会改变芯片的逻辑功能。打个比方,你不能通过编程把一个网络交换芯片变成一个视频处理芯片,相比之下,FPGA的编程为硬件可编程,它让FPGA可以对逻辑门阵列可以重复编程,从而使FPGA可以在逻辑层面上任意改变自己实现的硬件结构,这使得FPGA有很高的灵活性。
       现场可编程性:主要指FPGA可以在现场完成编程,而不需要把芯片拆下来,然后送回厂家来完成编程操作(相当于一块橡皮擦,可以自己捏成任意形状)

二、FPGA的用途

FGPA能做什么呢?
       可以毫不夸张地讲,FGPA能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路,都可以用FGPA来实现。你可以把FGPA比喻成一堆乐高,通过拼装,可以做成任何一种模型——工程师可以通过传统的原理图输入或硬件描述语言(如Verilog HDL、VHDL)自由地设计一个数字系统。 目前的FPGA主要还是在通信和网络领域用的比较广泛,用来对大量的网络数据包进行处理,比如大规模应用于华为5G基站。一部分应用于医疗器械,金融领域,军用设备,航空航天。
       FPGA的应用大可分为以下几种:
       数据采集领域:自然界的大部分信号是模拟信号,在高速采集时,信息无法直接传入MCU或者DSP。此时,需要FPGA进行一定的转换和速率匹配。这里提一点,DSP是CPU的一种,做数字信号的处理,擅长做乘法和加法运算。
       逻辑接口领域:CPU在于外界通信时,需要各种专门的接口,而接口电路所引入的接口电路很庞大。加入FPGA,就可以CPU与FPGA做单独通信,由FPGA实现其他各种接口的扩展。
       电平接口领域:不同的器件支持的电平不尽相同,如果需要连接各种接口时,就需要各种接口标准或者转换电路。对于FPGA来说,FPGA分为不同的BANK,可以直接支持不同的电平标准。
       数字信号处理领域:通信、图像等领域近些年对计算量提出了更高的要求,FPGA支持并行计算,可以大大缩短计算的时间。
       IC设计领域:IC在设计时,首先会使用FPGA设计出基础的电路模型进行各种理论验证,等验证通过后,才会进行IC制造等等。

三、FPGA比较

1、FPGA与单片机比较

FPGA和单片机,首先它们在硬件架构上不同,单片机无论是MCU还是MPU都是基于控制器和算术逻辑单元进行工作的,而FPGA是基于查找表的硬件电路进行工作的,这一点正同于单片机用的是软件设计语言而FPGA用的是硬件描述语言一样;其次,FPGA在芯片容量、组合逻辑、工作速度、设计灵活上远优于单片机;最后,在代码的设计思想上也不一样,单片机使用的是串行的设计思想,而FPGA则使用的是并行的设计思想。

2、FPGA与CPU比较

CPU与FPGA的根本区别在于软件与硬件的差异。CPU为 冯诺依曼结构,串行地执行一系列指令;而FPGA可以实现 并行操作 ,就象在一个芯片中嵌入多个CPU,其性能会是单个CPU的十倍、百倍。一般来说,CPU可以实现的功能,都可以用硬件设计的方法由FPGA来实现。当然,极其复杂的算法用硬件实现会比较困难,资源消耗也很大,如果没有高性能要求,那用硬件实现就有点得不偿失了。对于一个复杂系统而言,进行合理的软、硬件划分,由CPU(或DSP)和硬件电路(如FPGA)合作完成系统功能是非常必要的,也是高效的。(http://blog.csdn.net/chzms/article/details/2548272)

四、为什么选择FPGA

打破顺序执行模式,大规模并行运算,低延时,验证想法简便,缩短产品上市时间。(由于时间问题,这个小节后面有时间总结好再更新到文章)

总结

FPGA应用于很多关键领域,但是目前我国FPGA市场的份额的90%以上都被美国公司所占据,特别是中高端的FPGA芯片,国内还没办法做到生产代替,光刻机技术、EDA软件仍然很落后,很多人并没有意识到这点,我们的芯片半导体产业仍然有很长的路要走。

零基础学FPGA(三):国产芯片短板—FPGA(为什么选择FPGA)相关推荐

  1. 零基础学FPGA(五):时序逻辑电路设计之计数器(附有呼吸灯实验、简单组合逻辑设计介绍)

    目录 日常·唠嗑 前言 一.认清逻辑设计 二.时序逻辑电路设计 三.扩展:呼吸灯实验 日常·唠嗑 第一次建立<零基础学FPGA>专栏,是在2021年2月2日,已经过去了一年了,目前只更新了 ...

  2. 零基础学FPGA(八):可编程逻辑单元(基本结构,Xilinx+Altera)

    目录 日常·唠嗑 一.概述 二.基于多路选择器的逻辑单元 1.基于多路选择器的逻辑单元(早期) 2.基于PLD结构的逻辑单元(类CPLD) 3.基于查询表的逻辑单元(目前主流) 三.Xilinx基本结 ...

  3. 零基础学Java需要先具备的三项技能

    随着互联网的发展,许多公司都在招Java工程师,很多零基础的Java小白看中了Java的高薪资,也都想转行做Java,但是零基础学Java需要先具备哪些技能呢?本文小千整理了零基础学Java需要先具备 ...

  4. 【零基础学Java】—List集合(三十九)

    [零基础学Java]-List集合(三十九) java.util.list接口 extends Collection接口 list接口的特点: 1.有序的集合,存储元素和取出元素的顺序是一致的(存储1 ...

  5. 【零基础学Java】—包装类(三十七)

    [零基础学Java]-包装类(三十七) 一.包装类 包装类:基本数据类型,使用起来十分方便,但是没有对应的方法来操作这些基本类型的数据可以使用一个类,把基本的数据装起来,在类中定义一些方法,这个类叫做 ...

  6. 【零基础学Java】—System类(三十五)

    [零基础学Java]-System类(三十五) java.lang.System 类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作 在System类的API文档中,常用的方法有: pub ...

  7. 【零基础学Java】—Calendar类(三十四)

    [零基础学Java]-Calendar类(三十四) java.util.Calendar日历类 Calendar类是一个抽象类,里面提供了很多操作日历字段的方法 Calendar类无法直接创建对象,里 ...

  8. 【零基础学Java】—Java 日期时间(三十二)

    [零基础学Java]-Java 日期时间(三十二) DateFormat 是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间. 日期/时间格式化子类(如SimpleDateFor ...

  9. 【零基础学Java】—Java 日期时间(三十一)

    [零基础学Java]-Java 日期时间(三十一) java.util.Date:表示日期和时间的类 类Date表示特定的瞬间,精确到毫秒 毫秒:千分之一秒,1000毫秒=1秒 特定的时间:一个时间点 ...

最新文章

  1. opengl 设置每个点的颜色_OpenGL学习笔记(四)着色器
  2. linux 线程操作问题undefined reference to ‘pthread_create‘的解决办法(cmake)
  3. 在线人员统计系统php,PHP统计当前在线人数 - 案例源码
  4. sqlserver 跨服务器备份表
  5. Boost:循环缓冲区总和的测试程序
  6. java和python哪个编程好找工作_学编程选Python还是Java?就业发展哪个好??
  7. jdbc和jdbc驱动_JDBC布尔兼容性列表
  8. 使用deploy命令上传jar到私有仓库
  9. fastai学习:06_multicat Questionnarie
  10. 关于php的函数,总结关于PHP文件函数有哪些
  11. 手眼标定,我的结果显示手和眼相距上千米!手眼标定结果准确率如何提高?
  12. Hash表的存储结构
  13. 读书笔记 - 《王阳明大传:知行合一的心学智慧》
  14. 无法在驱动器0的分区1上安装windows
  15. 【历史上的今天】11 月 8 日:为开源献身的互联网之子;卷积神经网络 LeNet-5 问世;特斯拉发明遥控器
  16. Ubuntu:安装rust
  17. F1--DDR3的应用总结(二)-2021.11.29
  18. ubuntu mysql快捷键_ubuntu快捷键设置大全
  19. vue项目搭配elementui需要下载的东西
  20. 算数基本定理和代数基本定理

热门文章

  1. Android Manager之SensorManager(传感器)—方向传感器(Orientation sensor)
  2. C#使用控制台输入三个整数,使用三目运算符算出最大值
  3. ArcSDE的安装步骤
  4. 【应用笔记】【AN004】VB环境下基于RS-485的4-20mA电流采集
  5. beego 框架 客户端下载文件
  6. 为啥谷歌浏览器打不开微信公众平台?
  7. Ruoyi-vue导出PDF
  8. 如何在 R 中创建人口金字塔
  9. Tableau(10):人口金字塔、漏斗图、箱线图
  10. 英飞凌AURIX Development Studio安装和使用,TASKING软件license推荐