隨着深亞微米工藝技術日益成熟,集成電路芯片的規模愈來愈大。數字IC從基於時序驅動的設計方法,發展到基於IP複用的設計方法,並在SOC設計中獲得了普遍應用。在基於IP複用的SoC設計中,片上總線設計是最關鍵的問題。爲此,業界出現了不少片上總線標準。其中,由ARM公司推出的AMBA片上總線受到了廣大IP開發商和SoC系統集成者的青睞,已成爲一種流行的工業標準片上結構。算法
AMBA協議的演進api
V1.0 ASB、APB是第一代AMBA協議的一部分。主要應用在低帶寬的外設上,如UART、 I2C,它的架構不像AHB總線是多主設備的架構,APB總線的惟一主設備是APB橋(與AXI或APB相連),所以不須要仲裁一些Request/grant信號。APB的協議也十分簡單,甚至不是流水的操做,固定兩個時鐘週期完成一次讀或寫的操做。其特性包括:兩個時鐘週期傳輸,無需等待週期和迴應信號,控制邏輯簡單,只有四個控制信號。傳輸可用以下狀態圖表示,緩存
一、寫傳輸包括無等待狀態和有等待狀態安全
無等待狀態地址、寫入數據、寫入信號和選擇信號都在時鐘上升沿後改變。第一個時鐘週期叫作Setup phase。 下一個時鐘沿後使能信號PENABLE被置位,表示Access phase就位。地址、數據和控制信號在Access phase期間有效。傳輸在該週期後結束。使能信號PENABLE, 在傳輸結束後清空。 選擇信號PSELx一樣被置低,除非緊接着下一傳輸開始。有等待狀態右圖當PENABLE爲高,傳輸能夠經過拉低PREADY來擴展傳輸。架構
二、讀傳輸包括無等待狀態和有等待狀態app
無等待狀態從器件必須在讀傳輸結束前提供數據。有等待狀態在Access phase期間PREADY信號拉低,則傳輸被擴展。性能
三、傳輸失敗的例子spa
使用PSLVERR來指示APB傳輸錯誤。當PSEL, PENABLE以及PREADY 都爲高時,PSLVERR纔在最後一個週期進行判斷。 當任何一個PSEL, PENABLE或者PREADY爲低時,你能夠將PSLVERR拉低,這是推薦,並非強制要求。 收到一個錯誤後,可能或不可能改變外圍器件的狀態。 APB外圍設備不要求必須支持PSLVERR引腳,當不使用該引腳時,應被置低。設計
左圖爲寫傳輸失敗最後一個傳輸週期,PSLVERR信號拉高,右圖爲讀傳輸失敗,沒有讀出數據。3d
AXI橋接到APB: AXI的RRESP/BRESP = APB的SLVERR(read: PSLVERR -> RRESP[1], write: PSLVERR -> BRESP[1])
AHB橋接到APB: PSLVERR被映射到HRESP = ERROR(PSLVERR -> HRESP[0])
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的一種替代方案。
AHB總線強大之處在於它能夠將微控制器(CPU)、高帶寬的片上RAM、高帶寬的外部存儲器接口、DMA總線控制器,以及各類AHB接口的控制器等鏈接起來構成一個獨立的完整SOC系統,還能夠經過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的功能。
各個信號描述
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類型,支持四、八、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: OKAY
01: ERROR
10: RETRY
傳輸未完成,請求主設備從新開始一個傳輸,arbiter會繼續使用一般的優先級
11: SPLIT
傳輸未完成,請求主設備分離一次傳輸,arbiter會調整優先級方案以便其餘請求總線的主設備能夠訪問總線
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傳輸,每一位對應一個主設備 |
總線操做過程
有須要佔用總線的主設備向仲裁器發出請求,仲裁器受權給指定的總設備,任一時間週期只有一個主設備可使用總線,對其指定的從設備進行讀寫操做。
得到受權的總線開始AHB傳輸,首先發出地址和控制信號,提供地址信息(HADDR)、傳輸方向、帶寬(HSIZE)和burst類型信號(HBURST)。總線統一規劃從設備的地址(HSELx),譯碼器根據地址和控制信號肯定某個從設備與主設備進行通訊。數據傳輸經過數據總線完成,不出現三態總線,AHB將讀寫總線分爲讀總線和寫總線。每次傳輸包括一個地址和控制週期,一個或多個數據週期。地址和控制週期不能擴展,從設備必須在一個週期內採樣地址信號,數據週期能夠經過HREADY信號擴展,這點與前面的APB的PREADY信號實現有等待信號傳輸同樣。HREADY爲低時給傳輸加入一個等待狀態以使從設備得到額外的時間提供或採樣數據,從設備經過響應信號HRESP反映傳輸狀態,AHB-APB橋鏈接APB總線系統時,PSLVERR被映射到HRESP = ERROR(PSLVERR -> HRESP[0])。
一、沒有等待狀態和有等待狀態的單次傳輸
二、多個單次傳輸的流水線操做(pipeline)
3.相關傳輸 涉及信號傳輸類型HTRANS[1:0]、數據尺寸HSIZE[2:0]、Burst傳輸類型
HTRANS[1:0] | 傳輸類型 | Description |
00 | IDLE | 主設備佔用總線,但沒進行傳輸 兩次burst傳輸中間主設備可發IDLE 此時就算slave被使能,也不會從總線上獲取任何的數據信號。若是此時salve被選中,那麼每個IDLE週期slave都要經過HRESP[1:0]返回一個OKAY響應 |
01 | BUSY | 主設備佔用總線,可是在burst傳輸過程當中尚未準備好進行下一次傳輸 一次burst傳輸中間主設備可發BUSY 這時slave不會從總線上收取數據而是等待,而且經過HRESP[1:0]返回一個OKAY響應。須要注意的是,這個transfer須要給出下一拍的地址和控制信號,儘管slave不會去採樣。 |
10 | NONSEQ | 代表一次單個數據的傳輸或者一次burst傳輸的第一個數據 地址和控制信號與上一次傳輸無關 |
11 | SEQ | burst傳輸接下來的數據 地址和上一次傳輸的地址是相關的,這時總線上的控制信號應當與以前的保持一致,地址視狀況遞增或者回環。 |
HSIZE[2:0](每個transfer傳輸的數據大小,以字節爲單位,最高支持1024位) | Size | Description |
000 | 8 bits | Byte |
001 | 16 bits | Halfword |
010 | 32 bits | Word |
011 | 64 bits | - |
100 | 128 bits | 4-word line |
101 | 256 bits | 8-word line |
110 | 512 bits | - |
111 | 1024 bits | - |
HBURST[2:0]Burst傳輸類型 | 類型 | Description |
000 | SINGLE | Single transfer單個傳輸數據傳輸 |
001 | INCR | Incrementing burst of unspecified length 任意長度的數據傳輸 |
010 | WRAP4 | 4-beat wrapping burst 打包4拍傳輸,四個地址是一個迴環範圍 |
011 | INCR4 | 4-beat increment burst 4拍傳輸,地址是增長的 |
100 | WRAP8 | 8-beat wrapping burst 打包8拍傳輸,八個地址是一個迴環範圍 |
101 | INCR8 | 8-beat increment burst 8拍傳輸,地址是增長的 |
110 | WRAP16 | 16-beat wrapping burst 打包16拍傳輸,十六個地址是一個迴環範圍 |
111 | INCR16 | 16-beat increment burst 16拍傳輸,地址是增長的 |
四、打包4拍傳輸
五、無定長數據增量地址傳輸
六、增量4拍burst
V3.0 AXI(Advanced eXtensible Interface)是一種總協議,該協議是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0協議中最重要的部分。
一、 AXI的五個通道
ACLK爲axi總線時鐘,ARESETN是axi總線復位信號,低電平有效;讀寫數據與讀寫地址類信號寬度都爲32bit;READY與VALID是對應的通道握手信號;WSTRB信號爲1的bit對應WDATA有效數據字節,WSTRB寬度是32bit/8=4bit;BRESP與RRESP分別爲寫回應信號,讀迴應信號,寬度都爲2bit,‘h0表明成功,其餘爲錯誤。
二、握手機制
每一個channel內的valid和ready之間沒有嚴格的前後順序,可是channel間的valid和ready信號有依賴關係。對於讀操做,spec要求讀data必須出如今讀addr以後,所以讀操做的兩個channel之間存在以下的依賴關係,即必須等到ARVALID的ARREADY同時爲High後,RVALID才能拉高。
對於寫操做,addr和data兩個channel之間不存在依賴關係,可是隻能等最後一次transfer結束後,才能拉高BVALID。從下圖中看不出AWVLAID, AWREAY與BVALID之間的關係,可是,隱含條件是slave只有接收到addr和data後,才能作出響應,所以AWAVLID, AWREADY爲High,且最後一次transfer結束後才能拉高BVALID.
三、讀操做
順序爲主與從進行讀地址通道握手並傳輸地址內容,而後在讀數據通道握手並傳輸所讀內容以及讀取操做的迴應,時鐘上升沿有效。
四、寫操做
順序爲主與從進行寫地址通道握手並傳輸地址內容,而後在寫數據通道握手並傳輸所讀內容,最後再寫回應通道握手,並傳輸寫回應數據,時鐘上升沿有效。
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進行以數據爲主導的大量數據的傳輸應用。
AXI架構分爲5個獨立的傳輸通道,讀地址通道、讀數據通道、寫地址通道、寫數據通道、寫響應通道。基於VALID/READY的握手機制數據傳輸協議,傳輸源端使用VALID代表地址/控制信號、數據是有效的,目的端使用READY代表本身可以接受信息。數據總線可爲(8/16/32/64/128/256/512/1024bit),最大爲單次傳輸一個字節的數據。
.信號描述
信號名 | 源 | 描述 |
ACLK | 時鐘源 | 全局時鐘信號 |
ARESETn | 復位源 | 全局復位信號,低有效 |
信號名 | 源 | 描述 |
AWID | 主機 | 寫地址ID,用來標誌一組寫信號 |
AWADDR | 主機 | 寫地址,給出一次寫突發傳輸的寫地址 |
AWLEN | 主機 | 突發長度,給出突發傳輸的次數 |
AWSIZE | 主機 | 突發大小,給出每次突發傳輸的字節數 |
AWBURST | 主機 | 突發類型 |
AWLOCK | 主機 | 總線鎖信號,可提供操做的原子性 |
AWCACHE | 主機 | 內存類型,代表一次傳輸是怎樣經過系統的 |
AWPROT | 主機 | 保護類型,代表一次傳輸的特權級及安全等級 |
AWQOS | 主機 | 質量服務QoS |
AWREGION | 主機 | 區域標誌,能實現單一物理接口對應的多個邏輯接口 |
AWUSER | 主機 | 用戶自定義信號 |
AWVALID | 主機 | 有效信號,代表此通道的地址控制信號有效 |
AWREADY | 從機 | 代表「從」能夠接收地址和對應的控制信號 |
信號名 | 源 | 描述 |
WID | 主機 | 一次寫傳輸的ID tag |
WDATA | 主機 | 寫數據 |
WSTRB | 主機 | 寫數據有效的字節線,用來代表哪8bits數據是有效的 |
WLAST | 主機 | 代表這次傳輸是最後一個突發傳輸 |
WUSER | 主機 | 用戶自定義信號 |
WVALID | 主機 | 寫有效,代表這次寫有效 |
WREADY | 從機 | 代表從機能夠接收寫數據 |
信號名 | 源 | 描述 |
BID | 從機 | 寫響應ID tag |
BRESP | 從機 | 寫響應,代表寫傳輸的狀態 |
BUSER | 從機 | 用戶自定義 |
BVALID | 從機 | 寫響應有效 |
BREADY | 主機 | 代表主機可以接收寫響應 |
信號名 | 源 | 描述 |
ARID | 主機 | 讀地址ID,用來標誌一組寫信號 |
ARADDR | 主機 | 讀地址,給出一次寫突發傳輸的讀地址 |
ARLEN | 主機 | 突發長度,給出突發傳輸的次數 |
ARSIZE | 主機 | 突發大小,給出每次突發傳輸的字節數 |
ARBURST | 主機 | 突發類型 |
ARLOCK | 主機 | 總線鎖信號,可提供操做的原子性 |
ARCACHE | 主機 | 內存類型,代表一次傳輸是怎樣經過系統的 |
ARPROT | 主機 | 保護類型,代表一次傳輸的特權級及安全等級 |
ARQOS | 主機 | 質量服務QoS |
ARREGION | 主機 | 區域標誌,能實現單一物理接口對應的多個邏輯接口 |
ARUSER | 主機 | 用戶自定義信號 |
ARVALID | 主機 | 有效信號,代表此通道的地址控制信號有效 |
ARREADY | 從機 | 代表「從」能夠接收地址和對應的控制信號 |
信號名 | 源 | 描述 |
RID | 從機 | 讀ID tag |
RDATA | 從機 | 讀數據 |
RRESP | 從機 | 讀響應,代表讀傳輸的狀態 |
RLAST | 從機 | 代表讀突發的最後一次傳輸 |
RUSER | 從機 | 用戶自定義 |
RVALID | 從機 | 代表此通道信號有效 |
RREADY | 主機 | 代表主機可以接收讀數據和響應信息 |
信號名 | 源 | 描述 |
CSYSREQ | 時鐘控制器 | 系統退出低功耗請求,此信號從「時鐘控制器」到「外設」 |
CSYSACK | 外設 | 退出低功耗狀態確認 |
CACTIVE | 外設 | 外設請求時鐘有效 |
每一個數據通道有獨立的xVALID/xREADY握手信號對。
VALID與READY信號做爲一對握手信號,爲防止死鎖,進行讀操做時,必須等讀地址通道握手完成,讀數據通道纔可進行下一步操做。進行寫操做時,寫地址通道與寫數據通道互相獨立,但一樣必須等最後一組數據寫完成寫響應通道握手完成。
AXI協議是基於burst的,主機只給出突發傳輸的第一個字節的地址,從機必須計算突發傳輸後續的地址。突發傳輸不能跨4KB邊界(防止突發跨越兩個從機的邊界,也限制了從機所需支持的地址自增數)。
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 Reserved
Start_Address=AxADDR
Number_Bytes=2^AxSIZE
Burst_Length=AxLEN+1
Aligned_Addr=(INT(Start_Address/Number_Bytes))xNumber_Bytes。//INT表示向下取整。
對於INCR突發和WRAP突發但沒有到達迴環邊界,地址由下述方程決定:
Address_N=Aligned_Address+(N-1)xNumber_Bytes
WRAP突發,突發邊界:
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):譯碼錯誤。通常由互聯組件給出,代表沒有對應的從機地址。
幾種AMBA總線的性能對比分析
總線 | AXI | AHB | APB |
總線寬度 | 8, 16, 32, 64, 128, 256, 512, 1024 | 32, 64, 128, 256 | 8, 16, 32 |
地址寬度 | 32 | 32 | 32 |
通道特性 | 讀寫地址通道、讀寫數據通道均獨立 | 讀寫地址通道共用讀寫數據通道 | 讀寫地址通道共用讀寫數據通道 不支持讀寫並行操做 |
體系結構 | 多主/從設備 仲裁機制 |
多主/從設備 仲裁機制 |
單主設備(橋)/多從設備 無仲裁 |
數據協議 | 支持流水/分裂傳輸 支持猝發傳輸 支持亂序訪問 字節/半字/字 大小端對齊 非對齊操做 |
支持流水/分裂傳輸 支持猝發傳輸 支持亂序訪問 字節/半字/字 大小端對齊 不支持非對齊操做 |
一次讀/寫傳輸佔兩個時鐘週期 不支持突發傳輸 |
傳輸方式 | 支持讀寫並行操做 | 不支持讀寫並行操做 | 不支持讀寫並行操做 |
時序 | 同步 | 同步 | 同步 |
互聯 | 多路 | 多路 | 無定義 |