总线协议 -- AMBA总线(一)

资料来源:https://wenku.baidu.com/view/bbacbd36e109581b6bd97f19227916888586b999.html
本内容只是根据上面的资料做了整理

AMBA总线(一)

发展史

  • AMBA 1.0
    • ASB 和 APB
  • AMBA 2.0
    • AHB, ASB 和 APB
  • AMBA 3.0
    • AMBA Advanced eXtensible Interface (AXI)

简介

AHB

  • 高速总线,高性能
  • 流水线操作
  • 可支持多个总线主设备(最多16个)
  • 支持burst传输
  • 总线带宽:8、16、32、64、128bits
  • 上升沿触发操作
  • 对于一个新设计建议使用AHB

AHB 组成

  • AHB 主设备(master)
    • 初始化一次读/写操作
    • 某一时刻只允许一个主设备使用总线
    • uP、DMA、DSP、LCDC …
  • AHB从设备(slave)
    • 响应一次读/写操作
    • 通过地址映射来选择使用哪一个从设备
    • 外部存储器控制器EMI、APB bridge、UART、 …
  • AHB仲裁器(arbiter)
    • 允许某一个主设备控制总线
    • 在AMBA协议中没有定义仲裁算法
  • AHB译码器(decoder)
    • 通过地址译码来决定选择哪一个从设备

ASB

  • 高速总线
  • 流水线操作
  • 支持多个总线主设备
  • 支持burst传输
  • 总线带宽:8、16、32bits
  • 三态、双向总线
  • (不适于做DFT)
  • 下降沿或者上升沿触发

APB

  • 低速总线、低功耗
  • 接口简单
  • 在Bridge中锁存地址信号和控制信号
  • 适用于多种外设
  • 上升沿触发

APB 组成

  • AHB2APB Bridge
    • 可以锁存所有的地址、数据和控制信号
    • 进行二级译码来产生APB从设备选择信号
  • APB总线上的所有其他模块都是APB从设备
    • 不是流水线方式
    • 接口是零功耗

AHB

AHB总线互联

基本信号

  • HRESETn
    • 低电平有效
  • HADDR[31:0]
    • 32位系统地址总线
  • HWDATA[31:0]
    • 写数据总线,从主设备写到从设备
  • HRDATA[31:0]
    • 读数据总线,从从设备读到主设备
  • HTRANS
    • 指出当前传输的状态
    • NONSEQ、SEQ、IDLE、BUSY
  • HSIZE
    • 指出当前传输的大小
  • HBURST
    指出传输的burst类型
  • HRESP
    • 从设备发给主设备的总线传输状态
    • OKAY、ERROR、RETRY、SPLIT
  • HREADY
    • 高:从设备指出传输结束
    • 低电平:从设备需延长传输周期

AHB基本传输

  • 两个阶段
    • 地址周期,只有一个cycle
    • 数据周期,由HREADY信号决定需要几个cycle
  • 流水线传送
    • 先是地址周期,然后是数据周期

一次无需等待状态的简单传输

如果slave没有准备好?

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

根据传输规则,slave不能插入超过16个等待周期!

流水线传输

  • HBURST指定了传输burst的类型,分为:
    • Single Transfer
    • 增量传输,不指定长度
    • 4-拍
    • 8-拍
    • 16-拍

如果传输过程中从设备忙碌,可以通过HREADY信号控制,但是如果主设备忙碌呢? -- 通过HTRANS控制

传输类型

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

其他信号

  • HWRITE

    • 高电平:写
    • 低电平:读
  • HSIZE[2:0]

    • 000:8bits 100:128bits
    • 001:16bits 101:256bits
    • 010:32bits 110:513bits
    • 011:64bits 111:1024bits
    • 最大值受总线的配置所限制
    • 通常使用32bits(010)
    • HADDR的地址必须由HSIZE作为最小单位。
  • HPROT[3:0]

    • HPROT[0]: OPCODE/DATA
    • HPROT[1]: USER/PRIVILGED
    • HPROT[2]: Bufferable/Non-Bufferable
    • HPROT[3]: Cacheable/Non-Cacheable

AHB 突发传输

  • AHB Burst 操作
    • 4beat、8beat、16beat、单个字节传输、未定义长度的增量传输

    • 支持incrementing(增量)和wrapping两种burst传输

    • Incrementing burst

      • 地址是上一次的传输地址加1个传输单位
    • Wrapping burst

      • 例:4beat的wrapping burst 字传输(4byte):
      • 0x34 -> 0x38 -> 0x3c -> 0x30
      • 应用场合:Cache填充

地址计算示例

根据HSIZE和HBURST来计算地址
例:起始地址是0x48,HSEZE=010(32bits)

Burst类型: INCR8
Burst类型: WRAP8
Burst类型:INCR4
Burst类型:WRAP4
Burst类型:未定义长度的
LDM(Load Multiple instruction) AHB Activity

多指令加载:

Burst 传输不能超过1k边界

  • Burst传输不能穿越1K边界

    • 一个从设备最小的地址间隙是1KB
    • NONSEQ -> SEQ -> 1KB Boundary -> NONSEQ -> SEQ …
  • 主设备不能试图开始一个可能穿越1K边界的INCR传输

地址译码

  • HSELx:选择从设备

    • 指出由主设备所选择的从设备
  • 由地址译码器来提供选择信号

  • 一个从设备应该至少占用1KB的存储空间

  • 需要一个额外的缺省从设备来映射其他的存储地址

通过地址译码来片选从设备

从设备响应

  • 所访问的从设备必须响应这次传输

  • 从设备可能返回的响应:

    • 完成这次传输
    • 插入等待状态(HREADY信号)
    • 发出错误信号表示这次传输失败
    • 分离传输,使得总线可用于其他传输(SPLIT)
从设备的响应信号
  • HREADY:transfer done

  • HRESP[1:0]:transfer response

    • 00:OKAY 成功(单周期响应
    • 01:ERROR 失败(两周期响应
    • 10:RETRY 传输未完成,请求主设备重新开始一个传输(两周期响应
    • 11:SPLIT 传输未完成,请求主设备分离一次传输(两周期响应

总线的流水特性需要从设备两个周期的响应。可以使得主设备有足够的时间处理下一次传输。

Retry 响应

可以看到,主设备在从设备忙时发送了两次传输,Retry信号跨了两个周期,第二个周期后总线开始新的一次传输。

  • RETRYSPLIT的主要区别在于仲裁的方式

    • RETRY:arbiter会继续使用通常的优先级
    • SPLIT:arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线
  • 总线主设备应该用同样的方式处理RETRY响应和SPLIT响应

Locked 传输

  • 被锁的传输序列不能被打断

  • HLOCK信号表示下一次的传输时被锁传输

    • 上图中A和B信号时被锁住的,不能分开
  • ARM 处理器只在 SWP 指令中使用HLOCK

总线传输的其他细节放到第二部分。

posted @ 2020-04-10 16:53  love小酒窝  阅读(7929)  评论(1编辑  收藏  举报