SOC 里的 CPU 处理器 和 L1/L2 Cache

视觉 SoC,CPU 核一般是 Cortex‑A55 四核簇

我们以 A55 为基准讲解,同时区分清楚CPU 核心、L1、L2 缓存的归属、工作机制、访问链路、Cache 一致性

一、SoC 中的 CPU 处理器(Cortex‑A55)

CPU 核心就是计算执行单元,负责取指令、译码、执行运算。

Cortex‑A55 是 ARMv8‑A 架构(AArch64,64 位),属于乱序执行、低功耗 CPU 核,常用于嵌入式视觉 SoC。 单个 A55 核内部包含:

  1. 取指单元 Fetch:从指令缓存拿指令
  2. 译码单元 Decode:解析指令
  3. 执行单元 ALU、乘法、移位:做加减、逻辑运算
  4. 通用寄存器组 X0~X31(64 位寄存器)、状态寄存器
  5. MMU(内存管理单元):Linux 内核依靠 MMU 做虚拟地址→物理地址转换
  6. 内置 L1-I 指令缓存、L1-D 数据缓存 (每个核私有)

重点: 一个 CPU 簇(Cluster):4 个 A55 核心 + 共享 L2 缓存。 4 核 A55 簇:4 套独立 L1I/L1D,共用一块 L2 Cache。
注意:NPU/VPU/VI 不属于 CPU,它们是 AXI Master,没有这套 L1/L2 缓存。

二、L1 Cache(一级缓存,每个 CPU 核私有)

L1 离 CPU 运算单元最近,访问延迟最低、容量最小,拆成相互独立两块:

1、L1-I Cache(Instruction Cache,指令缓存)

  • 只存CPU 要执行的机器指令,不存数据
  • CPU 取指令时优先查 L1-I;命中直接读取;miss 去 L2
  • 只读属性,CPU 不会修改指令缓存内容

2、L1-D Cache(Data Cache,数据缓存)

  • 存放 CPU 读写的变量、数组、结构体等数据
  • CPU 读 / 写内存数据,优先操作 L1-D
  • 有读写属性,是 Cache 一致性问题的主要来源

3、A55 典型规格

  • L1-I:32KB / 核
  • L1-D:32KB / 核

4 核 → 4×32KB L1I + 4×32KB L1D,

每个核心只能访问自己的 L1,不能直接访问其他核的 L1。

4、L1 命中 / 缺失(Cache Hit / Miss)

  • Hit 命中:需要的数据 / 指令已经在 L1 → CPU 直接拿,非常快(几个 CPU 周期)
  • Miss 缺失:L1 没有,必须去 L2 查找;同时会把数据从 L2 回填到 L1。

三、L2 Cache(二级缓存,同簇多核共享)

A55 簇内,4 个 CPU 核心共享同一块 L2 缓存

1、容量:

A55 常见 256KB / 512KB 一个簇

2、速度:

比 L1 慢,比外部 DDR 快得多

3、功能:

  • L1 miss 之后,作为第二级高速存储
  • 负责同簇内多个 CPU 核之间的数据同步(核间一致性维护)
  • L2 miss 之后,才通过 AXI 总线访问片外 DDR 内存

L2 同时存放指令和数据,不再区分指令 / 数据缓存。

四、完整访问链路(CPU 读取一条数据)

cpp 复制代码
CPU寄存器 → L1-D Cache
            Hit:直接返回数据,结束
            Miss → 查询共享L2 Cache
                L2 Hit:返回数据,并把数据拷贝进当前核L1-D
                L2 Miss → 通过AXI总线访问外部DDR
                    DDR返回数据 → 回填L2,再回填L1-D,CPU拿到数据

写操作:

CPU 写数据,默认先写到 L1-D,标记为脏(dirty),不会立刻写入 DDR。

脏数据会在合适时机(Cache 淘汰、显式刷 cache)下刷到 L2,最终落回 DDR。

五、Cache 两种写策略:Write-back(回写,ARM 默认)

1、A55 默认:写回模式 Write-back

  • 写数据只更新 L1,标记 dirty,不立即写 DDR;
  • 缓存行被淘汰时,才把脏数据写入 L2、DDR。 优点:减少 AXI 总线访问 DDR 次数,性能高; 缺点:存在缓存与 DDR 数据不一致风险,DMA/NPU 场景必须小心。

2、Write-through(直写):

写 L1 同时同步写 L2/DDR,一致性好,但带宽开销巨大,嵌入式很少用。

六、小结

1、Cortex‑A55 CPU 核:负责指令执行,每个核自带 32KB L1 指令缓存 +32KB L1 数据缓存,私有。

2、同一簇多个 A55 核共享一块 L2 缓存,L2 兼顾缓存和多核之间数据同步。

3、CPU 读写数据优先 L1,缺失访问 L2,L2 缺失才访问 DDR。

4、默认 Write-back 回写策略,脏数据暂存在 L1/L2,不会实时同步 DDR;当有 DMA、VI 采集、NPU 运算时,必须处理 Cache 一致性。

相关推荐
优信电子4 小时前
STM32 驱动 SHT35 温湿度传感器:从 I²C 通信到 CRC 校验的完整实战
单片机·嵌入式
Hotpot4 小时前
3 线程管理和调度
嵌入式
一直C5 小时前
嵌入式 Linux 驱动开发学习笔记:设备树、pinctrl 与 GPIO 驱动开发
驱动开发·嵌入式·arm·dt
blueSatchel8 小时前
framebuffer注册源码解读
linux·嵌入式
2035去旅行10 小时前
两核 CPU:CPU1 和 CPU2 是如何协同工作的?
嵌入式·arm·soc
blueSatchel11 小时前
imx6ull显示控制器设备驱动解读
linux·嵌入式
Zwawa2 天前
让电机走到指定位置:编码器位置环 PID
c语言·单片机·嵌入式
奔跑的架构师2 天前
[A-51]ARMv9/v8-SCMI系统架构
linux·arm开发·架构·系统架构·arm
susplus2 天前
【Linux驱动开发】中断、工作队列及中断子系统详解
arm·中断·linux驱动开发·中断子系统