AMBA2 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信号,仲裁器也会拉低HGRANT信号来释放总线控制权。如下面波形所示。
    • 当从机准备好接收传输,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手上。
    • 与此同时,仲裁器修改HMASTER[3:0]信号表示当前使用总线的主机id。
    • 仲裁器还需要知道当前主机有多少数据需要传输,才可以在正确的时间授予另一个主机使用权。仲裁器会在倒数第二个地址被采样时,再改变HGRANTx信号。
  • 信号HMASTERx:仲裁器用这个信号表示哪个主机在用总线。
  • 如果所有主机都不需要使用总线时,每个主机将HTRANS信号给出IDLE,仲裁器就会将总线交给default master.
    • default master 获得总线使用权时,只能进行IDLE传输,有助于低功耗处理。

如有问题,请指正!!

posted @ 2023-06-05 22:30  可达达鸭  阅读(491)  评论(0编辑  收藏  举报