1AMBA总线2目录•AMBA总线概述•AHB•APB•测试方法3系统总线简介•系统芯片中各个模块之间需要有接口来连接•总线作为子系统之间共享的通信链路•优点–低成本–方便易用•缺点–会造成性能瓶颈4AMBA介绍•AdvancedMicrocontrollerBusArchitecture–片上总线的标准•定义了三种总线–AHB(AdvancedHigh-performanceBus)–ASB(AdvancedSystemBus)–APB(AdvancedPeripheralBus)5AMBA发展历史•AMBA1.0–ASB和APB–三态实现•AMBA2.0–AHB,ASB和APB–采用多路选择器结构来减少时序问题•AMBA3.0–AMBAAdvancedeXtensibleInterface(AXI)6一个典型的AMBA系统•处理器和其它主设备/从设备都是可以替换的7AHB•高速总线,高性能•流水线操作•可支持多个总线主设备(最多16个)•支持burst传输•总线带宽:8、16、32、64、128bits•上升沿触发操作•对于一个新设计建议使用AHB8ASB•高速总线,高性能•流水线操作•支持多个总线主设备•支持burst传输•总线带宽:8、16、32bits•三态、双向总线–(不适于做DFT)•下降沿或者上升沿触发–在高速的芯片内部,对时钟分频的话,对脉冲宽度会发生调制9APB•低速总线、低功耗•接口简单•在Bridge中锁存地址信号和控制信号•适用于多种外设•上升沿触发10AHB组成部分•AHB主设备(master)–初始化一次读/写操作–某一时刻只允许一个主设备使用总线–uP、DMA、DSP、LCDC…•AHB从设备(slave)–响应一次读/写操作–通过地址映射来选择使用哪一个从设备–外部存储器控制器、APB桥、UART、…•AHB仲裁器(arbiter)–允许某一个主设备控制总线–在AMBA协议中没有定义仲裁算法•AHB译码器(decoder)–通过地址译码来决定选择哪一个从设备11APB组成部分•AHB2APBBridge–可以锁存所有的地址、数据和控制信号–进行二级译码来产生APB从设备选择信号•APB总线上的所有其他模块都是APB从设备–不是流水线方式–不需要锁存,接口是零功耗12AMBA协议其他有关问题•与工艺无关•没有定义电气特性•仅在时钟周期级定义时序–提取时序参数依赖于所采用的工艺和工作频率13目录•AMBA总线概述•AHB•APB•测试方法14AHB总线互连15AHB传输发起一个请求给仲裁器驱动地址和控制信号允许某个主设备控制总线仅选中的从设备响应地址/控制信号拉高HREADY信号,总线传输完成16Dummy/DefaultMasterDummyMaster•GrantedwhenallmastersSPLIT•GeneratesIDLEcyclesonly•GrantedwhenLockedmastergetsSPLITresponse•TypicallyMaster#0•ImplementaspartofAddress/ControlMuxDefaultMaster•Grantedwhennomasterrequiresbus•Generallymastermostlikelytorequirebus•GeneratesIDLEcycleswhennotrequestingbus•Avoidsminimum2cycleArbitrationperiod•Immediateaccesstobus17DefaultSlaveSlave3(APB)DefaultSlave0x0000_00000xFFFF_FFFFcaseHADDRiswhen….=HSELebi=‘1’;when….=HSELsram=‘1’;when….=HSELapb=‘1’;whenothers=HSELdefault=‘1’;endcase;DecoderlogicSlave2(InternalMemory)Default_SlavelogiccaseHTRANSiswhenIDLE|BUSY=HRESP=OKAY;whenothers=HRESP=ERROR;endcase;Slave1(External)0xCFFF_FFFF0xC000_00000x5000_FFFF0x5000_00000x3FFF_FFFF0x0000_000018AHB信号19基本AHB信号•HCLK–总线时钟•HRESETn–总线复位,低电平有效•HADDR[31:0]–32位系统地址总线•HWDATA[31:0]–写数据总线,从主设备写到从设备•HRDATA[31:0]–读数据总线,从从设备读到主设备20基本AHB信号(续)•HTRANS–指出当前传输的类型•NONSEQ、SEQ、IDLE、BUSY•HSIZE–指出当前传输的大小•HBURST–指出传输的burst类型•HRESP–从设备发给主设备的总线传输状态•OKAY、ERROR、RETRY、SPLIT•HREADY–高:从设备指出传输结束–低电平:从设备需延长传输周期21基本AHB传输•两个阶段–地址周期,只有一个有效周期–数据周期,由HBURST信号决定需要几个有效周期•流水线传送–先是有效地址周期,然后是有效数据周期22MasterreleaseaddressandcontrolSlavesampletheaddressandcontrolMastersamplethedataIfslavehasn’treadytoreceivedata,howtodealwithit?基本AHB传输(续)•一次无需等待状态的简单传输23NotreadyNotreadyReadyOnetransferneedatleasttwocycles,howtopromoteitsefficiency?Note:accordingtospec,slaveshouldn’tinsertmorethan16waitcycles!!!基本AHB传输(续)•需要两个等待周期的简单传输24PipelineAAddressADataBAddressBDataCAddressCDataSlavedecodeseverytransfer,onetransferonwait,howtodecreasethewaitcycles?基本AHB传输(续)25BurstTransferAAA+4A+4A+8A+8A+12A+12HBURSTshowsthebursttypes:SingleTransferIncrementingtransferwithunspecifiedlength4-beat8-beat16-beatSlavehasknowthatmasterneed4data,A/A+4/A+8/A+12Duringbursttransfer,ifslaveisnotready,thenhready=0;butifmasterisnotready,howtodo?基本AHB传输(续)26传输类型•HTRANS[1:0]:传输类型–四种类型:IDLE、BUSY、NONSEQ、SEQ•00:IDLE–主设备占用总线,但没进行传输–两次burst传输中间主设备可发IDLE•01:BUSY–主设备占用总线,但是在burst传输过程中还没有准备好进行下一次传输–一次burst传输中间主设备可发BUSY27传输类型(续)•10:NOSEQ–表明一次单个数据的传输–或者一次burst传输的第一个数据–地址和控制信号与上一次传输无关•11:SEQ–表明burst传输接下来的数据–地址和上一次传输的地址是相关的28ThefirsttransferMasterisbusyThesubsequenttransferThesubsequenttransferSlaveisnotreadyThesubsequenttransfer传输类型举例29其它AHB控制信号•HWRITE–高电平:写–低电平:读•HSIZE[2:0]–000:8bits100:128bits–001:16bits101:256bits–010:32bits110:513bits–011:64bits111:1024bits–最大值受总线的配置所限制–通常使用32bits(010)•HPROT[3:0]•HPROT[0]:OPCODE/DATA•HPROT[1]:USER/PRIVILGED•HPROT[2]:Bufferable/Non-Bufferable•HPROT[3]:Cacheable/Non-Cacheable30AHB控制信号小结HTRANS[1:0]IDLEBUSYNONSEQSEQHBURST[2:0]SINGLEINCRWRAP[4|8|16]INCR[4|8|16]HSIZE[2:0]ByteHalfwordWordDoubleword...HPROT[3:0]0-data/opcode1-privileged/user2-bufferable3-cacheableHADDRmustbealignedtoamultipleofdatasizeasgivenbyHSIZE31BURST传输•AHBBurst操作–4beat、8beat、16beat、单个字节传输、未定义长度的传输–支持incrementing和wrapping两种burst传输•Incrementingburst–地址是上一次的传输地址加1个传输单位•Wrappingburst–例:4beat的wrappingburst字传输(4byte):–0x34-0x38-0x3c-0x30–应用场合:Cache填充32地址计算举例•根据HSIZE和HBURST来计算地址•例:起始地址是0x48,HSEZE=010(32bits)33INCR8BurstHCLKSEQNSEQSEQSEQSEQSEQINCR80x600x680x640x6c0x740x70HTRANSHBURSTHADDRHRDATAd1d0d2d4d3d50x780x7cSEQSEQd6d734WRAP8BurstHCLKSEQNSEQSEQSEQSEQSEQWRAP80x700x780x740x7c0x640x60HTRANSHBURSTHADDRHRDATAd5d4d6d0d7d10x680x6cSEQSEQd2d3startofline35INCR4Burst36WRAP4Burst37例:未定义长度的Burst传输38HCLKSEQNSEQNSEQNSEQSEQSEQIDLEINCR4SISI0x340x3C0x380x400x480x44HTRANSHBURSTHADDRHRDATAHWDATAr6r5r7r9r8r10ExampleLDMAHBActivity•SI=SINGLELDM0x34,{r5-r10}39注意!•Burst传输不能穿越1K边界–一个从设备最小的地址间隙是1KB–NONSEQ-SEQ-1KBBoundary-NONSEQ-SEQ…•主设备不能试图开始一个可能穿越1K边界的INCR传输40INCRBurstover1kboundaryHCLKSEQNSEQSEQNSEQSEQSEQINCR0x3F00x3F80x3F40x3FC0x4040x400HTRANSHBURSTHADDRHRDATAd1d0d2d4d3d50x4080x40CSEQSEQd6d7startof1kpage41地址译码•HSELx:选择从设备–指出由主设备所选择的从设备•由地址译码器来提供选择信号•一个从设备应该至少占用1KB的存储空间•需要一个额外的缺省从设备来映射其他的存储地址42地址译码(续)43从设备响应•所访问的从设备必须响应这次传输•从设备可能返回的响应:–完成这次传输–插入等待状态(HREADY信号)–发出错误信号表示这次传输失败–分离传输,使得总线