AMBA2 AHB 相关理解 (一)
1. AHB总线部件
- 主机
- 主机给地址(选通不同slave)以及控制信息(读写方向、数据量、数据大小等)发起读写操作。
- 从机
- 从机在仲裁器给过来的HREADY为高电平时采样HSELx、地址以及控制信号。
- 从机会返回两个信号(HREADYOUT/HRESP)给主机,前者为是否需要主机等待信号,后者表示返回为OK/ERROR。
- 对于AMBA2中,HRESP有OK\ERROR\RETRY\SPLIT,而AMBA 5中只有OK\ERROR.
- 对于AMBA2中,HRESP有OK\ERROR\RETRY\SPLIT,而AMBA 5中只有OK\ERROR.
- 仲裁器
- 仲裁器可以用来保证只允许一个主机处于有效状态使用总线。
- 可以写代码决定是否存在优先级或公平访问。
- 译码器
- 前面从机提到的将地址译码生成片选信号。
2. AHB 从机HRESP和HREADYOUT信号
HRESP[1:0] | RESPONSE | NOTE |
---|---|---|
00 | OKEY | 传输正常,当HREADY信号为1,说明传输完成 |
01 | ERROR | 传输出错。 |
10 | RETRY | AHB从机不能立即完成传输,AHB主机应当重试传输 |
11 | SPLIT | AHB从机不能立即完成传输,AHB主机可以释放总线所有权,当AHB从机准备好时,主机可以再次请求总线所有权以便完成传输。 |
- AMBA5 AHB这两个信号组合响应
- 在传输类型为IDLE或BUSY时,或者从机未被选中时,从机必须在HRESP上回应OKAY信号。
- 当从机反馈RETRY时,主机将传输类型替换为IDLE来取消掉当前的传输,并再次重新启动最后一次失败的传输。
- 当从机反馈SPLIT时,主机改变传输类型为IDLE取消当前传输,并且主机会拉低送到仲裁器的HBUSREQ信号,仲裁器也会拉低HGRANT信号来释放总线控制权。如下面波形所示。
- 当从机准备好接收传输,slave 发出HSPLIT信号,通知Arbiter哪一个bus master要继续进行操作。
- 当从机准备好接收传输,slave 发出HSPLIT信号,通知Arbiter哪一个bus master要继续进行操作。
- RETRY和SPLIT可以让其它优先级的master抢走总线控制权。
- 对于RETRY而言,只有拥有更高优先级的主机能获得总线访问权。
- 对于SPLIT而言,即使这个主机拥有更低的优先级也可以获得总线。
- 异常的双周期响应
- 为什么需要双周期
- AHB流水线传输性质导致的,在从机发起异常响应时,下一次传输的地址已经被写到地址总线上,需要至少两个周期让主机取消该地址,并在第二周期将HTRANS改成IDLE。
- 只有OKAY响应可以在单周期给出,ERROR、RETRY、SPLIT响应至少需要两个周期。
- 在倒数第二个周期slave将输出HREADYOUT拉为0,扩展一个周期。主机将HTRANS设置为IDLE,取消传输,拉高slave输出的HREADYOUT信号,结束传输,HRESP持续ERROR状态两个周期。
- 为什么需要双周期
3. 突发传输相关要点
3.1 突发传输 1KB地址边界
- 目的:slave的地址空间都是以1KB为单位,突发传输如果跨过1KB就很有可能访问到其它slave中。
- 如果主机想要传输跨1KB的传输,那么必须要分成两次传输进行。例子如下。
- 0x3F00 x3F40 x3F80 x3FC0 x4000 x4040 x4080
- NSEQ SEQ SEQ SEQ NSEQ SEQ SEQ
3.2 突发传输 数据量
- 一个突发传输的数据总量 = 节拍数(传输个数) * 每个节拍中的数据量(HSIZE[2:0]).
- HSIZE设置的传输大小必须小于或等于数据总线的宽度。例如总线宽度为32bit,那么HSIZE的大小可以为8,16,32bit。
3.3 提前突发终止
- 发生条件:在一个Burst传输中的任何一拍;slave返回非OKAY响应之后或者仲裁器将HGRANT给其他master。除此之外,master不能主动地决定终止burst传输。
- 当HTRANS信号上出现NONSEQ或者IDLE时,则表明前一次突发传输已经终止。
- 如果主机在突发传输过程中失去总线控制权,那么之后还需要继续申请总线控制权完成剩余传输,且之后的传输不需要与之前传输类型相同。
4. Default Slave
- 译码时,如果定义了整个地址空间,不需要默认slave。
- 如果内存映射中存在未定义的区域,需要slave,防止访问不存在的地址空间系统被锁死。
5. 从机的多种传输方式
- (1)立刻完成传输;
(2)插入一个或多个等待状态以获得充分时间来完成传输;
(3)发出一个错误响应表示传输失败;
(4)延时传输的完成,允许当前的主机和从机放弃总线,让其他主机先完成传输,再完成剩下的传输。 - 等待状态最多只可使用 16 个周期,以防止任何访问长时间占用总线。
- 但该建议不适用于只在系统启动时访问的设备,等待状态大于16个也没关系。
6. 数据总线
- 总线上的主机和从机最好都使用相同的大小端模式。
- 最好使用大端设计,并提供一个端口可供选择大端小端模式。固定大端/小端有助于降低功耗提高性能。
- 这篇文章有介绍大端小端相关知识。
7. 仲裁器
- 需要实现两个功能
- 可以接收不同主机发送的请求信号,通过算法决定哪个主机优先传输。
- 涉及到前面介绍的SPLIT传输,从机发出HSPLIT信号,告诉仲裁器,决定之前那个未完成传输的主机继续传输。
- HSPLITx[15:0]:该信号的每1bit对应一个master,x为slave的id。
- 信号HBUSREQx:主机给仲裁器
- 对于固定长度的传输,只需要发起一次请求即可,仲裁器根据HBURST[2:0]来判断传送的长度。
- 对于未定长度的传输,主机需要不停的发起请求,直到传输全部完成。
- 信号HGRANTx:仲裁器给主机,告诉主机x获得总线使用权。
- 主机在HGRANTx信号为高且从机给主机的反馈信号HREADY为高(表明上一笔传输已经完成)的那个clk上升沿处获得总线使用权。
- 以下面波形为例,观察HTRANS信号,T5时刻采到M2的GRANT信号,且采到HREADY信号为高,所以总线使用权交到了M2手上。
- 以下面波形为例,观察HTRANS信号,T5时刻采到M2的GRANT信号,且采到HREADY信号为高,所以总线使用权交到了M2手上。
- 与此同时,仲裁器修改HMASTER[3:0]信号表示当前使用总线的主机id。
- 仲裁器还需要知道当前主机有多少数据需要传输,才可以在正确的时间授予另一个主机使用权。仲裁器会在倒数第二个地址被采样时,再改变HGRANTx信号。
- 主机在HGRANTx信号为高且从机给主机的反馈信号HREADY为高(表明上一笔传输已经完成)的那个clk上升沿处获得总线使用权。
- 信号HMASTERx:仲裁器用这个信号表示哪个主机在用总线。
- 如果所有主机都不需要使用总线时,每个主机将HTRANS信号给出IDLE,仲裁器就会将总线交给default master.
- default master 获得总线使用权时,只能进行IDLE传输,有助于低功耗处理。
如有问题,请指正!!