AHB的学习笔记1-两级流水线和Burst传输

1、 AHB是两级流水线
先地址和再数据,单周期操作
AHB的学习笔记1-两级流水线和Burst传输_第1张图片
相关问题:AHB是流水的吗?是几级流水?如果这一拍是地址且有数据,那么下一拍地址能改吗?
两级流水,先地址再数据。下一拍只要Hready有效,地址就可以改。(考察AHB的单周期传输)
2、Burst传输
Burst用通俗的语言就是一次发一串数据,那么这一串数据的具体形式由Burst[2:0]和Hsize[2:0]有关;Burst分为回环(wrap)和增量(incr),增量相对于回环要简单一些。
(1) 比如Burst为INCR4,那么就是这一串数据有4个数(INCR4决定的),数据与数据之间的地址关系就是Hsize决定的,如果Hsize=1,就是16bit,等于2byte,也就是这4个数之间的地址是依次+2的;如果Hsize=2,就是32bit,等于4byte,也就是这4个数之间的地址是依次+4.INCR8就代表这一串数据有8个数据。
穿插一个小知识点:如果INCR4,那么第一个数的类型就是Nonseq,后面的是nonseq。如果主机比较忙,没办法传数据,就可以发一个busy。
AHB的学习笔记1-两级流水线和Burst传输_第2张图片

(2)回环传输:

Wrapping是要区分碰到那条边界后需要退回?关键是这个边界的确定!先上结论:边界由Hsize和Burst共同决定。
AHB的学习笔记1-两级流水线和Burst传输_第3张图片
图片中回环的数值是怎么确定的呢?
比如:图中的0x30是0x40-0x10获得的;
图片中的0x20是0x40-0x20获得的,即回弹的值是用现在的值减去Hsize*Hburst。

对于burst传输不能穿越1kb边界,1kb就是0x400,到了1kb边界需要将Htrans设置成NOSEQ。对上图进行文字解说:
对于burst传输,如果是回环传输,假设是wrap4,size是4byte,那么那么的乘积是16byte,十六进制是0x10,如果碰到0x10的倍数那是需要回环的。0x34-0x38-0x3c-0x30,因为0
x40是0x10的倍数所以回环。如果是wrap8,size是4byte,乘积是32byte,十六进制是0
x20,碰到他的倍数就回环。0x34-0x38-0x3c-0x20-0x24-0x28-0x2c-0x30,一共八个数据。起始地址可以是倍数。根据HSIZE*HBURST计算地址,只要warp才要。对于burst传输不能穿越1kb边界,1kb就是0x400,到了1kb边界需要将Htrans设置成NOSEQ,地址可以继续按照之前的规律递增。

如果大家在阅读的过程中发现什么问题,欢迎批评指正。

你可能感兴趣的:(SOC)