APB是AMBA总线体系中的一员,因其具备低功耗、接口和控制简单的特点,广泛被运用于低带宽和不带总线的高性能外设接口,ASIC芯片中寄存器访问。
APB的传输信号只与时钟上升沿有关,故其具备以下优点:
在ASIC设计中,APB作为系统中的从机,与系统中的主总线通过Bridge(AHB to APB 或 AXI to APB)连接,APB从机包含以下接口规则:
AMBA系统设计框图如下,其中AHB/ASB为系统中的main bus,而APB为次级bus,且AHB/ASB与APB通过BRIDGE进行桥接,APB适用于低带宽、低功耗的数据传输。
Bridge就是为了适配AHB和APB的读写操作,如果CPU需要访问UART接口,则先通过AHB总线发出读写指令,然后Bridge转成适配APB指令对UART进行读写transfer。
名字 |
描述 |
PCLK |
系统时钟。 |
PRESETn |
复位,低电平有效。 |
PADDR[31:0] |
地址,32bit。 |
PSELx |
Slave选中信号。 |
PENABLE |
APB transfer使能信号。 |
PWRITE |
1、写操作; 0、读操作。 |
PRDATA |
读数据,32bit。 |
PWDATA |
写数据,32bit。 |
图2
APB连接3个外设,分别是UART、Timers和Int Cont。APB地址空间为0xc000_0000 ~ 0xcfff_ffff,而外设的地址空间分别为0xc300_0000 ~ 0xcfff_ffff、0xc100_0000 ~ 0xc2ff_ffff和0xc000_0000 ~ 0xc000_ffff。
APB的传输状态图由PSELx和PENABLE构成,状态:IDLE、SETUP、ENABLE,APB的访问延迟为2个clk。
注意:
总结:
PWRITE=1时,写操作。T3时刻准备稳定的data和addr。
PWRITE=0时,读操作。T3时刻准备稳定的addr,T4时刻采取有效数据。
APB Bridge实现AHB到APB的时序转换,系统框图如下:
注:读操作,每次3个clk。
AHB:HWRITE=0,ddr1有效,HREADY=1指示上一次有效操作;
APB:PSEL=0,PENABLE=0,state=IDLE。
AHB:HWRITE=0,addr2有效,HREADY=0指示addr1操作未生效;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR 1-> PADDR1。
AHB:HWRITE=0,addr2有效,HREADY=1指示addr1操作生效,PRDATA1 -> HRDATA1;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA1。
AHB:HWRITE=0,addr3有效,HREADY=0指示addr2操作未生效;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR2 -> PADDR2。
AHB:HWRITE=0,addr3有效,HREADY=1指示addr2操作生效,PRDATA2 -> HRDATA2;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA2。
AHB:HWRITE=0,addr4有效,HREADY=0指示addr3操作未生效;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR3 -> PADDR3。
AHB:HWRITE=0,addr4有效,HREADY=1指示addr3操作生效,PRDATA3 -> HRDATA3;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA3。
AHB:HWRITE=0,HREADY=0指示addr4操作未生效;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR4 -> PADDR4。
AHB:HWRITE=0,HREADY=1指示addr4操作生效,PRDATA4 -> HRDATA4;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA4。
注:单次写操作,4个clk;Burst写操作n,4*n-2个clk。
AHB:HWRITE=1,ddr1有效,HREADY=1指示上一次有效操作;
APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。
AHB:HWRITE=1,addr2有效,HREADY=1指示addr1操作生效,准备HWDATA1/HADDR1;
APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。
AHB:HWRITE=1,addr3有效,HREADY=0指示addr2操作未生效;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 1-> PADDR1、HWDATA1 -> PWDATA1。
AHB:HWRITE=1,addr3有效,HREADY=1指示addr2操作生效,准备HWDATA2/HADDR2;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA1。
AHB:HWRITE=1,addr4有效,HREADY=0指示addr3操作未生效;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 2-> PADDR2、HWDATA2 -> PWDATA2。
AHB:HWRITE=1,addr4有效,HREADY=1指示addr3操作生效,准备HWDATA3/HADDR3;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA2。
AHB:HWRITE=1,addrx有效,HREADY=0指示addr4操作未生效;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 3-> PADDR3、HWDATA3 -> PWDATA3。
AHB:HWRITE=1,addrx有效,HREADY=1指示addr4操作生效,准备HWDATA4/HADDR4;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA3。
AHB:HWRITE=1,addrx有效,HREADY=x,无操作;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 4-> PADDR4、HWDATA4 -> PWDATA4。
AHB:HWRITE=1,addrx有效,HREADY=x,无操作;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA4。
AHB:HWRITE=1,ddr1写有效,HREADY=1指示上一次有效操作,准备HADDR1;
APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。
AHB:HWRITE=0,ddr2读有效,HREADY=1指示addr1操作有效,准备HWDATA1、HADDR2;
APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。
AHB:HWRITE=1,addr3写有效,HREADY=0指示addr2操作未生效,准备HADDR3;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 1-> PADDR1、HWDATA1 -> PWDATA1
AHB:HWRITE=1,addr3写有效,HREADY=0指示addr2操作未生效;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA1。
AHB:HWRITE=1,addr3写有效,HREADY=0指示addr2操作未生效;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR 2-> PADDR2
AHB:HWRITE=0,addr3写有效,HREADY=1指示addr2读操作生效,读取HRDATA2;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读取数据PRDATA2。
AHB:HWRITE=0,addr4读有效,HREADY=1指示addr3写操作生效,准备HRDATA3;
APB:PWRITE=0,PSEL=0,PENABLE=0,state=IDLE。
AHB:HWRITE=x,addrx有效,HREADY=x无操作;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 3-> PADDR3、HWDATA3 -> PWDATA3。
AHB:HWRITE=x,addrx有效,HREADY=x无操作;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PRDATA3。
AHB:HWRITE=x,addrx有效,HREADY=x无操作;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR 4-> PADDR4。
AHB:HWRITE=x,addrx有效,HREADY=x无操作,读取PRDATA4;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读取数据PRDATA4。
APB协议作为系统中的次级bus,原理简单且不支持pipeline操作,每次读写操作都是SETUP和ENABLE状态的切换,故其读写操作均消耗2个clk。APB与主bus(AHB)通过bridge互联,如果主bus支持pipeline操作且需访问APB设备,访问效率随着APB的处理而降低。在bridge设计中,pipeline写比单次写少2个clk,而pipeline读缺没有变化。