7 AMBA總線(6學(xué)時)
單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,,*,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,,AMBA,總線,2,SEP3203,,3,目錄,AMBA,總線概述,AHB,APB,不同,IP,之間的互連,4,系統(tǒng)總線簡介,系統(tǒng)芯片中各個模塊之間需要有接口來連接,總線作為子系統(tǒng)之間共享的通信鏈路,優(yōu)點,低成本,方便易用,缺點,會造成性能瓶頸,5,AMBA,介紹,Advanced Microcontroller Bus Architecture,片上總線的標(biāo)準(zhǔn),定義了三種總線,AHB (Advanced High-performance Bus),ASB (Advanced System Bus),APB (Advanced Peripheral Bus),,6,AMBA,發(fā)展歷史,AMBA 1.0,ASB,和,APB,AMBA 2.0,AHB, ASB,和,APB,AMBA 3.0,AMBA Advanced eXtensible Interface (AXI),,7,一個典型的,AMBA,系統(tǒng),處理器和其它主設(shè)備,/,從設(shè)備都是可以替換的,8,AHB,高速總線,高性能,流水線操作,可支持多個總線主設(shè)備(最多,16,個),支持,burst,傳輸,總線帶寬:,8,、,16,、,32,、,64,、,128bits,上升沿觸發(fā)操作,對于一個新設(shè)計建議使用,AHB,,9,ASB,高速總線,流水線操作,支持多個總線主設(shè)備,支持,burst,傳輸,總線帶寬:,8,、,16,、,32bits,三態(tài)、雙向總線,(不適于做,DFT,),下降沿或者上升沿觸發(fā),10,APB,低速總線、低功耗,接口簡單,在,Bridge,中鎖存地址信號和控制信號,適用于多種外設(shè),上升沿觸發(fā),,11,AHB,組成部分,AHB,主設(shè)備(,master,),初始化一次讀,/,寫操作,某一時刻只允許一個主設(shè)備使用總線,uP,、,DMA,、,DSP,、,LCDC …,AHB,從設(shè)備(,slave,),響應(yīng)一次讀,/,寫操作,通過地址映射來選擇使用哪一個從設(shè)備,外部存儲器控制器,EMI,、,APB bridge,、,UART,、,…,AHB,仲裁器(,arbiter,),允許某一個主設(shè)備控制總線,在,AMBA,協(xié)議中沒有定義仲裁算法,AHB,譯碼器(,decoder,),通過地址譯碼來決定選擇哪一個從設(shè)備,12,APB,組成部分,AHB2APB Bridge,可以鎖存所有的地址、數(shù)據(jù)和控制信號,進(jìn)行二級譯碼來產(chǎn)生,APB,從設(shè)備選擇信號,APB,總線上的所有其他模塊都是,APB,從設(shè)備,不是流水線方式,接口是零功耗,,13,AMBA,協(xié)議其他有關(guān)問題,與工藝無關(guān),沒有定義電氣特性,僅在時鐘周期級定義時序,提取時序參數(shù)依賴于所采用的工藝和工作頻率,14,目錄,AMBA,總線概述,AHB,APB,不同,IP,之間的互連,,15,AHB,總線互連,,16,AHB,傳輸,,發(fā)起一個請求給仲裁器,驅(qū)動地址和控制信號,允許某個主設(shè)備控制總線,僅選中的從設(shè)備響應(yīng)地址,/,控制信號,拉高,HREADY,信號,總線傳輸完成,17,Dummy/Default Master,Dummy Master,,Granted when all masters SPLIT,Generates IDLE cycles only,Typically Master #0,,Granted when Locked master gets SPLIT response,Implement as part of Address/Control Mux,Default Master,,Granted when no master requires bus,Generally master most likely to require bus,Generates IDLE cycles when not requesting bus,,Avoids minimum 2 cycle Arbitration period,Immediate access to bus,18,,,Default Slave,,Slave 3,(APB),Default Slave,0x0000_0000,0xFFFF_FFFF,case HADDR is,when …. =>,HSELebi <= ‘1’;,when …. =>,HSELsram <= ‘1’;,when …. =>,HSELapb <= ‘1’;,when,others,=>,HSELdefault <= ‘1’;,end case;,Decoder,logic,Slave 2,(Internal,Memory),Default_Slave,logic,case HTRANS is,when IDLE|BUSY =>,HRESP <= OKAY;,when others =>,HRESP <= ERROR;,end case;,Slave 1,(External),0xCFFF_FFFF,,,0xC000_0000,,,,,,,0x5000_FFFF,,,0x5000_0000,,,,,,,,0x3FFF_FFFF,,,0x0000_0000,19,AHB,信號,20,基本,AHB,信號,HRESETn,低電平有效,HADDR[31:0],32,位系統(tǒng)地址總線,HWDATA[31:0],寫數(shù)據(jù)總線,從主設(shè)備寫到從設(shè)備,HRDATA[31:0],讀數(shù)據(jù)總線,從從設(shè)備讀到主設(shè)備,21,基本,AHB,信號(續(xù)),HTRANS,指出當(dāng)前傳輸?shù)臓顟B(tài),NONSEQ,、,SEQ,、,IDLE,、,BUSY,HSIZE,指出當(dāng)前傳輸?shù)拇笮?HBURST,指出傳輸?shù)?burst,類型,HRESP,從設(shè)備發(fā)給主設(shè)備的總線傳輸狀態(tài),OKAY,、,ERROR,、,RETRY,、,SPLIT,HREADY,高:從設(shè)備指出傳輸結(jié)束,低電平:從設(shè)備需延長傳輸周期,22,基本,AHB,傳輸,兩個階段,地址周期,只有一個,cycle,數(shù)據(jù)周期,由,HREADY,信號決定需要幾個,cycle,流水線傳送,先是地址周期,然后是數(shù)據(jù)周期,23,Master release address and control,Slave sample the address and control,Master sample the data,,If slave hasn’t ready to receive data, how to do?,基本,AHB,傳輸(續(xù)),一次無需等待狀態(tài)的簡單傳輸,,24,Not ready,Not ready,Ready,One transfer need at least two cycles, how to promote its efficiency?,Note: slave shouldn’t insert more than 16 wait cycles!!!,基本,AHB,傳輸(續(xù)),需要兩個等待周期的簡單傳輸,,25,Pipeline,A Address,A Data,B Address,B Data,C Address,C Data,Slave decodes every transfer, so many waits, how to decrease the wait cycles?,基本,AHB,傳輸(續(xù)),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 data, 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,傳輸(續(xù)),27,傳輸類型,HTRANS[1:0],:當(dāng)前傳輸?shù)臓顟B(tài),IDLE,、,BUSY,、,NONSEQ,、,SEQ,00,:,IDLE,主設(shè)備占用總線,但沒進(jìn)行傳輸,兩次,burst,傳輸中間主設(shè)備發(fā),IDLE,01,:,BUSY,主設(shè)備占用總線,但是在,burst,傳輸過程中還沒有準(zhǔn)備好進(jìn)行下一次傳輸,一次,burst,傳輸中間主設(shè)備發(fā),BUSY,,28,傳輸類型(續(xù)),10,:,NOSEQ,表明一次單個數(shù)據(jù)的傳輸,或者一次,burst,傳輸?shù)牡谝粋€數(shù)據(jù),地址和控制信號與上一次傳輸無關(guān),11,:,SEQ,表明,burst,傳輸接下來的數(shù)據(jù),地址和上一次傳輸?shù)牡刂肥窍嚓P(guān)的,29,The first transfer,Master is busy,The subsequent transfer,The subsequent transfer,Slave is not ready,The subsequent transfer,傳輸類型舉例,30,其它,AHB,控制信號,HWRITE,高電平:寫,低電平:讀,HSIZE[2:0],000:8bits 100:128bits,001:16bits 101:256bits,010:32bits 110:512bits,011:64bits 111:1024bits,最大值受總線的配置所限制,通常使用,32bits,(,010,),31,其它,AHB,控制信號(續(xù)),HPROT[3:0],HPROT[0]: OPCODE/DATA,HPROT[1]: USER/PRIVILGED,HPROT[2]: Bufferable/Non-Bufferable,HPROT[3]: Cacheable/Non-Cacheable,,32,AHB,控制信號小結(jié),HTRANS[1:0],IDLE,BUSY,NONSEQ,SEQ,HBURST[2:0],SINGLE,INCR,WRAP[4|8|16],INCR[4|8|16],HSIZE[2:0],Byte,Halfword,Word,Doubleword,...,HPROT[3: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,、單個字節(jié)傳輸、未定義長度的傳輸,支持,incrementing,和,wrapping,兩種,burst,傳輸,Incrementing burst,地址是上一次的傳輸?shù)刂芳?1,Wrapping burst,例:,4beat,的,wrapping burst,字傳輸(,4byte,):,0x34 -> 0x38 -> 0x3c -> 0x30,應(yīng)用場合:,Cache,填充,,34,地址計算舉例,根據(jù),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,0x7c,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,0x38,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,邊界,一個從設(shè)備最小的地址間隙是,1KB,NONSEQ -> SEQ -> 1KB Boundary ->,NONSEQ -> SEQ …,主設(shè)備不能試圖開始一個可能穿越,1K,邊界的固定長度的,incrementing burst,傳輸,,,,42,,INCR Burst over 1k boundary,HCLK,SEQ,NSEQ,SEQ,NSEQ,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,:選擇從設(shè)備,指出由主設(shè)備所選擇的從設(shè)備,由地址譯碼器來提供選擇信號,一個從設(shè)備應(yīng)該至少占用,1KB,的存儲空間,需要一個額外的缺省從設(shè)備來映射其他的存儲地址,44,地址譯碼(續(xù)),,45,從設(shè)備響應(yīng),所訪問的從設(shè)備必須響應(yīng)這次傳輸,從設(shè)備可能返回的響應(yīng):,完成這次傳輸,插入等待狀態(tài)(,HREADY,信號),發(fā)出錯誤信號表示這次傳輸失敗,延遲傳輸,使得總線可用于其他傳輸(,split,),46,從設(shè)備響應(yīng)信號,HREADY,:,transfer done,HRESP[1:0],:,transfer response,00,:,OKAY,成功,01,:,ERROR,失敗,10,:,RETRY,傳輸未完成,請求主設(shè)備重新開始一個傳輸,11,:,SPLIT,傳輸未完成,請求主設(shè)備分離一次傳輸,47,兩周期的響應(yīng),HRESP[1:0],OKAY,:單周期響應(yīng),ERROR,:兩周期響應(yīng),RETRY,:兩周期響應(yīng),SPLIT,:兩周期響應(yīng),總線的流水特性需要從設(shè)備兩個周期的響應(yīng)??梢允沟弥髟O(shè)備有足夠的時間處理下一次傳輸。,48,Slave Responses,,Mem A,Mem B,Mem D,Mem C,,Slave,,Processor,AMBA,Write Mem E,,I couldn’t 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 couldn’t write it now for busy!!!You could retry write it latter!!,BUSY,RETRY|SPLIT,50,例:,Retry,響應(yīng),,51,RETRY,和,SPLIT,的不同,主要區(qū)別在于仲裁的方式,RETRY,:,arbiter,會繼續(xù)使用通常的優(yōu)先級,SPLIT,:,arbiter,會調(diào)整優(yōu)先級方案以便其他請求總線的主設(shè)備可以訪問總線,總線主設(shè)備應(yīng)該用同樣的方式處理,RETRY,響應(yīng)和,SPLIT,響應(yīng),52,Locked Transfers,HCLK,,HADDR,,HWDATA,,HLOCK,,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 by interconnect,HLOCK indicates next address phase is part of a locked transfer,In the above transfers to addresses B & C are locked and should not be separated,ARM processors use HLOCK for SWP instruction only,53,數(shù)據(jù)總線,不是三態(tài)總線,讀總線和寫總線是分開的。,印第安序,在,AMBA,協(xié)議中沒有定義,主設(shè)備和從設(shè)備應(yīng)該采用同樣的印第安序,不支持動態(tài)印第安序,對于,IP,設(shè)計, 只有應(yīng)用面比較廣泛的應(yīng)用程序才支持兩種印第安序。,54,32bit,小印第安數(shù)據(jù)總線的有效字節(jié),,55,32bit,大印第安數(shù)據(jù)總線的有效字節(jié),,56,多個主設(shè)備,I am first,I am first!!!,57,AHB,仲裁信號,,58,仲裁信號(續(xù)),HBUSREQ,總線請求,HLOCKx,:,高電平:主設(shè)備請求鎖定總線,HGRANTx,指出主設(shè)備,x,可訪問總線,主設(shè)備,x,控制總線:,HGRANTx=1,且,HREADY=1,59,仲裁信號(續(xù)),HMASTER[3:0],指出哪個主設(shè)備正在進(jìn)行傳輸,HMASTLOCK,指出主設(shè)備正在進(jìn)行一次鎖定傳輸,HSPLITx[15:0],從設(shè)備用這個信號告訴仲裁器哪個主設(shè)備允許重新嘗試一次,split,傳輸。,每一位對應(yīng)一個主設(shè)備,,60,仲裁舉例(,1,),沒有等待狀態(tài)的,grant,61,仲裁舉例(,2,),有等待狀態(tài)的,grant,,62,仲裁舉例(,3,),Burst,傳輸之后移交總線,,63,總線主設(shè)備,Grant,信號,,Arbiter,64,幾點說明,對于固定長度的,burst,傳輸,不必持續(xù)請求總線,對于未定義長度的,burst,傳輸,主設(shè)備應(yīng)該持續(xù)送出,request,信號,直到開始最后一次傳輸。,如果沒有主設(shè)備請求總線,則給缺省主設(shè)備,grant,信號,且,HTRANS=IDLE,建議主設(shè)備在鎖定總線傳輸結(jié)束之后插入,IDLE,傳輸,以重新仲裁優(yōu)先級。,65,Split,傳輸過程,由主設(shè)備開始傳輸。,如果從設(shè)備需要多個周期才能獲取數(shù)據(jù),則從設(shè)備給出一個,SPLIT,傳輸響應(yīng)。從設(shè)備記錄主設(shè)備號:,HMASTER,。接著仲裁器改變主設(shè)備的優(yōu)先級。,仲裁器,grant,其他的主設(shè)備,總線主設(shè)備移交。,當(dāng)從設(shè)備準(zhǔn)備結(jié)束本次傳輸,將設(shè)置給仲裁器的,HSPLITx,信號的相應(yīng)位。,仲裁器恢復(fù)優(yōu)先級,仲裁器,grant,主設(shè)備,這樣主設(shè)備可以重新開始傳輸。,結(jié)束,66,防止,Deadlock,當(dāng)多個不同的主設(shè)備試圖訪問同一個從設(shè)備,這個從設(shè)備發(fā)出了,SPLIT,或,RETRY,信號,這是很可能發(fā)生,deadlock,從設(shè)備最多可以接收系統(tǒng)中,16,個主設(shè)備的請求。只需要記錄主設(shè)備號(忽略地址和控制信號),給出,RETRY,響應(yīng)的從設(shè)備在某一時刻只能由一個主設(shè)備訪問。,可以使用一些硬件保護機制,比如,ERROR,67,AHB,主設(shè)備接口,,68,AHB,從設(shè)備接口,,69,AHB Arbiter,,70,AHB Decoder,,71,Typical Multi-layer example,Master 0,On-chip,RAM,Master 1,External,Memory,I/F,DMA,Slave,Slave,Mux,Slave,Mux,UART,Timer,GPIO,AHB2APB,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,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,Master 0,Slave,#1,Slave,#2,Slave,#3,Slave,#4,73,AHB,總結(jié),主要組成部分,Master,、,slaves,、,arbiter,、,decoder,傳輸?shù)倪^程,流水線機制,Address phase,和,data phase,如何提高性能,Burst read/write,仲裁機制,總線控制權(quán)的移交,74,AHB,總結(jié)(續(xù)),Slave,短時間內(nèi)無法響應(yīng),HREADY,信號拉低,Slave,長時間內(nèi)無法響應(yīng),插入,SPLIT/RETRY,Master,不能進(jìn)行傳輸,插入,BUSY,75,AHB,的應(yīng)用建議,Arbiter,的優(yōu)先級可以配置,Slave,長時間不能響應(yīng)的話,一般不支持,SPLIT,響應(yīng),使用,RETRY,響應(yīng),總線上如果只有一個,master,的話,可以使用,AHB lite,協(xié)議,不用,arbiter,設(shè)計一個新的,IP,時,要仔細(xì)核對,AMBA,的,Feature,和,IP,所支持的,Feature,是否匹配。,76,實現(xiàn),如果設(shè)計中既有主設(shè)備端口又有從設(shè)備端口,通過主設(shè)備端口讀,/,寫數(shù)據(jù),通過從設(shè)備端口配置寄存器等,如處理器設(shè)置的一些參數(shù),,,77,目錄,AMBA,總線概述,AHB,APB,不同,IP,之間的互連,78,APB,信號,,79,APB,信號(續(xù)),PADDR[31:0],地址總線,由設(shè)備總線的,bridge,單元驅(qū)動,PSELx,從譯碼器來的信號,到每一個總線從設(shè)備,x,PENABLE,用于在設(shè)備總線上把所有訪問按時間階段進(jìn)行,PWRITE,高電平:寫,低電平:讀,PRDATA,和,PWDATA,最多,32,位寬,80,,,Address Decoding Stages,,Slave 3,(APB),Slave 1,(EBI),Slave 2,(SRAM),0xCFFF_FFFF,,0xC000_0000,,,,,,,,0x5000_FFFF,,0x5000_0000,,,,,,0x3FFF_FFFF,,0x0000_0000,Peripheral 3,(UART),Peripheral 1,(Int Cont),Peripheral 2,(Timers),0xC3FF_FFFF,,0xC300_0000,,,,0xC2FF_FFFF,,0xC100_0000,,,,0xC000_FFFF,,0xC000_0000,APB,memory map,Timer 2,Timer 1,0xC2FF_FFFF,,0xC200_0000,,,,0xC1FF_FFFF,,0xC100_0000,AHB Decoder,HSELapb,PSELtim,APB Bridge,Timers,AHB,memory map,Timers,memory map,81,APB Interconnect,AHB2APB,Bridge,APB,Master,PADDR,HCLK,PSEL#1,PWRITE,PSEL#2,PSEL#3,PCLK,HADDR,HWRITE,,Peripheral,#1,,Peripheral,#3,,Peripheral,#2,PENABLE,,,,,,PWDATA,PRDATA,HRDATA,HSEL,HWDATA,AHB,APB,,,,,,,,,,,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,每一個從設(shè)備都占用系統(tǒng)中的一段地址空間,所有的從設(shè)備都是可尋址的,寄存器,/,存儲器都是內(nèi)存映射方式訪問,CPU/IP,讀寫其他,IP,的數(shù)據(jù)類似于讀寫存儲器,91,IP,間的通信互連,主設(shè)備被,arbiter grant,之后,可以訪問總線上的所有從設(shè)備,,92,一個,IP,可以同時擁有主設(shè)備接口和從設(shè)備接口,,93,CPU,和,IP,之間的通信,CPU,總是作為主設(shè)備,IP,總是作為從設(shè)備,IP,可以發(fā)出一個中斷請求,CPU,進(jìn)入中斷模式,由,interrupt service routine (ISR),來處理中斷,94,例:,DMA,,95,例:,DMA,Step0,:,CPU,檢查,DMA,的狀態(tài)以確認(rèn)是否可用,,While(1),{,Read(0x30004,&status),if(status == 0),break;,},96,例:,DMA,Step1,:,CPU,設(shè)置(,source address,)、(,destination address,)(,size,),,,Write (0x30008,0x10000),Write(0x3000C,0x20000),Write(0x30010,0x100),,Step 2:,啟動,DMA,,Write(0x30000,0x1),97,例:,DMA,Step3,:,DMA,把數(shù)據(jù)從,memory 1,,傳送到,memory 2,98,例:,DMA,Step 4,:,DMA,向,CPU,發(fā)出中斷請求,Step 5,:,CPU,檢查,DMA,的狀態(tài),Read(0x30004, &status),