FPGA学习笔记
AMBA总线
1. AMBA简介
2. AHB简介
AMBA总线
1. AMBA简介
- AMBA总线是ARM研发的(Advanced Microcontroller Bus Architecture),高级微控制器总线体系;是一种开放的协议,主要用于SoC内部和ASIC,用于连接各种功能模块;
2.0版AMBA标准定义了三组总线:AHB(AMBA高性能总线)、ASB(AMBA系统总线)、和APB(AMBA外设总线)。
2. AHB简介
-
AHB(AMBA高性能总线the Advanced High-performance
Bus),应用于高性能、高时钟频率的系统模块,它构成了高性能的系统骨干总线( back-bone bus )。 -
主要支持的特性:
① 支持数据突发传输( burst transfer ),数据分割传输( split transaction )
② 支持字节、半字节和字的传输
③ 多主机
④ 一个周期内完成总线主设备( master )对总线控制权的交接
⑤ 单时钟沿操作
⑥ 非三态执行
⑦ 更宽的数据总线宽度(最低32位,最高可达1024位,但推荐不要超过256位)
-
AHB 系统:主模块、从模块和基础结构(Infrastructure)3部分组成。
整个AHB总线上的传输都由主模块发出,由从模块负责回应。
基础结构(Infrastructure):仲裁器(arbiter)、主模块到从模块的多路器、从模块到主模块的多路器、译码器(decoder)、虚拟从模块(dummy Slave)、虚拟主模块(dummy Master)所组成。
- AHB主机: 通过提供地址和控制信息发起读/写操作。任何时候值允许一个总线主机处于有效状态并使用总线。
- AHB从机:在给定的地址空间范围内响应读/写操作。将成功,失败,等待数据传输的信号返回给有效的主机
- AHB仲裁器:确保每次只有一个主机被允许发起数据传输。AHB必须包含一个仲裁器。.
- AHB译码器:对每次传输进行地址译码且在传输中包含一个从机选择信号
注意:所有的AHB执行必须仅仅要求一个中央译码器
-
BUS上传输信号类型7种
clock,arbitration,address,control signal,write data, read data, response data.
经过主到从MUX的信号:address, control signal, write data;
经过从到主MUX的信号:read data, response sgnal.虽然仲裁规范是AMBA总线规范中的一部分,但具体使用的算法由RTL设计工程师决定,其中两个最常用的算法是固定优先级算法和循环制算法。
AHB总线上最多可以有16个主模块和任意多个从模块,如果主模块数目大于16,则需再加一层结构。
-
信号描述
-
Basic Transfer 基本传输
完整的transfer分为两个阶段:address phase,data phase:
Address phase:传送 address, control signal;1个clock cycle内完成;
Data phase:传送write/read data,response signal;无法在1个clock cycle内完成,slave可用HREADY信号延长transfer,当HREADY为low时,表示transfer尚未结束,为High表示transfer结束。
为了增加总线性能,AHB可以进行多次transfer pipeline。当前transfer的data phase与下一次transfer的address phase是重叠的。
-
Control signal 控制信号
5类:
HTRANS[1:0]: Transfer type,传输类型00:IDLE 指示slave忽略目前的transfer
01:BUSY Burst transfer时,若master无法及时将数据准备好,发出BUSY通知slave
10:NONSEQ 指示目前transfer的address和control signal和之前的transfer不一样
11:SEQ 指示目前transfer的address和control signal和之前的transfer一样,通常用在burst transfer中HBURST[2:0]: Burst type,突发类型
HPORT[3:0]: Protection control,保护控制
让master提供额外的protection information。Slave在设计时尽量不适用HPROT信号。
HSIZE[2:0]: Transfer size,传输大小
HWRITE: Transfer direction,传输方向HWRITE=1:master在data phase将数据置于write Data bus HWDATA[31:0]上,传输给slave;
HWRITE=0:slave在data phase将数据置于read data bus HRDATA[31:0]上,传输master。
-
SLAVE Response
Transfer结束时,slave用HRESP[1:0]告诉master结束状态。
AHB中transfer结束状态4种:
OKAY: 表示transfer成功,1个clock
ERROR: 表示transfer失败,2个clock
READY, SPLIT:当slave判断目前的transfer需要很多歌bus cycle才能完成,为了避免当前的transfer将bus一直占有,回应READY/SPLIT response给master,表示目前的transfer并未完成,master需要重新发送相同的transfer再试一次。二arbiter可以将bus释放给其他需要的master。READY, SPLIT区别:
RETRY: arbiter内master的优先权不变,有优先权的master有限发出request,bus还是由高优先权的master获得。2个clock。
SPLIT: 当arbiter观察到master收到SPLIT response时。则该master的优先权mask起来,使其无法获得bus。若所有的master抖收到了SPLIT,则arbiter把bus交给dummy master(只会发出IDLE transfer)。当发出HSPLIT response的slave处理完transfer之后,会发出HSPLIT信号给arbiter,将master的优先权unmask。2个clock。
SPLIT能让低优先权的master在合理的情况下,取得bus的所有权,让AHB有更好的设计。缺点:设计更复杂。
-
Arbitration仲裁
① 当主机master想要access bus时,令HBUSREQ=1,arbiter在HHCLK的上升沿采样各个master的HBUSREQ信号后,令拥有最高优先权的master的HGRANT信号 =1,使其能够access bus。
② 当主机master正在传输burst transfer,如果有最高优先权的主机发送了请求信号request,arbiter可以等待当前burst完成后再 将bus grant给新的master,也可以中断当前的transfer,将bus交给优先级更高的主机master。被中断的master需要重新发出request,等到下次被grant bus是继续完成burst transfer。
③ 当arbiter在当前的burst结束后,转移bus的所用权,arbiter会在倒数第二个transfer的address被sample之后,改变HRANT信号,所有新的HGRANT信号会跟最后一个transfer的address一起在同一个时间被sample。
④ READY/ SPLIT response时,其第二个cycle必须时IDLE transfer以便让arbiter去改变bus owner。
[参考资源] https://wenku.baidu.com/view/382b16a1cc1755270622087d.html
【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~