AHB总线

AHB 组成部分

AHB Master

  • 初始化一次读写操作
  • 某一时刻只允许一个主设备使用总线
  • CPU、DMA、DSP、LDC

AHB Slave

  • 响应一次读写操作
  • 通过地址映射来选择使用哪一个从设备
  • 外部存储器、控制器EMI、APB Bridge

AHB Arbiter

  • 允许某一个主设备控制总线
  • 在AMBA协议中没有定义仲裁算法,可以自己设计

AHB Decoder

  • 通过地址译码来决定选择哪一个从设备

AHB 传输过程

AHB 信号

HRESET 低电平复位有效
HADDR[31:0] 32位系统总线,4byte
HWDATA 写数据总线,从master写到slave
HRDATA[31:0] 读数据总线,从slave读到master
HTRANS 当前传输状态,NONSEQ, SEQ, IDLE, BUSY
HSIZE 当前传输的大小,0:8bit, 1:16bit, 2:32bit
HBURST 传输的burst类型, 8种
HRESP slave发给master的总线传输状态,OKAY, ERROR, RETRY,SPLIT
HREADY 高:slave传输结束;低:slave需要延迟传输周期
HWRITE 高:写;低:读

RETRY:不影响master的优先级
SPLIT:arbiter/master降低优先级
一次无需等待状态的简单传输

需要等待两个周期的简单传输

Pipeline

Burst 传输


HBURST

  • 支持4beat, 8 beat, 16beat, 单字节传输,未定义长度的传输
  • 支持incrementing和wrapping两种burst传输
  • Increamenting burst
    • 地址是上次的传输地址加4,8或16,根据HSIZE的大小最常用
  • Wrapping burst
    • 例:4beat的wrapping burst字传输0x34->0x38->0x3c->0x30
           8beat的wrapping burst字传输0x34->0x38->0x3c->0x20->0x24->0x28->0x2c->0x30
      

怎么理解wrapping burst传输?

  • 4beat: 4beat * 4byte = 16byte,到16(0x10)的倍数就会退回,不能跨越倍数的边界0x40
  • 8beat: 遇到0x20的倍数就会退回

Burst 传输不能穿越1K边界

  • 1k指的是0x400($2^{10}$),每到0x400需要给一个NONSEQ,重启一个burst

  • HTRANS[1:0]:当前传输的状态
    • IDLE, BUSY, NONSEQ, SEQ
    • 00: IDLE
      • master 占用总线,但没进行传输
      • 两次burst传输中间master发送IDLE
    • 01: BUSY
      • master 占用总线,但是在burst传输过程中还没有准备好下一次传输
      • 一次burst传输中间master发BUSY
    • 10: NONSEQ
      • 表明一次单个数据的传输
      • 或者一次burst传输的第一个数据
      • 地址和控制信号与上一次传输无关
    • 11: SEQ
      • 表明burst传输接下来的数据
      • 地址和上一次传输的地址是相关的

举例: