1. apb传输三个阶段
(1) IDLE:空闲状态(默认),该阶段没有数据传输,psel, penable均为0(默认值)
(2) SETUP:进行传输时,首先进入SETUP状态;psel 信号在此期间拉高;SETUP阶段仅保持一个周期,并在下个周期的上升沿进入ENABLE阶段。
(3) ENABLE:进入ENABLE阶段时(clk上升沿),penable被拉高;在ENABLE阶段里进行数据传输,address,write,psel和 wdata 信号必须保持稳定;数据传输完成后,在下个周期的上升沿penable信号拉低,ENABLE阶段结束,并进入下一阶段(IDLE或SETUP阶段,注* IDLE阶段时psel须拉低,SETUP阶段psel继续为高);ENABLE阶段可保持一个(APB2)或多个周期(APB3,增加了握手信号pready),即penable信号可以拉高一个或多个周期。
2. 读写传输
问题:1. APB读写传输时,psel是否可以一直拉高?
2. APB读写传输时,penable是否可以一直拉高?
3. 连续传输数据?(AXI/AHB burst to APB?)
4. 是否可以在ENABLE阶段进行多次连续传输?(地址/数据/读写可变?)
(1). SETUP阶段开始上升沿address,write,和 wdata可以改变,ENABLE阶段这些信号须保持稳定
(2). penable在transfer结束后拉低。(表明penable不能在不同transfer之间一直拉高)
(3). psel 可以在不同transfer之间一直拉高(须在同一slave设备,如连续读写)。跨slave时,psel须与penable同时拉低进入IDLE阶段。
(4). 读传输与写传输基本一致,需要注意的是,slave须在ENABLE阶段提供读数据rdata。
以上协议表明:
(1) APB在数据传输时,psel可以一直拉高,如对同一slave的连续读写;而penable在transfer结束后拉低,说明penable不能在不同transfer之间一直拉高。换句话说,APB连续数据传输时,有两种方式:
①IDLE→SETUP→ENABLE→IDLE→SETUP→ENABLE。。。
②IDLE→SETUP→ENABLE→SETUP→ENABLE。。。。(psel持续拉高)
(2) 同样地,也不可以在ENABLE阶段进行多次数据传输,因为每次数据传输结束后penable拉低(即使可以,地址/数据等一些信号在ENABLE阶段是要求稳定的,相当于重复操作数据传输,没意义)
3 AHB to APB(写)
列举一些APB连续数据传输的场景:AHB burst传输转到APB传输
由于AHB是流水线传输,APB传输没有流水线概念,因此AHB需要hready反压AHB的master以延长传输周期来匹配APB的传输周期。
AHB burst传输的第一笔写transfer(addr1)不需要hready反压master,因为ABP在SETUP阶段就需要准备好addr,wdata等信号,所以需要等待AHB把addr,wdata准备好才行,而AHB流水线传输的第一笔transfer并没有起到流水作用(第一笔传输的信号需要两个周期才能准备好:地址阶段,数据阶段),因此,APB须在T3 clk开始进入SETUP阶段。
而余下的transfer需要hready反压master(AHB),是由于AHB的流水线传输起作用了,即一个周期可以获得addr和wdata信号(如,data2在T5时刻获得,而addr2早在T3时刻以获得),而APB需要经过SETUP和ENABLE两个阶段(如图,2个周期)才能把数据传输出去,因此需要AHB和APB保持传输周期一致,AHB需要hready反压。
很明显,APB连续写的情况下,psel一直拉高,而penable没有一直拉高
4 AHB to APB(读)
列举一些APB连续数据传输的场景:AHB burst传输转到APB传输
AHB burst 读传输转APB传输,与AHB burst 写传输基本一致,唯一不同点是读第一笔transfer需要等待一个周期,因为读数据只需要准备地址信号就可以,APB在T2时刻就可以采样到addr1的信号,由于APB在ENABLE阶段把addr1送出去,因此第一笔transfer需要等待一个周期。
5 AHB to APB(读写连续)
1. T1时刻,AHB发送写地址addr1,APB要把写传输发送出去需要等待data1才可以,因此APB在T3时刻收到AHB发出的data1,APB在T3时刻有了addr1和data1并进入SETUP阶段,在T5时刻APB才将T1时刻发送的写传输执行完毕。
2. APB在T5时刻执行完addr1的写传输后并立即执行addr2的读传输,T7时刻APB将读data2传送给AHB master,至此,读传输执行完毕。hready也进行了相对应的反压。
3. APB的psel在T7~T8时刻拉低是由于APB需要等待一个周期,在T8时刻才能采样到addr3的写数据data3,并进入SETUP阶段。(需要注意的是,协议中介绍,SETUP阶段只保持一个周期,就进入ENABLE阶段)