AMBA总线(1)—— APB手册翻译

发布时间 2023-04-01 19:51:10作者: 咸鱼FPGA

APB是最简单的AMBA总线了,它多用于低速外围设备。相比AHB和AXI,有两个很不一样的点:

  • 不能outstanding传输,数据有效时,其地址必然是当前数据的对应地址。
  • 不能流水线式传输,必须至少2个周期传输一个数据,PSEL起来然后PENABLE起来。

1 前言

1.2 APB 版本

1998年发布的APB Specification Rev E现已过时,并被以下三个修订版所取代:

  • AMBA2 APB Specification(即所谓APB2)
  • AMBA3 APB Protocol Specification v1.0(即所谓APB3)
  • AMBA APB Protocol Specification v2.0(即所谓APB4)

1.2.1 AMBA2 APB Specification(APB2)

AMBA2 APB 规范详见AMBA2 APB Specification Rev2(ARM IHI 0011A)

该规范定义了接口信号、基本的读写传输以及APB的两个组件APB bridge和APB slave。

规范的这个版本被称为APB2。

1.2.2 AMBA3 APB Protocol Specification v1.0(APB3)

AMBA3 APB Protocol Specification v1.0定义了以下附加功能:

  • 等待状态。参见Transfers
  • 错误报告。参见Error response

以下接口信号支持此功能:

  • PREADY 准备就绪的信号,表示APB传输完成。
  • PSLVERR 传输失败的错误信号。

规范的这个版本被称为APB3。

1.2.3 AMBA APB Protocol Specification v2.0(APB4)

AMBA APB Protocol Specification v2.0定义了以下附加功能:

  • 事务的保护。参见Protection unit support
  • 稀疏数据传输。参见Write strobes

以下接口信号支持此功能:

  • PPROT 一种保护信号,用于支持非安全事务和安全事务。
  • PSTRB 一种写掩码信号,用于在写数据总线上实现稀疏数据传输。

规范的这个版本被称为APB4。

2 APB信号

信号

来源

解释

PCLK

系统

Clock。APB的所有传输在PCLK的上升沿有效。

PRESETn

系统

Reset。低有效,通常直接连接到系统总线的复位信号。

PADDR

Master

Address。可以达到32位宽,并由Master驱动。

PPROT

Master

Protection。指示事务的normal、privileged或secure protection级别,以及该事务是数据访问还是指令访问。

PSELx

Master

Select。Master向每个Slave生成此信号,表示选择Slave进行数据传输。每个Slave都有一个PSELx信号。

PENABLE

Master

Enable。指示APB传输的第二以及之后的周期。

PWRITE

Master

Direction。

1:表示写传输。

0:表示读传输。

PWDATA

Master

Write data。PWRITE为1时,该信号被Master在写传输周期驱动。可以达到32位宽。

PSTRB

Master

Write strobs。指示在写传输期间要更新哪个字节通道。写数据总线的每8位有一个PSTRB。因此PSTRB[n]对应PWDATA[(8n + 7):(8n)]。在读传输期间,PSTRB不能处于活动状态。

PREADY

Slave

Ready。Slave用此信号来扩展APB传输。

PRDATA

Slave

Ready data。PWRITE为0时,该信号被Slave在读传输周期驱动。可以达到32位宽

PSLVERR

Slave

此信号表示传输失败。APB外设不需要支持PSLVERR引脚。现有和新的APB外围设计都是如此。如果外设不包括这个引脚,那么Slave端直接tie 0。

2.1 数据总线

  • APB协议有两个独立的数据总线,一个用于读取数据,一个用于写入数据。
  • 总线可以达到32位宽。
  • 由于总线没有各自的握手信号,因此数据传输不可能同时发生在两个总线上。

3 APB传输

3.1 写传输

介绍写传输的几种类型:

  • 没有等待状态。
  • 具有等待状态。

3.1.1 没有等待状态

图3-1表示没有等待传输的基本写传输。

3 APB传输

3.1 写传输

介绍写传输的几种类型:

  • 没有等待状态。
  • 具有等待状态。

3.1.1 没有等待状态

图3-1表示没有等待传输的基本写传输。

T1时,写传输开始于地址PADDR、写数据PWDATA、写信号PWRITE、选择信号PSEL,寄存在PCLK上升沿。这称为写传输的起始阶段。

T2时,使能信号PENABLE和准备信号PREADY寄存在PCLK上升沿。

当断言时,PENABLE表示传输的访问阶段的开始。

当断言时,PREADY表示Slave可以在PCLK的下一个上升边完成传输。

地址PADDR、写数据PWDATA和控制信号都保持有效,直到传输在访问阶段的T3完成结束。

使能信号PENABLE在传输结束时被撤销。

选择信号PSEL也被去断言,除非在此传输之后立即有另一个传输到同一Slave。

下图给出了burst写的例子:

3.1.2 具有等待状态

图3-2在显示了如何在访问阶段使用PREADY信号扩展传输。当PENABLE为高,而Slave驱动PREADY为低时扩展传输。其他信号保持不变,而PREADY保持低。

当PENABLE为低时,PREADY可以取任何值。这确保了具有固定两个周期访问的外围设备可以让PREADY tie1。 —— 注意 ————

建议地址和写信号在传输后不要立即改变,而是保持稳定,直到发生另一次访问。这能降低功耗。

3.2 写掩码

写掩码信号PSTRB在写数据总线上实现稀疏数据传输。

每个写掩码信号对应于写数据总线的一个字节。当断言为高时,写掩码指示写数据总线的相应字节通道包含有效信息。写数据总线的每8位都有一个写掩码,因此PSTRB[n]对应于PWDATA[(8n +7):(8n)]。

在32位数据总线上,这种关系如图3-3所示。

——注意——

读传输时,Master必须驱动PSTRB的所有位为低。

3.3 读传输

本节介绍两种类型的读传输:

  • 没有等待状态。
  • 具有等待状态。

3.3.1 没有等待状态

如图3-4所示。地址、写、选择和使能信号的时序和前文<写传输>中描述的一样。

Slave必须在读传输结束之前提供数据。

下图给出了burst读的例子。

3.3.2 具有等待状态

图3-5显示了PREADY信号如何扩展传输。如果PREADY在访问阶段被驱动为低,则传输将被扩展。

该协议确保其他信号在额外的周期内保持不变。

图3-5显示了使用PREADY信号添加两个周期。然而,你可以添加从0开始的任何数量的额外周期。

3.4 错误响应

可以使用PSLVERR指示APB传输上的错误条件。读和写事务都可能发生错误。

当PSEL、PENABLE和PREADY均为高时,PSLVERR仅在APB传输的最后一个周期中被认为有效。

建议(但非强制)在当PSEL、PENABLE或PREADY中的任何一个为低时,即未进行采样时驱动PSLVERR为低。

接收到错误事务可能(也可能没有)改变了Slave的状态,这是特定于外围设备的,两者都是可以接受的。当写事务收到一个错误时,这并不意味着外围设备中的寄存器没有更新。接收到错误读事务可能返回无效数据,但没有要求Slave要驱动data总线为全0。

APB外设不需要支持PSLVERR引脚,现有的和新的APB外围设计都是如此。如果外设没有这个引脚,那么Slave的合适输入为Tie 0。

3.4.1 写传输

图3-6给出了一个写传输失败并报错的例子。

3.4.2 读传输

读传输也可以在错误响应后完成,这表明没有有效的读数据可用。

如图3-7所示,读传输完成后出现错误响应。

3.4.3 PSLAVERR映射

当桥接时:

从AXI到APBPSLVERR被映射回RRESP/BRESP =SLVERR。这是通过将PSLVERR映射到用于读取的AXI信号的RRESP[1](对于读)和BRESP[1](对于写)来实现的。

从AHB到APBPSLVERR被映射回HRESP = ERROR(对于读和写)。这是通过将PSLVERR映射到AHB信号的HRESP[0]来实现的。

T1时,写传输开始于地址PADDR、写数据PWDATA、写信号PWRITE、选择信号PSEL,寄存在PCLK上升沿。这称为写传输的起始阶段。

T2时,使能信号PENABLE和准备信号PREADY寄存在PCLK上升沿。

当断言时,PENABLE表示传输的访问阶段的开始。

当断言时,PREADY表示Slave可以在PCLK的下一个上升边完成传输。

地址PADDR、写数据PWDATA和控制信号都保持有效,直到传输在访问阶段的T3完成结束。

使能信号PENABLE在传输结束时被撤销。

选择信号PSEL也被去断言,除非在此传输之后立即有另一个传输到同一Slave。

下图给出了burst写的例子:

3.1.2 具有等待状态

图3-2在显示了如何在访问阶段使用PREADY信号扩展传输。当PENABLE为高,而Slave驱动PREADY为低时扩展传输。其他信号保持不变,而PREADY保持低。

当PENABLE为低时,PREADY可以取任何值。这确保了具有固定两个周期访问的外围设备可以让PREADY tie1。 —— 注意 ————

建议地址和写信号在传输后不要立即改变,而是保持稳定,直到发生另一次访问。这能降低功耗。

3.2 写掩码

写掩码信号PSTRB在写数据总线上实现稀疏数据传输。

每个写掩码信号对应于写数据总线的一个字节。当断言为高时,写掩码指示写数据总线的相应字节通道包含有效信息。写数据总线的每8位都有一个写掩码,因此PSTRB[n]对应于PWDATA[(8n +7):(8n)]。

在32位数据总线上,这种关系如图3-3所示。

——注意——

读传输时,Master必须驱动PSTRB的所有位为低。

3.3 读传输

本节介绍两种类型的读传输:

  • 没有等待状态。
  • 具有等待状态。

3.3.1 没有等待状态

如图3-4所示。地址、写、选择和使能信号的时序和前文<写传输>中描述的一样。

Slave必须在读传输结束之前提供数据。

下图给出了burst读的例子。

3.3.2 具有等待状态

图3-5显示了PREADY信号如何扩展传输。如果PREADY在访问阶段被驱动为低,则传输将被扩展。

该协议确保其他信号在额外的周期内保持不变。

图3-5显示了使用PREADY信号添加两个周期。然而,你可以添加从0开始的任何数量的额外周期。

3.4 错误响应

可以使用PSLVERR指示APB传输上的错误条件。读和写事务都可能发生错误。

当PSEL、PENABLE和PREADY均为高时,PSLVERR仅在APB传输的最后一个周期中被认为有效。

建议(但非强制)在当PSEL、PENABLE或PREADY中的任何一个为低时,即未进行采样时驱动PSLVERR为低。

接收到错误事务可能(也可能没有)改变了Slave的状态,这是特定于外围设备的,两者都是可以接受的。当写事务收到一个错误时,这并不意味着外围设备中的寄存器没有更新。接收到错误读事务可能返回无效数据,但没有要求Slave要驱动data总线为全0。

APB外设不需要支持PSLVERR引脚,现有的和新的APB外围设计都是如此。如果外设没有这个引脚,那么Slave的合适输入为Tie 0。

3.4.1 写传输

图3-6给出了一个写传输失败并报错的例子。

3.4.2 读传输

读传输也可以在错误响应后完成,这表明没有有效的读数据可用。

如图3-7所示,读传输完成后出现错误响应。

3.4.3 PSLAVERR映射

当桥接时:

从AXI到APBPSLVERR被映射回RRESP/BRESP =SLVERR。这是通过将PSLVERR映射到用于读取的AXI信号的RRESP[1](对于读)和BRESP[1](对于写)来实现的。

从AHB到APBPSLVERR被映射回HRESP = ERROR(对于读和写)。这是通过将PSLVERR映射到AHB信号的HRESP[0]来实现的。