我是靠谱客的博主 饱满皮皮虾,最近开发中收集的这篇文章主要介绍AHB总线,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

大部分的总结在csdn里面都有。这里只是总结自己理解的。

AHB基本特性有:

  1. Burst传输(一共有Hburst[2 : 0]的类型),single,incr,wrap4,incr4,wrap8,incr8,wrap16,incr16
  2. Hsize表示每一个数据的大小,假如hsize=3’b0,那么这一次传输的数据地址就为byte大小,数据大小十进制最大为2^8=256(十进制)。

2.  通过HRESP[1:0]反映传输的状态,传输响应HRESP[1:0],OKAY,ERROR,RETRY (传输未完成,请求主设备重新开始一个传输,arbiter会继续使用通常的优先级), SPLIT(传输未完成,请求主设备分离一次传输,arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线),当SEQ或NONSEQ传输访问到一个不存在的地址,默认slave应该提供ERROR响应;当IDLE或BUSY传输访问到一个不存在的地址,默认slave会响应OKAY。

3.  任一时间周期只有一个master占用总线。

4.  上升沿操作

5.  无三态:(三态指总线输出有三种状态, 1和 0和高阻状态输出被关断)

为避免出现三态总线,AHB将读写总线分开,写数据总线用于从master到slave的数据传输,读数据总线用于从slave到master的数据传输。

6. 二级流水线操作

7. 可支持最多16个总线主设备

https://file2.kaopuke.com:8081/files_image/2023052803/20200320140046616.png

arbiter允许某一个master控制总线并发起一次读/写操作某一时刻只允许一个master使用总线。

docoder来选择使用哪一个slave响应一次读/写操作。

总线可以分为三组:写数据总线(HWDATA),读数据总线(HRDATA

        地址控制总线(HADDR

总线操作:

        master首先发出地址和控制信号(一个周期),提供地址信息、传输方向、带宽和burst类型,在发出数据信息(可以多个周期)。

没有等待状态的single transfer:

slave插入等待状态的single transfer:

多个single transfer的pipeline操作:

递增burst:

wrapping 4-beat burst

总结1:如果是wrap4, 4*4=16(十进制)=10(16进制),就会在10的倍数回还。如果是wrap8,8*4=32(十进制)=20(十六进制),就会在20的倍数回还。如果是wrap16,16*4=64=40(十六进制) ,就会40的倍数回还。

总结2:INCR4,INCR8和INCR16的区别在于增加的次数不一样,INCR4增加四次,INCR8 增加8次,INCR16增加16次。HSIZE决定每一次增加的数量,分为Byte(1byte)、HalfWord(2byte)、Word(4byte);(HSIZE=000,byte增加),每一次增加8bit,就是1byte,也就是从0x48增加到0x49;(HSIZE=001,halfword增加),每一次增加16bit,就是2byte,也就是从0x48增加到0x4A;依次乘以二。。。

Incr表示一直传输下去,即不限定次数的传输,每一增加长度由HSIZE决定;incr4表示4次传输,每一增加长度由HSIZE决定。

控制信号:

HTRANS[1:0]:这是master发给slave的,

burst不能超过1K地址边界,可以使用nonseq重启一个burst就行了。地址继续增加即可。

总结:字节(byte),比特(bit),1byte=8 bite;1k=1024byte(十进制)=2的十次方(这是十进制,2的十次方就等于1024)=10000000000(二进制)=400(十六进制)

1k边界问题:

因为在AHB划分系统时,最小的地址空间为1KB,即slave至少地址空间是1k,或者2K,或者1M等。这样,当AHB访问地址空间时,因为地址空间对其的原因,就不会恶意的访问到其他的地址空间。

地址译码:

地址译码器用于为总线上每个slave提供选择信号HSELx,只有当前的数据传输完成后(HREADY为高),slave才会采样地址和控制信号以及HSELx。在一定条件下可能会出现这样的情况:产生HSELx信号而HREADY为低,在当前传输后slave会改变。

仲裁:

仲裁机制保证了任意时刻只有一个master可以接入总线。arbiter决定哪个发出接入请求的master可以接入总线,这通过优先级算法实现。AHB规范并没有给出优先级算法,设计者需要根据具体的系统要求定义。一般情况下arbiter不会中断一个burst传输,将总线接入权让给其他master。当然未定义长度的burst传输是可以打断的,这要看优先级算法是如何规定的。如果一笔burst被打断,master再度获得接入权限时,会传递剩余的部分。如一笔长度为INCR8的传输在传递3 beat后被打断,master再次获得接入授权后,会继续传输剩余的5 beat,剩余部分可以由一个SINGLE和一个INCR4组成。

        HBUSREQx:master向arbiter发出接入请求的信号。

        HLOCKx:指示是否要进行不可中断的传输,这一信号与HBUSREQx同时由master向arbiter发出。

        HGRANTx:arbiter产生指示master获得授权,当HGRANTx信号为高同时HREADY为高时,master可以向总线传输地址信号。

        HMASTER[3:0]:arbiter产生指示哪个master获得授权,这一信号用于地址控制多路来选择哪个master接入总线。

        HMASTERLOCK:arbiter产生指示当前传输是否为锁定序列传输。

        HSPLIT:供支持SPLIT传输使用。

最后

以上就是饱满皮皮虾为你收集整理的AHB总线的全部内容,希望文章能够帮你解决AHB总线所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(115)

评论列表共有 0 条评论

立即
投稿
返回
顶部