【数字ic自整资料】AMBA总线总结(APB、AHB、AXI)

参考资料:

(1)AHB协议学习-CSDN博客

(2)APB总线协议-CSDN博客

(3)AXI协议详解(4)-突发传输_axi突发长度-CSDN博客

1、发展历史

        华为实习笔试的时候有遇到这个方面的问题,几个比较重要的时间线是:

        (1)AMBA1发布了APB和ASB(Advanced System Bus),ASB是AHB的前身,后因为太复杂而不再使用,所以讲到AMBA总线的时候没有太多提到它。

        (2)AMBA2发布了AHB,并更新了APB,值得一提的是,APB基本上在之后所有版本更新中都被更新了,确实还是有其不可替代的点的。

        (3)AMBA3发布了AXI,也就是我们目前未知基本上在FPGA或者IC设计中最最常见的总线协议。

        (4)AMBA4和5分别发布了ACE和CHI,其中,ACE是AXI的一种衍生总线,CHI全称是“相干集线器接口”,这两个我目前来说,基本上没用到过,也没有特地准备这个知识点,只需要知道他们俩也属于AMBA总线就可以了(希望别有面试官问我这个)。

        本文主要就APB、AHB、AXI展开讲讲记录一下我觉得重要的资料。

2、APB

        APB全称是(Advanced Peripheral Bus),即高级外设总线,它是最低带宽的总线协议,主要用处是为了支持低速外围设备,在低功耗和低复杂性方面做了特定的优化,不支持burst突发传输。它最主要的一个特点就是读写操作都至少需要2个周期,可以由一个状态转换图来表示:

        这里有两个重要信号,PSELx和PENABLE,当主机发送读/写指令的时候,就会自动进入到setup阶段,PSELx=1,然后第二个周期自动进入access阶段,PENABLE=1,表示数据读出/写入。

        一次数据操作完成后,如果下一次传输紧接着来了,就会回到setup阶段,否则回到IDLE阶段等待。

        值得一提的是,在AMBA 3中,APB协议更新了两个信号,PREADY和PSLVERR,其中PREADY表示从机是否准备好,如果没有准备好,则状态机需要一直保持在access状态中;而PSLVERR信号则是表示本次操作请求失败,但是不常用。如果本次操作请求失败,需要把PREADY和PSLVERR同时拉高。我的理解是,如果主机发送请求之后超过了多少个周期从机还没有准备好的话,即可认为这次请求失败。

        APB中信号汇总:

信号

来源

介绍

PCLK

System

时钟

PRESETn

System

复位

PADDR

Master

一般为32bit,读/写地址

PSELx

Master

状态机控制信号

PENABLE

Master

状态机控制信号

PWRITE

Master

0:读操作

1:写操作

PWDATA

Master

一般为32bit,写数据

PRDATA

Slave

一般为32bit,读数据

PREADY

Slave

从机是否准备好信号

PSLVERR

Slave

本次请求失败信号

        其他关于APB好像也没有什么要讲的了,这个协议最重要的就是它的工作不是流水进行的,一次传输固定要消耗两个时钟周期,简单,用于低速外设。

3、AHB协议

        AHB全称是(Advanced High-performance Bus),即高级高性能总线。它可以将微控制器(CPU)、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线控制器,以及各种AHB接口的控制器等连接起来构成一个独立的完整SOC系统,还可以通过AHB-APB桥来连接APB总线系统。相比于APB协议来说,AHB不再是固定两个周期数据传输,而是支持两级流水操作

        由于AHB还支持多主多从,这样导致的后果就是在AHB中,需要考虑仲裁操作,关于仲裁相关的,下次再理解。

        还是说回AHB的数据传输模式。AHB的读和写都包括两个阶段,两个阶段间是流水的关系,第一个阶段传递地址,第二个阶段传输数据。当需要传输多笔数据的时候,下一次地址会和上一次的数据阶段重合。

        AHB中数据传输相关信号汇总(省略去了和仲裁相关的信号):

信号

来源

介绍

HCLK

System

时钟

HRESETn

System

复位

HADDR

Master

一般为32bit,读/写地址

HTRANS[1:0]

Master

当前传输类型

HWRITE

Master

0:读操作

1:写操作

HSIZE[2:0]

Master

传输一次的数据大小,0~7分别表示8bits(byte), 16bits(halfword),32bits(word),64bits,128bits,256bits, 512bits,1024bits

HBRUST[2:0]

Master

突发类型和突发个数

HSELx

Master

从机选择

HWDATA

Master

一般为32bit,写数据

HRDATA

Slave

一般为32bit,读数据

HREADY

Slave

从机是否准备好信号

HRESP[1:0]

Slave

附加信息,OKEY、ERROR、RETRY和SPLIT。

        同时,AHB协议还支持burst传输,这是APB中没有的,详细记录一下和突发传输相关的几个信号。

        HTRANS信号,类似于在APB中PSELx和PENABLE信号的合并,只会在突发传输的时候出现,当从机收到这个信号时,表明当前的传输是一个突发中的某一拍。

        HBRUST信号,定义了突发的个数和地址的增长类型。增量突发每次地址递增,回环突发会在传输地址达到边界值时回到最小值。

        地址每次的增长量由HBRUST和HSIZE共同决定。例如HBRUST=3‘b010,HSIZE=3’b010,即一个4拍字回环突发,每次地址增量为0x04,以0x10为地址回环的边界,每次到达边界的倍数时,就会从上一个边界处重新开始。

        下图是8增量的半字传输增量突发,用来协助理解。

        还有一个要点,就是突发禁止超过 1KB 的地址边界。这和每个从机分配到的映射地址都是1KB有关。如果跨过这个边界就会导致将数据读出/写入是发生在其他从机的情况。

4、AXI协议

        AXI全称是(Advanced eXtensible Interface),即高级可扩展总线。在AMBA4.0修正后,包括AXI4.0-full、AXI4.0-lite和AXI4.0-stream。

        AXI4.0-lite是AXI4.0-full的简化版本,一个地址对应一个数据,不使用burst; AXI4.0-stream不需要进行burst长度的设定,用于大量数据的传输应用。

        相比于AHB协议,AXI协议(1)将读写通道分离开来,并且支持了更大的突发长度;(2)优化了burst传输,只需要首地址就可以完成一次完整的突发;(3)支持乱序传输,非对齐数据传输。使得它对比AHB来说,速度更快,更强大。

        AXI协议定义了5个独立的传输通道:写地址通道、写数据通道、写响应通道、读地址通道、读数据通道。(这里没有单独读响应通道是因为读数据会进行反馈,可以通过对于这个数据的读取表明读操作是否完成)。

        AXI中数据传输相关信号汇总(省略去了和仲裁相关的信号以及用户自定义信号):

信号

来源

介绍

ACLK

System

时钟

ARESETn

System

复位

写地址通道

AWID

Master

写地址ID

AWADDR

Master

写地址,突发首地址

AWLEN[7:0]

Master

写突发次数

AWSIZE[2:0]

Master

写突发单次字节数,0~7分别表示8bits(byte), 16bits(halfword),32bits(word),64bits,128bits,256bits, 512bits,1024bits

AWBURST[1:0]

Master

写突发类型

AWVALID

Master

写突发有效信号

AWREADY

Slave

从机是否准备好

写数据通道

WID

Master

写地址ID

WDATA

Master

写数据

WSTRB

Master

写数据有效的字节,掩码作用

WLAST

Master

表示写的最后一个数据

WVALID

Master

写有效

WREADY

Slave

从机是否准备好

写响应通道

BID

Slave

写响应ID

BVALID

Slave

写响应有效

BRESP

Slave

写响应,表明写事务的状态
OKAY,EXOKAY,SLVERR,DECERR

BREADY

Master

表明主机能够接收写响应

读地址通道

ARID

Master

读地址ID

ARADDR

Master

读地址,突发首地址

ARLEN[7:0]

Master

读突发次数

ARSIZE[2:0]

Master

读突发单次字节数, 0~7分别表示8bits(byte), 16bits(halfword),32bits(word),64bits,128bits,256bits, 512bits,1024bits

ARBURST[1:0]

Master

读突发类型

ARVALID

Master

读突发有效信号

ARREADY

Slave

从机是否准备好

读数据通道

RID

Master

写地址ID

RDATA

Master

写数据

RRESP

Master

读响应

WLAST

Master

表示读的最后一个数据

WVALID

Master

读有效

WREADY

Slave

从机是否准备好

        关于这些信号:

        (1)AXI协议每一个通道都有一个握手信号,用于在传输过程中对地址、数据、控制信号进行握手。

        (2)读响应信号包含在读数据通道内,没有单独一个通道。

        (3)AXI要求通道间满足写响应必须跟随最后一次burst的的写传输;读数据必须跟随数据对应的地址。

        (4)VALID信号不能依赖READY信号。这个约定表明了VALID信号是由Master信号主动产生的,并不是检测到从机READY之后才拉高。

        对比AHB,AXI突发长度支持INCR突发类型为1~256次传输,对于其他的传输类型(FIXED、WRAP)依然保持1~16次突发传输。Burst_Length=AxLEN[7:0]+1,即实际突发长度比AxLEN设定的值要多1。

        INCR的burst地址不能跨4KB边界,原因和AHB协议中相同。

        不支持提前终止burst传输(AHB也不支持提前终止)。主机可以忽略后续的数据,但是不能中途停止某一次传输。

        AxBURST表示AXI中的突发类型,相比于AHB来说,多了一个FIXED突发类型,这个类型传输表示在突发传输过程中地址固定,一般是用于FIFO访问。

5、APB、AHB、AXI的对比和常见问题

三大总线的区别:

        (这个图中有个错误地方,我查资料说AHB总线是不支持乱序访问的;其他地方都总结的挺好的)

AHB和AXI的burst传输区别:

        AHB需要一次burst传输的所有地址依次向从机发送,并且后一次突发必须在前一次完成之后才能进行;而AXI只需要一次burst传输的首地址,且支持乱序访问。

什么时候用AXI,什么时候用AHB:

        AXI类似于AHB的优化增强。当应用对数据传输速度和吞吐量有极高要求时,‌应选择AXI总线;‌而当应用对性能有一定要求,‌但不需要AXI总线提供的极端高速和高带宽特性时,‌AHB总线是一个更合适的选择。‌这两种总线的选择取决于具体的系统设计和应用需求。‌

有碰到其他问题后续再补充……

  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值