在基于IP复用的SoC设计中,片上总线设计是最关键的问题。为此,业界出现了很多片上总线标准。其中,由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。AMBA规范主要包括了AHB(Advanced High performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。AMBA 2.0规范包括四个部分:AHB、ASB、APB、AXI和Test Methodology。AHB的相互连接采用了传统的带有主模块和从模块的共享总线,接口与互连功能分离,这对芯片上模块之间的互连具有重要意义。AMBA已不仅是一种总线,更是一种带有接口模块的互连体系。
1.1.1AMBA协议的演进
图4‑4 AMBA协议的演进·AMBA 1只有ASB和APB协议;·AMBA 2引入AHB协议用于高速数据传输;·AMBA 3,为适应高吞吐量传输和调试引入AXI和ATB,增加高级可扩展接口,而AHB协议缩减为AHB-lite,APB协议增加了PREADY和PSLVERR,ASB由于设计复杂而不再使用;·AMBA 4,AXI得到了增强,引入QOS和long burst的支持,根据应用不同可选AXI4,AXI4-lite,AXI4-stream,同时为满足复杂SOC的操作一致性引入ACE和ACE-lite协议,APB和ATB也同时得到增强,比如APB加入了PPROT和PSTRB,另外为改善总线数据传输引入QVN协议;·适应更加复杂的高速NOC设计,引入环形总线协议,推出的AMBA CHI协议。V1.0 ASB、APB是第一代AMBA协议的一部分。主要应用在低带宽的外设上,如UART、 I2C,它的架构不像AHB总线是多主设备的架构,APB总线的唯一主设备是APB桥(与AXI或APB相连),因此不需要仲裁一些Request/grant信号。APB的协议也十分简单,甚至不是流水的操作,固定两个时钟周期完成一次读或写的操作。其特性包括:两个时钟周期传输,无需等待周期和回应信号,控制逻辑简单,只有四个控制信号。传输可用如下状态图表示,
图4‑5 传输状态图·系统初始化为IDLE状态,此时没有传输操作,也没有选中任何从模块。·当有传输要进行时,PSELx=1,PENABLE=0,系统进入SETUP状态,并只会在SETUP 状态停留一个周期。当PCLK的下一个上升沿时到来时,系统进入ENABLE 状态。·系统进入ENABLE状态时,维持之前在SETUP 状态的PADDR、PSEL、PWRITE不变,并将PENABLE置为1。传输也只会在ENABLE状态维持一个周期,在经过SETUP与ENABLE状态之后就已完成。之后如果没有传输要进行,就进入IDLE状态等待;如果有连续的传输,则进入SETUP状态。V2.0 AHB是第二代AMBA协议最重要的一部分。AHB总线规范是AMBA总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus)、ASB (Advanced System Bus)、APB (Advanced Peripheral Bus)。AHB用于高性能、高时钟频率的系统结构,典型的应用如ARM核与系统内部的高速RAM、NAND FLASH、DMA、Bridge的连接。APB用于连接外部设备,对性能要求不高,而考虑低功耗问题。ASB是AHB的一种替代方案。
图4‑6 相比于APB,区分了地址周期和数据周期AHB总线强大之处在于它可以将微控制器(CPU)、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线控制器,以及各种AHB接口的控制器等连接起来构成一个独立的完整SOC系统,还可以通过AHB-APB桥来连接APB总线系统。
图4‑7 通过AHB-APB桥来连接APB总线系统AHB总线由主设备Master、从设备Slave,内部包括仲裁器,译码器,数据多路和地址控制多路组成。 ·主设备发起一次读/写操作,某一时刻只允许一个主设备使用总线。·从设备响应一次读/写操作,通过地址映射选择使用哪一个从设备。·仲裁器允许某一个主设备控制总线·译码器通过地址译码决定选择哪一个从设备仲裁机制 仲裁机制保证了任意时刻只有一个master可以接入总线。arbiter决定哪个发出接入请求的master可以接入总线,这通过优先级算法实现。AHB规范并没有给出优先级算法,设计者需要根据具体的系统要求定义。一般情况下arbiter不会中断一个burst传输,将总线接入权让给其他master。当然未定义长度的burst传输是可以打断的,这要看优先级算法是如何规定的。如果一笔burst被打断,master再度获得接入权限时,会传递剩余的部分。如一笔长度为INCR8的传输在传递3 beat后被打断,master再次获得接入授权后,会继续传输剩余的5 beat,剩余部分可以由一个SINGLE和一个INCR4组成,或者一个INCR。地址译码器 地址译码器用于为总线上每个slave提供选择信号HSELx,选择信号是通过组合逻辑对地址码译码产生的。只有当前的数据传输完成后(HREADY为高),slave才会采样地址和控制信号以及HSELx。在一定条件下可能会出现这样的情况:产生HSELx信号而HREADY为低,在当前传输后slave会改变。每个slave最小的地址空间为1KB,所有的master的burst传输上限也是1KB,如此设计保证了不会出现地址越界问题。当一个设计不会用到所有的地址空间时,可能出现访问到一个不存在的地址的情况,这就需要增加一个附加的默认slave来为上面的情况提供一个响应。当SEQ或NONSEQ传输访问到一个不存在的地址,默认slave应该提供ERROR响应;当IDLE或BUSY传输访问到一个不存在的地址,默认slave会响应OKAY。地址译码器会带有实现默认slave的功能。表4‑1 各个信号描述
|
Name
|
Source
|
To
|
Description
|
|
HCLK
|
clock source
|
各module
|
总线时钟,上升沿采样
|
|
HRESETn
|
reset controller
|
各module
|
总线复位,低电平有效
|
|
HADDR[31:0]
|
Master
|
Decoder mux to slave arbiter
|
32位系统地址总线
|
|
HTRANS[1:0]
|
Master
|
mux to slave
|
当前传输类型NONSEQ, SEQ, IDLE, BUSY
|
|
HWRITE
|
Master
|
mux to slave
|
1为写,0为读
|
|
HSIZE[2:0]
|
Master
|
mux to slave
|
每一个transfer传输的数据大小,以字节为单位,最高支持1024位
|
|
HBURST[2:0]
|
Master
|
mux to slave
|
burst类型,支持4、8、16 burst,incrementing/wrapping
|
|
HPROT[3:0]
|
Master
|
mux to slave
|
保护控制信号,需要slave带保护功能,一般不用
|
|
HWDATA[31:0]
|
Master
|
mux to slave
|
写数据总线,Master到Slave
|
|
HRDATA[31:0]
|
Slave
|
mux to master
|
读数据总线,Slave到Master
|
|
HREADY
|
Slave
|
mux to master
arbiter
|
高:Slave指出传输结束
低:Slave需延长传输周期
|
|
HRESP[1:0]
|
Slave
|
mux to master
arbiter
|
Slave发给Master的总线传输状态OKAY, ERROR, RETRY, SPLIT
|
|
HSELx
|
Decoder
|
slave
|
slave选择信号
|
HRESP[1:0] 响应信号 传输响应HRESP[1:0]00: OKAY01: ERROR10: RETRY传输未完成,请求主设备重新开始一个传输,arbiter会继续使用通常的优先级11: SPLIT传输未完成,请求主设备分离一次传输,arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线表4‑2 AHB仲裁信号
|
Name
|
Source
|
To
|
Description
|
|
HBUSREQx
|
Master
|
arbiter
|
master给仲裁器的请求获得总线使用权的请求信号,最多支持16个master
|
|
HLOCKx
|
Master
|
arbiter
|
如果一个master希望自己在传输期间不希望丢掉总线,则需要向仲裁器发送这个锁定信号
|
|
HGRANTx
|
arbiter
|
master
|
授权信号,当前bus master x的优先级最高。当HREADY和HGRANTx同时为高时,master获取系统总线的权利
|
|
HMASTER [3:0]
|
arbiter
|
具有split功能的slave
|
仲裁器为每一个master分配的ID,指出哪个主设备正在进行传输,提供进行split的信息,用于地址控制多路选择哪个主设备接入总线。
|
|
HMASTLOCK
|
arbiter
|
具有split功能的slave
|
表示当前的master正在执行Locked操作。这个信号和HMASTER有这相同的时序
|
|
HSPLITx[15:0]
|
slave
|
arbiter
|
从设备用这个信号告诉仲裁器哪个主设备运行重新尝试一次split传输,每一位对应一个主设备
|
V3.0 AXI(Advanced eXtensible Interface)是一种总协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分。·高性能、高带宽、低延迟的片内总线·地址/控制和数据相位是分离的,分离的读写数据通道。控制和数据通道分离,就可以不等需要的操作完成,就发出下一个操作,流水线操作,数据吞吐量增加达到提速的作用。·单向通道体系结构,使得片上信息流只是以单方向传输,减少了延时,更小的面积,更低的功耗,获得优异的性能。AXI4 是第四代AMBA协议重要的一部分,AMBA4.0 包括AXI4.0、AXI4.0-lite、ACE4.0、AXI4.0-streamAXI4.0-lite是AXI的简化版本,ACE4.0 是AXI缓存一致性扩展接口,AXI4.0-stream是ARM公司和Xilinx公司一起提出,主要用在FPGA进行以数据为主导的大量数据的传输应用。· 适合高带宽低延时设计,无需复杂的桥就实现高频操作,向下兼容已有的AHB和APB接口。·分离地址/控制、数据相位·分离的读写数据通道,提供低功耗DMA·使用字节线支持非对齐的数据传输·使用基于burst的传输,只需传输首地址·支持多种传输方式,支持乱序传输·允许容易的添加寄存器来进行时序收敛AXI架构分为5个独立的传输通道,读地址通道、读数据通道、写地址通道、写数据通道、写响应通道。基于VALID/READY的握手机制数据传输协议,传输源端使用VALID表明地址/控制信号、数据是有效的,目的端使用READY表明自己能够接受信息。数据总线可为(8/16/32/64/128/256/512/1024bit),最大为单次传输一个字节的数据。信号描述表4‑3 全局信号
|
信号名
|
源
|
描述
|
|
ACLK
|
时钟源
|
全局时钟信号
|
|
ARESETn
|
复位源
|
全局复位信号,低有效
|
表4‑4 写地址通道信号
|
信号名
|
源
|
描述
|
|
AWID
|
主机
|
写地址ID,用来标志一组写信号
|
|
AWADDR
|
主机
|
写地址,给出一次写突发传输的写地址
|
|
AWLEN
|
主机
|
突发长度,给出突发传输的次数
|
|
AWSIZE
|
主机
|
突发大小,给出每次突发传输的字节数
|
|
AWBURST
|
主机
|
突发类型
|
|
AWLOCK
|
主机
|
总线锁信号,可提供操作的原子性
|
|
AWCACHE
|
主机
|
内存类型,表明一次传输是怎样通过系统的
|
|
AWPROT
|
主机
|
保护类型,表明一次传输的特权级及安全等级
|
|
AWQOS
|
主机
|
质量服务QoS
|
|
AWREGION
|
主机
|
区域标志,能实现单一物理接口对应的多个逻辑接口
|
|
AWUSER
|
主机
|
用户自定义信号
|
|
AWVALID
|
主机
|
有效信号,表明此通道的地址控制信号有效
|
|
AWREADY
|
从机
|
表明“从”可以接收地址和对应的控制信号
|
表4‑5 写数据通道信号
|
信号名
|
源
|
描述
|
|
WID
|
主机
|
一次写传输的ID tag
|
|
WDATA
|
主机
|
写数据
|
|
WSTRB
|
主机
|
写数据有效的字节线,用来表明哪8bits数据是有效的
|
|
WLAST
|
主机
|
表明此次传输是最后一个突发传输
|
|
WUSER
|
主机
|
用户自定义信号
|
|
WVALID
|
主机
|
写有效,表明此次写有效
|
|
WREADY
|
从机
|
表明从机可以接收写数据
|
表4‑6 写响应通道信号
|
信号名
|
源
|
描述
|
|
BID
|
从机
|
写响应ID tag
|
|
BRESP
|
从机
|
写响应,表明写传输的状态
|
|
BUSER
|
从机
|
用户自定义
|
|
BVALID
|
从机
|
写响应有效
|
|
BREADY
|
主机
|
表明主机能够接收写响应
|
表4‑7读地址通道信号
|
信号名
|
源
|
描述
|
|
ARID
|
主机
|
读地址ID,用来标志一组写信号
|
|
ARADDR
|
主机
|
读地址,给出一次写突发传输的读地址
|
|
ARLEN
|
主机
|
突发长度,给出突发传输的次数
|
|
ARSIZE
|
主机
|
突发大小,给出每次突发传输的字节数
|
|
ARBURST
|
主机
|
突发类型
|
|
ARLOCK
|
主机
|
总线锁信号,可提供操作的原子性
|
|
ARCACHE
|
主机
|
内存类型,表明一次传输是怎样通过系统的
|
|
ARPROT
|
主机
|
保护类型,表明一次传输的特权级及安全等级
|
|
ARQOS
|
主机
|
质量服务QoS
|
|
ARREGION
|
主机
|
区域标志,能实现单一物理接口对应的多个逻辑接口
|
|
ARUSER
|
主机
|
用户自定义信号
|
|
ARVALID
|
主机
|
有效信号,表明此通道的地址控制信号有效
|
|
ARREADY
|
从机
|
表明“从”可以接收地址和对应的控制信号
|
表 4‑8 读数据通道信号
|
信号名
|
源
|
描述
|
|
RID
|
从机
|
读ID tag
|
|
RDATA
|
从机
|
读数据
|
|
RRESP
|
从机
|
读响应,表明读传输的状态
|
|
RLAST
|
从机
|
表明读突发的最后一次传输
|
|
RUSER
|
从机
|
用户自定义
|
|
RVALID
|
从机
|
表明此通道信号有效
|
|
RREADY
|
主机
|
表明主机能够接收读数据和响应信息
|
表4‑9 低功耗接口信号
|
信号名
|
源
|
描述
|
|
CSYSREQ
|
时钟控制器
|
系统退出低功耗请求,此信号从“时钟控制器”到“外设”
|
|
CSYSACK
|
外设
|
退出低功耗状态确认
|
|
CACTIVE
|
外设
|
外设请求时钟有效
|
每个数据通道有独立的xVALID/xREADY握手信号对。VALID与READY信号作为一对握手信号,为防止死锁,进行读操作时,必须等读地址通道握手完成,读数据通道才可进行下一步操作。进行写操作时,写地址通道与写数据通道互相独立,但同样必须等最后一组数据写完成写响应通道握手完成。AXI协议是基于burst的,主机只给出突发传输的第一个字节的地址,从机必须计算突发传输后续的地址。突发传输不能跨4KB边界(防止突发跨越两个从机的边界,也限制了从机所需支持的地址自增数)。· 突发长度 ARLEN[7:0]决定读传输的突发长度,AWLEN[7:0]决定写传输的突发长度。AXI3只支持1~16次的突发传输(Burst_length=AxLEN[3:0]+1),AXI4扩展突发长度支持INCR突发类型为1~256次传输,对于其他的传输类型依然保持1~16次突发传输(Burst_Length=AxLEN[7:0]+1)。·传输规则 wraping burst ,burst长度必须是2,4,8,16, burst不能跨4KB边界,不支持提前终止burst传输。·突发大小 ARSIZE[2:0],读突发传输;AWSIZE[2:0],写突发传输。AxSIZE[2:0] bytes in transfer‘b000 1‘b001 2‘b010 4‘b011 8‘b100 16‘b101 32‘b110 64‘b111 128·突发类型 FIXED:突发传输过程中地址固定,用于FIFO访问INCR:增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)。AxBURST[1:0] burst type‘b00 FIXED‘b01 INCR‘b10 WRAP‘b11 ReservedStart_Address=AxADDRNumber_Bytes=2^AxSIZEBurst_Length=AxLEN+1Aligned_Addr=(INT(Start_Address/Number_Bytes))xNumber_Bytes。//INT表示向下取整。对于INCR突发和WRAP突发但没有到达回环边界,地址由下述方程决定:Address_N=Aligned_Address+(N-1)xNumber_BytesWRAP突发,突发边界:Wrap_Boundary=(INT(Start_Address/(Number_Bytes x Burst_Length)))x(Number_Bytes x Burst_Length)读写响应结构读传输的响应信息是附加在读数据通道上的,写传输的响应在写响应通道。RRESP[1:0],读传输BRESP[1:0],写传输OKAY(‘b00):正常访问成功EXOKAY(‘b01):Exclusive 访问成功SLVERR(‘b10):从机错误。表明访问已经成功到了从机,但从机希望返回一个错误的情况给主机。DECERR(‘b11):译码错误。一般由互联组件给出,表明没有对应的从机地址。
1.1.2AMBA概述
AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构AHB (Advanced High-performance Bus) 高级高性能总线ASB (Advanced System Bus) 高级系统总线APB (Advanced Peripheral Bus) 高级外围总线AXI (Advanced eXtensible Interface) 高级可拓展接口这些内容加起来就定义出一套为了高性能SoC而设计的片上通信的标准。AHB主要是针对高效率、高频宽及快速系统模块所设计的总线,它可以连接如微处理器、芯片上或芯片外的内存模块和DMA等高效率模块。APB主要用在低速且低功率的外围,可针对外围设备作功率消耗及复杂接口的最佳化。APB在AHB和低带宽的外围设备之间提供了通信的桥梁,所以APB是AHB或ASB的二级拓展总线。AXI:高速度、高带宽,管道化互联,单向通道,只需要首地址,读写并行,支持乱序,支持非对齐操作,有效支持初始延迟较高的外设,连线非常多。表 4‑10 几种AMBA总线的性能对比分析
|
总线
|
AXI
|
AHB
|
APB
|
|
总线宽度
|
8, 16, 32, 64, 128, 256, 512, 1024
|
32, 64, 128, 256
|
8, 16, 32
|
|
地址宽度
|
32
|
32
|
32
|
|
通道特性
|
读写地址通道、读写数据通道均独立
|
读写地址通道共用读写数据通道
|
读写地址通道共用读写数据通道不支持读写并行操作
|
|
体系结构
|
多主/从设备仲裁机制
|
多主/从设备仲裁机制
|
单主设备(桥)/多从设备无仲裁
|
|
数据协议
|
支持流水/分裂传输支持猝发传输支持乱序访问字节/半字/字大小端对齐非对齐操作
|
支持流水/分裂传输支持猝发传输支持乱序访问字节/半字/字大小端对齐不支持非对齐操作
|
一次读/写传输占两个时钟周期不支持突发传输
|
|
传输方式
|
支持读写并行操作
|
不支持读写并行操作
|
不支持读写并行操作
|
|
时序
|
同步
|
同步
|
同步
|
|
互联
|
多路
|
多路
|
无定义
|
1.1.3AHB总线
AHB的组成Master:能够发起读写操作,提供地址和控制信号,同一时间只有1个Master会被激活。Slave:在给定的地址范围内对读写操作作响应,并对Master返回成功、失败或者等待等状态。Arbiter:负责保证总线上一次只有1个Master在工作。仲裁协议是规定的,但是仲裁算法可以根据应用决定。Decoder:负责对地址进行解码,并提供片选信号到各Slave。每个AHB都需要1个仲裁器和1个中央解码器。
图4‑8 AHB的组成AHB基本信号HADDR:32位系统地址总线HTRANS:M指示传输状态,NONSEQ、SEQ、IDLE、BUSYHWRITE:传输方向1-写,0-读HSIZE:传输单位HBURST:传输的burst类型HWDATA:写数据总线,从M写到SHREADY:S应答M是否读写操作传输完成,1-传输完成,0-需延长传输周期。需要注意的是HREADY作为总线上的信号,它是M和S的输入;同时每个S需要输出自HREADY。所以对于S会有两个HREADY信号,一个来自总线的输入,一个自己给到多路器的输出。HRESP:S应答当前传输状态,OKAY、ERROR、RETRY、SPLIT。HRDATA:读数据总线,从S读到M。AHB基本传输两个阶段地址周期(AP),只有一个cycle数据周期(DP),由HREADY信号决定需要几个cycle流水线传送先是地址周期,然后是数据周期AHB突发传输与AXI突发传输的特点AHB协议需要一次突发传输的所有地址,地址与数据锁定对应关系,后一次突发传输必须在前次传输完成才能进行。AXI只需要一次突发的首地址,可以连续发送多个突发传输首地址而无需等待前次突发传输完成,并且多个数据可以交错传递,此特征大大提高了总线的利用率。AHB总线与AXI总线均适用于高性能、高带宽的SoC系统,但AXI具有更好的灵活性,而且能够读写通道并行发送,互不影响;更重要的是,AXI总线支持乱序传输,能够有效地利用总线的带宽,平衡内部系统。因此SoC系统中,均以AXI总线为主总线,通过桥连接AHB总线与APB总线,这样能够增加SoC系统的灵活性,更加合理地把不同特征IP分配到总线上。
1.1.4APB总线
主要应用在低带宽的外设上,如UART、 I2C,它的架构不像AHB总线是多主设备的架构,APB总线的唯一主设备是APB桥(与AXI或APB相连),因此不需要仲裁一些Request/grant信号。APB的协议也十分简单,甚至不是流水的操作,固定两个时钟周期完成一次读或写的操作。其特性包括:两个时钟周期传输,无需等待周期和回应信号,控制逻辑简单,只有四个控制信号。APB上的传输可用如图所示的状态图来说明。1、系统初始化为IDLE状态,此时没有传输操作,也没有选中任何从模块。2、当有传输要进行时,PSELx=1,,PENABLE=0,系统进入SETUP状态,并只会在SETUP状态停留一个周期。当PCLK的下一个上升沿到来时,系统进入ENABLE状态。3、系统进入ENABLE状态时,维持之前在SETUP状态的PADDR、PSEL、PWRITE不变,并将PENABLE置为1。传输也只会在ENABLE状态维持一个周期,在经过SETUP与ENABLE状态之后就已完成。之后如果没有传输要进行,就进入IDLE状态等待;如果有连续的传输,则进入SETUP状态。
图4‑9 APB总线
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。