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

CPLD和FPGA的区别

某种专门用途而设计的集成电路称为专用集成电路,即所谓的 ASIC( Application Specific Integrated Circuit)。

ASIC 的使用在生产、生活中非常普遍,比如手机、平板电脑中的主控芯片都属于专用集成电路。
虽然 ASIC 有诸多优势,但是在用量不大的情况下,设计和制造这样的专用集成电路不仅成本很高,而且设计制造的周期也很长。可编程逻辑器件( Programmable Logic Device, PLD)的出现成功解决了这个矛盾。

可编程逻辑器件( Programmable Logic Device,PLD) 是作为一种通用器件被生产的,但它的逻辑功能是由用户通过对器件进行编程来设定的,而且有些 PLD 的集成度很高,足以满足一般数字系统设计的需要。这样就可以由设计人员自行编程, 从而将一个数字系统“ 集成” 在一片 PLD 上,做成“ 片上系统” ( System on Chip, SoC),而不必去请芯片制造厂商设计和制作专用集成电路芯片了。

自 20 世纪 70 年代以来, PLD 的研制和应用得到了迅速的发展,相继开发出了多种类型和型号的产品。PLD 的发展历程如下图所示:
在这里插入图片描述
目前常见的 PLD 大体上可以分为 SPLD( simple PLD,简单 PLD)、 CPLD( complex PLD,复杂 PLD)和 FPGA( field-programmable gate array,现场可编程门阵列)。
SPLD 中又可分为 PLA、 PAL 和 GAL 几种类型。 FPGA 也是一种可编程逻辑器件,但由于在电路结构上与早期已经广为应用的 PLD 不同,所以采用FPGA 这个名称,以示区别。

通过对数字电路的学习, 我们知道任何一个逻辑函数式都可以变换成与-或表达式,因而任何一个逻辑函数都能用一级与逻辑电路和一级或逻辑电路来实现。 PLD 最初的研制思想就来源于此。
PAL 器件的基本电路结构
上图是 SPLD 中 PAL(可编程阵列逻辑)的电路结构图。通过对输入端( input)到与门之间的可编程阵列( programmable array)进行编程,利用 PAL 可以获得不同形式的组合逻辑函数。 我们通过学习数字电路课程可知,任何逻辑函数式都可以转化为若干乘积项( product tems)之和的形式,亦称“ 积之和” 形式。
通过对可编程阵列进行编程, 与逻辑电路输出所需要的乘积项,再通过或逻辑电路将这些乘积项相加,就得到了最终的功能输出。然后该输出送给输出电路中的寄存器用于存储或者同步,当然也可以忽略寄存器直接输出。这就是 PAL 作为一种“ 可编程逻辑器件” 能够实现不同逻辑功能的原理。
通过扩展 SPLD 的概念就可以得到 CPLD, CPLD 是复杂可编程逻辑器件,相当于将多个 PAL 用可编程互联阵列( Programmable Interconnect Array, PIA)连接起来,形成一个大的 PLD,如下图所示:
CPLD 结构示意图
上图中的 Logic block(逻辑块)通常被称为逻辑阵列模块, 或者 LAB( Logic Array Block)。每个 LAB相当于一个 PAL 电路,不同型号的 CPLD 器件可以包含十几个甚至上百个 LAB。通过 PIA 将这些 LAB 连接起来,就可以构成规模更大的逻辑电路了。另外,在 PAL 中, I/O 管脚是直接连接到逻辑的。而在 CPLD中, I/O 管脚是通过 PIA 从器件的主要逻辑中分离出来的。 I/O 管脚有它自己的控制逻辑, I/O 控制单元可以根据需要将相应的引脚设置成输入、输出或双向工作模式。

CPLD 相对于 SPLD 最大的优势就是拥有更大的逻辑资源和布线的可能性。 CPLD 中 LAB 逻辑和 PIA是完全可编程的,使得它在单芯片中具有非凡的设计灵活性。 CPLD 的 I/O 特性和功能也远比 SPLD 中简单的 I/O 更有价值。

FPGA 是在 PAL、 GAL 和 CPLD 等可编程逻辑器件的基础上进一步发展的产物,但是 FPGA 和其前辈CPLD 有着非常大的差异。我们用一张表格来罗列他们之间的差别如下表所示:
在这里插入图片描述
那为什么会产生这么大的差别呢,主要是由于 FPGA 的内部结构决定的,下面我们就来看看 FPGA 的内部结构,如下图所示:
在这里插入图片描述

FPGA 基本结构一般由六部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、 底层嵌入功能单元、 布线资源、 嵌入式块 RAM 和内嵌专用硬核。

在内部结构上相比CPLD已经发展很远了,导致他们针对的应用场景也相差很大。

http://www.dtcms.com/a/354021.html

相关文章:

  • LeetCode 560. 和为 K 的子数组
  • Linux827 测试
  • Linux MDIO 深入分析
  • 电子电气架构 --- 软件项目复杂性的驾驭思路
  • [Sync_ai_vid] UNet模型 | 音频特征提取器(Whisper)
  • FPGA实现Aurora 64B66B图像视频传输,基于GTY高速收发器,提供2套工程源码和技术支持
  • 第三阶段数据库-10:存储过程,事务,异常,视图,自定义函数,触发器,N关键字
  • synchronized和Lock有什么区别?
  • Vue3》》基础
  • Ubuntu 20.04.6交叉编译得到Ubuntu 16.04.6的可执行文件
  • 5GNR CSI反馈 TypeI码本
  • Shader开发(十七)着色器中的纹理采样与渲染
  • OpenCV4.X库功能全解---个人笔记
  • 基于51单片机温度控制系统报警器恒温箱水温设计
  • Oh My Zsh + Tabby 终端配置指南
  • CB1-2-基础启航
  • 工业 DCS 全面科普:从入门到 AI 赋能的未来
  • 大视码垛机器人:以技术优势撬动工业码垛升级
  • 【datawhale组队学习】RAG技术 -TASK05 向量数据库实践(第三章3、4节)
  • Scala面试题及详细答案100道(21-30)-- 面向对象编程
  • 丝杆支撑座如何助力自动化设备精准定位?
  • 对接连连支付(四)-- 收款查询
  • 在Python中处理GDB、MDB和Shapefile文件转换
  • 滥用Mybatis一级缓存引发OOM问题
  • 如何使用asyncio库
  • 汽车电气系统的发展演进为测试带来了哪些影响?
  • LangChain4J-(3)-模型参数配置
  • AI生成音乐模型发展现状与前景
  • prettier、eslint、stylelint在项目中使用
  • 理解虚拟 DOM:前端开发中的高效渲染利器