# AMBA学习笔记
**Repository Path**: jszyw/amba-study-notes
## Basic Information
- **Project Name**: AMBA学习笔记
- **Description**: IC设计,先学习AMBA设计的规则,并利用arm开源的资料做一些仿真测试等
- **Primary Language**: Verilog
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 2
- **Created**: 2022-07-30
- **Last Updated**: 2025-03-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AMBA学习笔记
#### 介绍
IC设计,先学习AMBA设计的规则,并利用arm开源的资料做一些仿真测试等
#### 软件架构
软件架构说明
## AMBA总线
### AMBA总线简述
arm官网提供了[AMBA总线](https://www.arm.com/architecture/system-architectures/amba/amba-specifications)的详细指导手册信息,目前已经更新到了AMBA V5。可以查看的资料分布为V2.0至V5.0。
各版本之间的区分如下:
#### AMBA V1.0
ASB 和 APB
ASB:Advanced System Bus,高级系统总线
APB:Advanced Peripheral Bus,高级外围总线
APB主要用在低速、低功率的外围,可针对外围设备作功率消耗及复杂接口的最佳化。APB在AHB和低带宽的外围设备之间提供了通信的桥梁,所以APB是AHB或ASB的二级拓展总线。
ASB用于连接高性能系统模块,它支持突发数据传输模式。
#### AMBA V2.0
AHB,ASB和APB
AHB:Advanced High-performance Bus,高级高性能总线
AHB主要是针对高效率、高频宽及快速系统模块所设计的总线,它可以连接如微处理器、芯片上或芯片外的内存模块和DMA等高效率模块。
#### AMBA V3.0
新增AXI(AMBA Advanced eXtensible Interface),高级可拓展接口
AXI:高速度、高带宽,管道化互联,单向通道,只需要首地址,读写并行,支持乱序,支持非对齐操作,有效支持初始延迟较高的外设,连线非常多。
#### AMBA V4.0
AXI4,AXI4-lite,AXI4-stream,ACE,ACE-lite
#### AMBA V5.0
AXI5,AXI5-lite,ACE5,ACE5-lite,ACE5-liteDVM
#### AXI、AHB及APB区分表
|总线|AXI|AHB|APB|
|:-:|:-:|:-:|:-:|
|总线宽度|8, 16, 32, 64, 128, 256, 512, 1024|32, 64, 128, 256 | 8, 16, 32|
|地址宽度|32|32|32|
|通道特性|读写地址通道
读写数据通道均独立|读写地址通道共用读写数据通道|读写地址通道共用读写数据通道
不支持读写并行操作|
|体系结构 |多主/从设备
仲裁机制|多主/从设备
仲裁机制|单主设备(桥)/多从设备
无仲裁|
|数据协议 |支持流水/分裂传输
支持猝发传输
支持乱序访问
字节/半字/字
大小端对齐
非对齐操作|支持流水/分裂传输
支持猝发传输
支持乱序访问
字节/半字/字
大小端对齐
不支持非对齐操作|一次读/写传输占两个时钟周期
不支持突发传输|
|传输方式|支持读写并行操作|不支持读写并行操作|不支持读写并行操作|
|时序|同步|同步|同步|
|互联|多路|多路|无定义|
### AMBA V2.0 APB学习
根据[AMBA V2.0](https://developer.arm.com/documentation/ihi0011/a/)的介绍,APB对于AMBA系统总线来说,其可以表示如下图所示:

#### 接口信号
所有AMBA APB信号都使用单个字母P前缀。一些APB信号,例如时钟,可以直接连接到系统总线等价信号。
下表显示了AMBA APB信号名称列表,以及每个信号的使用说明。
|名称|描述|
|:-:|:-:|
|**PCLK**
bus clock|**APB**上所有的传输都是使用的**PCLK**的上升沿|
|**PRESETn**
APB reset|**APB**总线复位信号,该信号通常直接连接系统总线复位信号|
|**PADDR[31:0]**
APB address bus|**APB**地址总线,位宽可达32位,由APB桥驱动(APB MASTER)|
|**PSELx**
APB select|从外围总线桥单元内的辅助解码器到每个外围总线从设备x的信号,该信号指示从设备被选择并且需要数据传输,每个总线从机都有一个**PSELx**信号。|
|**PENABLE**
APB strobe|该选通信号用于对外围设备总线上的所有访问进行计时,使能信号用于指示APB传输的第二周期,**PENABLE**出现在APB传输的中间|
|**PWRITE**
APB transfer direction|高电平时,表示**APB**写访问;低电平时,表示**APB**读访问|
|**PRDATA**
APB read data bus|读取数据总线在读取周期期间(当P**WRITE**为低电平时)由所选从机驱动
读取数据总线最大可达32位宽|
|**PWDATA**
APB write data bus|写入数据总线在写入周期期间(当**PWRITE**为高电平时)由外围总线桥单元驱动
写入数据总线最大可达32位宽。|
[AMBA V2.0](https://developer.arm.com/documentation/ihi0011/a/)对APB做了规范的约束,包括:状态转换图、写时序图、读时序图
#### 状态转换图
可以用三个状态来描述APB的状态转换:
##### 1.IDLE:
外围总线的默认状态
##### 2.SETUP:
当需要传输时,总线进入SETUP状态,此时相应的选择信号PSELx被置位,总线仅在一个时钟周期内保持SETUP状态,并且总在下一个上升沿移动到ENABLE状态。
##### 3.ENABLE:
在启用状态下,启用信号 PENABLE 被断言。在从 SETUP 到 ENABLE 状态的转换期间,地址、写入和选择信号都保持稳定。ENABLE 状态也只持续一个时钟周期,在此状态之后,如果不需要进一步传输,总线将返回 IDLE 状态。或者,如果要进行另一次传输,则总线将直接进入 SETUP 状态。
在从 ENABLE 状态到 SETUP 状态的转换期间,地址、写入和选择信号出现毛刺是可以接受的

#### 写时序
APB写时序图如下

由写时序图可以看出,写输入在时钟上升沿之后的地址、写数据、写信号以及选择信号改变之后开始,并在下一个时钟上升沿时使能信号 PENABLE断言,该信号也表示使能周期正在发生。地址、数据和控制信号在整个使能周期都保持有效,传输也在此周期结束时完成。
使能信号PENABLE在传输完成后会被取消断言,片选信号也会失能(转为低电平),除非传送结束后还需要立即向同一外围设备进行另一次传送数据。
为了降低功耗,地址信号和写入信号在传输结束后将不会改变,直到发生下一次访问。
#### 读时序
APB读时序图如下

地址、写入、选择和选通信号的时序都与写入传输相同。在读取的情况下,从机必须在使能周期内提供数据。在使能周期结束时,在时钟上升沿对数据进行采样。
#### APB桥(MASTER)
APB相比于ASB、AHB,其只有一个MASTER,APB桥就承担MASTER的角色。相对于AHB等高级系统总线,APB也相当于从设备。APB桥接口图如下

APB桥将系统总线传输转换为APB传输,并执行以下功能:
```markdown
1.锁存地址并使其在整个传输过程中保持有效;
2.对地址进行解码并产生外设选择PSELx,在一次的传输期间只能有一个选择信号处于活动状态;
3.将数据驱动到APB上进行写入传输;
4.将APB数据驱动到系统总线上以进行读取传输;
5.为传输生成可惩罚的定时选通脉冲。
```
APB桥传输时序图如下:

#### APB SLAVE
APB SLAVE有一个简单而灵活的接口。接口的具体实现将取决于所采用的设计风格,并且可能有许多不同的选项,对应的SLAVE接口图如下图所示:

APB SLAVE接口非常灵活
对于写入传输,可以在以下时间点进行数据锁存:
1.在PCLK的任一上升沿上,当PSEL为高时;
2.在Pending的上升沿上,当PSEL为高时。
可以组合选择信号PSELx、地址PADDR和写入信号PWRITE,以确定应该通过写入操作更新哪个寄存器。
对于读取传输,当PWRITE为低且PSELx和PPEABLE均为高时,数据可被驱动到数据总线上,而PADDR用于确定应该读取哪个寄存器。
读写时序图如下:

### AMBA测试方法学
AMBA总线架构允许单独测试每个模块,每个模块的测试理念是只接受来自系统总线的传输进行测试,而不接受任何其他系统元素的交互。(待补充)
### AMBA V3.0 APB学习
#### 新增接口内容
相比于APB V2.0,APB V3.0新增了信号**PREADY**和**PSLVERR**,**PREADY**表示扩展APB传输的就绪信号,**PSLVERR**表示传输失败。
#### 数据传输
相比于AMBA V2.0的APB,AMBA V3.0添加了错误传输状态响应,因此可以将AMBA V3.0的APB传输模型简要的分类为3类:
```
1.写传输模式
2.读传输模式
3.错误传输模式
```
1.对于写传输来说,可以分为等待传输模式和无等待传输模式
无等待传输模式:写传输开始于地址、写数据、写信号和选择信号在时钟上升沿后都发生变化。传输的第一个时钟周期称为设置阶段。在下一个时钟沿之后,启用信号 **PENABLE**被置位,这表明访问阶段正在发生。地址、数据和控制信号在整个访问阶段都保持有效。传输在此周期结束时完成。使能信号 **PENABLE** 在传输结束时被置低。选择信号 **PSELx** 也变为低电平,除非在传输之后立即向同一外设进行另一次传输。时序图如下

等待传输模式:通过选择**PREADY**信号来扩展从设备的传输,当**PENABLE**为高时,通过判定**PREADY**信号,可以获得最终传输是否可以开始。时序图如下

写传输的等待传输期间,以下信号保持不变:
```
1.地址信号:PADDR
2.写使能信号:PWRITE
3.片选信号:PSEL
4.使能信号:PENABLE
5.写数据:PWDATA
```
2.同理,对于读传输来说,也存在等待传输模式和无等待传输模式
对于无等待传输模式,从设备必须在必须在读传输结束前提供数据,时序图如下

对于等待传输模式,**PREADY**可以通过控制置低的时间来实现传输的延长,下图是添加了两个时钟的传输延长

读传输的等待传输期间,以下信号不变:
```
1.地址信号:PADDR
2.写使能信号:PWRITE
3.片选信号:PSEL
4.使能信号:PENABLE
```
#### 错误响应
依据APB桥连接的外设的不同来确认**PSLVERR**引脚的连接模式,错误响应会出现在读、写模式中,一般仅认为在APB传输的最后的一个时钟周期是有效的,即**PSEL**、**PENABLE**、**PREAFY**均为高时,但这并不意味着在未采样时刻的**PSLVERR**是不可改变的。
下图是以错误完成的失败写入传输的示例

读取也可能出错,指示没有可用的有效读取数据,下图展示的是读取完成并出现错误响应

#### AMBA V3.0 APB状态转换图
可以用三个状态来描述APB3的状态转换:
##### 1.IDLE:
**APB**的默认状态
##### 2.SETUP:
当需要传输时,总线进入 **SETUP** 状态,此时相应的选择信号 **PSELx** 被置位。总线仅在 **SETUP** 状态下保持一个时钟周期,并始终在时钟的下一个上升沿进入 **ACCESS** 状态。
##### 3.ACCESS:
使能信号 **PENABLE** 在 **ACCESS** 状态下被断言。在从 **SETUP** 到 **ACCESS** 状态的转换期间,地址、写、选择和写数据信号必须保持稳定。
**退出 **A**CCESS** 状态由从机的 **PREADY** 信号控制**
如果 **PREADY** 被从机保持为低电平,则外围总线保持在 **ACCESS** 状态。
如果 **PREADY** 被从机驱动为高电平,则退出 **ACCESS** 状态,如果不再需要传输,则总线返回 **IDLE** 状态。或者,如果随后有另一次传输,则总线直接进入 **SETUP** 状态。

#### 接口信号
下表相比于AMBA V2.0,仅增添了AMBA V3.0 APB信号**PREADY**、**PSLVERR**,信号说明如下。
|名称|源|描述|
|:-:|:-:|:-:|
|**PCLK**|时钟源|**APB**上所有的传输都是使用的**PCLK**的上升沿|
|**PRESETn**|系统总线等效|**APB**总线复位信号,该信号通常直接连接系统总线复位信号|
|**PADDR[31:0]**|APB桥|**APB**地址总线,位宽可达32位,由APB桥驱动(APB MASTER)|
|**PSELx**|APB桥|从外围总线桥单元内的辅助解码器到每个外围总线从设备x的信号,该信号指示从设备被选择并且需要数据传输,每个总线从机都有一个**PSELx**信号。|
|**PENABLE**|APB桥|该选通信号用于对外围设备总线上的所有访问进行计时,使能信号用于指示APB传输的第二周期,**PENABLE**出现在APB传输的中间|
|**PWRITE**|APB桥|高电平时,表示**APB**写访问;低电平时,表示**APB**读访问|
|**PRDATA**|从设备接口|读取数据总线在读取周期期间(当P**WRITE**为低电平时)由所选从机驱动
读取数据总线最大可达32位宽|
|**PWDATA**|APB桥|写入数据总线在写入周期期间(当**PWRITE**为高电平时)由外围总线桥单元驱动
写入数据总线最大可达32位宽。|
|**PREADY**|从设备接口|从机使用该信号来扩展APB传输|
|**PSLVERR**|从设备接口|该信号表示传输失败。 APB 外设不需要支持 PSLVERR 引脚。这对于现有的和新的 APB 外设设计都是如此。如果外围设备不包括此引脚,则 APB 桥的适当输入连接到低电平。|
### AMBA V4.0 APB学习
#### 新增接口内容
需要明确的是,APB是非流水线的,用它可以定义连接不需要高性能AXI协议的低带宽外设。在**AMBA V4.0**中,APB可以作为**AHB**、**AHB-lite**、**AXI**、**AXI4-lite**这些高性能协议的外设接口。
在**AMBA V4.0**,APB协议规范相比于前面版本已升级至**APB V2.0**,增加了以下功能:
##### 事务保护
对应信号:**PPROT**,该信号支持**APB**的非安全和安全事务的保护信号
##### 稀疏数据传输
对应信号:**PSTRB**,该信号用于在写数据总线上启用稀疏数据传输
#### 接口信号
下表相比于AMBA V3.0,仅增添了AMBA V4.0 APB信号**PPROT**、**PSTRB**,信号说明如下。
|名称|源|描述|
|:-:|:-:|:-:|
|**PCLK**|时钟源|**APB**上所有的传输都是使用的**PCLK**的上升沿|
|**PRESETn**|系统总线等效|**APB**低有效,总线复位信号,该信号通常直接连接系统总线复位信号|
|**PPROT**|APB桥|**APB**保护类型,该信号指示事务的正常、特权或安全保护级别以及事务是数据访问还是指令访问|
|**PADDR[31:0]**|APB桥|**APB**地址总线,位宽可达32位,由APB桥驱动(APB MASTER)|
|**PSELx**|APB桥|从外围总线桥单元内的辅助解码器到每个外围总线从设备x的信号,该信号指示从设备被选择并且需要数据传输,每个总线从机都有一个**PSELx**信号。|
|**PENABLE**|APB桥|该选通信号用于对外围设备总线上的所有访问进行计时,使能信号用于指示APB传输的第二以及后续的周期,**PENABLE**出现在APB传输的中间|
|**PWRITE**|APB桥|高电平时,表示**APB**写访问;低电平时,表示**APB**读访问|
|**PRDATA**|从设备接口|读取数据总线在读取周期期间(当P**WRITE**为低电平时)由所选从机驱动
读取数据总线最大可达32位宽|
|**PSTRB**|APB桥|该信号指示在写传输过程期间要更新哪些字节通道,写数据总线的每八位都有一个写选通脉冲信号。因此**PSTRB[n]**对应于**PWDATA[(8n+7):8n],写选通在读传输期间不得处于活动状态|
|**PWDATA**|APB桥|写入数据总线在写入周期期间(当**PWRITE**为高电平时)由外围总线桥单元驱动
写入数据总线最大可达32位宽。|
|**PREADY**|从设备接口|从机使用该信号来扩展APB传输|
|**PSLVERR**|从设备接口|该信号表示传输失败。 APB 外设不需要支持 PSLVERR 引脚。这对于现有的和新的 APB 外设设计都是如此。如果外围设备不包括此引脚,则 APB 桥的适当输入连接到低电平。|
#### 数据传输
根据APB2的传输特点,可以将传输模式分为:
```
1.写传输
2.写选通
3.读传输
4.错误响应
5.保护单元支持
```
##### 1.写传输
写传输可以分为:无等待状态、含等待状态以及写选通状态
无等待状态的时序图如下

传输描述如下:
在 T1,写传输开始于地址 PADDR、写数据 PWDATA、写信号 PWRITE 和选择信号 PSEL,在 PCLK 的上升沿被寄存。这称为写传输的设置阶段。
在 T2,使能信号 PENABLE 和就绪信号 PREADY 在 PCLK 的上升沿寄存。
置位时,PENABLE 指示传输的访问阶段的开始。
置位时,PREADY 表示从机可以在 PCLK 的下一个上升沿完成传输。
地址 PADDR、写入数据 PWDATA 和控制信号都保持有效,直到传输在 T3 完成,即访问阶段结束。
使能信号 PENABLE 在传输结束时被置低。选择信号 PSEL 也被置低,除非传输之后立即有另一个传输到同一外设。
含等待状态的时序图如下

传输描述如下:
在访问阶段,当 PENABLE 为高时,从设备通过将 PREADY 驱动为低来扩展传输。当 PREADY 保持低电平时,以下信号保持不变:
```
? 地址,PADDR
? 写信号,PWRITE
? 选择信号,PSEL
? 使能信号,PENABLE
? 写数据,PWDATA
? 写选通,PSTRB
? 保护类型,PPROT。
```
当 PENABLE 为 LOW 时,PREADY 可以取任何值。这确保了具有固定两个周期访问的外设可以将 PREADY设置为HIGH。
写选通
APB2的写选通是通过控制**PSTRB**信号来实现控制写选通的。每个写选通信号对应一个字节,当被断言为HIGH时,表明写选通信号相对应的字节通道包含有效信息。
写数据总线,每八位中就有一位表示写入选通信号,即**PSTRB[n]**对应于**PWDATA[(8n+7):8n]**,对于32位总线则有如下表的关系。
|位序号|31||24|23||16|15||8|7||1|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|||**PSTRB[3]**|||**PSTRB[2]**|||**PSTRB[1]**|||**PSTRB[0]**||
----------------------------------------------------------------
**NOTICES:**读传输过程中必须将写选通信号设置为**LOW**。
##### 2.读传输
读传输可以分为:无等待状态、含等待状态
无等待状态的读取时序如下图所示

含等待状态的读取时序如下图所示

使用**PREADY**信号来实现含等待状态的转换,若传输过程中**PREADY**信号设置为**LOW**,则传输被延长,即含等待状态。该状态执行过程中,需要保证以下信号不变:
```
1.地址信号:PADDR
2.写信号:PWRITE
3.选通信号:PSEL
4.使能信号:PENABLE
5.保护类型:PPROT
```
##### 3.错误响应
使用**PSLVERR**指示APB传输的错误情况,读取和写入都会引起传输错误。
仅当**PSEL**、**PENABLE**、**PREADY**均为**HIGH**时,**PSLVERR**才被认为在**APB**传输的最后一个周期内有效。
建议但不强制要求将**PSLVERR**设置为LOW,即**PSEL**、**PENABLE**、**PREADY**有一个是LOW时,接收到错误状态可能已经或可能没有改变外围设备的状态。
对于**PSLVERR**信号,APB外围设备并不需要必须支持,若无该信号,可以对APB桥的该信号的输入设置为LOW。
写入传输的错误传输的时序如下图所示

读取传输的错误传输的时序如下图所示

##### 4.**PSLVERR**的映射
AXI --> APB
APB的错误信息通过**RRESP**/**BRESP**==**PSLVERR**进行映射。这是通过**PSLVERR**映射到用于读取的AXI信号**RRESP[1]**和用于写入的**BRESP[1]**。
AHB --> APB
APB的错误信息通过**HRESP**=ERROR对**PSLVERR**进行映射。这是通过将**PSLVERR**映射到APB信号**HRESP[0]**来实现的。
##### 5.单元保护支持
为了支持复杂的系统设计,系统中的和其他设备的互联都需要针对非法传输进行保护。对于APB接口,该功能是通过**PPROT[2:0]**实现的。
PPROT通过三位实现了三种等级的保护:
```
1.PPROT[0]:区分优先级(普通或特权):特权权限在系统中有更高的访问权限,此位常用于主服务器来指示其处理模式
LOW,表明是普通权限
HIGH,表明是特权权限
2.PPROT[1]:区分安全防护:其置低时,可认为访问是安全的,否则是不安全的
LOW,表明含安全权限
HIGH,表明非安全权限
3.PPROT[2]:区分访问的是数据还是指令:表明访问类型
LOW,表明是数据访问
HIGH,表明是指令访问
需要注意的是,该位仅作提示使用,若处理的既包括数据也包括指令,推荐将该访问设置为数据访问(默认状态),确认是指令的情况下才能设置为指令访问。
```
信号总结如下表所示:
|**PPROT[2:0]**|保护等级|
|:-:|:-:|
|[0]|HIGH:特权访问
LOW:普通访问|
|[1]|HIGH:非安全访问
LOW:安全访问|
|[2]|HIGH:指令访问
LOW:数据访问|
#### AMBA V4.0 APB状态转换图
对于AMBA V4.0的APB协议,仅增加了保护机制,对于状态转换来说,与AMBA V3.0的APB是一致的,此处不再赘述。
### AMBA V5.0 APB学习
#### 新增接口内容
截止目前,AMBA V5.0为AMBA协议的最新资料,在V5.0版本中,出现了很多新的协议,APB也是承接了AMBA V4.0的规定,在原有基础上进行了扩展,该版本中对APB的称呼也变为APB5。
APB5相比于APB4,定义了以下信号:
唤醒信号:
用户信号:
奇偶保护和检验信号
#### APB5 信号定义
相比于之前版本的APB,本次规范新增了关于“请求者”(之前的版本则是直接表明APB桥)和“保护者”(之前的版本是指的与APB桥连接的外围从设备)的定义。
该表格新增了一列用于描述信号的位宽,对于具体长度的位宽进行标注;若宽度不确定,则使用属性进行描述;若属性值为零,则表示接口上不存在该信号。
|名称|源|位宽|描述|
|:-:|:-:|:-:|:-:|
|**PCLK**|时钟源|1|**APB**上所有的传输都是使用的**PCLK**的上升沿|
|**PRESETn**|系统总线等效|1|**APB**低有效,总线复位信号,该信号通常直接连接系统总线复位信号|
|**PPROT**|请求者|3|**APB**保护类型,该信号指示事务的正常、特权或安全保护级别以及事务是数据访问还是指令访问|
|**PADDR**|请求者|ADDR_WIDTH|**APB**地址总线,位宽可达32位,由APB桥驱动(APB MASTER)|
|**PSELx**|请求者|1|请求者向完成者生成**PSELx**信号,**PSELx**表示已选择完成器并且需要数据传输|
|**PENABLE**|请求者|1|使能,**PENABLE**用于指示APB传输的第二以及后续的周期|
|**PWRITE**|请求者|1|高电平时,表示**APB**写访问;低电平时,表示**APB**读访问|
|**PRDATA**|完成者|DATA_WIDTH|读取数据总线在读取周期期间(当**PWRITE**为低电平时)由完成者驱动
读取数据总线位宽可以为8、16和32|
|**PSTRB**|请求者|DATA_WIDTH/8|该信号指示在写传输过程期间要更新哪些字节通道,写数据总线的每八位都有一个写选通脉冲信号。因此**PSTRB[n]**对应于**PWDATA[(8n+7):8n],写选通在读传输期间不得处于活动状态|
|**PWDATA**|请求者|DATA_WIDTH|写入数据总线在写入周期期间(当**PWRITE**为高电平时)由请求者驱动
写入数据总线位宽可以为8、16和32|
|**PREADY**|完成者|1|完成者使用该信号来延长APB的传输|
|**PSLVERR**|完成者|1|该信号表示传输失败。 APB 外设不需要支持 PSLVERR 引脚。可由完成者断言为HIGH,以指示APB传输的错误情况。|
|**PWAKEUP**|请求者|1|表明与APB接口相关联的任何活动|
|**PAUSER**|请求者|USER_REQ_WIDTH|用户请求属性
**PAUSER**的建议最大位宽是128|
|**PWUSER**|请求者|USER_DATA_WIDTH|用户写入数据属性
**PWUSER**的建议最大位宽是DATA_WIDTH/2|
|**PRUSER**|完成者|USER_DATA_WIDTH|用户读取数据属性
**PWUSER**的建议最大位宽是DATA_WIDTH/2|
|**PBUSER**|完成者|USER_RESP_WIDTH|用户响应属性
**PWUSER**的建议最大位宽是16|
##### 地址总线
APB接口具有用于读取和写入传输的单地址总线**PADDR**,**PADDR**表示字节地址。允许数据不对齐,但是结果不可测。
##### 数据总线
APB协议有两条独立的数据总线,一条用于读数据,一条用于写数据。这些总线可以是8、16或32位宽。读写数据总线必须具有相同的宽度。
数据传输不能同时进行,因为读数据和写数据总线没有各自的握手信号。
#### 数据传输
##### 1.写传输
写传输包含无等待状态和含等待状态
无等待状态
时序图如下所示

对于该时序图的描述,同APB4一致。
T1:写入传输的设置阶段,**PSEL**被断言,这意味着**PADDR*、**PWRITE**和**PWDATA**必须有效
T2:写入传输的访问阶段,**PENABLE**被断言,由完成者对**PREADY**进行断言,以指示数据将在T3被接受,**PADDR**、**PWDATA**和其它控制信号必须稳定,直到传输完成。
在转移结束时,**PENABLE**被取消断言,**PSEL**也被取消断言,除非有另外一次传输到相同的外设。
含等待状态,利用**PREADY**实现
时序图如下所示

在访问阶段,当**PENABLE**为高时,完成者通过降低**PREADY**来扩展传输。
以下信号保持不变,而**PREADY**保持低:
```
地址信号:PADDR
方向信号:PWRITE
选择信号:PSELx
使能信号:PENABLE
可写数据信号:PWDATA
写选通信号:PSTRB
保护类型信号:PPROT
用户请求属性:PAUSER
用户写数据属性:PWUSER
```
当**PENABLE**为LOW时,**PREADY**可以取任意值,这确保了具有固定两周期访问的外围设备(完成者)可以将**PREADY**设置为HIGH。
写选通状态下,是通过设置**PSTRB**实现的。需要注意的是,在读状态时必须将**PSTRB**设置为LOW。
写选通的存在与兼容性,见下表
|**PSTRB**|完成者:信号不存在|完成者:信号存在|
|:-:|:-:|:-:|
|请求者:信号不存在|兼容
不支持稀疏写入|兼容
所有写入数据字节通道对于写入都是有效的
将**PSTRB**输入与来自请求者的**PWRITE**输出绑定|
|请求者:信号存在|兼容
不支持稀疏写入|兼容|
##### 2.读传输
读传输包含无等待状态和含等待状态
无等待状态
时序图如下所示

对于该时序图的描述,同APB4一致。
含等待状态
时序图如下所示

访问期间,**PREADY**信号置LOW,则传输被延长。以下信号保持不变,**PREADY**保持LOW:
```
地址信号:PADDR
方向信号:PWRITE
选择信号:PSEL
使能信号:PENABLE
保护信号:PPROT
用户信号:PAUSER
```
##### 3.错误响应
下图展示的是失败的写入传输示例,该传输完成时出现错误。

读传输也可能在错误响应的情况下完成,指示没有有效的读数据可用
下图显示读传输已完成,但是出现错误响应

**PSLVERR**的映射
AXI --> APB:**PSLVERR**上的APB错误被映射回**RRESP**(用于读取)和**BRESP**(用于写入)。
AHB --> APB:**PSLVERR**上的APB错误被映射回**HRESP**(用于读取和写入)。
##### 4.单元保护
相比于APB4的表格,APB5表格更加具体,如下
|**PPROT**|保护等级|描述|注释|
|:-:|:-:|:-:|:-:|
|**PPROT[0]**|普通或特权|请求者使用**PPROT[0]**来指示处理模式
特权模式通常在系统内有更高级别的访问权限|HIGH:特权访问
LOW:普通访问|
|**PPROT[1]**|安全或非安全|**PPROT[1]**用于需要在处理模式之间进行更大程度区分的系统|HIGH:非安全访问
LOW:安全访问|
|**PPROT[2]**|数据或指令|PPROT[2]表示是数据访问还是指令访问
作为提示提供,可能并非在所有情况下都是准确的。|HIGH:指令访问
LOW:数据访问|
**PPROT**是请求者和完成者接口上的可选信号
|**PPROT**|完成者:信号不存在|完成者:信号存在|
|:-:|:-:|:-:|
|请求者:信号不存在|兼容
|不兼容
若固定保护属性在功能上正确,则接口是兼容的。|
|请求者:信号存在|兼容
完成者没有访问保护,因此可以忽略**PPROT**|兼容|
##### 5.唤醒信号
唤醒信号**PWAKEUP**用于指示任何与APB接口相关的任何活动,**PWAKEUP**提供无毛刺的信号,可路由至时钟控制器或类似组件,以启用连接组件的电源和时钟。
该信号是用于指示组件是否支持唤醒信号,有以下2个属性:
**TRUE**:存在唤醒信号
**FALSE**:不存在唤醒信号。若未声明唤醒信号,则其对应属性设置为**FALSE**
需要注意的是,唤醒信号只存在**APB5**协议中。
**PWAKEUP**的规则与建议:
```
1.PWAKEUP与PCLK同步,且必须适用于在不同时钟域中的异步采样。这要求PWAKEUP是无故障的,即可以从寄存器或无毛刺的OR树实现。
2.允许PWAKEUP在PSELx断言之前、期间以及之后断言。
3.允许完成者在断言PREADY之前等待PWAKEUP被断言,若PWAKEUP一直存在且未断言,则接口可能会死锁。
4.若PWAKEUP与PSELx在同一周期内为高电平,则PWAKEUP必须保持有效,直到PREADY有效。
5.建议在PSELx断言前至少一个周期断言PWAKEUP,以防延迟被接收到新的处理环节。
6.建议在不需要进一步传输时取消断言PWAKEUP。
7.允许但不推荐在不发生传输的情况下断言PWAKEUP,然后取消断言。
8.建议连接的请求者和完成者一起设置时钟门控,如果完成器接口时钟的选通独立于请求者时钟,并且使用PWAKEUP来启用完成者时钟,则完成者可能错过传输的设置阶段。
```
##### 6.用户信号
APB协议的用户可能会遇到需要添加APB协议中未指定的信号的应用。用户信号定义了将该信令添加到事务的标准方法,而不定义信号使用。
通常,建议不要使用用户信号。APB协议接口没有定义这些信号的功能,如果两个组件以不兼容的方式使用相同的用户信号,则会导致互操作性问题。
用户信号只能添加到APB5协议接口。
在实现用户信号的情况下,本规范不要求支持所有用户信号。用户定义信号的宽度是根据具体情况定义的,对于请求、数据和响应可以是不同的。
建议在跨域网桥或互连上提供所有用户信号。但是,没有要求将它们包括在完成者中。
建议USER_DATA_WIDTH为数据总线宽度的整数倍(以字节为单位),以帮助数据宽度和协议转换。
#### AMBA V5.0 APB状态转换图
对于AMBA V5.0的APB协议,仅增加了用户保护信号,对于状态转换来说,与AMBA V4.0(同AMBA V3.0)的APB是一致的,此处不再赘述。
#### APB5 接口奇偶校验保护
对于安全关键型应用,有必要检测和纠正SoC内各导线上的暂态和功能错误。
系统构件中的错误可能会在连接的构件中传播并导致大量错误。端到端的操作需要错误检测和纠正(Error Detection and Correction, EDC),覆盖从源到目的地的所有逻辑和线路。
实现端到端保护的一种方式是在组件中使用定制的EDC方案,并在组件之间实现简单的错误检测方案。在这些组件之间,没有逻辑,单位错误不会传播到多位错误。本节介绍用于检测组件之间接口上的单比特错误的奇偶校验方案。如果多位错误出现在不同的奇偶信号组中,则可以检测到多位错误。
下图展示了基于奇偶校验的传输:

##### 1.接口保护的配置
可配置的参数Check_Type如下:
**False**:接口无检验信号
**Odd_Parity_Byte_All**:所有信号都包括奇数奇偶校验,奇偶信号的每比特覆盖多达8比特。
若未配置Check_Type,则认为是False。
检查信号只存在于APB5。
##### 2.属性
以下属性是为字节奇偶接口保护添加的检查信号的共同属性:
1.使用奇数奇偶校验。奇数奇偶校验意味着在接口信号和检查信号上总是断言奇数个比特。检查信号与每个接口信号相关联。
2.每个奇偶校验比特覆盖不超过8比特的有效载荷。该限制假设在用于生成每个奇偶校验位的定时容限中最多有三个逻辑电平可用。
### IHI0068D-AMBA低功耗接口规范
#### 介绍
可以先阅读AMBA AXI规范
对于低功耗接口规范,IHI0068D,其规定协议对应的接口可用于控制设备时钟以及电源状态的接口。分为两部分:
1.Q-Channel:适用于简单的运动-静止的场景。Q-Channel是AXI低功耗接口的演变,其命名的初衷就包含了控制设备静止的事实。
2.P-Channel:适用于管理具有多个转换的复杂电源场景。无需将设备返回到常见的可操作状态即可进行这些转换,其命名也体现了该接口的目的是控制电源状态转换的事实。、
每个接口都有可选的奇偶校验保护,接口奇偶校验保护提供检测、诊断和安全缓解接口潜在故障的能力。
Q-Channel和P-Channel具有以下相同特征:
```
1.控制器-管理的设备状态之间的转换;
2.允许设备:
2.1.表明它必须退出低功耗状态并进入高性能状态;
2.2.提示它可以接收进入低功耗状态的请求;
3.设备可以拒绝状态更改请求;
4.跨时钟域是具有鲁棒性的,支持异步接口;
```
尽管这些接口旨在用于时钟和电源状态控制,但对接口管理的状态的特定特性没有任何限制。
Q-Channel和P-Channel旨在相互补充,接口的选择取决于实际的需要:
Q-Channel:简单的运动-停止状态非常适合时钟控制或简单的电源控制场景。进入的静止状态可能会有所不同,单仅取决于进入静止状态之前设备和控制器的通用配置。静止状态退出转换总是到一个共同的可操作运行状态,必须先进入该状态,然后设备才能进入不同的静止状态。
P-Channel:P-Channel可以处理更为复杂的场景,可以在不将设备或设备分区返回到连续节能状态之间的公共可操作状态的情况下进行多次转换。控制器在每次转换时提供明确的状态请求,因此不需要控制器和设备的通用设置。
因此,可以总结为仅当Q-Channel不足以使用时,才会选用P-Channel。
#### Q-Channel接口规范
该部分包括了:
1.Q-Channel接口规范
2.奇偶校验拓展的Q-Channel
3.Q-Channel实现
4.奇偶校验保护和无奇偶校验保护的Q-Channel接口的连接
5.Q-Channel应用示例
6.Q-Channel向后兼容性
##### 1.Q-Channel接口规范
下图展示了设备和时钟或电源控制器之间的信号连接

Q-Channel有以下独立的信号组:(以下信号均假设为异步驱动)
1.设备活动指示:(对应信号:QACTIVE)
该组包含单个信号 QACTIVE,可以由处于任何状态的设备驱动为高电平以表示它有操作要执行。当 QACTIVE 被设备驱动为低电平时,它是一个提示,而不是设备可能接受静止请求的保证。
来自设备的 QACTIVE 信号可以由多个源信号组成。为了提供唤醒功能,这些源信号可以包括设备输入信号。最终的 QACTIVE 信号要么直接由一个寄存器驱动,要么由一个或多个寄存器和其输出逻辑组合的输入信号驱动。下图的 Q -Channel的实现给出了 QACTIVE 组合逻辑的实现建议。

如果设备本身在没有根据接口管理的时钟或电源的情况下无法将 QACTIVE HIGH 置为有效,则必须有一种系统相关的方法来促进设备外部的唤醒。这可能是来自另一个设备的 QACTIVE,在控制器与设备 QACTIVE 组合。
2.握手信号:(对应信号:QREQn、QACCEPTn、QDENY)
2.1.时钟或电源控制器向设备发出的请求信号QREQn
2.2.设备反馈给控制器的接受或拒绝请求的确认信号对,QACCEPTn、QDENY。确认信号对被组织成每次握手转换只有1个改变,这确保了接口可以跨异步边界安全地实现。QACCEPTn用于接受请求,QDENY用于拒绝请求。
来自设备的 QACCEPTn 和 QDENY 信号以及来自控制器的 QREQn 信号都必须由寄存器驱动。
拒绝机制的目的是使设备能够保持操作状态,同时还具有可以迅速完成握手的机制。
握手信号的极性被组织成提供所有接口信号为低电平的静止状态。这有助于简单的默认隔离规则。
握手信号状态独立于 QACTIVE 的状态。因此,QACTIVE 上的转换不受 QREQn 或 QACCEPTn 和 QDENY 输出对上的值的限制。
控制器可以根据握手接口状态保证时钟供应或电源可用性。 Q-Channel 握手描述了这些保证。
###### 1.1.接受的静止时序
下图显示了接受的静止请求的握手序列,其包括了根据接口语义管理的可选控制器提供的时钟的保护活动。

上图省略了 QACTIVE,因为虽然 QACTIVE 可以作为控制器改变接口状态的激励,但它与握手无关。所有接口状态的改变都可以由控制器单独启动,后续会单独介绍QACTIVE。