Zynq PS上的加速器一致性接口(Accelerator Coherency Port, ACP)是一個兼容AXI3的64位從機接口,連接到SCU(Snoop Control Unit),爲PL提供異步緩存一致性直接訪問PS的入口。
處理器可以標記ACP上的傳輸爲一致性或非一致性。PL端的AXI主機通過ARUSERS[1:0]指示是否爲一致性讀傳輸,通過AWUSERS[1:0]指示寫傳輸,這幾個信號都是AXI總線相關信號。設備端或強烈要求順序傳輸的情況常常按照非一致性傳輸對待(這些情況是指由AXI主機接口產生的傳輸,他們不被緩存,常常產生固定尺寸和數目的傳輸)。
【簡介】
非一致性傳輸直接經過SCU,出現在AXI主機接口保持不變。
ACP從機的一致性傳輸到AXI主機會變爲或多或少傳輸,一些屬性會隨之變化。
當ACP收到來自外部主機的一致性寫請求時,SCU檢查CPU內核L1數據緩存中相應地址,如果命中,一致性協議清空並invalidate 相應cache行,併合並清掉的數據和寫請求。
從外部主機箱一致性內存區域發起讀請求時,與SCU交互,測試是否需要數據已經存入處理器L1 Cache,如果命中,SCU直接向請求方返回數據;如果miss,SCU檢查先L2 cache,再不然訪問主存。
【ACP請求】
ACP一致性讀請求:當ARUSER[0] == 1,ARCACHE[1] ==1,同時ARVALID有效時,產生ACP一致性讀請求。這時,SCU強制一致性。
當ARUSER[0] == 0 或ARCACHE[1] ==0,同時ARVALID有效時,產生ACP非一致性讀請求。這時SCU並不強制一致性,讀請求直接傳遞到可用的SCU AXI master口通向L2 Cache控制器或OCM。
ACP一致性寫請求:當AWUSER[0] == 1且AWCACHE[1] == 1,同時AWVALID有效時,產生ACP一致性寫請求。這時SCU強制一致性,當數據存在於某個Cortex-A9處理器中時,PS區域邏輯首先清除並invalidate相應CPU的數據。當數據不在任一個CPU,或者當已經清掉、invalidate,則寫請求通過某個Cortex-A9處理器的AXI主機接口發起到L2 Cache或主存。
當AWUSER[0] ==0 或AWCACHE[1] ==0,同時AWVALID有效時,產生ACP非一致性寫請求。這時SCU不強制一致性,寫請求直接傳遞到某個可用的SCU AXI master port。
【ACP的限制】
一致性訪存不允許互斥訪問;
一致性訪存不允許鎖定訪問;
寫傳輸,以length = 3, size = 3, 寫選通11111111會引起CPU cache line破壞;
通過ACP連續訪問OCM可能會餓死其他AXI主機;限制burst size小於8 x 64bit字。
【參考文獻】
ARM Cortex-A9 MPCore TRM, section 2.4, Accelerator Coherency Port