AMBA2 AHB 相关理解 (一)

发布时间 2023-06-05 22:33:38作者: 可达达鸭

一、AHB总线协议概述

1. AHB总线部件

  • 主机
    • 主机给地址(选通不同slave)以及控制信息(读写方向、数据量、数据大小等)发起读写操作。
  • 从机
    • 从机在仲裁器给过来的HREADY为高电平时采样HSELx、地址以及控制信号。
    • 从机会返回两个信号(HREADYOUT/HRESP)给主机,前者为是否需要主机等待信号,后者表示返回为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信号来释放总线控制权。
    • 当从机准备好接收传输,slave 发出HSPLIT信号,通知Arbitration哪一个bus master要继续进行操作。
  • RETRY和SPLIT可以让其它优先级的master抢走总线控制权。
    • 对于RETRY而言,只有拥有更高优先级的主机能获得总线访问权。
    • 对于SPLIT而言,即使这个主机拥有更低的优先级也可以获得总线。
  • 双周期响应
    • 为什么需要双周期
      • AHB流水线传输性质导致的,在从机发起异常响应时,下一次传输的地址已经被写到地址总线上,需要至少两个周期让主机取消该地址,并在第二周期将HTRANS改成IDLE。
    • 只有OKAY响应可以在单周期给出,ERROR、RETRY、SPLIT响应至少需要两个周期。
    • 在倒数第二个周期将slave输出HREADYOUT拉为0,扩展一个周期。主机将HTRANS设置为IDLE,取消传输,拉高slave输出的HREADYOUT信号,结束传输,保持HRESP不变。

3. 突发传输相关要点

3.1 突发传输 1KB地址边界

  • 目的:slave的地址空间都是以1KB为单位,突发传输如果跨过1KB就很有可能访问到其它slave中。

3.2 突发传输 数据量

  • 一个突发传输的数据总量 = 节拍数(传输个数) * 每个节拍中的数据量(HSIZE[2:0]).

3.3 提前突发终止

  • 发生条件:在一个Burst传输中的任何一拍;slave返回非OKAY响应之后或者仲裁器将HGRANT给其他master。除此之外,master不能主动地决定终止burst传输。
  • 当HTRANS信号上出现NONSEQ或者IDLE时,则表明前一次突发传输已经终止。
  • 如果主机在突发传输过程中失去总线控制权,那么之后还需要继续申请总线控制权完成剩余传输,且之后的传输不需要与之前传输类型相同。

4. Default Slave

  • 译码时,如果定义了整个地址空间,不需要默认slave。
  • 如果内存映射中存在未定义的区域,需要slave,防止访问不存在的地址空间系统被锁死。

5. 从机的多种传输方式

  • (1)立刻完成传输;
    (2)插入一个或多个等待状态以获得充分时间来完成传输;
    (3)发出一个错误响应表示传输失败;
    (4)延时传输的完成,允许当前的主机和从机放弃总线,让其他主机先完成传输,再完成剩下的传输。
  • 等待状态最多只可使用 16 个周期,以防止任何访问长时间占用总线。

6. 数据总线

  • 总线上的主机和从机最好都使用相同的大小端模式。
  • 最好使用大端设计,并提供一个端口可供选择大端小端模式。固定大端/小端有助于降低功耗提高性能。

7. 仲裁器

  • 需要实现两个功能
    • 可以接收不同主机发送的请求信号,通过算法决定哪个主机优先传输。
    • 涉及到前面介绍的SPLIT传输,从机发出HSPLIT信号,告诉仲裁器,决定之前那个未完成传输的主机继续传输。
  • 信号HBUSREQx:主机给仲裁器
    • 对于固定长度的传输,只需要发起一次请求即可,仲裁器根据HBURST[2:0]来判断传送的长度。
    • 对于未定长度的传输,主机需要不停的发起请求,直到传输全部完成。
  • 信号HGRANTx:仲裁器给主机,告诉主机x获得总线使用权。
    • 主机在HGRANTx信号为高且从机给主机的反馈信号HREADY为高(表明上一笔传输已经完成)的那个clk上升沿处获得总线使用权。
  • 信号HMASTERx:仲裁器用这个信号表示哪个主机在用总线。
  • 如果所有主机都不需要使用总线时,每个主机将HTRANS信号给出IDLE,仲裁器就会将总线交给default master.

作者也是初学者,如有问题,请指正!!