ACE Bus

對於coherency transaction load操做,data來源:app

  1) 能夠從其餘cache master的cache line拿到,dom

  2) 由interconnect中的buffer直接返回,或者interconnect發出的ReadNoSnoop transaction返回數據。ssh

對於coherency transaction store操做,要求master:oop

  1) 該數據所在的cache line的狀態是unique翻譯

  2) 指定的transaction type,來保證第一點。 server

ACE所支持的coherency的協議是MOESI,也能夠向下兼容MEI,MESI等,有的cpu處理器不支持SharedDirty(Owned)blog

  Axaddr channel增長的信號:同步

    AxBar[1:0],  01------Memory Barrier,對DMB指令的翻譯。it

           10-------Sync Barrier,對DSB指令的翻譯。io

    Axdomain[1:0],對於coherent trans,該信號,來指定snoop filter尋找cache copy的範圍

              inner-shareable通常是同一個cpu cluster之間的cache coherent查詢

              outer-shareable通常是全部的支持coherent的master,兩個cpu cluster之間的cache coherent查詢(若是隻有一個outer-shareable domain)

              system,包括全部的master,可是對coherent的查詢,與outer-shareable相同

            對於barrier trans,該信號,來決定barrier trans,通過interconnect須要propagate的範圍,指定observer。

              inner-shareable,表示該domain的全部master到interconnect的slave port都須要observe。

              outer-shareable,表示全部cache-master到interconnect的slave port都須要observe。(若是隻有一個outer-shareable domain)。

            因爲目前都是cpu cluster內一個interconnect,鎖哥cpu cluster之間還有一個interconnect

              因此inner-shareable是cluster內部的trans,outer-shareable包括全部的cache master。

    Axsnoop[3:0],指定snoop trans的類型。

  RESP channel增長的信號:

    RRESP[2],PassDirty,表示須要initial master來寫入main memory,當前的master的cache line必須是Dirty state。

    RRESP[3],IsShared,值爲1,表示當前master的cache line的狀態必須是在Shared state。

                值爲0,表示當前master的cache line的狀態能夠在unique state。

    這兩bit,在全部的rdata beat中都必須保持相同。

      針對unique類的操做和cache maintainance的操做,IsShared爲0。

        ReadUnique,CleanUnique,MakeUnique。CleanInvalid,MakeInvalid.

      針對read類操做,unique類操做,cache maintainance的操做,PassDirty爲0。

        ReadOnce,ReadClean。CleanUnique,MakeUnique。CleanShared,CleanInvalid,MakeInvalid。

      不是coherent類型的操做,NoSnoop,Barrier,DVM,這倆bit必須爲0。

      ReadClean,ReadNotSharedDirty,ReadShared,返回的PassDirty,Isshared,能夠根據狀況toggle。

  Read Ack signal:在RLAST以後,由master發出,表示該筆coherency 操做已經結束。

  Write Resp signal,沒有變化。

  Write Ack signal:在Bvalid和Bready以後,由master發出。

 

1----coherency transaction:

coherency transaction能夠分爲幾個transaction group:

  1) NoSnoop----------Write/Read

  2) Coherent----------Write/Read

    Read,分爲兩大類,ReadOnce(No alloc),ReadShared / ReadClean / ReadNotSharedDirty(alloc)

        Unique類的trans,ReadUnique(PE沒有該cache line,partial cache line store),CleanUnique(PE有該cache line,partial),

                MakeUnique(full cache line)。

    Write,WriteUnique(partial store),WriteLineUnique(full cache store)

  3) cache mantenance--------Read,Clean類型的trans,CleanShared,CleanInvalid,MakeInvalid

      cache clean,表示將dirty cache data寫入main memory;

      cache invalid,表示將cache copy,invalid掉,以後的讀寫只能從main memory來拿數據。

  4) Barrier-------------Write/Read,

  5) Memory update-------Write,WriteClean(alloc),WriteBack(No alloc),WriteEvict,都是no snoop的trans

 

對於read類型的snoop操做,主要是區分是否alloc,能夠讀取何種類型的cache line來區分。

對於write類型的snoop操做,主要分爲unique類型的trans和write coherent類型的trans。

  1) unique類型的trans,只是將該master下的cache line state置爲UniqueDirty,使之知足store的條件。以後會經過memory update操做來更新memory

    ReadUnique,CleanUnique,MakeUnique,只是invalid其餘master中的cache line。這個過程能夠由cache master實現,也能夠由interconnect來實現。

  2) Write coherent類型的trans,至關於執行了CleanUnique以及WriteBack等操做

    WriteUnique = ReadUnique+writeBack。

 

各個操做過程當中對initial master和其餘cache master的影響

memory update類型的先後cache state變化,WriteBack,state從Dirty-------Invalid;

                    WriteClean,state從Dirty--------Clean;

cache maintanance先後的cache state變化,CleanShared,initial master的state不變,其餘master中的該cache變爲invalid或者clean

                      CleanInvalid,initial master的state不變,其餘master中的該cache變爲invalid。通常initial master的state也是invalid

                    MakeInvalid,initial master的state不變,其餘master中的該cache變爲invalid。dirty不會更新main memory

Read類型的snoop trans,ReadClean,ReadNotShareDirty,ReadShared,initial master的state通常是invalid----UC/UD/SC等

                            具體的state變化,主要看其餘master的處理,interconnect的處理,以及interconnect返回給initial master的resp

            ReadOnce,initial master的state通常是invalid------invalid,通常是intiial master自己沒有cache,拿過來以後也不會alloc新的cache

Unique類型的snoop trans, ReadUnique,initial state通常從Invalid------UC/UD,其餘master的該cache line變爲invalid、

               CleanUnique,initial state通常從SC/SD------UC/UD,其餘master的該cache line變爲invalid、  這兩種unique,一般與partitial store配合使用

               MakeUnique,老是與full cache line store一塊兒使用。兩個操做以後,initial state通常從Invalid/SC/CD------UD,其餘master的該cache line變爲invalid、

 

Write類型的snoop trans,WriteUnique,initial master的state從Invalid/UC/SC-----Invalid/SC/SC,其餘cache master中的cache line的state變爲invalid。

              在收到transaction的resp以後,cache line中的值必須變爲新的值。進行partitial的store

             WriteLineUnique,initial master的state從invalid/UC/SC------Invalid/SC/SC,其餘cache master中的cache line的state變爲invalid。

              在收到transaction的resp以後,cache line中的值必須變爲新的值,進行full cache line store

no snoop的操做,WriteBack,UD/SD-------Invalid。

        WriteClean,UD/SD---------UC/SC,這兩個操做都是在cache line已經dirty的狀況下作的操做。

        WriteEvict,UC/UD--------Invalid,只有在支持snoop filter的cache master中才支持。       

        ReadNoSnoop/WriteNoSnoop,表示更新一段non-shareable的main memory,cache state,能夠是Invalid/UC/UD-------Invalid/UC/UD 

 

2----snoop transaction:針對shareable-cacheable-memory屬性的memory訪問。

snoop transaction是指從interconnect到cache master的一組transaction的統稱:cache master包括(擁有cache或者支持作DVM的master)

  address channel:

    interconnect的輸出信號有:ACVALID,ACADDR,ACSNOOP,ACPROT。

    cache master的輸出信號有:ACREADY。

  address channel中並無size,length,id這些信號。由於snoop transaction的size與CDDATA size相同。

    一個snoop的length必須是一個cache line的大小。最後一個beat的數據經過last來表徵。

  ACPROT[1]信號用來表徵secure,non_secure world,cache coherent是區分secure與non_secure world

  ACSNOOP信號的值,從coherency transaction到snoop transaction也有約束:

    1),首先不支持no-snoop的trans,如ReadNoSnoop,WriteNoSnoop,WriteBack,WriteClean,Evict,是不會進行snoop的

    2),WriteUnique,被映射爲其餘cache master的CleanInvalid。(推薦)

      WriteLineUnique,被映射爲其餘cache master的MakeInvalid。(推薦)

      MakeUnique,被映射爲其餘cache master的MakeInvalid。(推薦)

      CleanUnique,被映射爲其餘cache master的CleanInvalid。(推薦)

    3),像ReadOnce,WriteUnique的操做,interconnect須要內部將不是cache line size的操做進行轉換組裝。

 

  snoop resp channel:

    interconnect的輸出信號,CRREADY。

    Master的輸出信號,CRRESP,CRVALID。

  CRRESP,共有5bit:

    [0]:是否傳輸data,通常的原則是

        1:Read snoop trans,必須傳輸data,ReadOnce,ReadClean,ReadNotShareDirty,ReadShared,ReadUnique.

        2:對於一些非read操做,若是cache 爲dirty,傳輸data。cache state爲clean時,可傳可不傳。

    [1]:Error bit,表徵當前cache master內部的cache line數據是錯誤的。

    [2]:PassDirty bit,除了MakeInvalid,全部cache state爲dirty的cache master都必須在resp中將該位置1。

        表徵,寫入main memory必須由interconnect或者RN cache master來完成

        ReadNotSharedDirty,ReadShared,ReadUnique,寫入main memory能夠傳給RN cache master。

        ReadClean,必須由interconnect來完成寫入main memory。

        其餘的snoop trans,能夠implement defined。

    [3]:is shared bit,表示RN cache master得到一個cache line的copy

    [4]:is unique bit,表示cache line在snoop訪問以前的state是unique狀態

 

  snoop data channel:

    interconnect的輸出信號,CDREADY。

    cache master的輸出信號,CDVALID,CDDATA,CDLAST。

      CDDATA不支持byte strobe的功能,只能由interconnect返回須要的正確的data個數。

 

  snoop channel中的ready和valid的依賴關係與AXI中的相同。

 

arm建議的coherency transaction到snoop transaction的mapping 關係:

  

一個coherency transaction能夠被mapping爲多種snoop trans(如ReadUnique),可是仍是建議,保留多種,這樣簡便

  master處理。

 

3-----snoop transaction於coherency transaction之間的關係:

  1) non-blocking,同一個master在本身的coherency trans和interconnect發過來的snoop trans之間的先後關係:

    1, master必須完成全部的snoop trans,在AR channel的操做和AWchannel的WriteUnqiue,WriteLineUnique,以前

    2. 在完成port上的snoop trans以前,master能夠在等待WriteNoSnoop,WriteBack,WriteClean,Evict等操做

      不能等aw channel的WriteUnique,WriteLineUnique完成。

    總結起來,AR channel的trans能夠等AC channel的trans,AC channel的trans能夠等AW channel的trans(除了寫Unique)

      

  2) overlapping write,在一個shareable memory中,兩個master同時相同一個cache line進行store操做

    由interconnect來保證Write操做的sequence order。

    WriteUnique,WriteLineUnique,通常都用在master是non-cache的狀況下,若是用在cache master中,必須保證此時能夠處理全部的snoop transaction

      並且,WriteBack,WriteClean,必須和WriteUnique,WriteLineUnique徹底隔離開來,一組完成以後,另外一組才能夠開始執行。

    WriteClean,WriteBack,過程當中收到snoop trans,會掛住該snoop,直到本身的trans結束,snoop response必須PassDirty deassert,IsShared assert

    主要涉及的三個snoop transaction是ReadUnique,CleanInvalid,MakeInvalid

    當前發出snoop trans,但仍未完成的master稱爲Master2,由interconnect發到Master2的snoop trans的發送者,稱爲Master1。

    Master2,發出ReadUnique,Master1經Interconnect發出的是三個中的任何一個:

      在本身的snoop port收到snoop trans的Master2,必須先完成該snoop trans;本身有cache copy必須invalid。

      以後interconnect將最新的data返回給Master2,Master2完成本身的partitial/full store。

    

    Master2,發出MakeUnique,Master1經Interconnect發出的是三個中的任何一個:

      在本身的snoop port收到snoop trans的Master2,必須先完成該snoop trans;本身有cache copy必須invalid。

      以後interconnect將最新的data返回給Master2,Master2完成本身的partitial store。

 

    Master2,發出CleanUnique,Master1經Interconnect發出的是三個中的任何一個:

      在本身的snoop port收到snoop trans的Master2,必須先完成該snoop trans;本身有cache copy必須invalid。

      以後interconnect返回resp(unique操做並無完成,由於Master2自己沒有alloc 該cache line),

      Master2從新發送ReadUnique,以後Master2完成本身的full cache line store

 

4------CCI的interconnect的幾部分主要工做:

  1) sequenceing本身收到的coherency trans和snoop trans,

    每一個cache master能夠發送多個outstanding req,並同時接受多個snoop transaction,其中對於

      同一個cache line的順序由interconnect決定,arb method須要本身實現。

      其中arm 規定的rule:

      1. master發出coherent trans可是尚未收到resp,此時收到針對該cache line的snoop trans的訪問,snoop trans規定爲ordered first

      2. master發出coherent trans而且已經收到resp,以後在收到該line的snoop trans,coherent trans規定爲ordered first。

    對於同一個cache line,coherent trans必須等到ACK信號給出以後,interconnect才能發snoop trans

                snoop trans必須等到CRRESP信號給出以後,interconnect才能給coherent trans的resp。

  2) 本身根據initial master的trans,發送snoop trans,並正確返回resp給initial master。

    interconnect發出snoop trans,是根據本身內部的directory,加coherent trans的類型來定義本身發出的snoop trans類型和個數。

      多個snoop trans之間通常是順序的。

    1. ReadNoSnoop,WriteNoSnoop,WriteBack,WriteClean,Evict是不會讓interconnect發出snoop trans的。

    2. ReadOnce,ReadClean,ReadNotSharedDirty,ReadShared對directory中有cache copy的master發送snoop trans

      (1) 有一個master的CRRESP返回CRRESP[4],wasunique,則全部master的snoop trans結束

      (2) 拿到一個cache copy。

      (3) 全部的cache copy被遍歷。

    3. Unique trans, cache maintance, Write trans對directory中有cache copy的master發送snoop trans

      (1) 有一個master返回CRRESP[4],wasunique,則全部master的snoop trans結束。

      (2) 全部的cache copy被遍歷。

      (3) 針對CleanShared trans,若是CRRESP[2]返回PassDirty,全部master的snoop trans結束

    針對Unique和cache maintance的trans,若是CRRESP返回PassDirty,interconnect對其餘的cache master能夠發送MakeInvalid snoop trans

    interconnect回給initial master的resp:

    ARchannel的IsShared

      1. snoop trans的IsShared置位,通常給initial master的IsShared 置位。

      2. 若是snoop trans的Data Transfer assert,通常給initial master的IsShared不會置位。

      3. snoop trans的WasUnique被置位,1不知足的狀況下,IsShared不會置位。

    ARchannel的PassDirty

      1. 置位的coherent trans,主要是ReadNotSharedDirty,ReadShared,ReadUNique。

         若是snoop trans的CRRESP中的PassDirty置位,則須要interconnent更新main memory或者返回PassDirty給initial master

 

  3) interconnect跟main memory之間的讀寫:

    Read:在Read coherent trans在shared cache master中沒有找到data的狀況下,interconnect須要發出main memory read。

      main memory read能夠等全部的snoop trans完成以後在發出,也能夠與snoop trans一塊兒發出

      若是read trans在snoop trans沒完成以前就發出:

        1. snoop trans給出data,main memory中的數據丟棄。

      對同一地址cache line的read和WriteBack,WriteClean的coherent trans必須是有序的。

    Write:interconnect必須保證全部的寫操做都是有序的,不管cache line是否重疊。經過返回PassDirty的順序來控制。

      1. 對於partitial cache line write,若是snoop trans返回dirty data,須要interconnect進行merge。

      2. 對於ReadOnce/Clean/Shared/NotSharedDirty CleanUnique/Shared/Invalid,須要interconnect本身進行main memory更新。

        若是interconnect沒有收到PassDirty的CRRESP,必定不能夠寫main memory。

        arm建議interconnect儘可能不進行write操做,儘可能傳遞PassDirty。

  4) interconnect還須要實現對不一樣cache line size的轉換。

 

5------cache maintenance trans的應用:

  只有在全部outstanding trans都結束以後,才能發送cache maintenance trans,並且還有兩點state要求

  1. 對於CleanShared,CleanInvalid,在發出trans以前,該cache line的狀態必須是clean的

    若是dirty,必須先發WriteBack,WriteClean操做。在兩個操做以前,須要發Unique trans。

  2. 對於CleanInvalid,MakeInvalid,在發出trans以前,該cache line的狀態必須是invalid的

 

  cache maintenance trans通常穿插在coherent domain和non-coherent agents access之間。

    由於coherent與non-coherent的交織,可能致使cache中的新的數據,non-coherent的agent讀不到

    這樣的訪問的sequence:

    

    non-coherent以前採用cache clean操做來更新main memory

    non-coherent以後採用cache invalid來使得以後的讀寫直接讀取main memory

 

6------Barrier trans的應用:

    Barrier主要針對domain之間的memory-base communicate,能夠分爲Read Barrier,Write Barrier

   1. 任何address channel中比Barrier先issue的trans,都稱爲Before Barrier trans(比某個address channel的Barrier先issue就能夠)

     在Read Barrier,Write Barrier兩個resp以後issue的trans,都稱爲After Barrier trans

     Barrier trans必須在兩個channel中都issue,沒有data傳輸,resp必須是0。

      2. AxBar信號,一共兩bit,低位表示區分memory Barrier,Sync Barrier。

               高位表示該trans是否受到Barrier trans的影響。

   3. AxDomain信號,區分inner shareable domain,outer shareable domain。

      一個system,通常包括domain boundariers和bi-section boundaries(不清楚不作介紹)。

      domain boundary是domain中的全部master公用的一個downstream的interface。即同一個inner domain中訪問一個地址,多個master也只能用這一個interface

      domain boundary與interconnect能返回barrier resp有關:

        memory barrier與non-system的Sync barrier,能夠在domain boundary上或者更加downstrream的地方返回resp。

        針對system的Sync barrier,必須等到end point才能返回resp。

   4. Barrier trans的resp,由interconnect返回,與system中interconnect的位置有關,interconnect的實現方式有:

      (1) interconnect block掉其餘全部的trans,而後不斷向下發送Barrier trans,最後將全部barrier的resp merge在一塊兒

        以後,返回給initial master barrier resp,並去掉全部的block。

      (2) interconnect block掉全部的trans,並等待全部的trans,都返回resp以後,在給initial master返回Barrier resp,並移除block。

      (3) interconnect block掉全部的與Barrier地址有重疊部分的trans,以後給initial master提供barrier resp

   5. memory barrier,由dmb指令來實現,

    memory sync barrier,由dsb指令來實現,

    ARM中的ISB指令,並不直接映射到某一個bus trans中,只是將處理器流水線停掉,來保證以後的指令從cache或者memory中讀取。

   6. 發送barrier的master須要保證,barrier的id與其餘正常trans的id不一樣,這樣方便區分返回的resp。

    Barrier trans發送出去,可是resp回來以前的trans,是不保證順序的,不受Barrier影響。這些trans都是當前domain以外的trans。

      

    因爲Barrier trans發出以後,以後的trans就會被interconnect block住,因此當Read,Write有先後的約束的時候,必須最後才發相應的barrier。

      好比須要mmu進行table walk,那就不能在以前發Read barrier。不然總線會被鎖死

    對於有cache的master,若是load必須在barrier以後,則master不能發出coherent trans從Valid cache中讀取,必須等到barrier的resp。

                 若是store必須在barrier以後,則master不能發出coherent trans向Unique cache中寫入,必須等到barrier的resp

 

7------Exclusive trans的應用:

    用來實現多核之間的同步,相似於軟件實現mutex和semaphore。

    多核之間cache coherence能夠保證一部分的多核同步,bus上根本不會出現exclude trans。

      每一個master內部實現一個local monitor來snoop其餘master的exclude trans,保證一個core exclude load以後,另外一個core不能exclude store

    可是在存在non-cached master時,bus上會出現exclusive trans。

      經過interconnect上的PoS的monitor,來保證同一memory,對多個exclusive store trans的同步

    Exclusive的實現都是經過Exclusive sequence的形式來實現的,先進行LDREX指令,在執行STREX指令。

    Exclusive Load,根據cache狀態來分:

      Invalid,必須經過ReadClean,ReadShared,先拿到cache中的數據,不能使用ReadUnique,ReadNotSharedDirty,這樣會invalid掉其餘的cache中的數據。

            with ARLOCK asserted。

      SharedClean,Unique state,master的exclusive load能夠不須要。

相關文章
相關標籤/搜索