目录

  • 1. 功能介绍
  • 2. 架构
  • 3. 时序
    • 3.1. 写传输
      • ACCESS phase 多于一个周期
      • 写入选通 Requester.PSTRB
      • 写错误 Completer.PSLVERR
    • 3.2. 读传输
      • 读错误 Completer.PSLVERR
  • 4. 接口设计

主要是对APB总线进行介绍

《IHI0024D_amba_apb5_protocol_spec》
APB总线协议
AHB APB 简单通讯架构 代码 APB_Bridge
APB桥时序
设计AHB2APB同步桥

1. 功能介绍

APB协议是一种低成本的接口,优化了功耗和接口复杂度。APB接口不是流水线操作,它是一个简单的同步协议,至少需要两个周期才能完成读或写,控制逻辑简单。

通信为一主多从模式,其中Slave 主要为在低带宽、低速、低功率的外设,例如UART、I2C,可针对外围设备作功率消耗及复杂接口的最佳化。

而Master经常是与高级高性能总线(Advanced High-performance Bus, AHB)构成的AHB2APB桥接器,而AHB又可连接多个aph master,如下图所示

也可将多个APB外设连接到高级可拓展接口(Advanced eXtensible Interface, AXI)内存系统。

2. 架构

APB常见接口如下

Source Signal Width(bits) Description
CLOCKPCLK1时钟
System bus resetPRESETn1低电平复位
Source Signal Width(bits) Description
MasterPADDRADDR_WIDTH最大32bit。允许非对齐地址,但结果不可预知
PSELx1拉高表示标号x的Completer被选中,要与其进行数据传输
PENABLE1表明进入APB的ENABLE状态,开始数据传输
PWRITE1高表示写,低表示读
PWDATADATA_WIDTH由APB桥接器Requester发起,可为8、16、32bits
PSTRBDATA_WIDTH/8表明PWDATA中哪个byte有效,用于稀疏传输
Source Signal Width(bits) Description
SlavePREADY1可延长APB传输的clk拍数
PRDATADATA_WIDTH可为8、16、32bits
PSLVERR1表明传输出现错误

参数描述

Parameter Units Description
ADDR_WIDTHbit地址宽度
DATA_WIDTHbit数据宽度

3. 时序

APB就已经给出每次传输的状态机,APB将传输过程分为了3个状态,IDLE、SETUP和ACCESS,如下图所示


IDLE:默认状态

SETUP:当requester需要数据传输时,会驱动某个Completer对应的PSELx拉高,PENABLE置0。且SETUP状态只持续一拍,下一拍必进入ACCESS状态

ACCESS:会驱动PENABLE拉高,注意要从SETUP到ACCESS的转换时保证以下信号不会发生变化

PADDR, PPROT, PWRITE, PWDATA, PSTRB,PAUSER, PWUSER

之后会采样Completer.PREAEDY信号,如果PREADY为低,则ACCESS状态持续一拍。 PREADY拉高,若Requester传送数据则再次进入SETUP状态,否则回到IDLE

详细时序可以看下节读写时序

3.1. 写传输

如下图所示,posedge PCLK为采样时刻,并画出驱动时刻与posedge PCLK之间的delta cycle


T0~T1:IDLE状态

T1~T2:为SETUP phase。T1时刻,requester要写数据,因此分别驱动了PADDR、PWDATA、PWRITE拉高、选择的completer对应的PSEL拉高、PENABLE拉低(表示下一拍实施写入)

T2~T3:为ACCESS phase。T2时刻,requester采集到有PSEL拉高、PENABLE拉低,因此驱动PENABLE拉高,表示该数据有效。

个人猜测这个PENABLE就类似于常说与data一起传输的valid信号,completer检测到PENABLE为高才认为PDATA数据有效

注意T2时刻,completer会采样到自己的PSEL拉高了,就明白requester要给自己写数据了,因此驱动PREADY拉高

T3~T4:退出ACCESS phase。T3时刻,requester采样到PREADY拉高知道completer可以接受数据,同时completer采样到PADDR、PDATA和PENABLE,将数据写入自身。

ACCESS phase 多于一个周期

ACCESS phase可能不会只持续一个周期,这个取决于completer的PREADY信号,如下图

T2~T3:依然为SETUP phase。T2时刻,completer采集到PSEL拉高了但自己并不能接收数据,就会使PREADY拉低而不是拉高。

此时requester就会一直等待completer的PREADY信号,此时以下信号将保持不变

PADDR, PPROT, PWRITE, PWDATA, PSTRB, PAUSER, PWUSER, PSELx, PENABLE, PAUSER, PWUSER

T4~T5:直到T4时刻completer才拉高PREADY

T5~T6:为ACCESS phase。T5时刻完成数据写入

写入选通 Requester.PSTRB

使用PSTRB对PWDATA的数据进行选通,即决定PWDATA中哪个byte能被写入。

注意到PSTRB的大小是PWDATA大小/8,所以PSTRB[n] == 1 则代表 PWDATA[(8n+7):8n]的数据有效,看图

读传输时,PSTRB必须全位拉低

写错误 Completer.PSLVERR

表示completer认为写传输错误,注意并不是写入之后completer才反馈写错误。

看时序图

T3~T4:T3时刻,completer可以接受数据,驱动PREADY。但是T3时刻,completer可能是采集PADDR、PWDATA等信号出现问题,所以认为写传输有错故驱动PSLVERR为高

T4~T5:T4时刻,requester采样到PENABLE、PSEL和PREADY均拉高,此时才会查看PSLVERR的值,发现其为高,知道写传输出错。

注意PSLVERR只是一个信号,至于completer如何针对该信号进行处理取决于它的内部逻辑

3.2. 读传输

读传输与写传输的时序类似,不多赘述

completer的PREADY拉低的情况

读错误 Completer.PSLVERR

读传输也可能出现错误,表明无可读数据

4. 接口设计

APB Slave端的RTL设计,包括寄存器读写、指令传输、FIFO读写