當(dāng)今片上系統(tǒng) (SoC) 的設(shè)計(jì)人員對(duì)中央處理器 (CPU) 中處理器核心的緩存非常熟悉。對(duì)主外部存儲(chǔ)器的讀取或?qū)懭朐L問可能非常耗時(shí),可能需要數(shù)百個(gè) CPU 時(shí)鐘周期,同時(shí)處理器處于空閑狀態(tài)。盡管單個(gè)存儲(chǔ)器訪問所消耗的功率很小,但當(dāng)每秒執(zhí)行數(shù)十億次事務(wù)時(shí),功率就會(huì)迅速增加。
舉例來說,假設(shè)每筆交易為 64 字節(jié),以 1.5 GHz 運(yùn)行的單個(gè) 256 位寬數(shù)據(jù)通道每秒將產(chǎn)生約 7.5 億筆交易。多個(gè)數(shù)據(jù)通道通常會(huì)并行活動(dòng),執(zhí)行片外 DRAM 訪問。
當(dāng)程序訪問一個(gè)內(nèi)存位置的數(shù)據(jù)時(shí),它通常需要訪問附近的其他位置。此外,程序通常具有循環(huán)和嵌套循環(huán),在這些循環(huán)中,程序在執(zhí)行下一個(gè)任務(wù)之前對(duì)同一數(shù)據(jù)塊執(zhí)行多個(gè)操作。
了解 SoC 中的緩存內(nèi)存
鑒于內(nèi)存訪問耗時(shí)、功耗高以及程序中典型的數(shù)據(jù)訪問和處理模式等挑戰(zhàn),采取戰(zhàn)略性方法至關(guān)重要。解決方案是在靠近處理器的地方實(shí)現(xiàn)小型、快速的緩存。
當(dāng)程序從主內(nèi)存請(qǐng)求新的數(shù)據(jù)時(shí),系統(tǒng)會(huì)自動(dòng)檢索一個(gè)數(shù)據(jù)塊并將其加載到緩存中。隨后,處理器會(huì)對(duì)本地存儲(chǔ)的數(shù)據(jù)執(zhí)行多項(xiàng)操作。最終,這些操作產(chǎn)生的新數(shù)據(jù)被復(fù)制回主內(nèi)存。
第一級(jí)緩存(即 1 級(jí)或 L1 緩存)之后,隨著時(shí)間的推移,陸續(xù)添加了 L2 和 L3 緩存。每個(gè)后續(xù)級(jí)別都比前一個(gè)級(jí)別更大且更慢,但比訪問主內(nèi)存要快得多(圖 1)。
阿特里斯
1. 多個(gè)緩存存儲(chǔ)器通常與一個(gè)或多個(gè) CPU 一起使用。
另一個(gè)趨勢(shì)是使用具有不同緩存配置的 CPU 集群。例如,在四核集群中,通常每個(gè)核心都有自己的 L1 緩存,成對(duì)的核心共享一個(gè) L2 緩存,所有四個(gè)核心共享一個(gè) L3 緩存(如圖 1b 所示)?;蛘?,每個(gè)核心可能都有專用的 L1 和 L2 緩存,而所有四個(gè)核心只共享 L3 緩存。
關(guān)于緩存的一個(gè)考慮因素是管理共享數(shù)據(jù)的多個(gè)副本。例如,在圖 1b所示的場景中,假設(shè) CPU0 從主內(nèi)存中檢索并修改數(shù)據(jù),然后將更改后的版本存儲(chǔ)在其 L1 緩存中?,F(xiàn)在,假設(shè) CPU3 希望訪問相同的數(shù)據(jù)。它應(yīng)該使用哪個(gè)副本——主內(nèi)存中的原始副本還是 CPU0 的 L1 緩存中的修改副本?
這種困境導(dǎo)致了對(duì)緩存一致性的需求,這意味著當(dāng)一個(gè)數(shù)據(jù)副本發(fā)生更改時(shí),必須修改所有其他副本。這可以通過更新其他緩存中的數(shù)據(jù)或?qū)⑵渌彺嬷械母北緲?biāo)記為無效來實(shí)現(xiàn)。
緩存一致性可以通過軟件進(jìn)行管理。但是,現(xiàn)在更常用的是使用特殊硬件來確保圖 1a中所示的緩存和圖 1b中所示的集群內(nèi)能夠高效、透明地實(shí)現(xiàn)這一點(diǎn)。
現(xiàn)代 SoC 除了 CPU 之外,還包含大量知識(shí)產(chǎn)權(quán) (IP) 塊。一些 IP 可能配備自己的緩存,這些緩存可能需要或不需要與 CPU 保持緩存一致性。
如果任何 IP 塊都不需要與 CPU 保持一致,則可以使用 AMBA AXI 協(xié)議采用非一致性片上網(wǎng)絡(luò) (NoC)互連?;蛘?,如果 SoC 有多個(gè)需要保持群集間一致性的 CPU 群集,或者帶有緩存的 IP 需要保持一致性,則可以使用 AMBA ACE 或更現(xiàn)代的 AMBA CHI 協(xié)議采用緩存一致性 NoC 互連。
還有第三類一致性,稱為 IO 一致性,其中設(shè)備可能希望參與訪問共享內(nèi)存,但不支持完全一致性。這種 IP 的一個(gè)例子是 GPU 以與系統(tǒng)其余部分一致的方式訪問共享內(nèi)存,但不能直接窺探 CPU 的緩存。IO 一致性設(shè)備依靠一致性 NoC 來代表它們維護(hù)數(shù)據(jù)一致性。
如何利用緩存提高 SoC 性能
其他 IP 功能(例如硬件加速器 IP)也可能受益于使用類似上述 CPU 示例的緩存。這些以 IP 為中心的緩存通常不需要與 CPU 保持一致性;但是,它們可以使用非一致性 NoC 互連進(jìn)行連接。
或者,添加暫存器 (SRAM) 可能會(huì)使某些 IP 受益。這種高速存儲(chǔ)器直接連接到 IP,用于臨時(shí)存儲(chǔ)少量數(shù)據(jù),以便快速訪問和檢索。
設(shè)計(jì)緩存或暫存器是一項(xiàng)復(fù)雜的任務(wù),即使該緩存不需要與其他緩存保持一致性。開發(fā)人員希望花費(fèi)寶貴的時(shí)間來構(gòu)建 SoC 并設(shè)計(jì)其專有 IP 功能,以使其創(chuàng)作與競爭產(chǎn)品區(qū)分開來。他們通常試圖避免投入資源來開發(fā)緩存。
實(shí)現(xiàn) CodaCache
一種解決方案是使用Arteris的 CodaCache 。它是一種可配置的獨(dú)立非一致性緩存 IP。CodaCache 在使用 16 納米工藝技術(shù)實(shí)現(xiàn)的 SoC 上以高達(dá) 1.2 GHz 的速度運(yùn)行,可與 AMBA AXI 互操作,每個(gè) AXI 端口提供高達(dá) 8 MB 的容量。CodaCache 提供可配置的 1 到 16 路關(guān)聯(lián)性,具有路分區(qū)、緩存刷新、糾錯(cuò)碼保護(hù)等高級(jí)功能,并支持 ISO 26262 功能安全應(yīng)用。
有許多潛在的實(shí)現(xiàn)場景,其中兩種如圖2所示。第一種是向單個(gè) IP 添加專用的 CodaCache,從而提高 IP 性能(圖 2a)。第二種是添加 CodaCache 作為最后一級(jí)緩存,從而提高 SoC 性能(圖 2b)。
阿特里斯
2. 最后級(jí)別的 CodaCache 實(shí)現(xiàn)位于互連和緩存與主存儲(chǔ)器之間。
CodaCache 還可用于各種場景,包括用作暫存器。以這種方式使用緩存可帶來諸多好處,例如增強(qiáng)性能,其特點(diǎn)是提高數(shù)據(jù)吞吐量和減少延遲。它還通過降低功耗和發(fā)熱量來提高能源效率。此外,它還提供設(shè)計(jì)靈活性和可擴(kuò)展性等好處。