1、,AMBA 总线,,2,SEP3203,,3,目录,AMBA总线概述 AHB APB 不同IP之间的互连,,4,系统总线简介,系统芯片中各个模块之间需要有接口来连接 总线作为子系统之间共享的通信链路 优点 低成本 方便易用 缺点 会造成性能瓶颈,,5,AMBA介绍,Advanced Microcontroller Bus Architecture 片上总线的标准 定义了三种总线 AHB (Advanced High-performance Bus) ASB (Advanced System Bus) APB (Advanced Peripheral Bus),,6,AMBA发展历史,AMBA
2、1.0 ASB 和 APB AMBA 2.0 AHB, ASB 和 APB AMBA 3.0 AMBA Advanced eXtensible Interface (AXI),,7,一个典型的AMBA系统,处理器和其它主设备/从设备都是可以替换的,,8,AHB,高速总线,高性能 流水线操作 可支持多个总线主设备(最多16个) 支持burst传输 总线带宽:8、16、32、64、128bits 上升沿触发操作 对于一个新设计建议使用AHB,,9,ASB,高速总线 流水线操作 支持多个总线主设备 支持burst传输 总线带宽:8、16、32bits 三态、双向总线 (不适于做DFT) 下降沿或者上
3、升沿触发,,10,APB,低速总线、低功耗 接口简单 在Bridge中锁存地址信号和控制信号 适用于多种外设 上升沿触发,,11,AHB组成部分,AHB 主设备(master) 初始化一次读/写操作 某一时刻只允许一个主设备使用总线 uP、DMA、DSP、LCDC AHB从设备(slave) 响应一次读/写操作 通过地址映射来选择使用哪一个从设备 外部存储器控制器EMI、APB bridge、UART、 AHB仲裁器(arbiter) 允许某一个主设备控制总线 在AMBA协议中没有定义仲裁算法 AHB译码器(decoder) 通过地址译码来决定选择哪一个从设备,,12,APB组成部分,AHB2
4、APB Bridge 可以锁存所有的地址、数据和控制信号 进行二级译码来产生APB从设备选择信号 APB总线上的所有其他模块都是APB从设备 不是流水线方式 接口是零功耗,,13,AMBA协议其他有关问题,与工艺无关 没有定义电气特性 仅在时钟周期级定义时序 提取时序参数依赖于所采用的工艺和工作频率,,14,目录,AMBA总线概述 AHB APB 不同IP之间的互连,,15,AHB总线互连,,16,AHB传输,发起一个请求给仲裁器,驱动地址和控制信号,允许某个主设备控制总线,仅选中的从设备响应地址/控制信号,拉高HREADY信号,总线传输完成,,17,Dummy/Default Master,
5、Dummy MasterGranted when all masters SPLIT Generates IDLE cycles only Typically Master #0Granted when Locked master gets SPLIT response Implement as part of Address/Control Mux,Default MasterGranted when no master requires bus Generally master most likely to require bus Generates IDLE cycles when no
6、t requesting busAvoids minimum 2 cycle Arbitration period Immediate access to bus,,18,Default Slave,Slave 3 (APB),Default Slave,0x0000_0000,0xFFFF_FFFF,case HADDR iswhen . =HSELebi HSELsram HSELapb HSELdefault = 1; end case;,Decoder logic,Slave 2 (Internal Memory),Default_Slave logic,case HTRANS isw
7、hen IDLE|BUSY =HRESP HRESP = ERROR; end case;,Slave 1 (External),0xCFFF_FFFF0xC000_00000x5000_FFFF0x5000_00000x3FFF_FFFF0x0000_0000,,19,AHB信号,,20,基本AHB信号,HRESETn 低电平有效 HADDR31:0 32位系统地址总线 HWDATA31:0 写数据总线,从主设备写到从设备 HRDATA31:0 读数据总线,从从设备读到主设备,,21,基本AHB信号(续),HTRANS 指出当前传输的状态 NONSEQ、SEQ、IDLE、BUSY HSIZE
8、 指出当前传输的大小 HBURST 指出传输的burst类型 HRESP 从设备发给主设备的总线传输状态 OKAY、ERROR、RETRY、SPLIT HREADY 高:从设备指出传输结束 低电平:从设备需延长传输周期,,22,基本AHB传输,两个阶段 地址周期,只有一个cycle 数据周期,由HREADY信号决定需要几个cycle 流水线传送 先是地址周期,然后是数据周期,,23,Master release address and control,Slave sample the address and control,Master sample the data,If slave has
9、nt ready to receive data, how to do?,基本AHB传输(续),一次无需等待状态的简单传输,,24,Not ready,Not ready,Ready,One transfer need at least two cycles, how to promote its efficiency?,Note: slave shouldnt insert more than 16 wait cycles!,基本AHB传输(续),需要两个等待周期的简单传输,,25,Pipeline,A Address,A Data,B Address,B Data,C Address,C
10、Data,Slave decodes every transfer, so many waits, how to decrease the wait cycles?,基本AHB传输(续),,26,Burst Transfer,A,A,A+4,A+4,A+8,A+8,A+12,A+12,HBURST shows the burst types: Single Transfer Incrementing transfer with unspecified length(INCR) 4-beat 8-beat 16-beat,Slave has know that master need 4 dat
11、a, A/A+4/A+8/A+12,During burst transfer, if slave not ready, then hready=0; but if master is not ready, how to do?,基本AHB传输(续),,27,传输类型,HTRANS1:0:当前传输的状态 IDLE、BUSY、NONSEQ、SEQ 00:IDLE 主设备占用总线,但没进行传输 两次burst传输中间主设备发IDLE 01:BUSY 主设备占用总线,但是在burst传输过程中还没有准备好进行下一次传输 一次burst传输中间主设备发BUSY,,28,传输类型(续),10:NOSEQ
12、 表明一次单个数据的传输 或者一次burst传输的第一个数据 地址和控制信号与上一次传输无关 11:SEQ 表明burst传输接下来的数据 地址和上一次传输的地址是相关的,,29,The first transfer,Master is busy,The subsequent transfer,The subsequent transfer,Slave is not ready,The subsequent transfer,传输类型举例,,30,其它AHB控制信号,HWRITE 高电平:写 低电平:读 HSIZE2:0 000:8bits 100:128bits 001:16bits 101
13、:256bits 010:32bits 110:512bits 011:64bits 111:1024bits 最大值受总线的配置所限制 通常使用32bits(010),,31,其它AHB控制信号(续),HPROT3:0 HPROT0: OPCODE/DATA HPROT1: USER/PRIVILGED HPROT2: Bufferable/Non-Bufferable HPROT3: Cacheable/Non-Cacheable,,32,AHB控制信号小结,HTRANS1:0 IDLE BUSY NONSEQ SEQ,HBURST2:0 SINGLE INCR WRAP4|8|16 IN
14、CR4|8|16,HSIZE2:0 Byte Halfword Word Doubleword .,HPROT3:0 0 - data/opcode 1 - privileged/user 2 - bufferable 3 - cacheable,HADDR must be aligned to a multiple of data size as given by HSIZE,,33,BURST传输,AHB Burst 操作 4beat、8beat、16beat、单个字节传输、未定义长度的传输 支持incrementing和wrapping两种burst传输 Incrementing bur
15、st 地址是上一次的传输地址加1 Wrapping burst 例:4beat的wrapping burst 字传输(4byte): 0x34 - 0x38 - 0x3c - 0x30 应用场合:Cache填充,,34,地址计算举例,根据HSIZE和HBURST来计算地址 例:起始地址是0x48,HSIZE=010(32bits),,35,INCR8 Burst,HCLK,SEQ,NSEQ,SEQ,SEQ,SEQ,SEQ,INCR8,0x60,0x68,0x64,0x6c,0x74,0x70,HTRANS,HBURST,HADDR,HRDATA,d1,d0,d2,d4,d3,d5,0x78,0
16、x7c,SEQ,SEQ,d6,d7,,36,WRAP8 Burst,HCLK,SEQ,NSEQ,SEQ,SEQ,SEQ,SEQ,WRAP8,0x70,0x78,0x74,0x7c,0x64,0x60,HTRANS,HBURST,HADDR,HRDATA,d5,d4,d6,d0,d7,d1,0x68,0x6c,SEQ,SEQ,d2,d3,start of line,,37,INCR4 Burst,,38,WRAP4 Burst,,39,例:未定义长度的Burst传输,,40,HCLK,SEQ,NSEQ,NSEQ,NSEQ,SEQ,SEQ,IDLE,INCR4,SI,SI,0x34,0x3C,0x
17、38,0x40,0x48,0x44,HTRANS,HBURST,HADDR,HRDATA HWDATA,r6,r5,r7,r9,r8,r10,Example LDM AHB Activity,SI = SINGLE,LDM ,r5-r10,,41,注意!,Burst传输不能穿越1K边界 一个从设备最小的地址间隙是1KB NONSEQ - SEQ - 1KB Boundary -NONSEQ - SEQ 主设备不能试图开始一个可能穿越1K边界的固定长度的incrementing burst传输,,42,INCR Burst over 1k boundary,HCLK,SEQ,NSEQ,SEQ,N
18、SEQ,SEQ,SEQ,INCR,0x3F0,0x3F8,0x3F4,0x3FC,0x404,0x400,HTRANS,HBURST,HADDR,HRDATA,d1,d0,d2,d4,d3,d5,0x408,0x40C,SEQ,SEQ,d6,d7,start of 1k page,,43,地址译码,HSELx:选择从设备 指出由主设备所选择的从设备 由地址译码器来提供选择信号 一个从设备应该至少占用1KB的存储空间 需要一个额外的缺省从设备来映射其他的存储地址,,44,地址译码(续),,45,从设备响应,所访问的从设备必须响应这次传输 从设备可能返回的响应: 完成这次传输 插入等待状态(HRE
19、ADY信号) 发出错误信号表示这次传输失败 延迟传输,使得总线可用于其他传输(split),,46,从设备响应信号,HREADY:transfer done HRESP1:0:transfer response 00:OKAY 成功 01:ERROR 失败 10:RETRY 传输未完成 请求主设备重新开始一个传输 11:SPLIT 传输未完成 请求主设备分离一次传输,,47,两周期的响应,HRESP1:0 OKAY:单周期响应 ERROR:两周期响应 RETRY:两周期响应 SPLIT:两周期响应 总线的流水特性需要从设备两个周期的响应。可以使得主设备有足够的时间处理下一次传输。,,48,Sl
20、ave Responses,Mem A,Mem B,Mem D,Mem C,Slave,Processor,AMBA,Write Mem E,I couldnt write it because of no mem E!,ERROR,,49,Slave Responses,Mem A,Mem B,Mem D,Mem C,Slave,Processor,AMBA,Write Mem A,I couldnt write it now for busy! You could retry write it latter!,BUSY,RETRY|SPLIT,,50,例:Retry 响应,,51,RETR
21、Y和SPLIT的不同,主要区别在于仲裁的方式 RETRY:arbiter会继续使用通常的优先级 SPLIT:arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线 总线主设备应该用同样的方式处理RETRY响应和SPLIT响应,,52,Locked Transfers,HCLKHADDRHWDATAHLOCK,Address Phase A,Data Phase A Address Phase B,A,A,Data Phase B Address Phase C,C,C,B,B,Locked sequences of transfers cannot be interrupted b
22、y interconnectHLOCK indicates next address phase is part of a locked transferIn the above transfers to addresses B & C are locked and should not be separatedARM processors use HLOCK for SWP instruction only,,53,数据总线,不是三态总线,读总线和写总线是分开的。 印第安序 在AMBA协议中没有定义 主设备和从设备应该采用同样的印第安序 不支持动态印第安序 对于IP设计, 只有应用面比较广泛
23、的应用程序才支持两种印第安序。,,54,32bit小印第安数据总线的有效字节,,55,32bit大印第安数据总线的有效字节,,56,多个主设备,I am first,I am first!,,57,AHB仲裁信号,,58,仲裁信号(续),HBUSREQ 总线请求 HLOCKx: 高电平:主设备请求锁定总线 HGRANTx 指出主设备x可访问总线 主设备x控制总线:HGRANTx=1且HREADY=1,,59,仲裁信号(续),HMASTER3:0 指出哪个主设备正在进行传输 HMASTLOCK 指出主设备正在进行一次锁定传输 HSPLITx15:0 从设备用这个信号告诉仲裁器哪个主设备允许重新尝
24、试一次split传输。 每一位对应一个主设备,,60,仲裁举例(1),没有等待状态的grant,,61,仲裁举例(2),有等待状态的grant,,62,仲裁举例(3),Burst传输之后移交总线,,63,总线主设备Grant信号,Arbiter,,64,几点说明,对于固定长度的burst传输,不必持续请求总线 对于未定义长度的burst传输,主设备应该持续送出request信号,直到开始最后一次传输。 如果没有主设备请求总线,则给缺省主设备grant信号,且HTRANS=IDLE 建议主设备在锁定总线传输结束之后插入IDLE传输,以重新仲裁优先级。,,65,Split传输过程,由主设备开始传输
25、。 如果从设备需要多个周期才能获取数据,则从设备给出一个SPLIT传输响应。从设备记录主设备号:HMASTER。接着仲裁器改变主设备的优先级。 仲裁器grant其他的主设备,总线主设备移交。 当从设备准备结束本次传输,将设置给仲裁器的HSPLITx信号的相应位。 仲裁器恢复优先级 仲裁器grant主设备,这样主设备可以重新开始传输。 结束,,66,防止Deadlock,当多个不同的主设备试图访问同一个从设备,这个从设备发出了SPLIT或RETRY信号,这是很可能发生deadlock 从设备最多可以接收系统中16个主设备的请求。只需要记录主设备号(忽略地址和控制信号) 给出RETRY响应的从设备
26、在某一时刻只能由一个主设备访问。 可以使用一些硬件保护机制,比如ERROR,,67,AHB主设备接口,,68,AHB从设备接口,,69,AHB Arbiter,,70,AHB Decoder,,71,Typical Multi-layer example,Master 0 can access private RAM, APB and external interface Master 1 can access DMA slave, APB and external interface Parallel access improves system bandwidth,,72,AHB-Lite
27、,Subset of AHB Functionality Single Master No need for HBUSREQ & HGRANT Simple Slaves No retry or split responses Standard AHB modules can be used Allows easier module design/debug,,73,AHB总结,主要组成部分 Master、slaves、arbiter、decoder 传输的过程 流水线机制 Address phase和data phase 如何提高性能 Burst read/write 仲裁机制 总线控制权的
28、移交,,74,AHB总结(续),Slave短时间内无法响应 HREADY信号拉低 Slave长时间内无法响应 插入SPLIT/RETRY Master不能进行传输 插入BUSY,,75,AHB的应用建议,Arbiter的优先级可以配置 Slave长时间不能响应的话,一般不支持SPLIT响应,使用RETRY响应 总线上如果只有一个master的话,可以使用AHB lite协议,不用arbiter 设计一个新的IP时,要仔细核对AMBA的Feature和IP所支持的Feature是否匹配。,,76,实现,如果设计中既有主设备端口又有从设备端口 通过主设备端口读/写数据 通过从设备端口配置寄存器等
29、如处理器设置的一些参数,,77,目录,AMBA总线概述 AHB APB 不同IP之间的互连,,78,APB信号,,79,APB信号(续),PADDR31:0 地址总线,由设备总线的bridge单元驱动 PSELx 从译码器来的信号,到每一个总线从设备x PENABLE 用于在设备总线上把所有访问按时间阶段进行 PWRITE 高电平:写 低电平:读 PRDATA和PWDATA 最多32位宽,,80,Address Decoding Stages,Slave 3 (APB),Slave 1 (EBI),Slave 2 (SRAM),0xCFFF_FFFF0xC000_00000x5000_FFFF
30、0x5000_00000x3FFF_FFFF0x0000_0000,Peripheral 3 (UART),Peripheral 1 (Int Cont),Peripheral 2 (Timers),0xC3FF_FFFF0xC300_00000xC2FF_FFFF0xC100_00000xC000_FFFF0xC000_0000,APB memory map,Timer 2,Timer 1,0xC2FF_FFFF0xC200_00000xC1FF_FFFF0xC100_0000,AHB Decoder,HSELapb,PSELtim,APB Bridge,Timers,AHB memory
31、map,Timers memory map,,81,APB Interconnect,,82,写传输,,83,读传输,,84,Bridge,How to translate ahb pipelined timing to 2-cycle apb timing?,,85,Bridge FSM,AHB Transfer,,86,APB Slave,,87,APB到AHB的接口读,,88,目录,AMBA总线概述 AHB APB 不同IP之间的互连,,89,通信方式,Cpu (master) IP (slave) IP (master) IP (slave),,90,Memory mapped IO,
32、每一个从设备都占用系统中的一段地址空间 所有的从设备都是可寻址的 寄存器/存储器都是内存映射方式访问 CPU/IP读写其他IP的数据类似于读写存储器,,91,IP间的通信互连,主设备被arbiter grant之后,可以访问总线上的所有从设备,,92,一个IP可以同时拥有主设备接口和从设备接口,,93,CPU和IP之间的通信,CPU总是作为主设备 IP总是作为从设备 IP可以发出一个中断请求 CPU进入中断模式,由interrupt service routine (ISR)来处理中断,,94,例:DMA,,95,例:DMA,Step0:CPU检查DMA的状态以确认是否可用While(1) Read(0x30004,,96,例:DMA,Step1:CPU设置(source address)、(destination address)(size)Write (0x30008,0x10000)Write(0x3000C,0x20000)Write(0x30010,0x100)Step 2: 启动DMAWrite(0x30000,0x1),,97,例:DMA,Step3: DMA把数据从memory 1传送到memory 2,,98,例:DMA,Step 4:DMA 向CPU发出中断请求 Step 5:CPU检查DMA的状态 Read(0x30004, &status),