AHB协议理解2--AHBMatrix项目

发布时间 2023-07-01 19:00:35作者: 傅红雪a

1.AHB协议中的burst传输

bit、byte、word的联系
1byte = 8bit
1word = 2byte = 16bit

 

 注意:定长的burst传输期间,一直拉高HBUSREQx信号,目的是为了增加1次burst传输。不然仲裁器要根据仲裁算法把总线授权切换给其他主机了

 

2.(重中之重)AHB协议支持word和半字的读写,表现在haddr的低两位或低一位为0,那么如何理解AHB协议中的对齐?

重点:在计算机中,一个地址,代表一个字节byte
1bit 位
8bits byte字节
16bits 半字
32bits 字

注意:一个地址对应一个byte,要存半字,就需要连着的两个地址,所以地址最低位就需要是0(为1的地址一同分配了)

 

【实例1】
存储实际上还是1个地址存8比特的,打个比方,若burst size是16比特,你每次地址偏移是2,实际上01地址存了8比特,02地址存了8比特
如果进行半字传输:
第1次半字传输,从地址0x00开始写入,那么地址0x00存放一个字节,地址0x01存放一个字节。
第2次半字传输,从地址0x02开始写入,地址0x02存放一个字节,地址0x03存放一个字节。
第3次半字传输,从地址0x04开始写入,地址0x04存放一个字节,地址0x05存放一个字节。
依次类推,每次半字传输的起始地址都是要间隔为2。低两位地址addr[1:0](也就是我理解的偏移地址)始终是0和2来回变化
【实例2】
如果进行burst size 32传输:
第1次word传输,从地址0x00开始写入,那么地址0x00存放一个字节,地址0x01存放一个字节,地址0x02存放一个字节,地址0x03存放一个字节。
第2次word传输,从地址0x04开始写入,那么地址0x04存放一个字节,地址0x05存放一个字节,地址0x06存放一个字节,地址0x07存放一个字节。
...
就是说当我们按照word去读写ram的时候,地址增长只能是4byte(32位)的倍数,也就是说地址是4、8、12(C)这样的数,你把这样的数写下来就会发现,最低两位是0(比如说4写成100,低两位就是0)
1 个地址对应1 byte,32 bit 是 4 byte。地址数值加1,挪动一下就过去了8个bit(也就是一个byte),所以想要存储32bit(4byte),拿就要按照4的倍数增长

依次类推,每次字传输的起始地址都是要间隔为4。低两位地址addr[1:0] (也就是我理解的偏移地址) 始终是0