AHB协议翻译(一)
1、介绍
1.1关于协议
AMBA AHB是一种高性能可综合总线接口。它定义了组件之间的接口,如主设备、从设备、互联设备等。
AMBA AHB实现了高性能、高时钟频率系统所需要的功能,包括
- 突发传输
- 单时钟沿操作
- 非三态实现
- 总线位宽可配,64,128,256,1024
最常见的AHB从机是内部存储设备,外部存储其接口和高带宽外设。尽管低带宽外设也可以作为AHB从机,但由于系统性能原因,它们通常是挂在APB总线上。AHB和APB之间的桥接由APB桥完成。
上图所示系统展示了一主三从的连接方式。总线互联逻辑由一个地址译码器和一个多路复用器组成。解码器监视来自主机地址,以便选中从机,同时多路复用器将从机信号传回主机。
AHB还支持使用互联组件来实现多主多从结构,由互联组件提供从不同主机到适当从机的仲裁和路由信号。
1.1.1主机
AHB主机提供地址和控制信号来启动读写操作。接口如下(不包含AHB5中定义的附加信号):
1.1.2从机
从机响应系统中主机发起的传输。从机使用来自decoder的HSELx选择信号来控制它何时响应总线传输。
从机向主机发回的信息包括
- 总线传输完成或扩展(传输等待)
- 事务传输成功或失败
下图接口不包含AHB5附加信号
1.1.3互联组件
互联组件提供系统中主设备和从设备之间的连接。
单主机系统仅需要使用解码器和多路选择器。多主机系统需要使用仲裁器来选择主机并将信号传到从机。
译码器对每次传输的地址进行解码,并为传输中涉及到的从机提供选择信号。它还向多路选择器提供控制信号。
从机到主机的多路选择器复用从机到主机的读取数据总线和响应信号。解码器为多路选择器提供控制。
1.2AHB版本
此版本为AHB5
1.3操作
主机通过驱动地址和控制信号开始传输,这些信号包括地址、方向、传输宽度等信息,并指示传输是否构成burst。传输可以是:
- 单笔传输 single
- 在地址边界不回绕的自增突发传输burst
- 在地址边界回绕的突发传输burst
每一笔传输包含地址周期和数据周期。地址周期包括地址和控制信号,持续一个周期。数据周期持续一个或多个周期。
地址周期不允许等待,从机必须在地址周期对地址采样。但从机可以通过HREADY申请对数据周期进行扩展。
从机使用HRESP来指示传输成功或失败。
2、信号描述
2.1全局信号
信号名 | 来源 | 描述 |
---|---|---|
HCLK | 时钟源 | 全局时钟,AHB所有操作由时钟上升沿触发 |
HRESETn | 全局复位 | 低电平有效 |
2.2主机信号
所有信号有主机发出
信号名 | 接收方 | 描述 |
---|---|---|
HADDR[31:0] | 从机和译码器 | 32位地址信号 |
HBURST[2:0] | 从机 | 突发类型指示当前传输是single还是burst。突发长度支持4/8/16。突发类型可以是递增或回绕。递增突发暂不支持长度未给定的情况 |
HMASTLOCK | 从机 | 当这个信号拉高时,表示当前传输是锁定序列的一部分。它与地址和控制信号具有相同时序。 |
HPROT[3:0] | 从机 | 保护控制信号提供有关总线访问的附加信息,并指示该如何在系统中处理访问。这些信号指示传输是指令传输还是数据传输,以及传输是特权访问还是用户访问。 |
HPROT[6:4] | 从机 | 这三个比特是添加的内存类型指示。如果AHB5 Extended_Memory_Types属性为true,则支持此信号扩展 |
HZISE[2:0] | 从机 | 指示传输的大小,通常是字节、半字、字为单位,协议允许最大传输大小为1024比特。 |
HNONSEC | 从机和译码器 | 表示当前传输是非安全传输或安全传输。如果AHB5 Secure_Transfers属性为true,则支持此信号。 |
HEXCL | 独占访问监视器 | Indicates that the transfer is part of an Exclusive access sequence.(TODO) |
HMASTER[3:0] | 独占访问监视器和从机 | 主机标识。如果master具有多个具有独占能力的线程,则由master生成,由互联组件修改以确保每个主设备都被唯一标识。 |
HTRANS[1:0] | 从机 | 指示当前传输状态:IDLE/BUSY/NONSEQUENTIAL/SEQUENTIAL |
HWDATA[31:0] | 从机 | 写数据总线。建议使用32位数据总线宽度,当然也可以扩展。 |
HWRITE | 从机 | 1写0读。在busrt操作期间,要求保持不变 |
2.3从机信号
所有信号由从机发出
信号名 | 接收方 | 描述 |
---|---|---|
HRDATA[31:0] | 多路复用器 | 读操作期间,读数据总线将从机数据传送到多路复用器,然后多路复用器传送到主机。建议使用32位宽度,当然也可以扩展。 |
HREADYOUT | 多路复用器 | 当此信号为高时,表示总线上传输已完成。如果拉低,可以对传输进行扩展。 |
HRESP | 多路复用器 | 传输响应通过多路复用器后,此信号向主设备提供有关传输状态的附加信息。当为低电平时,表示传输OKAY。高电平时,表示传输ERROR。 |
HEXOKAY | 多路复用器 | Exclusive Okay。表示独占传输的成功或失败。Indicates that the transfer is part of an Exclusive access sequence. |
2.4译码器信号
信号名 | 接收方 | 描述 |
---|---|---|
HSELx | 从机 | 用来选中从机。同时必须监视HREADY的状态,以确保之前的总线传输已经完成,然后才能响应当前的传输。 |
2.5多路复用器信号
信号名 | 接收方 | 描述 |
---|---|---|
HRDATA[31:0] | 主机 | 从机发来的数据 |
HREADY | 主机和从机 | 当此信号为高时,表示前次传输已经完成 |
HRESP | 主机 | 传输响应,OKAY/ERROR |
HEXOKAY | 主机 | 独占传输OKAY/ERROR |
3、传输事务
3.1基本传输
一个基本传输包括两个阶段
- 地址阶段:持续一个时钟后期
- 数据阶段:可能持续多个时钟周期,由HREADY控制
HWRITE控制传输方向,高电平写低电平读。
- 主机在时钟上升沿将地址和控制信号驱动到总线
- 从机在下一个时钟上升沿对地址和控制信息进行采样
- 在从机对地址进行采样控制后,它可以驱动适当的HREADYOUT响应,该响应由主机在HCLK第三个时钟周期采样。
这个简单的样例展示了地址和数据阶段在不同时钟周期内发生。任何地址阶段都是发生在上一次传输的数据阶段之后。地址和数据阶段的重叠,时流水线特性的基础,也是实现高性能操作的基础,同时给从机足够时间提供传输响应。
从机可以在任何传输中插入等待状态。每个从机都有一个HREADYOUT信号,这个信号在数据阶段驱动。互联组件负责组合来自所有从机的HREADYOUT信号,以生成单个HREADYOUT信号,用于控制整体进度。
对于写操作,在扩展周期内写数据要移植保持稳定。而对于读操作,读数据不必一直保持稳定,而只需要在握手成功的那个周期提供。
对于扩展传输,其具有扩展下次传输的地址阶段的副作用,如下图
在B等待期间,C的地址阶段也在保持不变进行等待,B传输完成后,C才能开始。
3.2传输类型
由HTRANS指示,传输可以被细分为四种类型
HTRANS[1:0] | TYPE | 描述 |
---|---|---|
2‘b00 | IDLE | 表示不需要数据传输。当主机不想执行数据传输时,此时为IDLE。建议主机使用IDLE状态终止锁定传输。从机必须时钟为IDLE传输提供零等待OKAY响应,并且从机必须忽略这次传输。 |
2'b01 | BUSY | BUSY传输类型使主机能够在burtt中间插入空闲周期。这种传输类型表示主机正在继续burst传输,下一笔操作不能立即进行。当主机使用BUSY类型传输时,地址和控制信号必须反应burst中的下一次传输。只有未定义长度的突发传输可以将BUSY传输作为最后一个周期。从机必须时钟为BUSY传输提供零等待OKAY响应。并必须忽略这次传输。 |
2'b10 | NONSEQ | 表示single或burst的第一次传输。地址和控制信号与之前的传输无关。总线上的single传输被视为长度为1的burst,因此传输类型为NONSEQUENTIAL。 |
2'b11 | SEQ | burst中的剩余传输是连续的,并且地址与先前的传输相关,控制信息与之前的信息相同。该地址等于先前传输的地址加上传输大小(以字节为单位),传输大小由HSIZE[2:0]指示。在wrap burst情况下,传输地址在边界处回绕。 |
- T0-T1时刻,状态为NONSEQ,发起4次读操作
- T1-T2时刻,主机无法执行第二次读操作,因此插入BUSY状态,可以看到0x24地址保持到下一拍,同时HRDATA准备好第一次读操作的数据。
- T2-T3时刻,主机可以发起第二次读操作,传输类型转为SEQ,主机忽略从机在HRDATA线上提供的数据。
- T3-T4时刻,主机发起第三次读操作,从机提供第二次读操作的数据。
- T4-T5时刻,主机发起第四次读操作,从机无法完成第三次读操作,因此拉低HREADYOUT插入等待状态
- T5-T6时刻,从机提供第三次读操作数据
- T6-T7时刻,从机提供第四次读操作数据
注意在burst传输期间,HADDR随着每次传输大小而自增
3.3锁定传输
如果主机需要锁定访问,它还需要断言HMASTLOCK信号。该信号向从机指示当前传输序列是不可分割的,因此必须在处理其他任何传输之前对其进行处理。通常,锁定传输用于通过确保从设备不在微处理器SWP指令(寄存器和存储器交换指令)的读取和写入阶段之间执行其他操作来维护信号量的完整性。
锁定传输后,建议主机插入IDLE传输。
大多数从机不需要实现HMASTLOCK信号,因为他们只能按照接受顺序执行传输。可以由多个主设备访问的从设备,如多端口内存控制器必须实现HMASTLOCK信号。
允许主机在IDLE传输的开始、中间或结束时断言HMASTLOCK。虽然允许锁定IDLE传输,但不建议这样做,因为这会对系统仲裁造成不利影响。
同样也允许主机对多个IDLE传输进行锁定,然后在不执行IDLE传输的时候取消锁定。这同样不建议,也会对系统仲裁造成不利影响。
在锁定序列中,要求所有传输都是发往同一个从机。
3.4传输size
HSIZE指示传输中数据的大小,并且HSIZE设置的传输大小必须小于等于总线宽度。例如对于32位总线,HSIZE只能使用000,001,010
HSIZE[2:0] | Size(bits) | 描述 |
---|---|---|
000 | 8 | 字节 |
001 | 16 | 半字 |
010 | 32 | 字 |
011 | 64 | 双字 |
100 | 128 | 四字 |
101 | 256 | 八字 |
110 | 512 | |
111 | 1024 |
使用HSIZE和HBURST搭配来决定回绕突发的边界。HSIZE的时序与地址阶段一致,并且他们在整个突发传输中保持不变。
3.5突发操作
此协议中定义了4/8/16拍和未定义长度以及单拍的突发传输。它支持递增和回绕突发:
- 递增突发访问的地址是顺序的,突发中每次传输的地址是前一个地址的增量
- 回绕传输在跨越地址边界时进行回绕。地址边界计算为突发中的节拍数与传输大小的乘积。节拍数由HBURST控制,大小由HSIZE控制。
例如4拍以4字节为单位的突发传输的地址边界在16byte处。因此如果突发传输的起始地址为0x34,那么4拍的地址为0x34,0x38,0x3c,0x30。
HBURST[2:0] | 类型 | 描述 |
---|---|---|
000 | single | 单拍传输 |
001 | incr | 未定义长度的自增传输 |
010 | wrap4 | 4拍回绕传输 |
011 | incr4 | 4拍自增传输 |
100 | wrap8 | 8拍回绕传输 |
101 | incr8 | 8拍自增传输 |
110 | wrap16 | 16拍回绕传输 |
111 | incr16 | 16拍自增传输 |
主机不能尝试启动跨越1kb地址边界的递增突发传输
突发大小表示的突发的节拍数,而不是传输的字节数。通过将节拍数乘以每个节拍中的数据量来计算突发传输的数据总量。单节拍数据量由HSIZE指示。
突发传输中每一拍数据必须都地址对其。如字传输要字地址边界对其HADDR[1:0]=2'b00,半字传输必须与半字地址边界对齐,HADDR[0]=0.否则在仿真过程中,总线监视器可能会报告虚假警告。
3.5.1BUSY传输后突发终止
突发传输开始后,如果主设备需要更多时间才能继续突发中的下一次传输,则主设备使用BUSY传输。
在未定义长度的自增传输期间,主机可能会插入BUSY传输,然后决定不再需要数据传输。在这些情况下,主机可以随后执行NONSEQ或IDLE传输,然后有效地终止未定义长度的自增传输。
对于以下类型的固定长度突发传输,不允许主设备使用BUSY传输结束突发
- 自增4/8/16
- 回绕4/8/16
这些固定长度的突发类型必须以SEQ传输结束
不允许主机在single传输后立即执行BUSY传输。single传输必须跟在IDLE或者NONSEQ传输之后。
3.5.2提前终止突发
突发可以被以下提前终止
- 从机响应错误
- 多层互联终端
如果从机提供ERROR响应,则主机可以取消突发中的剩余传输。然而这不是一个严格要求,主设备继续传输也是可以的。
如果主设备取消了突发中的剩余传输,那么它必须在两个周期的错误响应期间更改HTRANS为IDLE。
如果主设备没有完成该突发,那么它在下一次访问该从设备时就不需要重建突发。例如,如果一个主机只完成了一个8拍突发的3拍,那么它在下一次访问该从设备时不必完成剩余的5拍。
虽然不允许主设备提前终止突发请求,从设备必须设计为在突发传输期间正常工作。
在多主机系统中多层互联组件可以终止突发,以便另一个主机可以访问从机。从机必须终止来自原始主机的突发,然后在这种情况下适当响应新主机。
3.5.2突发传输示例
四拍回绕突发
四拍自增突发
8拍回绕突发
8拍自增传输
注意这里是半字传输,地址一次增2
未定义长度的自增传输
3.6等待传输
从机使用HREADYOUT插入等待状态。等待期间,主机对控制信号的修改受限。
3.6.1等待期间修改传输类型
等待期间,主设备不得更改传输类型,除非如下所述
IDLE传输
在等待状态期间,允许主机修改IDLE传输为NONSEQ传输。主机修改HTRANS的类型时必须保持HTRANS不变,直到从机HREADY拉高。
BUSY传输,且固定突发长度
在固定突发长度的等待状态时,允许主机将传输类型BUSY改为SEQ。当HTRANS改为SEQ时,主机必须保持HTRANS不变直到HREADY拉高。BUSY传输只能插入到连续的burst之间,不适合single传输,且该busrt长度固定。
BUSY传输,突发长度未定义
在未定义突发长度的等待状态,HREADY为低电平时,允许主机将BUSY改为任何其他传输类型。如果执行SEQ传输则突发继续,如果执行IDLE或NONSEQ,则突发终止。
3.6.2等待期间地址改变
当从机请求等待状态时,主机只能更改一次地址,除非如下所述
IDLE传输期间
在等待传输期间,允许主机更改IDLE传输的地址。当HTRANS类型改为NONSEQ时,主机必须保持地址不变,直到HREADY为高。
ERROR回复之后
在等待传输期间,如果从机以ERROR进行响应,则当HREADY为低时,允许主机更改地址。
3.7保护控制
HPROT[3:0]用来提供有关总线访问的附加信息,主要供实现某种保护级别。
这个信号用来指示
- 指令传输或数据传输
- 特权模式访问或用户模式访问
对于具有内存管理单元的主机,这些信号还指示当前访问是可缓存的还是可缓冲的。
许多主机无法生成准确的保护信息。如果主机无法生成准确的保护信息,本规范建议
- 主机将HPROT设置为4‘b0011以对应于不可缓存、不可缓冲、特权的数据访问
- 除非绝对必要,否则从机不使用HPROT。
HPROT控制信号与地址信号具有完全相同的时序。但是,它们必须在整个突发传输过程中保持不变。
3.8存储类型
AHB5中定义了Extended_Memory_Types属性,此属性定义了接口是否支持本节中描述的阔内存类型。如果未定义此属性,则接口不支持扩展内存类型。
本期规范添加了额外的HPROT信号,并为每种内存类型提供了更详细的要求列表
bit | 名字 | 描述 |
---|---|---|
HPROT[0] | 数据/指令 | 高电平表示数据访问,低电平表示指令访问 |
HPROT[1] | 特权 | 高电平表示特权访问,低电平表示用户访问 |
HPROT[2] | 缓冲 | 若为低电平,则写响应必须从最终目的地给出;若为高,可以从中间节点给出写响应,但要求写传输在目的地及时可见。 |
HPROT[3] | 可修改的 | 高电平表示传输特性可修改,低电平表示传输特性不可修改。 |
HPROT[4] | 查找 | 若为高,必须在缓存中查找。若为低,传输不需要在缓存中查找,传播必须传播到最终目的地。 |
HPROT[5] | 分配 | 高电平表示出于性能原因,此规范建议在缓存中分配此传输;低电平表示出于性能原因,此规范建议不在缓存中分配此传输。 |
HPROT[6] | 可共享的 | 高电平表示此传输是到系统中与其他攻击共享的内存区域。在传输对其他主机可见之前,不能提供传输响应。低电平表示此传输不可共享,并且内存区域不与系统中其他主机共享。传输响应不能保证传输对其他主机可见。 |
3.8.1数据或指令
所有传呼包含数据或指令保护位HPROT[0],高电平时表示是数据传输,低电平时表示是指令传输。
协议将此指示定义为提示,它并不是在所有情况下都准确。例如,一个事务是指令和数据的混合。本规范建议主机设置HPROT[0]为高,表示数据访问,除非明确直到该次传输为指令访问。
3.8.2用户或特权
所有传输包含特权或非特权保护位HPROT[1],高电平表示特权访问,低电平表示非特权访问。
一些处理器支持多级特权,可参考处理器文档以确定到AHB特权等级的映射。
3.8.3存储类型
设备类型E后缀表示允许较早的写响应,nE后缀表示不允许较早的写响应,写响应必须来自最终目的地。
3.8.4-3.8.7略过
3.9安全传输
AHB5定义了Secure_Transfers属性。如果未定义此属性,则接口不支持安全传输。支持安全传输有一个额外信号HNONSEC,对于非安全传输拉高,对于安全传输拉低。HNONSEC是一个地址相位信号,与HADDR时序一直。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?