一、总线概述
- ARM占的市场大,IP都会兼容AMBA的interface
- 缺点:数据传输速率有瓶颈。
- 2级流水线:地址周期、数据周期
- 功耗大部分来自clk的翻转
- AHB由四部分组成:master、slave、arbiter、decoder
- 每个设备都有一个地址的map
- DMA帮助CPU搬移数据,发完从INT给CPU发送中断
- 记录状态到States状态里,CPU读和控制。右边的地址是DMA的地址存放
第0步:读DMA的状态
- 如果是ready就进行下一步,如果是busy就不断read status
第1步:CPU设置搬移数据的相关值
第2步:启动DMA
- 将source address和destination adress、size赋值,用write写值。
- 初始化完毕启动DMA
第3步:DMA从memory1读数据,将读到的数据写到memory2中
第4步:DMA向CPU发送中断请求
第5步:CPU检查DMA的status状态
写驱动的本质就是配寄存器。
二、AHB总线
典型AHB系统与AHB总线互联
slave中hsel被激活,这个slave就被选中了。
- 1)发起一个请求给仲裁器,仲裁器同意后就可以驱动地址和控制信号
- 2 )abiter允许某个主设备控制总线
- 3)选中一个slave从设备,拉高HREADY信号,完成总线传输。
- 32位的地址是4G,我们只用一点点。
- 选中default地址后,返回ok,不停写不停丢掉。
AHB传输有两个阶段:地址周期和数据周期,但一共有几个cycle由slave发出的HREADY信号决定。
- master发送地址A和控制信号(读或写)
- HREADY为高,master可以采样sample到数据。
- slave的HREADY信号为低,等待两个周期
- 流水线传输,先是地址后是数据
- 除了第一次传数据时间长,此外约等于一拍传一个数。
提高效率,降低等待的可能性,采用Burst传输
前面是发一个地址,再发一个数据。DMA搬运数据,采用burst,一次发送128bit数。
Burst类型 8种:single线性、incr、incr增量猝发4/8/16k、打包猝发4/8/16k
- single transfer 前面提到的一个地址一个数
- INCR 线性增加 +4/8/12
- 或者定死,4拍、8拍、16拍
slave发了burst传输,master提前知道要准备多少数据,降低等待的时间。
第一拍:永远是NONSEQ
Flash写周期很慢,用软硬件结合方式,软件与硬件握手,查询是否写完。
AHB仲裁信号
第0位:操作数,操作码 CPU发
面试题:画出AHB设备接口图。ahb master的信号列表
- 同步:clk、reset
- 申请总线:HBUSREQx、HLOCKx
- grant总线:HGRANTx
- 发送控制信号:HTRANS、HADDR、HWRITE、HSIZE、HBURST、HPROT;如果是写,就发送写操作HWDATA
- 根据slave反馈的信号:HREADY、HRESP,来判断控制信号给出,持续给、等待、接受数据。
- HRDATA 从bus接受到的数值
AHB从设备接口
- clk、reset
- select:如果被选中,HSELx
- address和control:处理address、write、htrans、size、burst这些信号
- 如果控制信号是写数据:HWDATA;如果是发出数据:HRDATA 赋值
- 最后,给出相应的HREADY和HRESP的信号