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