一、AHB总线互连架构,以下图1是3个master与4个slave相连的AHB总线连接框图,master先发起一个请求给仲裁器,请求包括驱动地址和控制信号,仲裁器Arbiter允许某个主设备控制总线,选中的从设备slave响应地址/控制信号,然后从设备拉高HREADY信号,表示总线传输完成
图1 AHB总线连接框图
上图中,Arbiter选择其中一路Master的地址与数据,经过译码与HSEL(上图中未标出),输出给对应的slave。Decoder选择一路slave输出给master
二、Dummy Master:都不工作的master,SPLIT, 不常用
Default Master: 所有的master都不控制总线的默认master,产生IDLE cycle
三、Default Slave
Default Slave解析伪代码如下图2所示
图2 Default Slave解析伪代码
四、AHB各信号分析
AHB各信号描述如下表1所示
1、AHB信号开头都为H,APB为P
2、复位信号低电平有效
3、HTRANS:IDLE, BUSY, Nonseq(开始一次新的读写,与之前地址无关), seq
4、HWRITE:1-写 0-读
5、HSIZE:总线宽度,0-8bit 1-16bit 2-32bit(常用配置为010)...最大值受总线的配置所限制
6、HBURST:8种,single, INCR, WRAP(回环), INCR...
7、HPORT:用的少
8、HSELx:Decoder输出,选择哪个slave
9、HREADY:master向slave写数据,需判断该信号是否为高,为高才可以,为低需要保持
10、HRESP:Slave返回信号,error,OKAY, RETRY(不能响应,不影响master优先级), SPLIT(影响优先级,Arbiter会降低当下被拒绝master的优先级)
11、HPROT:不常用,一般默认配0就好
表1 AHB各信号描述
五、基本AHB传输
1、两个阶段:地址周期,数据周期(HREADY决定需要几个cycle)
2、流水线传送:先是地址周期,然后是数据周期,流水线传输过程如下图3所示
图3 流水线传输过程
3、一次无需等待状态的AHB简单传输,即AHB单周期读写,如下图4所示
图4 AHB单周期读写
4、需要两个等待周期的AHB简单传输,如下图5所示
图5 需要两个等待周期的AHB简单传输
注意:slave如果等待了16个cycle还没有HREADY拉高需要给一个timeout,在HRESP种返回一个Retry
5、AHB的Pipeline传输,如下图6所示
图6 AHB的Pipeline传输
5、Burst传输
1)8-beat表示传输八次
2)如果slave没有准备好,则hready为0,如果master没准备好应该怎么做,这时需要插入IDLE或BUSY
HTRANS[1:0]:当前传输状态,IDLE,BUSY,NONSEQ,SEQ
00 IDLE:主设备占用总线,但没进行传输,两次burst传输中间主设备发送IDLE
00 BUSY:主设备占用总线,但在burst传输过程中还没有准备好进行下一次传输,一次burst传输中间主设备发BUSY
10 NONSEQ:表明一次单个数据传输或者一次burst传输的第一个数据,地址,控制信号与上一次传输无关
10 SEQ:表明burst传输接下来的数据,地址与上一次传输的地址有关
一次AHB的burst的传输如下图7所示,如图所示当为BUSY时,HADDR是不会被写进去的
图7 AHB的burst传输
更多IC设计,验证,嵌入式等精彩内容,欢迎关注公众号:最炫ICerr