AHB Feature
时序传输Feature:
最简单的是一次无等待的简单传输。在第一个HCLK的时钟周期,Master释放了address(HADDR)和control信号,这里的control信号指的是读或者写。紧接着在第二个时钟边沿到来之前,Master将地址和控制信号发出,在边沿时刻,Slave采样(sample)了address和control信号。如果control是一个read信号,那么slave需要在下一个上升沿到来之前,将Master访问地址的data写入到HRDATA上。如果control是一个write信号,那么slave需要在下一个上升沿到来时,采样data。读写的前提都是HREADY信号为1,即Slave已经处于ready状态。
但很多情况下slave无法在一个clk内做出反应,就可以将HREADY延时拉高,等两个周期。HREADY被拉高的同时,就意味着slave需要将数据写出到HRDATA上。
Slave shouldn't insert more than 16 wait cycles!!!
在上面简单的传输模型中,发送或者读取一组数据至少要两个clk,这样的效率是比较低的。在实际的AHB的传输中使用了pipeline(流水线)的技术来提高传输效率
和简单模型一样,第一拍写address,第二拍读/写数据。不同点在于在第二拍读写数据的同时,Master将下次要读/写的地址写在了HADDR上,也就意味着在每个clk到来时,Master需要读/写上次地址的数据,并且把下次要读/写数据的地址写出。slave也类似,也需要在一个周期内都或者写上次地址的数据,并且读取下次即将读写的地址。如果slave不需要wait等待的话,那么就能达到每个cycle都读/写一组数据,等价于一拍一个数。
在这种传输模式下,还有一个问题,就是等待时间可能很久,这也会降低传输的效率。
下面介绍Burst transfer
Burst transfer由HBURST信号来控制,Burst 传输有几种模式:
signle transfer 就是我们前面所提到的,单个地址对应的单个data。
INCR incrementing transfer with unspecified length。就是未指定长度的增量传输,没有设定具体要传输的总长度,在传输时地址是自动增加的模式,INCR不能传输超过1kbyte。
4/8/16-beat 连续传输 4/8/16拍的模式
Slave在已知传输模式的情况下,就可以提前准备数据,减少等待的时间,提高传输效率。
在传输过程中,对于slave没有准备好数据时,可以通过拉低HREADY来告知Master自己的状态,同样当Mater处于busy状态时,可以通过HTRANS来体现。
HBURST和HTRANS都由Master来控制,Master必须保证两者的一致
HADDR,HTRANS,HWRITE,HSIZE,HBURST,HWDATA由Master控制
HRDATA,HRESP由Slave控制
HSELx由decoder产生,用于片选
INCR模式中的传输地址加一是由传输数据大小决定的,即HSIZE,当data为half word时,每次增加的地址为2。当data为word时,每次增加的地址为4。
Wrapping模式地址是回环的,当到达地址边界时,就会回退到。定义如下。Wrapping 模式主要用于CPU填充cache
INCR8 Burst 传输:
注意第一个周期为NSEQ
WRAP8 Burst 传输:
Master可以通过控制HTRANS为NONSEQ来开始一次新的burst传输
当需要跨越1k的传输边界时,直接开始一次新的传输就可以继续传输
RETRY的传输需要在中间加入IDLE。