在ARM体系结构中,高级高性能总线(AHB)是连接处理器核心与内存、外设的关键基础设施。内存类型定义决定了总线如何与不同特性的存储设备交互,直接影响系统性能和行为正确性。
内存类型通过HPROT(保护控制)信号进行标识,这个5位宽的总线信号(HPROT[6:2])可以编码多种内存访问特性。AHB协议定义了三种基本内存类型:
每种内存类型又可细分为不同子类型,通过HPROT信号的位组合来区分。这种设计使得单个总线可以高效处理具有不同访问特性的多种存储设备。
HPROT信号各比特位的具体含义如下:
| 比特位 | 名称 | 功能描述 |
|---|---|---|
| HPROT[0] | 数据/指令 | 0表示指令获取,1表示数据访问(仅作为提示,非绝对) |
| HPROT[1] | 特权级别 | 0表示非特权访问,1表示特权访问 |
| HPROT[2] | 可缓冲 | 表示传输是否可以被缓冲 |
| HPROT[3] | 可修改 | 表示传输特性是否可以被改变 |
| HPROT[4] | 查找 | 表示是否需要缓存查找 |
| HPROT[5] | 分配 | 表示是否应该在缓存中分配空间 |
| HPROT[6] | 可共享 | 表示内存区域是否可被多个管理器共享 |
根据HPROT[6:2]的组合,内存类型映射如下表所示:
| HPROT[6] | HPROT[5] | HPROT[4] | HPROT[3] | HPROT[2] | 内存类型 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | Device-nE |
| 0 | 0 | 0 | 0 | 1 | Device-E |
| 0 | 0 | 0 | 1 | 0 | Normal Non-cacheable, Non-shareable |
| 0 | 0或1 | 1 | 1 | 0 | Write-through, Non-shareable |
| 0 | 0或1 | 1 | 1 | 1 | Write-back, Non-shareable |
| 1 | 0 | 0 | 1 | 0 | Normal Non-cacheable, Shareable |
| 1 | 0或1 | 1 | 1 | 0 | Write-through, Shareable |
| 1 | 0或1 | 1 | 1 | 1 | Write-back, Shareable |
注意:Device内存类型中HPROT[6]必须为0,其他组合对于Device内存无效。
Device内存用于外设寄存器等需要严格访问顺序的场合,分为两种子类型:
关键区别在于写响应时机,这直接影响系统性能和正确性:
| 特性 | Device-nE | Device-E |
|---|---|---|
| 写响应来源 | 必须来自最终目的地 | 可来自中间节点 |
| 性能 | 较低(等待最终确认) | 较高(可提前响应) |
| 使用场景 | 关键外设(如中断控制器) | 普通外设(如UART) |
所有Device内存类型都必须遵守以下严格规则:
Normal内存可分为三种主要类型,具有不同的缓存行为:
与Device内存相比,Normal内存允许更多优化:
HPROT[6]表示内存区域是否可被多个管理器共享:
在多核系统中,正确设置Shareable属性对保证缓存一致性至关重要。
HPROT[5]是Write-through和Write-back传输特有的分配属性:
这个属性为性能优化提供提示,实际行为取决于具体实现。
| 内存类型 | 典型应用场景 | 配置建议 |
|---|---|---|
| Device-nE | 中断控制器、DMA寄存器 | 关键外设必须使用 |
| Device-E | UART、定时器等普通外设 | 性能要求不高时使用 |
| Normal Non-cacheable | 内存映射IO、帧缓冲区 | 需要直接访问物理内存时使用 |
| Write-through Shareable | 多核共享的只读数据 | 读多写少场景 |
| Write-back Shareable | 多核共享的可写数据 | 需要高性能缓存一致性时使用 |
在多核处理器系统中,内存类型配置直接影响性能和正确性:
案例:某多核系统随机出现数据损坏
AHB5协议在内存类型方面引入了一些增强:
对于仅支持HPROT[3:0]的旧组件,协议定义了映射方案:
| HPROT[3:2] | 原始定义 | 映射到HPROT[6:2] | 对应内存类型 |
|---|---|---|---|
| 00 | Non-cacheable, Non-bufferable | 00000 | Device-nE |
| 01 | Non-cacheable, Bufferable | 00001 | Device-E |
| 10 | Cacheable, Non-bufferable | 11110 | Write-through, Shareable |
| 11 | Cacheable, Bufferable | 11111 | Write-back, Shareable |
这种映射确保了新旧组件的互操作性,但可能牺牲部分功能特性。