由于此錯誤,存儲緩沖器可能進入所有現有寫入都無法繼續執行的狀態。此狀態可能會導致下列問題:
流水線執行備份,并阻止執行任何指令。
如果按特定順序執行訪問,則將恢復指令執行,但寫入數據將會丟失
受影響的配置:
如按下列任一序列發生下述狀況,則會發生此錯誤:
序列 1:
1) 使用數據高速緩存 ECC 來實現處理器,并啟用高速緩存 ECC。
2) 處理器訪問存儲器位置,但此操作在 L1 數據高速緩存中未命中,導致讀取并分配緩存行。
3) 處理器對回寫可緩存位置執行寫入,此操作在步驟 [2] 中的行填充 (linefill) 之前命中,但在行填充之后未命中。此寫入操作會在步驟 [2] 重新分配行之前的周期內執行其高速緩存查找操作。
4) 隨后,處理器會對步驟 [3] 中寫入的緩存行執行讀取和寫入。此讀取和寫入操作可按任意順序執行。寫入的雙字不同于步驟 [3] 中寫入的雙字。
序列 2:
1) 使用數據高速緩存 ECC 來實現處理器,并啟用高速緩存 ECC。
2) 處理器讀取回寫可緩存存儲器位置,但此操作在 L1 數據高速緩存中未命中,導致讀取并分配緩存行,但不檢測任何 ECC 錯誤。
3) 處理器對步驟 [2] 中讀取的緩存行執行寫入。在高速緩存中查找地址時,由于標簽 RAM (tag-RAM) 中存在 ECC 錯誤,因此結果顯示命中。
4) 隨后,處理器對步驟 [2] 中讀取的緩存行執行進一步寫入,但寫入的雙字不同于步驟 [3] 中寫入的雙字。
5) 后續推理緩存讀取同樣檢測到 ECC 錯誤。此讀取操作可對相同的高速緩存集執行,因此會檢測到相同的錯誤,或者也可對不同高速緩存集執行讀取,在此情況下則需要第二個 ECC 錯誤才能滿足此條件。
此外,這兩組條件都要求兩次訪問之間存在特定的時序關系,因此,受到 AXI 總線上的傳輸事務時序以及存儲緩沖器中其它正在執行的寫入操作的影響。
如果上述任一序列發生后,發生如下操作,則將不會發生死鎖:
1) 讀取操作在高速緩存中未命中,導致行填充,并且
2) 對步驟 [1] 中讀取的緩存行執行 2 次或 2 次以上的讀取操作。
2 次寫入的雙字必須不同,但其中一次寫入的雙字可與步驟 [1] 中讀取的雙字相同。單一存儲指令可生成 2 次此類寫入,前提是該指令未自然對齊。
如果發生此狀況,則部分寫入數據可能丟失。并且后續可能還會向高速緩存分配不可緩存 (Non-cacheable) 或器件 (Device) 寫入請求。
注:以上所有數值交叉引用均表示參考列表中的項。
解決方案
影響:
如果發生此錯誤,處理器將發生死鎖或數據丟失。發生死鎖時,處理器可生成中斷,但最終在處理程序代碼中將發生數據丟失或死鎖。
根據大量現場器件的經驗證明,此錯誤被分類為罕見。此問題僅在一個工程上出現過,其故障時間不僅長而且易變。
變通方法:
您可通過將 ACTLR.DBWR(位 [14])設置為 1 來避免此錯誤。對于向標準存儲器多次突發寫入數據的行為,此設置會禁用其內部傳輸最優化操作。
此外,此設置還會禁用直寫和不可緩存的標準存儲器(但不包括回寫存儲器)的處理器生成的 AXI 突發。
將該位設置為 1 可能降低處理器寫入標準存儲器的性能。在基準測試中,平均性能降低比例小于 1%,但執行大型塊寫入的例程(例如,memset 或 memcpy)時影響顯著增大。
此變通方法對于 memset 和 memcpy 的影響與 L2 存儲器系統的性能和特性以及所使用的指令序列密切相關。
如果您的應用允許,您也可以通過禁用高速緩存 ECC 來避免此錯誤。禁用方法為將 ACTLR.CEC(位 [5:3])設置為 b100。
此變通方法不會降低處理器性能,但禁用 ECC 會影響可靠性。
受影響的配置:
所有 Versal 器件。
-
處理器
+關注
關注
68文章
19400瀏覽量
230742 -
數據
+關注
關注
8文章
7133瀏覽量
89375 -
ECC
+關注
關注
0文章
97瀏覽量
20605
發布評論請先 登錄
相關推薦
評論