文章目录[隐藏]
1、APB简介
APB是AMBA总线体系中的一员,因其具备低功耗、接口和控制简单的特点,广泛被运用于低带宽和不带总线的高性能外设接口,ASIC芯片中寄存器访问。
APB的传输信号只与时钟上升沿有关,故其具备以下优点:
- 易于实现高频操作;
- 性能与时钟占空比无关;
- 静态时序分析简单;
- 易于与基于上升沿的寄存器访问;
- 易于集成到基于周期的仿真器中。
在ASIC设计中,APB作为系统中的从机,与系统中的主总线通过Bridge(AHB to APB 或 AXI to APB)连接,APB从机包含以下接口规则:
- 整个访问中地址和控制信号有效(不分通道);
- 当无外设总线活动时接口功耗为零(外设总线不适用时为静态);
- 通过选通脉冲时序译码产生时序(无时钟接口);
- 整个访问过程中写数据有效(允许无毛刺透明锁存工具)。
2、APB基本原理
AMBA系统设计框图如下,其中AHB/ASB为系统中的main bus,而APB为次级bus,且AHB/ASB与APB通过BRIDGE进行桥接,APB适用于低带宽、低功耗的数据传输。
Bridge就是为了适配AHB和APB的读写操作,如果CPU需要访问UART接口,则先通过AHB总线发出读写指令,然后Bridge转成适配APB指令对UART进行读写transfer。
2.1、APB信号
名字 |
描述 |
PCLK |
系统时钟。 |
PRESETn |
复位,低电平有效。 |
PADDR[31:0] |
地址,32bit。 |
PSELx |
Slave选中信号。 |
PENABLE |
APB transfer使能信号。 |
PWRITE |
1、写操作; 0、读操作。 |
PRDATA |
读数据,32bit。 |
PWDATA |
写数据,32bit。 |
2.2、APB地址空间
图2
APB连接3个外设,分别是UART、Timers和Int Cont。APB地址空间为0xc000_0000 ~ 0xcfff_ffff,而外设的地址空间分别为0xc300_0000 ~ 0xcfff_ffff、0xc100_0000 ~ 0xc2ff_ffff和0xc000_0000 ~ 0xc000_ffff。
2.3、Transfer
2.3.1、传输状态图
APB的传输状态图由PSELx和PENABLE构成,状态:IDLE、SETUP、ENABLE,APB的访问延迟为2个clk。
注意:
- SETUP、ENABLE状态仅保持1个clk;
- 完成一次操作后,PENABLE必须置0;
- 若后续没有操作,PSELx置0,否则置1。
总结:
- 为了保证ENABLE采样的addr、data以及select是stale status,故需要两拍操作;
- ENABLE to SETUP时,允许addr、data、select存在glith,因为只有在ENABLE状态才会采样;
- PSELx必须早PENABLE一拍。
2.3.2、Write Transfer
PWRITE=1时,写操作。T3时刻准备稳定的data和addr。
- T2时刻,PSEL=0,PENABLE=0,state=IDLE,总线无操作;
- T3时刻,PSEL=1,PENABLE=0,state=SETUP,总线提供addr和data,供下一拍采样;
- T4时刻,PSEL=1,PENABLE=1,state=ENABLE,采样有效addr和data;
- T5时刻,PSEL=0,PENABLE=0,state=IDLE,总线空闲。
2.3.3、Read Transfer
PWRITE=0时,读操作。T3时刻准备稳定的addr,T4时刻采取有效数据。
- T2时刻,PSEL=0,PENABLE=0,state=IDLE,总线无操作;
- T3时刻,PSEL=1,PENABLE=0,state=SETUP,总线提供addr和data,供下一拍采样;
- T4时刻,PSEL=1,PENABLE=1,state=ENABLE,采样有效addr和data;
- T5时刻,PSEL=0,PENABLE=0,state=IDLE,总线空闲。
3、APB Bridge
APB Bridge实现AHB到APB的时序转换,系统框图如下:
- 锁存地址并将其有效传输;
- 解析地址产生PSELx,且PSELx只有一个有效;
- 将数据传输到APB总线上;
- 产生定时strobe、PENABLE。
3.1、Read Transfer
注:读操作,每次3个clk。
- T2时刻:
AHB:HWRITE=0,ddr1有效,HREADY=1指示上一次有效操作;
APB:PSEL=0,PENABLE=0,state=IDLE。
- T3时刻:
AHB:HWRITE=0,addr2有效,HREADY=0指示addr1操作未生效;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR 1-> PADDR1。
- T4时刻:
AHB:HWRITE=0,addr2有效,HREADY=1指示addr1操作生效,PRDATA1 -> HRDATA1;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA1。
- T5时刻:
AHB:HWRITE=0,addr3有效,HREADY=0指示addr2操作未生效;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR2 -> PADDR2。
- T6时刻:
AHB:HWRITE=0,addr3有效,HREADY=1指示addr2操作生效,PRDATA2 -> HRDATA2;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA2。
- T7时刻:
AHB:HWRITE=0,addr4有效,HREADY=0指示addr3操作未生效;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR3 -> PADDR3。
- T8时刻:
AHB:HWRITE=0,addr4有效,HREADY=1指示addr3操作生效,PRDATA3 -> HRDATA3;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA3。
- T9时刻:
AHB:HWRITE=0,HREADY=0指示addr4操作未生效;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR4 -> PADDR4。
- T10时刻:
AHB:HWRITE=0,HREADY=1指示addr4操作生效,PRDATA4 -> HRDATA4;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA4。
3.2、Write Transfer
注:单次写操作,4个clk;Burst写操作n,4*n-2个clk。
- T2时刻:
AHB:HWRITE=1,ddr1有效,HREADY=1指示上一次有效操作;
APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。
- T3时刻:
AHB:HWRITE=1,addr2有效,HREADY=1指示addr1操作生效,准备HWDATA1/HADDR1;
APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。
- T4时刻:
AHB:HWRITE=1,addr3有效,HREADY=0指示addr2操作未生效;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 1-> PADDR1、HWDATA1 -> PWDATA1。
- T5时刻:
AHB:HWRITE=1,addr3有效,HREADY=1指示addr2操作生效,准备HWDATA2/HADDR2;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA1。
- T6时刻:
AHB:HWRITE=1,addr4有效,HREADY=0指示addr3操作未生效;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 2-> PADDR2、HWDATA2 -> PWDATA2。
- T7时刻:
AHB:HWRITE=1,addr4有效,HREADY=1指示addr3操作生效,准备HWDATA3/HADDR3;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA2。
- T8时刻:
AHB:HWRITE=1,addrx有效,HREADY=0指示addr4操作未生效;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 3-> PADDR3、HWDATA3 -> PWDATA3。
- T9时刻:
AHB:HWRITE=1,addrx有效,HREADY=1指示addr4操作生效,准备HWDATA4/HADDR4;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA3。
- T10时刻:
AHB:HWRITE=1,addrx有效,HREADY=x,无操作;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 4-> PADDR4、HWDATA4 -> PWDATA4。
- T11时刻:
AHB:HWRITE=1,addrx有效,HREADY=x,无操作;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA4。
3.3、Back to Back Transfer
- T2时刻:
AHB:HWRITE=1,ddr1写有效,HREADY=1指示上一次有效操作,准备HADDR1;
APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。
- T3时刻:
AHB:HWRITE=0,ddr2读有效,HREADY=1指示addr1操作有效,准备HWDATA1、HADDR2;
APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。
- T4时刻:
AHB:HWRITE=1,addr3写有效,HREADY=0指示addr2操作未生效,准备HADDR3;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 1-> PADDR1、HWDATA1 -> PWDATA1
- T5时刻:
AHB:HWRITE=1,addr3写有效,HREADY=0指示addr2操作未生效;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA1。
- T6时刻:
AHB:HWRITE=1,addr3写有效,HREADY=0指示addr2操作未生效;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR 2-> PADDR2
- T7时刻:
AHB:HWRITE=0,addr3写有效,HREADY=1指示addr2读操作生效,读取HRDATA2;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读取数据PRDATA2。
- T8时刻:
AHB:HWRITE=0,addr4读有效,HREADY=1指示addr3写操作生效,准备HRDATA3;
APB:PWRITE=0,PSEL=0,PENABLE=0,state=IDLE。
- T9时刻:
AHB:HWRITE=x,addrx有效,HREADY=x无操作;
APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 3-> PADDR3、HWDATA3 -> PWDATA3。
- T10时刻:
AHB:HWRITE=x,addrx有效,HREADY=x无操作;
APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PRDATA3。
- T11时刻:
AHB:HWRITE=x,addrx有效,HREADY=x无操作;
APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR 4-> PADDR4。
- T12时刻:
AHB:HWRITE=x,addrx有效,HREADY=x无操作,读取PRDATA4;
APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读取数据PRDATA4。
4、总结
APB协议作为系统中的次级bus,原理简单且不支持pipeline操作,每次读写操作都是SETUP和ENABLE状态的切换,故其读写操作均消耗2个clk。APB与主bus(AHB)通过bridge互联,如果主bus支持pipeline操作且需访问APB设备,访问效率随着APB的处理而降低。在bridge设计中,pipeline写比单次写少2个clk,而pipeline读缺没有变化。
版权声明:本文为CSDN博主「威龙王子_2021」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hu491199877/article/details/121749629
暂无评论