CPU/GPU/NPU/TPU/DSP
1.CPU
中央处理控制单元,采用冯·诺依曼架构(指令和数据共用一条总线,同一条路)。CPU不追求“算得多”(那是GPU/NPU的活),而是追求“算得准、反应快、能发号施令”。
执行流程:
取地址(Fetch):CPU的程序计数器(PC指针)告诉它:“去RAM的 0x1000 地址,把下一条机器指令拿过来。”
译码(Decode):指令译码器把拿到的二进制(比如 100101)翻译成CPU能懂的微操作:“哦,这是一条加法指令。”
执行(Execute):算术逻辑单元(ALU) 上场,真正完成加减乘除或逻辑比较。
访存(Memory Access):如果需要读/写RAM里的数据,此时通过总线去操作。
写回(Write Back):把计算好的结果写回CPU内部的寄存器(Registers)或RAM中。
2.GPU
字面叫“图形处理器”,现代GPU的核心工作可以概括为:大规模“数据并行”的数学计算。
图形渲染(传统主业):把3D物体模型(点、线、面)通过坐标变换、光照计算、纹理映射、像素着色等一系列流水线操作,最终变成你在屏幕上看到的2D像素图像。这中间涉及海量的矩阵乘法和向量运算。
通用计算(GPGPU,现代副业):因为GPU有几千个计算单元,特别适合“同一指令,处理不同数据”的场景。
现在它大量用于:
AI推理/训练(神经网络就是海量的矩阵乘法)
科学模拟(流体力学、分子动力学)
视频编解码加速(转码、滤镜)
加密货币挖矿(暴力哈希运算)
打个比方:CPU是“博士生”(少量核心,逻辑复杂,擅长分支预测和延迟敏感的任务),GPU是“一万个小学生”(大量核心,逻辑简单,擅长机械重复的加减乘除)。让CPU去渲染游戏画面,就像让博士生做一万道四则运算,大材小用;让GPU去处理操作系统调度,就像让一万个小学生去管理图书馆,乱作一团。
嵌入式图形芯片 vs. 独立显卡:核心差异

3.NPU
CPU和GPU需要先读取指令,然后一步步算。而NPU直接在硬件电路层面实现了“乘加(MAC)”的流水线。这意味着处理AI任务时,NPU不需要“取指令-译码-执行”这套流程,而是数据一进去,物理电路直接输出结果。这种“硬件固化”带来的加速,是数量级的飞跃。
NPU没有通用的CPU核心,也没有大容量的ROM(存储代码),但它内部有“小容量RAM”(专业术语叫SRAM缓存或片上存储器)。
为什么必须有小RAM?
因为NPU算力极强(每秒几万亿次运算),如果每次计算都要跑到外部的DRAM(你之前说的“大圆桌”)去取AI模型的权重数据,路上的时间损耗(延迟)会让NPU 90%的时间都处于“等快递”的空闲状态。所以,NPU内部会集成几MB到几十MB的超高速SRAM,作为它的“私人小仓库”。CPU只需把模型参数从外部的ROM/DRAM搬到NPU的这个小仓库里,NPU接下来就可以脱离CPU,自己疯狂运算了。
在SoC架构中,NPU严格遵循“主机-加速器(Host-Accelerator)”模式。CPU是绝对的主人,NPU是被动的打工人,具体控制流程是这样的:
CPU下达命令:CPU在RAM里准备好NPU要处理的数据(比如一张照片),然后往NPU的“命令寄存器”里写一条指令:“去RAM的 0xA000 地址取照片,去 0xB000 地址取人脸识别模型,算完了放回 0xC000。”
NPU独立干活:NPU收到指令后,启动内部的DMA(直接内存访问)控制器,绕过CPU,自己直接把RAM里的数据吞进内部的小仓库,开始疯狂矩阵乘法。
中断通知:NPU算完后,给CPU发一个“中断信号”(好比按门铃)。CPU收到后,去 0xC000 地址把“这是张三”的结果拿走,再决定下一步干什么。
4.TPU
TPU 是Google 开发专门用于加速机器学习的处理器,与GPU 相比,TPU 被设计并运用于大量的低精度计算,只包含卷积和全连接计算。 Google 于研究表明在使用神经网路推断的AI 运算任务中,TPU 的效能是当代GPU 和CPU 的15 到30 倍,但是生产的厂商少,市场供不应求,因此价格昂贵。
NPU和TPU芯片都是一条高效的“流水线”,数据(比如神经网络的权重和输入)像有节奏的“脉搏”一样,从棋盘的左边和上边流入。每个计算单元只负责接收相邻单元传来的数据,做一次简单的乘加运算,然后立刻把结果传给右边或下边的邻居。区别在于TPU只有乘加运算,NPU不仅有卷积和矩阵乘法,还包含各种激活函数以及池化和归一化操作。

过程:
CPU发号施令:CPU(主机)通过PCIe接口,将模型权重和数据从主机内存“预加载”到TPU的片上内存中。
TPU执行命令:CPU向TPU发送仅有的12条高级指令,比如:
Read_Host_Memory:从CPU内存读取数据。
Matrix_Multiply:执行矩阵乘法或卷积运算。
Write_Host_Memory:将结果写回CPU内存。
流水线作业:TPU内部采用流水线设计,数据的读取、计算、写入可以重叠进行,让计算单元始终处于忙碌状态,最大化利用效率。
5.DSP
一:哈佛架构(Harward Architecture)—— 两条腿跑步
你之前学的CPU(如Cortex-A)大多采用冯·诺依曼架构(指令和数据共用一条总线,同一条路)。
而DSP内部是哈佛架构:程序总线(存指令)和 数据总线(存数据)是物理分离的两条路。
效果:CPU要“取指令”就不能“读数据”,得排队;DSP可以在一个时钟周期内同时完成“取指令”和“读数据/写数据”。这种“双车道”设计,是DSP能实时处理连续数据流的物理基础。
二:单周期乘加器(MAC)与 零开销循环(Zero-Overhead Loop)
NPU擅长矩阵乘法(一次算一堆),而DSP擅长“乘加(MAC)”运算——这是数字滤波(FIR/IIR)和傅里叶变换(FFT)的核心公式:y = a*x + b。
CPU算这个:需要“取数→乘法→加法→存数”好几条指令,还要判断循环是否结束(耗时)。
DSP算这个:硬件内置专用MAC单元,一条指令搞定乘加;并且硬件自带“循环计数器”,当你写“重复执行100次乘加”时,CPU不需要额外花时间数数,循环判断由硬件免费完成。这被称为“零开销循环”,极大地加快了算法速度。
三:定点计算(Fixed-Point)与 饱和处理(Saturation)
音频/通信信号不需要像科学计算那样的大范围浮点数(FP32)。DSP大多使用定点数(整型)运算,功耗极低。
更绝的是,DSP有硬件“饱和保护”:如果计算溢出(比如音量太大爆了),CPU会直接卡死或出错;DSP硬件会自动把结果锁定在最大值,保证声音虽然“破音”但不会让系统崩溃,确保实时稳定性。
三者对比

在SoC里,DSP是如何被“使唤”的?
和你之前学的NPU/GPU一样,DSP依旧是SoC内部的一个“功能模块”,绝对服从CPU(主控)的命令,但它工作起来像一台独立的“流水线机床”:
CPU下达指令:CPU告诉DSP——“你去RAM的 0xD000 地址,把麦克风录到的200个原始音频数据取走,用我放在 0xE000 的降噪滤波器系数算一下,把干净的声音写回 0xF000。”
DMA直接灌入:DSP启动内部的DMA(直接内存访问),像吸尘器一样,把RAM里的数据流“源源不断地”吸入自己的内部高速SRAM缓存。
流水线处理:数据进入DSP后,经过内部的“乘加阵列”和“移位器”,一边输入一边输出。它是“流式”的——不像CPU要等全部数据算完才交差,DSP算出一个样本就立即输出一个样本,保证音频播放毫无延迟(微秒级)。
中断通知:处理完一批,DSP给CPU发个“中断”信号:“大哥,这帧音频处理好了,你拿去给扬声器放吧。”
6.SoC
SoC中的RAM被划分为不同的地址区域,每个区域存放着不同用途的程序和数据,并由对应的处理器(CPU/GPU/NPU/TPU/DSP)按地址去读取执行。当SoC把操作系统从ROM(存储芯片)搬到RAM(运行内存)后,这几十GB的RAM空间会被操作系统内核(如Linux/Android)按照功能,切割成若干个独立的区域。虽然物理上是同一颗DRAM芯片,但逻辑上泾渭分明。
为什么不会出错:
内存管理单元(MMU,Memory Management Unit):SoC里的每个处理器(CPU/GPU/NPU)都内置了MMU。它就像一张“虚拟地址翻译表”。CPU以为自己独占一个4GB的连续空间,但MMU会在背后动态映射,把你的程序代码固定映射到物理RAM中特定的地址区间(比如 0x40000000 到 0x400FFFFF)。如果GPU想越界去写CPU的代码区,MMU会立刻触发“内存访问违规”并重启芯片。
硬件物理地址隔离:SoC设计师在芯片布线上,就严格规定了不同主控(Master)的访问权限。比如显示控制器只能读取帧缓存区的那一段物理地址,它连操作系统内核那个地址的“门”都摸不到。
CPU(中央处理器)是SoC里唯一的“元帅”,其他所有处理器(GPU/NPU/DSP)都是“特种兵”。元帅不一定会搬最重的砖,但整个战场(系统)的节奏、调度和最终决策,全由它一人掌控。其余的DSP/NPU/TPU/GPU都是协助计算的单元。
验证工程师的IP验证
大型IP:你提到的CPU、GPU、NPU、DSP,这些都属于大型复杂IP(通常叫“处理器核”或“加速器核”)。
中型IP:USB控制器、PCIe控制器、DDR内存控制器、Ethernet网卡。
小型IP(基础外设):I2C、SPI、UART(串口)、GPIO、定时器(Timer)。
