AMBA总线项目

74 阅读11分钟

AMBA总线

AMBA总线简介

  1. 系统芯片中各个模块之间需要有接口来连接
  2. 总线作为子系统之间共享的通信链路
  3. 优点
    • 低成本
    • 方便易用
  4. 缺点
    • 会造成性能瓶颈
  5. AMBA2.0
    • 片上总线标准
    • 三种总线
      • AHB 高速100M
      • ASB
      • APB 低速20M

典型的AMBA系统

image.png
amba总线简单实列

AHB

  1. 高速总线,高性能100MHz
  2. 2级流水线操作
  3. 可支持多个总线主设备(最多16个)
  4. 支持burst传输(突发传输)
  5. 总线带宽:8、16、32、32、64、128 bits
  6. 上升沿触发操作(与工艺有关,电容的充放电实现,电容充电较快,放电比较快,上升沿采样时间短 ,能够容易控制建立时间,保持时间)
  7. 对一个新设计建议使用AHB总线

AHB组成部分

AHB主设备(master)

  1. 初始化一次读/写操作
  2. 某一时刻只允许一个主设备使用总线
  3. CPU、DMA、DSP、LCDC...

AHB从设备(slave)

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

AHB仲裁器(arbiter)

  1. 允许某一主设备控制总线
  2. 在AMBA协议中没有定义冲裁算法

AHB译码器(decoder)

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

ASB

  1. 高速总线
  2. 流水线操作
  3. 可支持多个总线主设备
  4. 支持burst传输(突发传输)
  5. 总线带宽:8、16、32bits
  6. 三态、双向总线
    • 不适合做DFT
  7. 上升沿或下降沿触发操作(与工艺有关,电容的充放电实现,电容充电较快,放电比较快,上升沿采样时间短 ,能够容易控制建立时间,保持时间)

APB

  1. 低速总线,低功耗
  2. 接口简单
  3. 在Bridge中锁存地址信号和控制信号
  4. 适用于多种外设
  5. 上升沿触发操作(与工艺有关,电容的充放电实现,电容充电较快,放电比较快,上升沿采样时间短 ,能够容易控制建立时间,保持时间)

APB组成部分

AHB2APB Bridge

  1. 可以锁存所有的地址、数据和控制信号
  2. 进行二级译码来产生APB从设备选择信号

APB总线上的所有其他模块都是APB从设备

DMA例子

image.png

  1. step0:CPU检查DMA的状态以确认是否可用
  •  while(1){
      Read(0x30004,&states)
      if(states==0){
          break;
      }
     }
    
  • image.png
  1. step1:CPU设置(source sddress)、(destination address) (size)
    •  write(0x30008,0x10000);
       write(0x3000C,0x20000);
       write(0x30010,0x100);
      
  2. step2:启动DMA
    •  write(0x30000,0x1);
      
    • image.png
  3. step3:DMA把数据从memory1传送到memory2
    • image.png
  4. step4:DMA向CPU发出中断请求
  5. step5:CPU检查DMA的状态
    • Read(0x30004,&status)
      
    • image.png
  6. 总结:CPU查询DMA状态->配置寄存器->启动DMA->DMA开始搬运->DMA搬运完中断CPU->查询

AHB传输

  • image.png
  • 232=4G2^{32}=4G
  • 有default master(CPU) default slave Dummy Master (其他master不工作)
  • 每个外设有自己的地址空间

基本AHB信号

  • HCLK (clock source) BUS clock 总线时钟

  • HRESETn (reset controller)

    • 低电平有效
  • HPORT[3:0] (master)

    • 保护控制
    • HPORT[0]:OPCODE/DATA
    • HPORT[1]:USER/PRIVILGED
    • HPORT[2]:Bufferable/Non-Bufferable
    • HPORT[3]:Cacheable/Non-Cacheable
  • HADDR[31:0] (master)

    • 32位系统地址总线
  • HWRITE (master)传输方向,写使能

    • 高电平:写
    • 低电平:读
  • HWDATA[31:0](master)

    • 写数据总线,从主设备写到从设备
  • HTRANS (master)

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

    • 指出当前传输的大小
    • 000:8bits
    • 001:16bits
    • 010:32bits
    • 011:64bits
    • 100:128bits
    • 101:256bits
    • 110:512bits
    • 111:1024bits
    • 最大值受总线的配置所限制
    • 通常使用32bits(010)
  • HBURST (master)

    • 指出传输burst类型
    • 不可跨越1K边界
    • SINGLE
    • INCR
    • WRAP[4][8][16]
    • INCR[4][8][16]
  • HRESP (slave)

    • 从设备发给主设备的总线传输状态
    • OKAY、ERROR、RETRY(重传)、SPLIT(分割)
    • 00:OKAY
    • 成功 单周期响应
    • 01:ERROR
    • 失败 两周期响应
    • 10:RETRY
    • 传输未完成 两周期响应
    • 请求主设备重新开始一个传输
    • 11:SPLIT
    • 传输未完成 两周期响应
    • 请求主设备分离一次传输
    • 延迟 分一段传输
  • HREADY (slave)

    • 高:从设备指出传输结束
    • 低:从设备需延长传输周期
    • HRDATA[31:0](slave)
    • 读数据总线,从从设备读到主设备
  • HSELx (Decoder)

    • 读数据总线,从从设备读到主设备
    • 选择从设备
    • 指出由主设备所选择的从设备
    • 由地址译码器来提供所选择的从设备
    • 一个从设备应该至少占用1KB的存储空间
    • 需要额外的缺省从设备来映射其他的存储地址

single传输

基本AHB传输

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

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

  1. image.png
    一次无需等待简单传输
    • 两个周期 ,一个地址周期,一个数据周期
    • 只有当HREADY信号有效时才将数据传输,否则地址保持

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

  1. image.png
    • 最多等待16个时钟周期
    • HREADY为高读到的数据才是对的

流水线传输

image.png

  • 一次传输拆成两个步骤->二级流水线
  • 一次传输拆成三个步骤->三级流水线

Burst Transfer

image.png

  • single Transfer
  • incrementing transfer with unspecified length(INCR)
  • 4-beat
  • 8-beat
  • 16-beat
  • 传输类型
  • image.png例子
    • 未定义长度的传输
    • 支持incrementing和wrapping两种burst传输
    • incrementing burst
  • 地址是上一次的传输地址加1
  • Wrapping burst
    • 4beat的wrapping burst 字传输(4byte)
    • 0x34->0x38->0x3c->0x30
    • 应用场合:Cache填充
  • 根据HSIZE和HBURST来计算地址
  • 例:起始地址是0x48,HSIZE=010(32bits)
  • INCR4 Burst 4代表四个字节
    • image.png
  • INCR8 Burst 8代表八个字节
    • image.png
  • WRAP4 Burst
    • image.png
  • WRAP8 Burst
    • image.png
  • 未定义长度
    • image.png
HBURSTTYPEADDRESS
000SINGLE0x48
001INCR0x48,0x4C,0x50,...
010WRAP40x48,0x4C,0x40,0x44
011INCR40x48,0x4C,0x50,0x54
100WRAP80x48,0x4C,0x50,0x54,0x38,0x3C,0x40,0x44
101INCR80x48,0x4C,0x50,0x54,0x58,0x5C,0x60,0x64
110WRAP160x48,0x4C,...,0x7C,0x40,0x44
111INCR160x48,0x4C,...,0x7C,0x80,0x84

地址译码

image.png

从设备响应

  1. 所访问的从设备必须响应这次传输
  2. 从设备可能返回的响应
    • 完成这次传输
    • 插入等待状态(HREADY信号)
    • 发出错误信号表示这次传输失败
    • 延迟传输,使得总线可用于其他传输(split)
  3. 总线的流水特性需要从设备两个周期的响应。可以使得主设备有足够的时间处理下一次传输
  4. retry响应
    • image.png
  5. RETRY和SPLIT的区别
    • 主要区别在于仲裁的方式
    • RETRY:arbiter会继续使用通常的优先级
    • SPLIT:arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线
    • 总线主设备应以同样的方式处理RETRY响应和SPLIT响应

数据总线

  1. 不是三态总线,读总线和写总线是分开的
  2. 印第安序(数据模式,大端对齐还是小端对齐)
    • 在AMBA协议中没有定义
    • 主设备和从设备应该采用同样的印第安序
    • 不支持动态的印第安序
      • 32bits小端对齐
      • image.png
      • 32bits 大端对齐
      • image.png
  3. 对于IP设计,只有应用面比较广泛的应用程序才支持两种印第安序

AHB仲裁器

AHB仲裁信号

NameSourceDescription
HBUSRWQxMasterBus request
HLOCKxMasterLocked transfers
HGRANTArbiterBus grant
HMASTER[3:0]ArbiterMaster number
HMASTLOCKArbiterLocked sequence
HSPLITx[15:0]Slave(SPLIT-capable)Split completion request
  1. HBUSRWQx
    • 总线请求
  2. HLOCKx
    • 高电平:主设备请求锁定总线
  3. HGRANT
    • 指出主设备x可访问总线
    • 主设备x控制总线:HGRANTx=1且HREADY=1
  4. HMASTER[3:0]
    • 指出哪个设备正在进行传输
    • 4位16个
  5. HMASTLOCK
    • 指出主设备正在进行一次锁定传输
  6. HSPLITx[15:0]
    • 从设备用这个信号告诉仲裁器哪个主设备允许重新尝试一次split传输
    • 每一位对应一个主设备
  7. 仲裁举例
    • 无等待状态的grant
    • image.png
    • 有等待状态的grant
    • image.png

AHB主设备接口

image.png

AHB从设备接口

image.png

仲裁器Arbiter

image.png

AHB Decoder

image.png

多层

image.png

AHB Lite简化版

image.png

AHB总结

  1. 主要组成部分
    • MASTER SLAVE ARBITER DECODER
  2. 传输的过程
    • 流水线机制
    • Address phase和data phase
  3. 如何提高性能
    • Burst read/write
  4. 仲裁机制
    • 总线控制权的移交
  5. slave短时间内无法响应
    • HREADY信号拉低
  6. slave长时间内无法响应
    • 插入SPLIT/RETRY
  7. MASTER长不能进行传输
    • 插入BUSY

AHB应用建议

  1. Arbiter 的优先级可以配置
  2. Slave长时间不能响应的话,一般不支持SPLIT响应,使用RETRY响应
  3. 总线上如果只有一个master的话,可以使用AHB lite协议,不使用arbiter
  4. 设计一个新的IP时,要仔细核对AMBA的Feature和IP所支持的Feature是否匹配。

实现

DMA

image.png

APB

通过BRIDGE连接

image.png

APB信号

| name        | description            |
| ----------- | ---------------------- |
| PCLK        | Bus clock              |
| PRESETn     | APB reset              |
| PADDR[31:0] | APB address bus        |
| PSELx       | APB select             |
| PENABLE     | APB strobe             |
| PWRITE      | APB TRANSFER direction |
| PRDATA      | APB read data bus      |
| PWDATA      | APB write data bus     |
  1. PADDR[31:0]
    • 地址总线,由设备总线的bridge单元驱动
  2. PSELx
    • 从译码器来的信号,到每一个总线从设备x
  3. PENABLE
    • 用于在设备总线上把所有访问按时间阶段进行
  4. PWRITE
    • 高电平:写
    • 低电平:读
  5. PRDATA和PWDATA
    • 最多32位宽

地址映射

AHB->AHB BRIDGE->APB设备(两级映射)

image.png

APB读写传输

  1. 写传输

image.png 2. 读传输

image.png 3. BRIDGE

image.png 4. BRIDGE FSM (实现两级流水)

image.png

APB SLAVE

image.png

APB到AHB的接口--读

image.png

不同IP之间的互联

  1. CPU(master)<--->IP(slave)
  2. IP(master) <--->IP(slave)

Memory mapped io

  1. 每个从设备都占用系统中的一段地址空间
  2. 所有的从设备都是可寻址的
  3. 寄存器/存储器都是内存映射方式访问
  4. CPU/IP读写其他ip的数据类似于读写寄存器
  5. 主设备被arbiter grant之后,都可以访问总线上的所有从设备
    • image.png

一个ip可以同时拥有主设备和从设备接口(DMA)

image.png

CPU和IP之间的通信

image.png

总结

  1. AMBA简介
    • AMBA2.0 :AHB、ASB、APB
  2. AHB的组成部分
    • master slave arbiter decoder
  3. APB的组成部分
    • AHB2APB bridge、APB Slave
  4. AHB信号
    • HCLK HRESETn HADDR HTRANS HWRITE HSIZE HBURST HEDATA HSELx HRDATA HREADY HRESP
  5. AHB 传输的两个阶段
    • 地址周期、数据周期
  6. 当前传输的状态HTRANS
    • IDLE、BUSY、NONSEQ、SEQ
  7. 突发传输的类型HBURST
    • SINGLE、INCR(如何开始一次新的incr?(nonseq))
    • Burst传输不可跨越1K边界
  8. HSEL:由AHB decoder通过地址映射给出
  9. AHB SLAVE 响应信号:
    • HREADY传输完成、HRESP传输响应(OK、ERROR、RETRY)
    • AHB slave短时间无法响应?(HREADY拉低)长时间无法响应(RETRY SPLIT)
  10. 32bit小端模式,数据总线的有效字节序
  11. AHB仲裁信号
    • HBUSREQ、HGRANT、HMASTER
    • 主设备x可控制总线条件
  12. AHB master、AHB slave、AHB arbiter、AHB decoder的接口信号
  13. AHB Lite
  14. APB信号
    • PCLK PRESET PADDR PSEL PENABLE PWARITE PRDATE PWDATA
  15. APB slave 的地址映射
  16. APB传输
    • Always rwo cycle transfer:Setup cycle、enable cycle
    • No wait cycle and response signal
  17. APB bridge 和APB slave的接口信号