AHB-Lite是AHB的简化版本,针对单个Master设计的总线协议。这样可以简化interconnection的设计,不需要做仲裁。
AHB-Lite基本传输:AHB每个Transfer分为一个地址阶段,一个数据阶段。
- Address: 除非被前一次传输延长,否则持续一个HCLK时钟周期。
- Data:可能需要几个HCLK时钟周期。使用HREADY信号来控制完成传输所需的时钟周期数。
HWRITE信号控制数据的传输方向:
- 当HWRITE信号为高的时候,表示为写传输。Master在写传输总线上传输数据,HWDATA[31:0]
- 当HWRITE信号为低的时候,表示为读传输,Slave在读传输总线上传输数据,HRDATA[31:0]
最简单的情况是没有wait states,此时transfer由一个address cycle和一个data cycle组成。
写时序:
我们可以看到,在写操作当中。HWRITE为1,我们把地址发出去。在第二个阶段,我们把要写的数据发出去。
读时序:
和写操作类似,不同的是,在读操作当中。HWRITE为0,我们把地址发出去。在第二个阶段,我们把数据读回来。
在没有等待的简单传输当中:
- Master在HCLK的上升沿过后将地址和控制信号驱动到总线上。
- Slave在HCLK的下一个上升沿采样地址和控制信息。
- 在Slave已经采样了地址和控制信息以后,它可以开始驱动适合的HREADY响应。这一响应由Master在HCLK的第三个上升沿进行采样。
这个简单的例子演示了在不同的时钟周期中,地址阶段和数据阶段是如何变化的。任何传输的地址阶段都发生在前一次传输的数据阶段。这种地址和数据的重叠是总线的流水线性质的基础,使得可以进行高性能操作,同时仍然为Slave提供足够的时间来提供对传输的响应。
Slave可以在任何传输当中插入wait states,使得它由足够的时间完成传输任务。如下图所示:
读时序with wait states:
我们可以看到,区别就在于HREADY为低,代表A不能够及时响应,提供数据。因此直到第四个Cycle,Slave才返回A的读数据,此时B的地址和数据都会被延伸。
写时序with wait states:
NOTE:对于写操作而言,Master在扩展的周期内需要保持数据稳定,而对于读操作而言,直到传输快要结束,Slave才需要提供HRDATA。
读写在AHB协议中是可以pipeline的,对多个transfer中,如下图:有A,B,C三个transfer。
在第一CYCLE我们可以看到首先是给A地址进行写操作
到第二个CYCLE,在对A操作的数据阶段的时候,我们又同时发出了B的地址,B的控制。所以A,B两个TRANSFER是可以重叠的。可以认为是pipeline的。C和B也是这样。
我们可以看到C这个阶段,HREADY为低。此时为B的数据阶段,代表B不能及时响应。直到在T3这个CYCLE,SLAVE才返回B的读数据。此时C的地址和数据都会被延伸。