我经常收到关于各类设备之间的差异的问题,诸如ASIC、ASSP、SoC和FPGA之间的区别问题。例如是SoC是ASIC吗?或ASIC是SoC吗?ASIC和ASSP之间的区别是什么?以及高端FPGA应该归类为SoC吗?
这里有几个难题,至少技术和术语随着时间而演变。牢记这一点,对于这些术语的起源以及它们现在的意义是什么,我对此做了高度简化的解释。
ASIC——特定应用集成电路
让我们从特定应用集成电路(ASIC)开始。正如其名称所表示的,这是因特定目的而创建的设备。当大多数人听到这个词ASIC时,他们的“下意识”反应是,假设它是数字设备。事实上,不论它是模拟的、数字的,或两者的混合,任何定制的芯片都是一个ASIC。然而,对于这些讨论的目的,我们应该假设这是一个完全或主要部分是数字性质的芯片,任何模拟和混合信号功能是沿着物理接口线(物理层)或锁相回路(PLL)的。
ASIC通常被设计和使用在特定系统中的单个公司。开发ASIC非常昂贵、耗时、资源密集的,但ASIC确实能提供低功耗的高性能。
ASSP——专用标准产品
专用标准产品(ASSP)的设计和实施方式完全和ASIC相同。这并不奇怪,因为它们本质上是相同的东西。唯一的区别是,ASSP是更通用的设备,适用于多个系统设计工作室。例如,独立的USB接口芯片可以归类为ASSP。
SoC——系统级芯片
系统级芯片(SoC)是硅芯片,包含一个或多个处理器核心——微处理器(MPU)和/或微控制器(MCU)和/或数字信号处理器(DSP)——片上存储器、硬件加速器功能、外围功能,以及(潜在的)各种其他“东西”。看它是否属于SOC的办法是,先看一个ASIC是否包含一个或多个处理器内核,那么它就是一个SoC。同样,如果一个ASSP包含一个或多个处理器内核,那么它也是一个SoC。
在此基础上,我们可以把ASIC(和ASSP)当做是扩展集术语,因为它包含SoC,或者我们可以把SoC当做是扩展集术语,因为它包括ASIC(或ASSP)的一切,包含一个或多个处理器核心。是不是觉得很好玩呢?
FPGA——现场可编程门阵列
ASIC、ASSP和SoC具有高性能、低功耗的优势,但它们包含的任何算法——除了那些在软件内部处理器内核执行的——其余都是“冻结的”。所以这个时候我们就需要现场可编程门阵列(FPGA)了。早期的FPGA器件的架构相对简单——只是一系列通过可编程互连的可编程模块。
FPGA最厉害的地方是,我们可以配置它的可编程架构来实现任意我们需要的数字功能组合。另外,我们可以以大规模并行的方式实施算法,这意味着我们可以非常迅速和有效地执行大数据的处理。
SoC级的FPGA
随着时间的推移,FPGA器件的能力(容量和性能)大幅提升。例如,现代的FPGA可能包含几千个加法器、乘法器和数字信号处理(DSP)功能;片上存储器、大量高速串行互连器(SERDES)收发器模块,以及许多其他功能。
问题是,现场可编程门阵列(FPGA)的名字不再足以表达出如今可编程器件的性能和功能。我们需要想出一些新的术语,可以表达出一切目前国家最先进的工具和技术能够做到的事情。
和我们在这里的讨论尤其相关的是,今天的FPGA可以包含一个或多个软/硬核处理器。在此基础上,我们应该把这种类型的FPGA归类为SOC(系统级芯片)吗?我个人不得不说SoC不为我工作,因为我把“SOC”一词定义为创建于使用ASIC技术的自定义设备。
另一种方法是称呼这些器件为可编程片上系统,或PSoC,但赛普拉斯半导体公司已经对PSoC这个名称申请了控制权。赛普拉斯的器件具有一个硬核的微控制器,增添了一些可编程模拟和可编程的数字架构(这个数字架构更倾向于CPLD,而不是FPGA)。
Altera公司通常称呼这些器件的这个版本为SoC FPGA,它们结合了硬MCU内核、可编程的FPGA架构,但他们似乎已经发展到只称呼它们为SoC。同时,Xilinx(赛灵思)称呼这些设备的特点为“所有可编程片上系统”。
就个人而言,我拿不定主意什么名字最好。如果赛普拉斯对这一称谓没有采取的控制权的话,我想我更愿意称它为PSoC。但是因为他们已经对PSoC这个词采取了控制权,所以我们不能。PSoC行不通,我想我会选择SoC FPGA。除非你有更好的提议。