FPGA、ASIC、DSP全面大比拼_pilifeng1的博客-CSDN博客_asic dsp
首先是Digital Signal Processing(),然后才是Digital Singnal Processor(数字信号处理器)
( Field Programmable Gate Array)即,它是在PAL、GAL、PLD在可编程器件的基础上进一步发展的产品是专用集成电路(ASIC)集成度最高的。
(Application SrIecific Intergrated Circuits)即,是指根据特定用户和特定电子系统的需要设计制造的集成电路。与一般集成电路相比,它具有体积小、重量轻、功耗低、可靠性高、性能高、保密性增强、成本降低等优点。
聚焦芯片:GPU,CPU,SOC,DSP,FPGA,ASIC,MCU,MPU,GPP,ECU什么是等等?_处理_Unit_控制
中央处理器(Central Processing Unit)它是一个超大型集成电路,是计算机运算的核心(Core)和控制核心( Control Unit)。其功能主要是解释计算机指令和处理计算机软件中的数据。中央处理器主要包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)以及高速缓冲存储器(Cache)实现它们之间的数据连接(Data)、控制和状态总线(Bus)。它与内部存储器有关(Memory)输入/输出(I/O)该设备被称为电子计算机的三个核心部件。
图形处理器(Graphics Processing Unit),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。目的是转换和驱动计算机系统所需的显示信息,并向显示器提供行扫描信号,控制显示器的正确显示。它是连接显示器和个人计算机主板的重要组成部分,也是人机对话的重要设备之一。显卡作为计算机主机的重要组成部分,对于从事专业图形设计的人来说,承担输出显示图形的任务非常重要。
嵌入式神经网络处理器,采用“数据驱动并行计算”的架构,特别擅长处理视频、图像类的海量多媒体数据。嵌入式NPU小型化、低功耗、低成本优势,加快人工智能技术的应用。例如,无人机对像头的重量和功耗要求很高,否则会影响起飞和续航能力。星光智能一号只有普通邮票大小,重量只有几十克。它的诞生使许多小型设备,如监控摄像头,可能是人工智能,并迈出了人工智能从神秘的机房到生活应用的一步。
TPU(Tensor Processing Unit),谷歌制造的处理器是为机器学习量身定制的,每次操作所需的晶体管数量较少,自然效率较高。因为它可以加速它的第二代人工智能系统TensorFlow运行效率大大超过GPU——Google深层神经网络由TensorFlow发动机驱动。
MPU微处理器和内存保护单元有两种含义。MPU它是一个单一的芯片,而芯片组是由一组芯片组成的,早期甚至多达7或8个,但大多数都合并成2个,通常被称为北桥(North Bridge)芯片和南桥(South Bridge)芯片。MPU它是计算机的计算、判断或控制中心,被称为计算机的心脏。
微控制单元(Microcontroller Unit) ,又称单片微型计算机(Single Chip Microcomputer )或者单片机是中央处理器(Central Process Unit)适当降低频率和规格,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等待周围界面,甚至LCD驱动电路集成在单个芯片上,形成芯片级计算机,为不同的应用场合进行不同的组合控制。诸如手机、PC外围、遥控器、汽车电子、工业步进电机、机器手臂控制等都可以看到MCU的身影。
SOC由于其内涵丰富,应用范围广,很难给出准确的定义。一般来说, SOC它被称为系统级芯片,也被称为芯片上的系统,这意味着它是一个具有特殊目标的产品和集成电路,包括完整的系统和嵌入式软件的所有内容。同时,它也是一种从确定系统功能到软件/硬件划分并完成设计全过程的技术。
DSP(digital signal processor)它是一种独特的微处理器,用数字信号处理大量信息。其工作原理是接收模拟信号,将数字信号转换为0或1,然后修改、删除和强化数字信号,并在其他系统芯片中将数字数据解译回模拟数据或实际环境格式。它不仅可编程,而且实际上每秒可以达到数千万个复杂的指令程序,远远超过通用微处理器,是数字电子世界中日益重要的计算机芯片。数据处理能力强,运行速度快,是最值得称道的两大特点。
讨论自动驾驶芯片的意义不仅仅是理解芯片的原理,还需要理解计算不是软件工作,而是软硬件合作工作。许多算法可以在不同的芯片上实现,但在大规模生产过程中需要在灵活性和成本功耗之间进行平衡。如果你想这样做,你必须理解芯片。
目前芯片结构复杂,但简单分为三个概念结构。.诺依曼结构、哈弗结构和哈弗结构的改进。了解芯片结构的核心是查看其总线布局和存储设计。
例如,如果芯片是一家银行,这家银行只有两个人。一个负责拨算盘(计算),其他都不在乎。负责记录文档(存储),算什么?(数据)和怎么算?”(程序)都完整的用文档记录下来,方便和拨算盘的人沟通。他们定义了一种沟通方式(一组总线),包括文档从哪里取?放回哪里?(寻址总线)和文档的具体内容是什么?换句话说,一组总线包括地址总线和数据总线。特别注意这里总线上的数据对应文档,不要与文档中的数据对应 “算什么?这个数据概念混淆了。
客户将原始需求文档(包括输入数据和程序)交给负责记录的人后,根据定义的沟通方式,与负责实际计算的人反复传递文档(拿程序指令,拿数据,返回结果),最后通过记录的人将最终计算结果反馈给客户。以上分工思路是冯.诺依曼结构的核心特点是客户只需要与记录员沟通。无论需求有多复杂,他们都可以给一个人一个脑袋,其余的都是他们之间的事情。整个过程非常灵活,这也是冯.诺依曼结构的最大优势。程序指令存储地址和数据存储地址指向同一存储器的不同物理位置,因此程序指令和数据宽度相同。但是这种方法效率不高,因为记录的人每时每刻只能做一件事,要么告诉拨算盘的人怎么算,要么告诉它算什么。因此,哈佛结构分别存储程序指令和数据,指令和数据可以有不同的数据宽度。采用独立的一组程序总线和一组数据总线。这相当于原来的两个人三个人,记录员分工,一个负责记录传输计算方法(程序),一个负责记录传输计算内容(数据)。两个人和拨算盘的人点对点交流,但是老死不相往来。这种并行化自然提高了效率,至少要做两个周期,一个周期就完成了。但这种方法让客户同时对应两个没有联系的记录员,这是非常不友好的。如果需求侧重点不同,两个人的工作量往往会导致浪费,如果一个人负责(冯).诺依曼结构),这些问题都不存在。
改善哈弗结构是为了解决这一平衡问题。程序存储器和数据存储器分时共用只有一组总线。原哈佛结构需要4条(2组)总线,改进后需要2条(1组)总线,并保留了两个独立并行的存储器。也就是说,记录员为了效率做了分工,但沟通方式升级,走上了敏捷之路。不再是两两沟通的老国企,客户和拨算盘的人也加入进来做四方沟通会(分时公用),统一归口保证了灵活性,分时对并行化影响不大。
在讨论了基本的结构思想之后,这里有几点需要提醒。实际的芯片设计是扩展和嵌套这些概念结构,如CPU虽然处理器的外部总线是诺依曼结构,但由于内部高速缓存的二次设计,实际上是哈佛结构的改进。
然后我们来谈谈芯片的分类。首先,我们应该区分芯片的两芯片。(CPU, GPU, DSP等)和定制芯片(FPGA, ASIC等等),这个类别的划分很重要,两者有本质的区别。同样,通用芯片是银行柜员,定制芯片是ATM机”。
通用芯片的关键是通用一词,这意味着它必须有能力处理各种奇怪的指令要求,并且经常同时有多个外部设备要求。它必须有能力随时停止当前的操作并进行其他操作,然后继续当前的操作。就好比银行柜员,客户要办的业务千奇百怪,时常还来个缺德的插队骂娘或者站着位置不走撩你两下的人存在。柜员要处理。为了实现这一点,通用芯片有一个复杂的控制取指翻译过程,Cache内存分级机制(缓解高速CPU真实计算单元与低速内存临时指令存储器)ALU只占通用芯片的一小部分,更多的设计是为了灵活性,牺牲前者来选择后者来权衡计算效率和通用性。
计算机元件无法理解我们的指令。他们只能理解晶体管实现的两种状态:打开和关闭对应于1和0,以使指令变成CPU能理解的0和1,CPU需要一个专门的译码器来翻译我们的指令。这个过程分为两个步骤:取指(从存储指令的特殊存储器中提取指令)和解码(将指令翻译成计算单元可以理解的数据)。
当我们在上面讨论芯片结构时,我们更多地讨论通用芯片的结构。当我们讨论满足客户变化需求时,哪种人员组织形式和沟通方式是最有效的。
定制芯片是另一个完全概念。虽然它也有结构思想,但就像你不会讨论一个程序的人员组织结构一样,这个芯片中没有时间序列中断。为灵活性设计的概念是指译码。与普通芯片相比,定制芯片没有人性ATM机器,它为客户定义了清晰的操作流程,节省了大量的灵活性设计,如中断,与小妹妹调情,机器人是站不住脚的。
打个比方,比如一个比大小的逻辑用冯诺依曼结构的CPU至少需要几条指令完成,但用FPGA就根本不用考虑时序周期,只要串联几个逻辑单元,在一个周期就搞定了。但如果再增加几个逻辑,CPU还是在相同逻辑资源下用几个指令完成,但是FPGA 就需要额外占用另一部分逻辑资源完成计算。再比如FPGA和GPU(GPU是通用芯片)在并行化上有类似的思想,但两者实际没有多少可比性,你不会把三个柜员的办理通道和ATM机理存在在三个恰好并行的流程做比较一样。还有人在信号处理效率上把DSP和FPGA拿出来对比,我觉得这些零零种种的比较都没有太大意义。为灵活性存在的“人”(通用芯片),和为效率存在的“机器”(定制芯片)是两个维度的事情,不要从性能上去强行比较。
从这里我们可以大致看出来,两者的几个重要差异。定制芯片是对已经固化的业务进行降本增效,就像银行用ATM机,代替成本更高的柜员处理一些常规银行业务。而通用芯片是为了对一些无法或者暂时没有固化的业务作出的灵活设计。两者没有优劣之分。
了解了芯片的两个大方向,我们看下这两个大方向内部的细分差异以及联系。通用芯片下的CPU(MPU), GPU, DSP,MCU之间同样存在细分差异。
CPU和MPU可以简单理解为一个概念,只是理解范畴上的区别。CPU和GPU之间的区别更多的是核的数量。CPU虽然有多核,但基本不超过两位数,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,并有更复杂的逻辑判断硬件,就像银行里常备的3-4个柜台的柜员,擅长处理客户很复杂的业务。而GPU的核数远超CPU每个核拥有的缓存大小相对小,数字逻辑运算单元也少而简单,更像是500多个电话客服柜员,处理一些相对简单但数量众多的客户业务。
DSP(数字信号处理芯片)是一类特殊的CPU,采用了上面说的哈佛结构,且存在专用的硬件算法电路和专门的寻址模式。它具有通用芯片设计的灵活性,但在实时运算过程中很少变化,因此特化了业务流程的性能(记录和计算过程)。就像是某个办理“外汇存取”的专业柜台会部署一些特化的柜员和流程。DSP对于专用信号(视频编解码,通讯信号)的处理能力远远的优于一般CPU。当然普通柜台也可以处理展业柜台的业务,但性价比就很差了,如果需求很多开设专门的柜台就变得有意义,这些还是和客户需求有关。用DSP处理专门的信号流常具有执行时间可控,芯片性价比高等优点。
讲完了通用芯片,定制芯片也有两个主要方向,FPGA和ASIC。两者核心的区别就是固化程度。FPGA仍然具有一定的灵活性(但远逊于通用芯片),而ASIC则是完成固化的设计(也存在和FPGA类似的部分编辑的产品存在)。类似可以编程的ATM机和完全固化的ATM机,两者区别最大的维度还是成本和功耗。
FPGA最早是从专用集成电路发展而来的半定制化的可编程电路,是高端的CPLD (Complex Programmable Logic Device复杂可编程逻辑器件)。FPGA可以实现一个DSP, GPU甚至是CPU的功能,就像之前说的把柜员业务固化为ATM机操作流程一样。但不是说FPGA可以代替CPU,这是设计目的上的大方向差异,反复强调。
FPGA是一堆逻辑门,通过硬件描述语言HDL把它转成电路连接,从最基本的逻辑门层面上连接成电路。虽然看起来像一块CPU,其实是完全硬件实现的。根据一个固定的模式来处理输入的数据然后输出。FPGA片上大部分都是计算单元,没有控制单元并不代表FPGA不会执行指令,事实上FPGA里控制单元的角色由单元和单元之间可编程逻辑连接线来完成的,通过HDL编程更改每个单元的运算逻辑和单元之间的连接方式,从而使其达到和一般的运行程序差不多的效果。由于省去了CPU的取指和译码两个步骤,FPGA重复运行相同代码的效率得到了极大的提高,也因此,其无法应对没有被编程过的指令。
ASIC就是专用IC,没有明确的定义。可以理解为除了单片机、DSP、FPGA之类的能叫出名的IC,剩下的都是ASIC。ASIC原本就是专门为某一项功能开发的专用集成芯片。后来ASIC发展了一些,称为半定制专用集成电路,相对来说更接近FPGA,甚至在某些地方,ASIC是个大概念,FPGA属于ASIC的一部分,也常常被作为ASIC开发的预研。其代表了在需求一定的情况下,对性价比的极致追求。
在上面我偷偷遗漏了一个概念MCU,原因是其本身不是一种芯片类型而是一种集成方式,SOC芯片也是同样的道理,两者的区别是程度上的不同。在自动驾驶汽车领域MCU更多的是集成了更多的输入和输出设备在芯片当中,方便更好的控制,因此叫做微控制器而不是微处理器。而SOC是在更高的层面上将不同的芯片做了进一步的集成,维度更高。如果MCU是一种人员组织最终形成一个公司对外服务,那SOC更像是公司级别的组织形成了一个行业对外服务。
单片机是MCU的通俗说法,经典的51系列就是一堆IO口,后来慢慢的把常用的PWM, AD之类的功能加入了单片机之中。其构成等价于一个带了更多外设CPU,但侧重点是讨论其外设的部分。在PWM,AD等之上继续发展其外设也就形成了汽车行业熟悉的ECU即电子控制单元,同时泛指汽车上所有电子控制系统,可以是转向ECU,空调ECU等。
ECU一般由MCU,扩展内存,扩展输入和输出(CAN/LIN,AD,PWM等),电源电路和其他一些电子元器件组成,特定功能的ECU还带有诸如红外线收发器、脉冲发生器,强弱电隔离等元器件。整块电路板设计安装与一个铝质盒内,通过卡扣或者螺钉方便安装于车身钣金上。
在输入处理电路中,ECU的输入信号主要有三种形式,模拟信号、数字信号(包括开关信号)、脉冲信号。模拟信号通过A/D转换为数字信号提供给微处理器。
在输出电路中,微处理器输出的信号往往用作控制电磁阀、指示灯、步进电机等执行件。微处理器输出信号功率小,使用+5v的电压,汽车上执行机构的电源大多数是蓄电池,需要将微处理器的控制信号通过输出处理电路处理后(D/A,放大等)再驱动执行机构。
电源电路中,传统车的ECU一般带有电池和内置电源电路,以保证微处理器及其接口电路工作在+5v的电压下。即使蓄电池电压有较大波动时,也能提供稳定电压保证系统的正常工作。
一般搭载8位MCU的ECU主要应用于风扇控制、空调控制、雨刷、天窗、门控等较低阶的控制功能。16位MCU主要应用如引擎控制、齿轮与离合器控制等。32位MCU应用于多媒体信息系统,实时性的安全动力系统以及复杂的X-by-wire等传动功能。更复杂的功能就不在MCU或者ECU的讨论范围内了。
随着自动驾驶的发展,ECU的概念进一步升级,更为流行的说法是域控制器,其无外乎就是把MCU变成了SoC(片上系统),同时集成了更多的外围设备而已。目前域控制器搭载的主流通用芯片(GPP)多采用SoC的芯片设计方法,通过HDL语言在SoC内由电路集成各种功能芯片。在SoC中各种组件(IP核)采用类似搭积木的方法组合在一起。IP核(诸如典型的ARM内核设计技术)被授权给数百家半导体厂商,做成不同的SoC芯片。还可能集成GPU、编解码器(DSP)、GPS、WiFi蓝牙基带等一系列功能。如果看一下高通或者TI的芯片,基本是一个ARM核控制整体运算,一个DSP处理语音编解码, 一个GPU负责图像运算,一个基带和天线处理模块负责通信,以及GPS,安全加密等林林总总的特殊芯片。
过去极端情况下自动驾驶的原型处理器功耗可以高达5000W,不仅昂贵且需要搭载额外的散热装置。SoC和ASIC的发展给我们带来很多启示,回到我经常提及的贯穿整个自动驾驶系统的灵活性。在新的SoC世界里,你不会从不同的供应商那里组装物理元件。相反,你从不同的供应商那里组装IP从而获得更好的集成度,也因此更容易降低功耗和成本。
大部分自动驾驶算法公司都想定制或自制ASIC/SOC计算平台,原因还有另一个层面来源于软硬件的匹配问题。算法的性能与硬件设计往往脱离不开。追求模块化就要牺牲利用率。要提高利用率就需要软硬件一体设计。你的算法是用GPU合适还是CPU合适,网络模型一次用多少内存又同时使用多少MAC,由此来设计芯片。或者说反过来给定一个芯片,我的算法要如何兼容,是否要减少内存访问次数提高利用率,还是要迁移部分CPU基于规则的算法,改为用GPU基于深度学习来实现。软硬件一起考虑往往才能充分利用好系统性能。
不同的芯片,不同的算法和需求,往往有最优的组合方式。比如一个经典底层而常用的算法应用,需求是大量的且竞争是激烈的时候,ASIC就是很好的选择。为了一个简单功能(比如编解码)支付一个ARM的授权是愚蠢的。
如果算法非常经典且底层,但仍然有改进的空间和需要适配的不同场景,信号流的处理(手机语音处理)可以直接使用DSP,而更复杂的输入输出逻辑算法(比如图像SIFT特征处理),就可以交给FPGA来做,性能相对于CPU都可以由30-100倍的提升,且成本和耗能更小。
在复杂算法领域相对于CPU,GPU的众核架构把同样的指令流并行发送到众核上,采用不同的输入数据执行。所以GPU比CPU更适合并行算法,而串行的复杂规则逻辑则更适合CPU处理。更具体的说,如果标量视为零阶张量,矢量视为一阶张量,矩阵视为二阶张量。CPU对应标量计算,主要是路径规划和决策类算法,常用的传感器融合如卡尔曼滤波算法也多是标量运算。GPU则对应矢量或者说向量计算,包括点云,地图,深度学习,核心是矩阵运算。用CPU编写程序时,更适合通过精益化逻辑来提升性能。而用GPU编写程序时,则更合适利用算法并发处理来提升性能。