AMBA总线概述AMBA简介•随着EDA技术和深亚微米工艺制造技术的发展,集成电路技术逐渐步入SoC时代。SoC设计方法要求IP核具有很好的移植性和复用性。On-chipBus为不同的IP核提供了统一的接口标准,设计者通过设计On-chipBus将不同功能的IP核有效便捷的集成在一个芯片上成为一个片上系统。AMBA简介•AMBA总线是由ARM公司提出的一种开放性的片上总线标准,它独立于处理器和工艺技术,具有高速度低功耗等特点,受到集成电路设计行业的广泛欢迎。AMBA简介AMBA总线体系(AdvancedMicrocontrollerBusArchitecture)•定义了三种总线–AHB(AdvancedHigh-performanceBus)–ASB(AdvancedSystemBus)–APB(AdvancedPeripheralBus)AMBA发展•AMBA1.0:ASB&APB•AMBA2.0:AHB&APB•AMBA3.0•AMBA4.01.0版为了节省面积,Bus协议都为TristateBus(需要花费更多精力注意timing)2.0版本后随技术革新,为方便设计者,Bus改用Multiplexor架构。AMBA总线体系•一个以AMBA架构的SoC,一般包含高性能的系统总线AHB和低功耗的外设总线APB。系统总线(AHB)负责连接如嵌入式处理器、DMA控制器、片上存储器和其他外设接口,或者其他需求高带宽的元件。•而外设总线(APB)则用来连接系统周边的外部设备,其协议相对AHB较为简单。•AHB与APB之间通过桥接器(Bridge)互联。一个典型的AMBA系统•系统中的Master和Slave可按需求替换AMBAAHBAHB(AdvancedHigh-performanceBus)高级高性能总线•高速、高性能总线•Pipeline操作•支持多个Master(最多16个)•支持Burst传输•支持Split传输•Non-tristateBus•单时钟边沿操作AMBAAHB•AHBSystem由Master、Slave和Infrastructure构成•AHBBus上由Master发起传输,Slave负责响应。•Infrastructure由Arbiter、M2SMultiplexor、S2MMultiplexor、Decoder、DummySlave、DummyMaster组成。AMBAAHB•AHBSystem支持MultipleMaster,因此需要Arbiter仲裁。•Decoder负责地址译码从MultipleSlave中选择要响应传输的Slave。•为了不使用三态总线(TristateBus),AHB中使用两个Multiplexor负责Bus上的Routing。AMBAAHBBus上传输的信号可分为:–Clock–Arbitration–Address–ControlsignalM2SMultiplexor–Writedata–Readdata–ResponsesignalS2MMultiplexorAMBAAHB信号AMBAAHBBUSInterconnection省略部分信号:1.Controlsignal(HBURST、HTRANS)2.Master与Arbiter之间的Request/Grant信号3.Decoder与Slave之间的Selection信号4.Controlmux的output与Arbiter之间的信号(HTRANS/HBURST)5.Responsesignal(HREADY/HRESP)6.Arbiter输出的HMASTER发起一个请求给仲裁器驱动地址和控制信号允许某个主设备控制总线仅选中的从设备响应地址/控制信号拉高HREADY信号,总线传输完成AHBTransfer•Basictransfer–Addressphase•传输address和controlsignal–Dataphase•传输write/readdata和responsesignal•传输在dataphase时若一个clockcycle无法完成传输,Slave可通过拉低HREADY信号延长传输,传输结束时状态由SlaveHRESP信号反映。MasterreleaseaddressandcontrolSlavesampletheaddressandcontrolMastersamplethedataNotreadyNotreadyReady•一次transfer需要2phases完成,为了增加Bus传输效率,AHBSystem引入pipeline。•AHB将multipletransfer的addressphase和dataphase重叠在一起。•当前transfer的dataphase与下一次transfer的addressphase重叠•当前transfer的dataphase被延长将使下一次transfer的addressphase也跟着延长AHBTransferAAddressADataBAddressBDataCAddressCDataAHBControlSignal•AHB上的ControlSignal共五类:–HTRANS[1:0]:TransferType–HBURST[2:0]:BurstType–HPROT[3:0]:ProtectionControl–HSIZE[2:0]:TransferSize–HWRITE:TransferDirectionHTRANS[1:0]•TransferType,由Master发出:–IDLE:空闲传输,只是Slave忽略目前transfer,用于Master没有数据需要传输时,此时Slave在传输的dataphase以零等待状态OKAY响应•主设备占用总线,但没进行传输•两次burst传输中间主设备发IDLE–BUSY:在bursttransfer时Master传输连续的数据给Slave,若Master因为某些原因无法将数据即使准备好,此时使用BUSYtransfertype通知Slave,和响应IDLE一样,Slave在传输的dataphase以零等待状态OKAY响应•主设备占用总线,但是在burst传输过程中还没有准备好进行下一次传输•一次burst传输中间主设备发BUSY–NONSEQ:非连续传输,当前transfer的address和control信号与前一次传输无关•表明一次单个数据的传输•或者一次burst传输的第一个数据•地址和控制信号与上一次传输无关–SEQ:连续传输,当前transfer的address信号与前一次传输相关,control信号与前一次传输想同,通常用在bursttransfer中。•表明burst传输接下来的数据•地址和上一次传输的地址是相关的HTRANS[1:0]HTRANS[1:0]ThefirsttransferMasterisbusyThesubsequenttransferSlaveisnotready•Bursttype,由Master发出:–Bursttype用来让AHBMaster发出address彼此相关的连续transfer(control信号相同)–8种Bursttype–Incrementingburst:每一次transfer的address是前一次transfer的address加上transfersize–Wrappingburst:将存储器分割成transfersize×transferbeat大小的一个个存储区域。当transferaddress跨越存储边界时,下一次transferaddress将回到块区的起点。HBURST[2:0]HBURST[2:0]•对于固定长度的burst传输,不必持续请求总线;•对于未定义长度的burst传输,master应该持续送出request信号,直到开始最后一次传输;•如果没有master请求总线,则给defaultmasterGrant信号接入总线,且HTRANS=IDLE;•建议master在锁定总线传输结束之后插入IDLE传输,以重新仲裁优先级。几点说明•TransferDirection、TransferSize由Master发出:–HWRITE为HIGH,Master在dataphase将数据通过writedatabus(HWDATA[31:0])发往Slave–HWRITE为LOW,Slave在dataphase将数据通过readdatabus(HRDATA[31:0])发往MasterHWRITE&HSIZE[2:0]•ProtectionControl由Master发出:–HPROT[3:0]可以让master提供额外的保护信息–AHBSpec.未规定所有的master都要指示精确的保护信息,所以slave在设计时若非必须,尽量不要使用HPROT信号–若master没有protectiontransfer的考虑,HPROT[3:0]可以output=4’b0001HPROT[3:0]AHBDecoder•AHB系统中有一个核心地址译码器,它提供HSELx信号到各个AHBSlave;•Decoder本身只负责位地址译码,为纯组合逻辑电路;•Slave只有在HSELx和HREADY都为High才采样地址/控制信号;•AHB地址线有32条,为简化译码器译码时间,AHBSpec.规定每个Slave的最小地址空间为1KB,因此译码器最多只需要对22条地址线进行译码。•AddressDecodingAHBDecoder•Slave可通过HREADY信号extendtransfer(插入waitcycle),transfer结束时,HREADY在dataphase为High。•Slave还可以使用HRESP[1:0]去响应主机传输结束时候的状态•HRESP[1:0]可以在transfer结束时表示四种status–OKAY–ERROR–RETRY–SPLITAHBSlaveResponse•OKAY:transfer成功完成•ERROR:传输失败或出错。可能的原因例如企图写入read-only的memorylocation;读写根本不存在的memorylocation。•RETRY和SPLIT:Slave响应当前传输需要多个buscycle来完成,为避免因为当前transfer将bus一直占用或者锁死,Slave响应RETRY/SPLIT给master表示当前transfer未完成,master需要重新发出请求,重试。而此时arbiter可以将bus释放给其他有需要的master使用。AHBHRESP[1:0]ProcessorAMBAWriteMemEMemAMemBMemDMemCSlaveIcouldn’twriteitbecauseofnomemE!!!!AHBHRESP[1:0]AHBHRESP[1:0]MemAMemBMemDMemCSlaveProcessorAMBAWriteMemAIcouldn’twriteitnowforbusy!!!Youcouldretrywriteitlatter!!BUSY•RETRY与SPLIT区别:–RETRYresponse:arbiter内master优先级不变,当有更高优先级的masterrequest时,arbiter授予高优先级的masterbusaccess。若原来得到RETRYresponse的master是当前申请接入总线优先级最高的master,则bus依然被占用而无法释放给其他master。–SPLITresponse:当master收到SPLITresponse时,arbiter将当前master的优先级mask起来,此时该master无法再获得busaccess权力,即使没有其他master向arbiter发出总线接入请求也一样。若所有master都收到SPLITresponse,则arbiter将总线接入权限交给dummymaster(只会发出IDLEtrans