本文檔介紹了SylixOS在Xilinx Zynq-7000開發板上如何進行L2 Cache劃分。
在AMP模式中,core 0與core 1共用512K L2 Cache,這勢必會引起兩個核的Cache競爭問題。
通常情況下,L2 Cache被core 0,core 1共享。
core 0的內存訪問操作可能會清除core 1所使用的L2緩存內容,從而使core 1的軟件性能有不確定性。
有時,我們需要爲core 0 或core 1提供更多的確定性行爲。
尤其是架構爲AMP時。
L2 Cache劃分可以滿足這種需求。
如圖 2.1、圖 2.2爲SMP與AMP架構圖。
圖 2.1 SMP架構圖
圖 2.2 AMP架構圖
通過寄存器的控制可以將L2 Cache鎖定在不同core上。
這讓用戶可以將L2 Cache的功能保留在特定的core上。
Cache way是分區的寬度,Zynq的L2 Cache有8 Cache ways。
L2 Cache控制器只能被鎖定8個不同的方式。
如圖 3.1所示,在Zynq 7000中,Cortex-A9 MP核的64個AXI被分爲8個可以鎖定的組。
圖 3.1分組
具體寄存器說明參照Xilinx 官方數據手冊UG585。
配置1:通常情況(L2 Cache 被core 0和core 1共享)。
Reg9_d_lockdown0 = 0x0;
Reg9_1_lockdown0 = 0x0;
Reg9_d_lockdown1 = 0x0;
Reg9_1_lockdown1 = 0x0;
配置2:4-0-4方式,每個核用一半(core 0使用Cache way【0..3】;core 1使用Cache way【4..7】)。
reg9_d_lockdown0 = 0xFFF0;
reg9_1_lockdown0 = 0xFFF0;
reg9_d_lockdown1 = 0xFF0F;
reg9_1_lockdown1 = 0xFF0F;
配置3:2-4-2方式(core 0使用Cache way【0..1】;core 1使用Cache way【6..7】;兩個核共享Cache way【2..5】)。
reg9_d_lockdown0 = 0xFFC0;
reg9_1_lockdown0 = 0xFFC0;
reg9_d_lockdown1 = 0xFF03;
reg9_1_lockdown1 = 0xFF03;