硬件(五) 存储、ARM 架构与指令系统

发布于:2025-09-09 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、存储系统:RAM 与 ROM 的原理及应用差异

存储系统按 “断电后数据是否保留” 分为易失性(RAM)和非易失性(ROM)两类,二者在存储原理、性能及用途上差异显著,直接决定了在硬件设计中的选型逻辑。

(一)易失性存储:RAM 的分类与核心特性

RAM(随机存取存储器)断电后数据丢失,但其读写速度快,主要用于临时存储程序运行时的指令和数据。根据存储介质不同,可分为以下几类:

1. SRAM:静态随机存储器 ——“速度优先” 的选择
  • 存储原理:通过晶体管构成的 “锁存器” 存储 0 和 1,无需额外刷新电路。
  • 核心特性:读写速度极快(通常为纳秒级),但晶体管数量多导致成本高、存储密度低。
  • 典型应用:单片机内部高速缓存、CPU 的 L1/L2 缓存(需快速响应的场景)。
2. DRAM:动态随机存储器 ——“容量优先” 的权衡
  • 存储原理:利用电容充放电状态表示 0 和 1,电容电荷会自然泄漏。
  • 核心特性:需外接 “刷新电路” 定期补充电荷,电路复杂度高、功耗较大;但成本低、存储密度远高于 SRAM,读写速度慢于 SRAM。
  • 典型应用:早期计算机内存,现已被升级版本替代。
3. SDRAM:同步动态存储器 ——DRAM 的性能升级
  • 核心改进:增加 “同步电路”,使数据读写与 CPU 时钟信号同步,避免了 DRAM 异步传输的延迟浪费。
  • 本质:DRAM 的 “同步化升级版”,大幅提升了数据传输带宽。
  • 典型应用:2000 年代 PC 的主流内存(如 SDRAM PC133)。
4. DDR RAM:双倍速率同步存储器 —— 当前主流
  • 核心升级:在 SDRAM 基础上实现 “双数据速率”,即时钟信号的上升沿和下降沿均可传输数据,带宽直接翻倍。
  • 代际演进:从 DDR1 到当前的 DDR5,逐步提升速率、降低功耗(如 DDR5 支持 On-Die ECC 纠错)。
  • 典型应用:现代 PC、服务器、智能手机的主内存。
5. IRAM:片内静态存储器 ——“伪分类” 的本质
  • 关键说明:IRAM 并非独立的 RAM 类型,而是 “集成在 SoC 内部的 SRAM” 的统称。
  • 核心优势:无需通过外部总线访问,延迟极低,安全性更高(数据不经过外部引脚)。
  • 典型应用:SoC 内部的临时数据缓存、实时操作系统的核心代码存储。

(二)非易失性存储:ROM 的演进与 Flash 的主导

ROM(只读存储器)断电后数据不丢失,主要用于存储永久或半永久数据(如启动程序、固件),其发展核心是 “可擦写性” 和 “易用性” 的提升。

1. 传统 ROM:一次性写入的 “固化存储”
  • 特性:出厂时由厂商写入数据,用户无法修改,可靠性极高但灵活性为零。
  • 应用场景:早期家电、仪器仪表中的固定程序(如遥控器固件)。
2. PROM:用户可一次性编程的 ROM
  • 特性:出厂时为空白,用户可通过专用设备写入一次数据,写入后无法修改(熔丝烧断原理)。
  • 应用场景:早期工业控制中的定制程序存储(如老式打印机固件)。
3. EPROM:可紫外擦除的可编程 ROM
  • 特性:支持多次擦写,但需用 “紫外灯” 照射芯片窗口(通常需 10-30 分钟),擦除效率低、操作复杂。
  • 局限:擦除时需拆卸芯片,不适合嵌入式系统的在线更新。
4. EEPROM:电可擦写的可编程 ROM
  • 核心突破:无需专用设备,通过电信号即可擦写,支持字节级擦除(单字节修改)。
  • 不足:擦写速度慢、容量小(通常几 KB 到几 MB)、成本较高。
  • 应用场景:存储设备参数(如硬盘分区表)、传感器校准数据。
5. Flash:大容量电可擦写存储 —— 当前主流

Flash(闪存)结合了 EEPROM 的电擦写特性和 DRAM 的高存储密度,分为 Nor Flash 和 Nand Flash 两类,是嵌入式系统的核心存储介质。

类型 寻址方式 擦写单位 读写速度 成本 典型应用
Nor Flash 字节级寻址(CPU 直接访问) 扇区(几 KB) 读快写慢 较高 启动程序(Bootloader)、BIOS
Nand Flash 块级寻址(需 Flash 控制器) 块(几十 KB) 写快读快 较低 大容量存储(U 盘、SSD、eMMC)
扩展:eMMC 与 SD 卡的差异
  • 核心共性:二者本质都是 “Nand Flash + 控制器” 的集成方案,简化了硬件设计。
  • 关键区别:eMMC 为 “板载焊接” 模式,稳定性高、体积小,适用于手机、电视;SD 卡为 “可插拔” 模式,灵活性高,适用于相机、平板。

二、ARM 处理器工作模式:特权与功能的划分

ARM 处理器(以 Cortex-A7 为例)通过 “工作模式” 实现权限管理和异常处理,不同模式对应不同的寄存器组和功能,共 9 种基本模式。

(一)用户模式:非特权的应用执行层

  • 权限:最低特权级,无法访问特权寄存器或执行特权指令。
  • 作用:绝大多数应用程序(如 APP、用户进程)运行在此模式,防止误操作破坏系统。

(二)异常相关模式:响应外部 / 内部事件的核心

当处理器遇到中断、错误等异常时,会自动切换到对应模式处理,处理完成后返回原模式。

模式 触发条件 核心作用 特权级
FIQ 高优先级快速中断(如定时器、高速传感器) 快速响应紧急事件,中断延迟最短 特权
IRQ 低优先级普通中断(如 UART、GPIO 按键) 处理常规外部事件,支持中断嵌套 特权
Supervisor(SVC) 复位或软中断指令(SWI)触发 系统调用入口(如应用请求操作系统服务) 特权
Abort 内存访问异常(如越界访问、地址未对齐) 处理数据 / 指令存取错误 特权
Undef 执行未定义指令(如无效汇编指令) 兼容扩展指令(如模拟未实现指令) 特权
Reset 处理器上电或复位信号触发 初始化硬件、加载启动程序 特权

(三)特殊模式:系统管理与安全强化

  • System 模式:采用与 User 模式相同的寄存器组,但拥有最高特权级,主要用于操作系统内核的任务管理(如任务切换)。
  • Monitor 模式:Cortex-A 系列特有,为 “安全扩展” 设计,用于执行安全监控代码(如加密、权限校验),实现安全世界与普通世界的隔离。

关键特性:模式切换与栈独立性

  • 不同模式拥有独立的栈指针(SP) 和链接寄存器(LR) ,避免模式切换时栈数据冲突(如中断处理不破坏应用程序的栈)。
  • 除 User 模式外,其余均为 “特权模式”,可修改系统配置和访问所有资源。

三、ARM 寄存器与程序状态寄存器(CPSR)

寄存器是 ARM 处理器的 “临时数据存储单元”,直接决定指令执行效率;CPSR 则记录处理器的运行状态,是指令执行的 “状态中枢”。

(一)寄存器组织的核心规则

注:PC所有模式公用;

       不同的工作模式下,各自管理不同的栈(SP和LR);

  1. 公用与私有:PC(程序计数器,指向当前执行指令)在所有模式下公用;SP(栈指针)、LR(链接寄存器)在不同模式下私有(独立寄存器)。
  2. 寄存器数量:Cortex-A 系列通常包含 16 个通用寄存器(R0-R15),其中 R15 为 PC,R14 为 LR,R13 为 SP。

(二)CPSR:程序状态寄存器的关键位

CPSR 是 32 位寄存器,核心位分为 “模式位”“条件标志位”“控制位” 三类,直接影响指令执行逻辑。

1. 模式位(M [4:0]):决定当前工作模式

通过设置这 5 位,可手动切换处理器模式(仅特权模式下可修改)。例如:M=10000 对应 User 模式,M=10011 对应 SVC 模式。

2. 条件标志位(N、Z、C、V):指令执行的 “状态反馈”

绝大多数 ARM 指令可加 “s 后缀”(如 ADDS、SUBS),执行后自动更新这 4 位,用于条件跳转(如 BEQ、BNE)。

标志位 含义说明
N 符号标志:结果为有符号数时,负数则 N=1,非负数则 N=0
Z 零标志:结果为 0 则 Z=1,非 0 则 Z=0
C 进位 / 借位标志:无符号数加法进位时 C=1,减法借位时 C=0
V 溢出标志:有符号数运算溢出时 V=1(如两正数相加得负数),否则 V=0
3. 控制位(E 位):大小端存储控制
  • E=0:小端存储(默认)—— 低地址存低字节(如 0x1234 存为 0x34、0x12)。
  • E=1:大端存储 —— 低地址存高字节(如 0x1234 存为 0x12、0x34),多用于网络设备。

四、ARM 异常处理:从触发到恢复的完整流程

异常是 ARM 处理器响应外部事件(如中断)或内部错误(如内存访问失败)的机制,核心是 “异常向量表” 和 “固定处理流程”。

(一)常见异常类型及触发场景

异常类型 触发场景 处理优先级
Reset 上电、复位按键触发 最高
FIQ 高优先级中断(如高速 ADC)
IRQ 普通中断(如 UART 接收数据)
Software Interrupt 软中断指令(SWI)触发(如应用调用系统函数)
Prefetch Abort 指令预取时内存访问失败(如地址无效)
Data Abort 数据读写时内存访问失败(如越界)
Undefined Instruction 执行无效指令(如未实现的扩展指令)

(二)异常向量表:异常处理的 “入口导航”

FIQ中断

IRQ中断

(保留)

Data Abort(数据存储异常):对RAM的访问发生错误

Prefetch Abort(预取失败异常):指令预取阶段内存访问失败触发

Software Interrupt(软中断异常):软件中断(任务切换),多任务的并发靠底

层的软中断实现

Undefined Instruction(未定义指令异常)

Reset(复位异常)

  • 本质:一段固定地址的内存区域,存储每种异常的 “处理程序入口地址”(偏移量)。
  • 工作逻辑:异常发生时,处理器自动跳转到向量表中对应地址,执行异常处理代码(如保存现场、调用中断服务函数)。

例如:Cortex-A7 中,Reset 异常入口地址为 0x00000000,IRQ 异常入口地址为 0x00000018。

(三)异常处理的底层流程(以 IRQ 为例)

  1. 保存现场:将当前寄存器(R0-R14、CPSR)的值压入 IRQ 模式的栈中,防止数据丢失。
  2. 切换模式:处理器自动从 User 模式切换到 IRQ 模式。
  3. 执行处理程序:跳转到向量表中 IRQ 对应的入口地址,执行中断服务函数(如读取 GPIO 按键状态)。
  4. 恢复现场:将栈中保存的寄存器值弹出,恢复到异常发生前的状态。
  5. 返回原模式:通过指令(如 MOVS PC, LR)返回 User 模式,继续执行原程序。

(四)偏移量与异常向量表

   偏移量:异常函数处理的入口地址;

        异常向量表:用于存储不同类型异常发生时,处理器跳转到特定的异常处理程序的地址

五、ARM 核心指令与立即数规则

ARM 指令集为 32 位精简指令集(RISC),指令格式统一、执行效率高,核心指令包括数据传送、算术运算等,而 “立即数” 的合法性判断是指令使用的关键难点。

(一)核心指令及用法示例

1. MOV:数据传送指令

用于将立即数或寄存器值传送到目标寄存器,是最常用的指令之一。

  • 格式 1:MOV{S}<c> <Rd>, #<const>(立即数传送)
    示例:MOV R0, #10 // 将立即数 10 传送到 R0
  • 格式 2:MOV{S}<c> <Rd>, <Rm>(寄存器间传送)
    示例:MOV R1, R0 // 将 R0 的值传送到 R1
2. ADD:加法指令

支持立即数加寄存器、寄存器加寄存器两种方式。

  • 格式 1:ADD{S}<c> <Rd>, <Rn>, #<const>
    示例:ADDS R2, R0, #5 // R0 + 5 → R2,加 s 后缀更新 CPSR 标志位
  • 格式 2:ADD{S}<c> <Rd>, <Rn>, <Rm>
    示例:ADD R3, R1, R2 // R1 + R2 → R3

网站公告

今日签到

点亮在社区的每一天
去签到