TW202103176A - 用於排位元錯誤修正嘗試之優先順序的系統以及方法 - Google Patents
用於排位元錯誤修正嘗試之優先順序的系統以及方法 Download PDFInfo
- Publication number
- TW202103176A TW202103176A TW109114958A TW109114958A TW202103176A TW 202103176 A TW202103176 A TW 202103176A TW 109114958 A TW109114958 A TW 109114958A TW 109114958 A TW109114958 A TW 109114958A TW 202103176 A TW202103176 A TW 202103176A
- Authority
- TW
- Taiwan
- Prior art keywords
- bit
- memory
- bits
- authentication
- correct
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/52—Protection of memory contents; Detection of errors in memory contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/18—Address generation devices; Devices for accessing memories, e.g. details of addressing circuits
- G11C29/30—Accessing single arrays
- G11C29/34—Accessing multiple bits simultaneously
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/38—Response verification devices
- G11C29/42—Response verification devices using error correcting codes [ECC] or parity check
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/44—Indication or identification of errors, e.g. for repair
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/50—Marginal testing, e.g. race, voltage or current testing
- G11C29/50004—Marginal testing, e.g. race, voltage or current testing of threshold voltage
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C2029/4402—Internal storage of test result, quality data, chip identification, repair information
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/44—Indication or identification of errors, e.g. for repair
- G11C29/4401—Indication or identification of errors, e.g. for repair for self repair
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- For Increasing The Reliability Of Semiconductor Memories (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
本發明提供一種系統、方法以及電腦程式產品,用以安排一記憶體中的複數位元之試錯嘗試修正之優先順序,其中使用至少一閾值來設定閥值電壓值以決定邏輯位元位準,此方法包含對複數個位元分級使得複數個位元中的第一位元分級在第二位元之前,而第二位元比第一位元比較不可能是錯誤的。
Description
相關申請之交互參照
此申請書是2019年5月28日所提交之美國專利申請號16/423,676的部分繼續申請案。
本發明係有關於半導體裝置之記憶體之完整度,特別是非揮發性記憶體(NVM)之完整度。
非揮發性記憶體(NVM)半導體記憶體裝置無處不在,其特點在於即使包含NVM記憶單元的裝置供電中斷或結束時NVM也保留資料位元。非揮發性記憶體包括快閃記憶體、浮接閘極元件、氮化物唯讀記憶體(NROM)和其他電荷存元件。相反,某些半導體記憶體裝置,例如靜態隨機存取存儲器(SRAM),屬於揮發性記憶體,在斷電時會丟失其儲存的資料。
存儲在NVM單元中的多位元信息可以由NVM單元的閾值電壓為準的狀態表示。例如,通過將NVM單元的閾值電壓編程為中間位準,多個位元可以存儲在單個NVM單元上。例如,在多位準NVM單元中,單個NVM單元中的n位通常會使用2n-1個閾值位準。如果n> 1而不是單個NVM單元儲存1位,則相鄰位準之間的電壓差會減小,並且很可能會干擾NVM單元從一個閾值電壓狀態到下一個較高或下一個較低狀態。因此,NVM單元的狀態可以由其閾值電壓(Vt)來定義和確定,但是,在該NVM單元開始傳導電流,感測狀態之間的差異的電壓容易出錯。
當然,該閾值不僅施加於多級單元,而且適用於儲存1位元(n =1)的單級單元,亦即2n-1=1而使用1閾值。
通常可以對NVM單元進行”編程”,例如對其進行”擦除”或”讀取”。編程可包括將電壓施加到存儲單元端部以注入電子至FG的電荷存儲層或NROM的電荷捕獲層。然後相關層的閾值電壓(Vt)增加。閾值電壓(Vt)或其範圍分別與NVM單元的狀態或編程位準相關聯。因此,可以根據NVM單元的閾值電壓將每個記憶體單元編程為各種狀態或編程位準。對於單級單元,只有兩個編程位準,其可以稱為”擦除”和”寫入”,但是在多級單元(MLC)中會有超過2個(n>2)寫入位準。
文獻所用術語” NVM閾值”包括用於各種目的的各種物理值,例如在以下文獻中皆有描述:
Https://docs.microsoft.com/zh-cn/windows-hardware/drivers/storage/get-nvm-thresholds--function-index-5-
https://www.researchgate.net/figure/Natural-VT-VT0-distribution-of-a-typical-512k-bit-array-from-two-different-NVM_fig1_3997562
美國專利:US7626868B1、US20130235661A1。
以及 https://patents.google.com/patent/US20180062668A1/zh-CN。
https://www.researchgate.net/figure/Natural-VT-VT0-distribution-of-a-typical-512k-bit-array-from-two-different-NVM_fig1_3997562
美國專利:US7626868B1、US20130235661A1,以及 https://patents.google.com/patent/US20180062668A1/en to Moon et al.
Moon等人提到:”一旦相鄰的閾值電壓分佈重疊,當將特定的讀取電壓施加到選定的字元線時,讀取的數據可能會包含大量錯誤。例如,當根據施加到選定的字元線的讀取電壓Vread3表示記憶體單元一狀態是導通的時,此記憶體單元被判斷為具有第二寫入狀態” P2”。當根據被施加到選中的字元線的讀取電壓Vread3的存儲單元的感測狀態為關閉時,記憶體單元會被判斷為具有第三寫入狀態”P3”。但是,當相鄰閾值電壓分佈重疊時,具有第三寫入狀態為”P3”的記憶體單元可能被錯誤地判斷為第二寫入狀態為”P2”。簡而言之,當相鄰閾值電壓分佈如圖2所示有重疊時,讀取的數據可能包含大量錯誤”,因此Moon提出”更準確地讀取存儲在高度集成的半導體記憶體裝置的多位元記憶體單元中的數據”。
對於諸如NVM之類的存儲器,邊界讀取(margin-read,又稱為read margin)技術,其用途是此領域所熟知的,其用於NVM,例如快閃記憶體或是EEPROM。以下文獻有詳細描述此技術:
https://www.rfidjournal.com/blogs/experts/entry?12162
https://www.nxp.com/docs/zh-CN/application-note/AN1827.pdf
https://patents.google.com/patent/US20150255164A1/zh-CN(Texas Instruments)
https://www.silabs.com/community/mcu/8-bit/knowledge-base.entry.html/2016/03/31/c8051t616_marginrea-wjZg
https://www.rfidjournal.com/blogs/experts/entry?12162
https://www.nxp.com/docs/en/application-note/AN1827.pdf
https://patents.google.com/patent/US20150255164A1/en (Texas Instruments)
https://www.silabs.com/community/mcu/8-bit/knowledge-base.entry.html/2016/03/31/c8051t616_marginrea-wjZg
例如,http://www.ti.com/lit/an/spna091a/spna091a.pdf,此文獻標題為 “使用F05快閃記憶體製程構建的TMS470微控制器,其具有內置機制用以在衰弱或退化的快閃記憶體位元失效之前將其偵測出”。
該參考文獻描述了”允許用戶選擇以下兩種模式之一來檢查快閃記憶體單元:讀取邊界為一的模式或讀取邊界為零的模式。這些模式有效地改變了用於判斷位元是1還是0的參考電流。例如,在正常讀取模式下,如果在閘極上施加5.0 V電壓而記憶體單元通過的電流小於參考電流,則該記憶體單元儲存的位元是0。如果在向閘極施加5.0 V電壓時,記憶體單元通過的電流大於參考電流,則該記憶體單元儲存的位元為1。在讀取邊界為零的模式下,電流比率會改變使其等效於向閘極施加5.2V。該電壓可在位元可能翻轉到1之前確認已寫入的記憶體單元具有至少200 mV的邊界(margin)。 正常的已寫入單元將具有6.5 V或更高的閾值電壓(Vt)。在讀取邊界為一的模式下,電流比率會改變使其等效於向閘極施加4.8 V電壓。此電壓可在此位元可能翻轉為0之前確認已擦除的單元具有至少200 mV的邊界。正常的已擦除單元的閥值電壓Vt為4.5 V或更小。讀取邊界為零的模式以及讀取邊界為一的模式都要執行測試以確保快閃記憶體正常工作。
文獻: Https://pdfs.semanticscholar.org/647a/7419dadd3323e9e2d78a9b57a2bb26043fbc.pdf ,在靜態雜訊邊界分析的基礎上分析了SRAM讀取邊界。
通常,儘管不是必須的,但邊界讀取操作的輸出包括二進制值,每個二進制值代表相應位位的強度。如果更改後的閾值改變了讀數,則邊界讀取操作的輸出可為1;否則為0,其表示欲度讀取的輸出中的每個1表示”弱”位元,欲度讀取的輸出中的每個0表示一”強”位元。
特定實施例用於提升記憶體元件之資料完整度,例如是用於支援邊界讀取操作。
特定實施例係用於降低時間以及電力支出以對NVM系統之試驗以及錯誤流程最佳化。
特定實施例係用於藉由判斷哪一個位元最有可能是錯誤(相對於其他較不可能錯誤的位元),以使用位準資訊來排錯誤修正候選的優先順序。
特定實施例係用於提升記憶體元件之資料完整度,例如用於支援邊界讀取操作的NVM。
特定實施例用於安排要進行錯誤修正的位元的優先順序,藉此無論使用哪個錯誤修正方法都可以降低整體修正週期時間。特定實施例藉由根據每一位元對於邊界讀取的回應做分級,在比較不可能錯誤的位元之前先處理比較可能錯誤的位元。
根據特定實施例,一種系統可藉由認證操作來得知記憶體中給定字元的錯誤。根據特定實施例,字元中的多個位元可能會出現錯誤,提供一種使用試驗以及錯誤處理的邏輯:邏輯會翻轉字元中的各個位元,並判斷哪個位元要修正錯誤。此些系統的優勢在於當位元翻轉時錯誤可修正而不必送此裝置至維修實驗室。
根據特定實施例,多個位元可用任何順序進行翻轉,例如位元的物理順序或是任何隨機順序;最有可能錯誤的位元位會比最不可能錯誤的位元先翻轉。由於本發明的最佳化機制可提高在初期找到不良位元的可能性,因此長期來說在統計上較少位元會被翻轉,因此本發明可達到最佳化效果。
此系統可使用任何適當的標準來判斷較有可能錯誤的位元以及較不可能錯誤的位元。上述標準可使用記憶體(例如NVM)之邊界讀取功能用以表示給定位元的邏輯零或是邏輯一有多強(strong):如果此位元係健康的,位元電壓會遠離用於區分0與1的閾值,因此位元的1(或是0)是強的。如果此位元係邊緣的或是衰弱的,則邊界讀取可能表示此位元之電壓並非離區分0與1的閾值很遠,因此位元的1(或0)不是強的。
特定實施例建議用於執行試驗以及錯誤方法以判斷哪一個位元是錯誤的錯誤修正邏輯可控制邊界讀取(margin read)功能。此邏輯可先翻轉舊的不健康位元,而後續才翻轉健康的位元。
某些實施例試圖提供一種方法,用於錯誤修正,其方法包括施加至少一個可能的錯誤修正,且之後使用積體電路現有的驗證功能來認證此可能的錯誤修正是否是正確。
某些實施例試圖提供一種錯誤修正解決方案,與習知的錯誤修正解決方案不同,不會增加記憶體的成本(相對於錯誤修正碼(error correction code, ECC)要求每y個資料量儲存x位元)。這是因為資料的「評估」利用了習知功能的身份驗證,例如安全性和完整性感知(security- and integrity-aware)的記憶體管理,必然地涉及其自身的負擔,並且如本文所描述利用它進行錯誤修正,如此一來通常就不需要驗證之外的負擔。
應當理解,本文的實施例的適用性尤其擴展到執行具有處理器及記憶體的任何功能的任意一般微控制器。這些功能通常由處理器執行的韌體(firmware, FW)操作,FW常駐在記憶體中,且本身可能是包含在要保護的記憶體內容中。
應當理解,本文的某些實施例可以與舊有IC一起使用,同時利用舊有IC自己的舊有驗證(legacy auth)的一部分,其密碼計算可以用硬體(hardware, HW)或韌體來完成。通常提供硬體來儲存驗證摘要,可以使用通常的CPU指令的韌體,或硬體加速器。例如,如果將雜湊訊息鑑別碼(Hash-based message authentication code,HMAC)用於強認證,且舊有IC具有可操作來執行HMAC的部分加密硬體,如果舊版硬體可用於主IC的處理器存取,而因此可被處理器正在執行的韌體存取,則韌體可以在舊版IC中利用這部分舊版硬體。
替代地或附加地,可以採用在IC的舊有硬體及/或韌體中的存取控制功能的部分。
替代地或附加地,不採用現有的IC的舊有硬體及/或韌體實施本文的實施例,而是在適合的韌體中實施本文描述的功能的某些或全部,其韌體被添加至現有IC的舊有韌體的可變代碼(mutable code)。
因此,本發明提供至少以下實施例:
實施例1:
一種自修正記憶體系統,其包含積體電路,積體電路包含記憶體、記憶體內容認證功能及錯誤修正功能。記憶體內容認證功能係對待認證之記憶體內容與標準內容進行比較,且當待認證之記憶體內容被認證等於標準內容,記憶體內容認證功能輸出「認證的(authentic)」,否則輸出「非認證的(non-authentic)」。錯誤修正功能係施加至少一可能的修正至記憶體中的至少一錯誤字元實體,以產生可能的正確字元實體,並呼叫記憶體內容認證功能,以施加於可能的正確字元實體,且當記憶體內容認證功能的輸出係「認證的」,則用可能的正確字元實體取代記憶體中的錯誤字元實體,從而產生能達到由認證相關的信賴度之水平導出的信賴度之水平的錯誤修正。
應當理解,將待認證內容與標準內容進行比較通常涉及計算待認證內容的某種衍生物,例如其摘要,且將衍生物與標準內容進行比較,而不是直接比較實際原始內容。
實施例2:
根據前述實施例中的任何一個系統,其中認證功能可操作來執行加密上的強認證。
實施例3:
根據前述實施例中的任何一個系統,其中認證功能也可操作來執行字元認證。
實施例4:
根據前述實施例中的任何一個系統,其中錯誤修正功能系配置用於:將至少一可能的修正施加於記憶體中的至少一錯誤字元,產生可能的正確 字元。呼叫字元認證用於可能的正確字元。當字元認證的輸出係「認證的」,隨後呼叫強認證,施加至可能的正確字元。當強認證的輸出係「認證的」,用此可能的正確字元取代記憶體中的錯誤字元,從而產生能達到由強認證與字元認證相關的信賴度之水平導出的信賴度之水平的錯誤修正。
實施例5:
根據前述實施例中的任何一個系統,其中藉由施加字元認證至記憶體中的至少一字元,以偵測該錯誤字元,且其中產生「非認證的」之輸出的任意字元被認為是錯誤的,且產生「認證的」之輸出的任意字元被認為是非錯誤的。
實施例6:
根據前述實施例中的任何一個系統,其中至少一可能的修正包含將錯誤字元實體中的至少一位元從0至1,或從1至0翻轉。
實施例7a:
根據前述實施例中的任何一個系統,其中可能的修正係施加至複數個錯誤字元,以產生複數個可能的正確字元,且其中呼叫強認證一次而施加於修改的記憶體影像或區塊,在修改的記憶體影像或區塊的所有複數個錯誤字元中,分別地藉由可能的正確字元取代,而不是呼叫強認證複數次以分別地施加於分別地包含複數個可能的正確字元的複數個記憶體影像或區塊,從而節省記憶體、修正時間及其組合。
實施例7b:
根據前述實施例中的任何一個系統,其中可能的修正施加至複數個錯誤字元,以產生複數個可能的正確字元,且其中呼叫強認證一次,以施加於複數個可能的正確字元的全部,而不是呼叫強認證複數次,以分別地施加於複數個可能的正確字元的複數個記憶體影像或區塊,從而節省記憶體與修正時間中至少一者。
實施例8:
根據前述實施例中的任何一個系統,其中第一可能的修正及第二可能的修正係至少施加到至少一錯誤字元,且其中在第一可能的修正中被翻轉的錯誤字元中的任意位元,在第二可能的修正施加至錯誤字元之前不被翻轉,從而在施加第二可能的修正至相同的錯誤字元之前,復原(undo)錯誤字元之第一可能的修正。
實施例9:
根據前述實施例中的任何一個系統,其中所有可能的修正施加到至少一錯誤字元。
實施例10:
根據前述實施例中的任何一個系統,其中施加所有可能的修正的錯誤字元包含:不可修正的錯誤字元,其嘗試過所有可能的修正而仍無法導致其通過正確的字元認證,因此被認為是不可修正的(uncorrectable)。
實施例11:
根據前述實施例中的任何一個系統,其中採用至少一試探法,以判斷該可能的修正之子集,可能的修正之子集包含少於所有可能的修正,且其中只有在子集中的可能的修正施加到至少一錯誤字元,即使在子集中沒有可能的修正導致正確的字元認證。
應當理解,試探法可以用於產生候選的修正(也稱為可能的修正)的子集、可以用於優先排序(prioritize)候選的修正,以使得在對於給定的使用範例中更可能更早發現正確的修正法,而不太可能的修正法僅在以後進行測試(例如,僅當更可能的修正未能通過驗證時)。
通常,如果優先的可能的修正的給定的子集未通過驗證,則系統不執行其餘的可能的修正(其被認為低優先度,因為其被預先的認為不太可能通過驗證)。
實施例12:
根據前述實施例中的任何一個系統,其中比較待認證之記憶體內容以及標準內容,係施加強認證至在時間t2儲存在給定記憶位置的待認證記憶體內容,從而產生計算認證值,且比較此計算認證值及一儲存結果,儲存結果又叫做期望認證值,期望認證值藉由在早於該時間t2的先前時間t1時施加強認證至在給定記憶位置的記憶體內容所產生。
實施例13:
一種提供錯誤修正功能至記憶體內容的方法,記憶體內容常駐在積體電路上的目標記憶體(其可為非揮發性或揮發性),該方法至少包含以下步驟:
(b): 偵測在目標記憶體中常駐的記憶體內容的錯誤。
(c): 透過分別由錯誤之可能的修復組成的至少一些位元置換,搜尋至少一即時簽章匹配(on-the-fly signature match),從而定義建議修復,實現成功的強認證。
(d): 如果找到至少一即時簽章匹配,使用全認證作為建議修復之最終驗證。
(e): 如果使用電源中斷安全代碼修復更新程序,以修正代碼而通過最終驗證,從而提供目標記憶體錯誤修正,無需將目標記憶體攜帶至實驗室。
實施例14:
根據前述實施例中的任何一個方法,且也包含提供一表示記憶體修復需求的輸出指示,例如須攜帶至少一目標記憶體至實驗室以進行完整的重新編程,因為記憶體內容之修正已經失敗。
實施例15:
根據前述實施例中的任何一個方法,其中在提供輸出指示之前,只有對錯誤之單位元置換(single-bit permutation)執行搜尋。
實施例16:
根據前述實施例中的任何一個方法,其中在提供輸出指示之前,對錯誤之所有單位元置換及雙位元置換執行搜尋。
實施例17:
根據前述實施例中的任何一個方法,其中在提供輸出指示之前,對錯誤之所有單位元置換執行搜尋,且如果沒有發現至少一即時簽章匹配時,則對錯誤之至少一些雙位元置換再次執行搜尋。
實施例18:
根據前述實施例中的任何一個方法,且也包含在偵測之前,藉由執行一次強認證及藉由即時的字元認證,保護常駐在目標記憶體上的記憶體內容。
實施例19:
根據前述實施例中的任何一個方法,其中執行一次強認證包含在積體電路從低活動狀態喚醒之後立即執行的強認證。
實施例20:
根據前述實施例中的任何一個方法,其中執行一次強認證包含在積體電路啟動之後立即執行的強認證。
實施例21:
根據前述實施例中的任何一個方法,其中執行一次強認證包含在積體電路離開休眠狀態之後立即執行的強認證。
實施例22:
根據前述實施例中的任何一個方法,其中記憶體內容包含在目標記憶體中儲存之代碼。
實施例23:
根據前述實施例中的任何一個系統,其中錯誤修正功能可以操作用於施加至少一可能的修正至記憶體中的至少一錯誤字元,錯誤修正功能產生一可能的正確字元,接著呼叫記憶體內容認證功能以施加於可能的正確字元,且當記憶體內容認證功能的輸出係「認證的」,則使用此可能的正確字元取代記憶體中的錯誤字元。
實施例24:
根據前述實施例中的任何一個系統,其中錯誤修正功能可以操作用於施加至少一可能的修正到至少一錯誤字元實體的字元認證,錯誤修正功能產生可能的正確字元實體,並呼叫記憶體內容認證功能,以施加於可能的正確字元實體,且當記憶體內容認證功能的輸出係「認證的」,則使用此可能的正確字元認證取代記憶體中的錯誤字元認證。
實施例25:
根據前述實施例中的任何一個系統,其中先前時間t1係為記憶體之韌體更新發生之時間。
實施例26:
一種包含指令的電腦程式,當處理器執行此指令時,指令使處理器實行上述一種或多種方法內的一種或多種操作。
實施例27:
一種包含至少一處理器的系統,通常與對應的、專用的硬體搭配操作,其系統配置於實行本文的一種或多種方法內的至少一種操作。
實施例101:
一種安排記憶體中至少一位元之試錯嘗試修正之優先順序的方法,其中使用至少一閾值來設定閥值電壓值以決定邏輯位元位準,此方法包含: 對複數個位元分級使得複數個位元中的第一位元分級在第二位元之前,而第二位元比第一位元比較不可能是錯誤的,以及 根據分級順序依序嘗試修正複數個位元,藉此定義複數個嘗試修正,包含在嘗試修正比較不可能錯誤的第二位元之前,先嘗試修正比第二位元比較可能錯誤的第一位元。
實施例102:
在上述方法中,記憶體包含單層式儲存單元(single-lvel cell),其亦稱為二進位(0/1)儲存單元,而依序嘗試修正的步驟包含根據分級順序,依序翻轉複數個位元,藉此定義複數個嘗試位元翻轉,且在翻轉比較不可能錯誤的第二位元之前,先翻轉比第二位元比較可能錯誤的第一位元。
實施例103:
在上述任何實施例之方法中,包含偵測至少一位元中的位元錯誤,且此偵測會觸發分級以及依序嘗試。
實施例104:
在上述任何實施例之方法中,記憶體包含有一晶片且此晶片包含一NVM。
實施例105:
根據上述任何實施例之方法,複數個位元會持續進行翻轉直到以下事件之一者發生:
所有位元都已經翻轉;以及
複數個位元翻轉中的一嘗試位元翻轉被判斷成功修正錯誤。
實施例106:
根據任何上述實施例之方法,其中複數個嘗試修正會繼續進行直到以下事件之一者發生:
已經對所有位元嘗試修正;以及
複數個嘗試修正中之一者被判斷成功修正錯誤。
實施例107:
根據任何上述實施例之方法中,記憶體晶片具有原有認證功能,其中依序嘗試修正(例如依序翻轉)會持續進行直到以下事件之其中一者發生:
已經對所有位元嘗試修正,例如所有位元都已經翻轉;以及
原有認證功能可判斷複數個嘗試修正(例如位元翻轉)中的一嘗試修正(例如位元翻轉)有成功修正錯誤。
實施例108:
根據任何上述實施例之方法,分級步驟包含如果成功從1修正成0的次數比從0修正成1的次數多,則對於儲存1的位元分配較高修正優先權,對於儲存0的位元分配較低修正優先權。
實施例109:
根據任何上述實施例之方法,分級步驟包含如果成功從1修正成0的次數比從0修正成1的次數少,則對於儲存0的位元分配較高修正優先權,對於儲存1的位元分配較低修正優先權。
實施例110:
根據任何上述實施例之方法,其中分級步驟包含判斷待修正之每一個位元之電壓讀取距離(a distance of a voltage reading of each bit),電壓讀取距離係為一用於轉換讀取一邏輯位元值之電壓的電壓閾值。
實施例111:
根據任何上述實施例之方法,分級步驟包含判斷待翻轉之每一個位元之電壓讀取距離,電壓讀取距離係為一用於轉換讀取一邏輯位元值之電壓的電壓閾值。
實施例112:
根據任何上述實施例之方法,其中依序嘗試修正之步驟包含當用於第一嘗試修正(first attempted correction)之距離小於用於第二嘗試修正之距離時,在進行複數個嘗試修正中第二嘗試修正之前,先進行複數個嘗試修正中的一第一嘗試修正。
實施例113:
根據任何上述實施例之方法,依序翻轉之步驟包含當用於複數個嘗試位元翻轉之第一位元翻轉之距離小於用於複數個嘗試位元翻轉之第二位元翻轉之距離時,在進行第二位元翻轉之前先進行第一位元翻轉。
實施例114:
根據任何上述實施例之方法,在使用作為截止點以轉換電壓讀取成一邏輯位元值的至少一電壓閾值中,個別電壓閾值是最接近電壓讀值。
實施例115:
根據任何上述實施例之方法,記憶體包含一晶片,而執行此方法之代碼係為在晶片中執行的韌體。
實施例116:
根據任何上述實施例之方法,此晶片具有邊界讀取功能,而此韌體使用邊界讀取功能以判斷每一待修正(例如翻轉)位元之電壓讀取與個別電壓閾值之距離。
實施例117:
一種用於安排記憶體中至少一位元之試錯嘗試修正之優先順序,邏輯位元位準係由使用至少一閾值之設定閥值電壓值所決定,此系統包含:
一電路,用於分級(rank)複數個位元,使得複數個位元中的第一位元會分級在第二位元之前,其中第二位元與第一位元相比是比較不可能錯誤,以及
一控制器,用於根據分級順序(order of the ranking)依序嘗試修正複數個位元,藉此定義複數個嘗試修正,其包含在嘗試修正第二位元之前,先嘗試修正第二位元,其中第一位元相比於第二位元是比較可能錯誤的。
以下為本發明定義之名詞解釋
存取控制(Access Control):旨在包括任何習知的存取控制功能,通常與處理器及記憶體之間的介面結合,可以作為包括硬體及韌體的虛擬邏輯實體來實施。
目標記憶體(Target Memory):可以包括在積體電路(也稱作IC)之內的任何記憶體陣列,記憶體陣列通常包括使用中及閒置的記憶體的頁面。目前未使用的閒置頁面可視為保留頁面。
當使用保留頁面時,例如其在更新記憶體頁面時作為非常短期的緩衝,其方法通常驗證保留頁面含有的內容正好是寫入的內容(例如,藉由即時比較保留頁面的內容與複製到保留頁面的資料,且確保兩者是相同的)。如果不是這種情形,則保留頁面的內容應該被抹除,且藉由重新寫入內容至保留頁面來重作。驗證可以包括在寫入至保留頁面上之後,立即讀取保留頁面,以確保寫入是成功的,導致儲存在保留頁面上或者空白頁面上的資料是正確的,例如完全等於寫入的資料。
強認證(Strong Authentication):可以包括演算法或程序,用以驗證記憶體內容。在大型代碼或持續的資料段上可以採用基於摘要/安全密鑰的哈希(HASH)函數,例如金鑰雜湊訊息認證碼(HMAC)或基於密碼的訊息認證碼(CMAC)。
用於強認證的認證代碼可以基於諸如SHA(SHA-1,SHA-2)或HMAC之類的安全哈希函數,請見https://en.wikipedia.org/wiki/Secure_Hash_Algorithms。
通常,本文的「強認證」會產生單一數值,其數值保證代表要保護的內容的整個資料的部分或整個資料的影像或整個資料的影像區塊(例如但不限於代碼),從而確保待驗證之整個資料的部分或整個資料的影像或整個資料的影像區塊的內容的完整性,而不像習知的2D水平/垂直錯誤修正方案只要確保特定的對應行或對應列進行驗證的圖像塊。
通常,強認證比字元認證在較高程度的信賴度上認證記憶體內容。因此,如本文所使用的「強認證」旨在包括產生較小的摘要(相對於本文提到的「字元認證」演算法所產生的摘要)的任何演算法或任何訊息認證代碼方案,例如,因此,與字元認證相對,本文所使用的「強認證」可視為是不可逆的,亦即,不可能從摘要中重新產生原始明文。
通常,記憶體內容(可以藉由認證識別)之內的特定資料字元中,在糾正或修正錯誤之後,且利用糾正的資料及強認證取代資料及強認證之後,用於全部記憶體內容的強認證會重新計算,且重新計算的結果會與儲存的預先計算的強認證或摘要比較。
通常,將強認證施加於給定的資料主體(其中至少一錯誤字元,其錯誤字元分別被建議的正確字元取代)。例如,施加於整個記憶體影像或僅其中一部分,這取決於要與重新計算的強認證進行比較的資料主體。例如,取決於將要與重新計算的強認證進行比較的預先計算強認證資料是否已經在整個記憶體影像(通常,將錯誤的字元取代為建議的正確字元)上或者僅在其記憶體區塊上(同上)預先計算了。
如果重新計算的強認證資料和預先計算的強認證資料(也稱為期望的強認證資料)完全相等,則通常將強認證視為「成功的(successful)」。
「強驗證」可能會在韌體要求時發生,韌體要求通常是來自應用程式系統,也就是利用並合併了積體電路的更高級別的系統(參見第1圖)。替代地或附加地,在給定IC(積體電路)上執行的應用韌體的要求下會執行「強認證」,而給定IC包含試圖修正錯誤的記憶體內容。通常,接收到此要求可回應於由諸如在某些其他IC或系統元件中識別出的攻擊的事件引起的某個觸發(例如,根據第12圖)來重新認證其自身。因此,較高級別的系統是執行本文所述功能(像是認證,例如強認證)的請求的一種可能的來源,且IC之內的韌體和硬體事件也可能如此。
字元(word):可以包括比記憶體小得多的任何資料的片段。可能包含數千個字元的記憶體陣列中的16位元資料,或128位元資料或256位元資料,或更多。通常,字元是從記憶體中檢索到的最小資料的片段,它具有自己的認證代碼。
字元認證(Word Authentication),也稱為簽章匹配:可以包括待認證「字元」的摘要(digest of the “word” being authenticated)。
即時簽章匹配(on-the-fly signature match):每次讀取字元時,同時讀取字元認證。通常,位元結構的長度是資料的長度加上認證的長度。同時,基於所讀取的字元重新計算認證,然後將計算的認證資料與所讀取之字元的認證進行比較。當重新計算的認證資料等於從記憶體讀取的認證資料時,則判斷為匹配。
全認證(Overall Authentication):可以包括對系統要管理的記憶體的全部內容進行操作的強認證。通常,如果任何時候,且尤其是在資料修正之後,內容的摘要與預先計算的資料相同,那麼在重新認證時,現在的內容可以視為與當時預先計算的內容相同,於是,假如在資料修正後立即執行且強認證是成功的,則建議的修正或建議的修復是正確的、經過認證或確認的。
摘要(digest):可以包括從內容產生雜湊值(hash)的演算法(例如,用於強認證),此雜湊值可確認待驗證內容的完整性。例如,確認內容是否已被更改,或者(對於具有受控存取權限的記憶體)是否經歷了未經授權的更改或被篡改。因此,摘要和雜湊值在本文中通常可互換使用,並且都同時用作名詞和動詞。
HMAC演算法:通常是一種訊息認證碼(message authentication code, MAC)算法,它在內部使用雜湊值(而不是加密)來產生MAC。
即時(on-the-fly):例如,與另一個正在進行的程序同時進行。例如,在認證中,可以讀取待認證資料的同時計算摘要並將其摘要與期望值進行比較,或者可以在(內容的)寫入操作期間計算摘要並將其摘要寫入記憶體。
舉例來說,以下的專利文件中描述了即時加密,解密和認證,其揭露內容通過引用合併於此:https://patents.google.com/patent/US9525546B2/en。
錯誤驗證(Error Verification):可以包含判斷在時間t2計算出的記憶體的「強認證資料」,與在時間t2之前的時間t1預先計算/儲存(也稱為期望的)的相同記憶體區域的「強認證資料」之間是否存在匹配或不匹配(相等或不相等)。
通常,預先計算的強認證資料包括針對記憶體空間或陣列(其使用本文的實施例來尋求保護其完整性)的整個內容的強認證摘要。
堆疊式快閃記憶體(Stacked flash):可以包括一個晶片,其晶片可以歸類為「垂直」或「3D」晶片,藉由層疊多個(有時是數十層)記憶體層或晶粒來產生極高密度儲存並降低位元成本。可以使用垂直3d堆疊技術 (bit cost scaling, BiCS)或一穿孔及插塞製程(punch and plug process)。應當理解,本文的實施例通常適用於記憶體,其包括但不限於堆疊式快閃記憶體和其他快閃記憶體/非揮發記憶體(NVM)技術。
負擔(Overhead):可以包括在記憶體容量中的冗餘,這通常是不利的,例如,對晶粒面積及產品成本之至少一者而言。舉例來說,利用錯誤修正碼(ECC)實施錯誤修正,通常意味著將ECC的X位元添加至資料/驗證訊息的Y位元,其轉換為用於錯誤修正的負擔或額外的儲存容量(Y/X)x100%。
字元實體(Word entity):可以包括儲存在記憶體中的有關字元的資料,包括字元本身(又稱為字元位元),加上涉及字元的字元驗證資料(又稱為驗證位元)。字元認證在本文中被稱為字元中「相對應的」字元認證資料。根據某些實施例,字元部分中的位元及認證部分中的位元均被掃描或翻轉,但是對於字元通常執行計算,而對於認證比較通常執行例如本文所述的全部。
本文採用以下縮寫: ECC(表示錯誤修正碼)、FW(表示韌體)、NVM(表示非揮發性記憶體)、ASIC(表示特殊應用積體電路)、 DSP(數位訊號處理)、HMAC(表示金鑰雜湊訊息認證碼)、 IC(表示積體電路)及 HW(表示硬體)。
在下一節中將詳細描述上述參閱的實施例以及其他實施例。出現在正文或圖式中的任何商標均為其所有者的財產,在本文出現的目的僅在於解釋或說明如何實施本發明的一個示例。
應當理解,在整個說明書討論中,除非另外具體說明,否則從以下討論中顯而易見的是,利用諸如「處理」、「計算」、「估計」、「選擇」、「排名」、「分級」、「計算」、「判斷」、「產生」、「重新評估」、「分類」、「生成」、「雙匹配(stereo-matching)」、「暫存」、「偵測」、「結合」、「重疊」及「獲得」,或其類似用語,是指操作、轉換及其組合表示為實際的資料的至少一個電腦、電腦系統、處理器或類似的電子計算裝置的動作、程序或其組合,像是電腦系統的暫存器、記憶體及其組合,或其他此類資訊儲存、傳輸或顯示裝置之內的電子數量。術語「電腦」應被廣義地解釋為涵蓋具有資料處理能力的任何種類的電子設備,包括但不限於個人電腦、伺服器、嵌入式核心、電腦系統、通訊設備、處理器(例如,數位訊號處理器(DSP)、微控制器,場可編程邏輯閘陣列(field programmable gate array, FPGA),特殊應用積體電路(ASIC)等等)及其他電子計算裝置。
本文分別列出的元件不必是不同的構件,且可以是替代地相同的結構。可以存在元件或特徵的陳述旨在包括(a)元件或特徵存在的實施例;(b)元件或特徵不存在的實施方式;以及(c)元素或特徵選擇性地存在於其中的實施例,例如使用者可以配置或選擇是否元件或特徵存在。
IC製造商渴望保護其積體電路的記憶體的內容。
本文中的實施例可應用於許多不同技術的記憶體,因此,本文中使用的術語「快閃記憶體」僅作為示例使用。
本發明詳細描述一種用於確保IC中記憶體內容完整性的系統。通常,對此類記憶體的存取受到控制, 摘要可以用於對受控的且授權的記憶體更新進行簽章。因此,不是受控存取的記憶體中的任何改變都是不希望的錯誤,無論是惡意的還是可能是由於過渡的實質或電性故障(例如,實質的記憶體本身的故障)。本文中的系統可操作用於測試錯誤的可能修正,減少其中嵌入了積體電路的電腦或其他產品的「亂序」時間。通常,(一個或多個級別)認證功能,其積體電路通常出於任何其他目的用於驗證或批准可能的修正,像是使用字元認證來發現錯誤,並初步驗證其提議的修正,並使用強認證用於最終驗證建議的修正。
某些實施例在積體電路中提供錯誤偵測和修復(也稱為錯誤修正)功能,其藉由積體電路提供如第1圖所示的,或者藉由修改現有的積體電路,例如藉由在現有IC上儲存軟體18。軟體18可以常駐在同一IC的另一個通常獨立的記憶體空間中,其IC具有對系統試圖保護的記憶體空間的存取授權,且通常可操作來執行認證,例如字元認證以及強認證之至少一者,以完成例如本文所述的錯誤修正以及驗證之至少一者。
某些實施例在積體電路中提供錯誤偵測及修復功能,其功能包括偵測(例如基於習知認證),以識別其中記憶體內容已被變更的事件,且從這些事件中修復,以使得IC(以及嵌有此IC的裝置,例如電腦)能繼續照常操作,以盡可能減少裝置的終端使用者的負擔。這是特別有利的,因為這意味著某些事件(舉例來說,今天導致終端使用者正在處理的電腦)「故障」,且終端使用者必須將電腦帶到實驗室進行修理,根據本文描述的某些實施例將不需要如此,因為具有記憶體故障的構件自身會自行糾正,從而保持系統的安全性。
錯誤修正功能可以用硬體及韌體的任何適當的組合來實施。記憶體通常能支持認證及字元認證的結構。通常,即時字元認證是在硬體中實施的(當讀取記憶體時)。強認證通常在韌體中實施,通常使用合適的加密硬體來加速程序。可以在韌體或硬體中實施位元翻轉(bit flipping)及一致性檢查(consistency check)。考慮到復雜的操作,例如NVM抹除及重寫有時會涉及到,記憶體內容的實際更新以修正錯誤通常藉由韌體完成。
第1圖的系統顯示根據某些實施例的積體電路,其可以被嵌入在更高級別的系統16中。第1圖的更高級別的系統16是執行本文描述的功能(像是認證,例如強認證)的請求的一種可能來源。替代地或附加地,更高級別的系統可以經由在第1圖中的記憶體陣列2用作存取路徑,合法地獲取其原始內容(例如,儲存在記憶體陣列2中的代碼),或隨後被更新,亦即記憶體陣列的內容被取代為不同的內容。
存取控制功能(例如,如第1圖中所示)通常是硬體及韌體的組合。通常,有硬體定義哪些儲存區域可以及不可以存取。韌體可以在某些特權級別存取控制記憶體存取的硬體。因此,可以藉由「說服」韌體有存在這樣做的許可來完成記憶體內容的更新,在這種情況下,韌體將打開邏輯閘且更新記憶體。
測試可能的錯誤修正的功能,例如根據第7圖的方法,可以包含單獨的狀態機(state machine),其狀態機可以用硬體或韌體來實施(參見第1圖中的硬體6以及韌體7之至少一者)。同樣,錯誤修正功能的邏輯也可以植入硬體及韌體的任何適當組合中。
可以結合第1圖、第9圖、第10圖及第11圖的實施例的全部或任何子集來提供第1圖的系統或其中說明的區塊的任何子集。及/或結合前面的第2圖中說明的所有或任何子流程。
第2圖說明將認證功能與錯誤修正相結合的方案或方法,其在記憶體負擔方面是經濟的。因為習知ECC需要用於儲存每條資料的ECC位元的記憶體容量,而本文中的實施例藉由利用在現有設計中存在的或在新設計中提供的即時認證來消除錯誤偵測或修正代碼的使用或儲存,而在沒有損害安全級別的情況下用於錯誤修正。
安全級別通常根本不會受到影響,因為在使用ECC時,攻擊者可能會同時修改資料及其ECC,而資料及ECC均被修改為相互匹配,因此無法即時識別錯誤,而是僅在執行字元認證或強認證時,系統才可以識別出錯誤。
應當理解,術語「負擔」在本文可以用來包括藉由認證,或者藉由錯誤修正,或者可以存儲在任何合適的位置中的其他記憶體管理程序引起的存儲需求。舉例來說,在字元認證(又稱為字元級別認證)或字元ECC中,可以使用更寬的字元長度來生成記憶體,因此認證/ECC可以相鄰字元儲存,使得在讀取字元時,認證/ECC位元也被存取。或者,在硬體系統中,可以在讀取所需的實際負載(與它的認證/ECC位元相對)的同時,實施一個附加的記憶體構件讀取,以有效地允許更大的字元長度,然後可以將整個記憶體的字元長度專用於實際負載,其實際負載的認證/ECC位元位儲存在其他位置。
如圖所示,第2圖的方法可以包括以下操作的全部或適當的排序的任何子集。
操作步驟10:提供一種積體電路,其記憶體內容,例如儲存在記憶體中的代碼,受「強認證」以及「字元認證」保護:
啟動「強認證」,(例如,在大的代碼段上執行HMAC或CMAC)。例如,用以對抗冷快閃記憶體內容替換。
即時「字元認證」,(例如128位元負載+16位元認證)。例如,用以對抗熱快閃記憶體內容替換,例如直接從快閃記憶體執行代碼。
即時加密、解密及認證在以下的專利文件中進行了描述,其揭露內容藉由引用合併於此:https://patents.google.com/patent/US9525546B2/en。
操作步驟20:每當即時字元認證失敗時(例如在運行時),積體電路就會暫停(例如直到下一次啟動)或自動重啟。舉例來說,假定儲存空間中有要保護的代碼。因此,從記憶體中進行讀取通常意味著IC中的處理器正在從記憶體空間中擷取代碼,這反過來通常意味著如果識別出字元驗證失敗,則主處理器只會擷取到更改的代碼。此時,處理器可能會暫停以防止執行更改的代碼,且通常需要開始修復。修復動作可以包括:例如,跳轉到已知為100%安全的另一個代碼,例如ROM中的代碼,或重置以從ROM重新開始執行,無論是藉由軟體還是硬體,這會觸發例如本文所述的錯誤修正以及驗證之至少一者。
操作步驟30:在下次啟動時(或按照上面的示例),所有「字元認證」都已作為「強驗證」計算的一部分進行檢查,其「強驗證」計算已用於保護記憶體內容。如果在開機認證期間「字元認證」失敗(與運行時相反),則構成錯誤偵測,且因此積體電路會嘗試修正在其記憶體內容中發現的錯誤,例如藉由執行第3圖的操作140至操作170的全部或任何子集。
操作步驟80:如果記憶體是代碼執行記憶體(code execution memory),則如果進行錯誤修正(例如執行第3圖的操作140至操作170的全部或任何子集)可導致解析出修正的代碼,則執行適當的電源中斷安全代碼修復更新流程。一旦成功修正代碼後,處理器可以恢復運行,也稱為正常操作。
如圖所示,第3圖的方法可以包括以下操作的全部或適當的排序的任何子集。
操作步驟140:檢查損壞字元(有發現錯誤的字元,例如因為在啟動驗證期間,用於字元的「字元驗證」失敗)的所有位元置換(例如,在說明的實施例中為128+16個位元置換),以搜尋匹配。要強調的是,資料及認證之間可以存在任何適當的比例,128位元及16位元參數僅是說明性的。
專用HW或SW可以快速掃描所有置換,例如在記憶體上或作為記憶體控制及介面單元的一部分,而無需循環地從記憶體讀寫,例如快閃記憶體。
根據某些實施例,專用緩衝器可保存損壞字元的資料結構,其中可以按位元對損壞字元進行操作。然後,使用專用的韌體代碼或硬體狀態機,掃描資料結構的排列,一次翻轉一個位元(例如,參見第10圖中的「翻轉一位元」的步驟)或更多。每次置換後,對當時的、經過操作的、位元翻轉的資料結構進行字元認證計算。通常,可以理解,置換的掃描可以藉由韌體來完成,或者替代地,可以通過專用硬體來完成。
操作步驟150:如果找到匹配,則可以將經過修正或改正的(例如,對錯誤內容的建議修正)錯誤資料或內容作為「強認證」計算的一部分進行摘要。依據認證演算法及修正的位元數量,可能會找到多於一個的匹配。在這種情形中,可以嘗試匹配位元組合的所有置換(也稱為位元型樣),並採用產生正確「強認證」的置換。正確通常意味著對(或施加於)已改正的代碼進行「強認證」的結果,等於對(或施加於)記憶體的原始內容進行強認證的預先計算的結果。
舉例來說,對於單個位元錯誤,其方法可以包括翻轉第一位元,例如位元0,並接著檢查認證, 然後是隨後的位元,例如位元1、位元2等等,直到找到匹配。對於2個位元的錯誤,可以一次翻轉一對位元(a pair of bits),並且通常會分別考慮兩個位元的每對可能的數值。
操作步驟160:可選地,可嘗試修正多個錯誤,例如藉由再次搜索,這次對錯誤的至少某些雙位元置換。應當理解,一個以上的錯誤(涉及一個以上的位元)是可能可以修正的,但是根據一些實施例,涉及複數個位元的錯誤無法修正,因為其計算比一個位元錯誤的計算更複雜,需要大約X2
/2(例如1442
/2)次的檢查。
操作步驟170:如第1圖所示,如果無法修正錯誤,通常會向終端使用者提供警報,例如經由高級別軟體。
第4圖是當記憶體是基於頁面的非揮發性記憶體(page-based nonvolatile memory)時,用於實行錯誤修正及驗證的方法。通常,在這樣的記憶體中,抹除操作只能抹除整個頁面(或整個記憶體)。因此,當發現需要修正的錯誤時,通常執行頁面調整以使修正能夠被施加,例如,當施加修正時,將具有修正資料的頁面複製到某些保留頁面。更一般地,應當理解,本發明包括在記憶體使用限制下進行的修正。
可以在任何合適的時間執行第4圖的方法,例如在偵測到錯誤時立即(下面的操作步驟220),或是在下一次IC啟動時(下面的操作步驟230)。
如第4圖所示,第4圖的方法可以包括以下操作的全部或適當的排序的任何子集。
操作步驟210:識別出待修正的快閃記憶體頁面。如果有一個頁面以上需要修正,則將需要修正的字元(位址+資料)保留(或是此字元的指示)在非揮發性記憶體中。接下來,執行操作220以立即修正,或執行操作230以在下次開機後修正。
操作步驟220:修正每個待修正的頁面,例如,藉由針對每個頁面執行第5圖所示之操作步驟310至操作步驟350的全部。
操作步驟230:在開機期間,在執行快閃記憶體代碼認證之前,開機代碼(boot code)檢查是否存在已知為例如標記為可用的頁面,且如果這樣,則在繼續開機之前啟機代碼可完成操作步驟2310至操作步驟2350的所有或任何子集。否則,某些更高級別的韌體可以執行「垃圾收集(garbage collection)」,例如,壓縮記憶體內容以佔用最小的可能的記憶體空間,因此釋放至少一頁面用於臨時之錯誤修正。
如第5圖所示,第5圖的方法可以包括以下操作的全部或適當的排序的任何子集。
操作步驟310:在保留的預定義的快閃記憶體頁面中寫入快閃記憶體頁面的位址及修正的資料(代碼),且驗證其是否正確寫入。
操作步驟320:在保留頁面中設置一位元,其指向例如帶有有效資訊的頁面的其他韌體,或者正在使用中且不應被抹除的韌體。在本發明的系統例如被中斷的情況(例如使用者關機且之後嘗試恢復操作下),此位元也是有用的。
操作步驟330:抹除原始快閃記憶體頁面。例如,在第4圖的操作步驟210中發現錯誤的頁面。
操作步驟340:從保留的快閃記憶體頁面的已修正資料更新原始快閃記憶體頁面,且驗證其是否正確寫入。
操作步驟350:抹除所保留的頁面以允許其將來能夠用於其他頁面中的錯誤修正。
觸發在前面的第2圖的錯誤偵測及修正方法的變化型可以包括:
(I) 即時(On-the-fly):藉由記憶體檢查立即回應字元認證失敗:如果從目標記憶體讀取時發現字元認證不匹配,則在處理器的下一個執行序列之前先執行上述程序。
舉例來說,如果正在執行來自記憶體的代碼,且在代碼擷取歧見就識別出字元認證失敗,則通常會暫停代碼執行以允許例如掃描整個記憶體空間或陣列以查找失敗或錯誤。此後,代碼執行暫停終止,且執行處理器的執行序列中接下來要執行的操作,或者可以從代碼的開頭重新開始執行。在資料不是代碼的情況下,可能會在讀取資料期間出現錯誤指示,在這種情況下,處理器可能會再次暫停,且可能觸發記憶體掃描/修正/驗證。
(II) 啟動(Power-up):在每個積體電路從低活動狀態中喚醒的事件中觸發,例如,啟動或從休眠狀態改為活動狀態後,將重新計算強認證,並與預先計算的強認證資料相比,且在重新計算的及預先計算的強認證之間出現不匹配的情況下,啟用上述錯誤修正機制。
(III) 週期的資料清理(Periodic aka scrubbing):有時,重新計算強認證,並將重新計算之結果與預先計算的強認證相比較,且如果重新計算的強認證與預先計算的強認證不匹配,則可以啟用本文描述的記憶體錯誤修正的程序。例如,可以使用一些可編程計時器來實施觸發,其可編程計時器給出了要執行上述操作的時間指示。此機制通常會帶來一些損失,因為積體電路的正常操作會受到干擾及中斷,但可獲得更大的保護。
(IV) 初始化(Initiated):藉由外部事件觸發,例如,如果裝置(也稱為積體電路)識別出(例如使用可以存在於IC中的硬體或韌體駭客偵測功能)駭客攻擊或其他一些導致功能錯誤的嘗試,將重新計算強認證,再與預先計算的強認證相比,且如果重新計算的強認證資料及預先計算的強認證資料之間存在不匹配,則可以啟啟用本文描述的記憶體錯誤修正的程序。
(V) 存取觸發:每次存取記憶體時都要檢查整個目標記憶體。實際上,例如對於不經常執行的代碼,此實施例是合適的,如果記憶體很少被存取,且必須即時資料完整性是極重要的,那麼性能負擔就相對不重要。
應當理解,可以在任何給定的裝置中提供以上變化型的全部或任何子集。
如第6圖中所示,用於第1圖的積體電路的操作流程,可以藉由第1圖的處理器1來控制或落實,流程可以包括以下操作的全部,或適當地排序的任何子集,例如以下順序。
操作步驟1001:在存儲區域中填入內容,例如 代碼,其中包括多個字元。對於每個字元,在寫入時計算「字元認證資料(word auth)」,並存儲「字元認證資料」例如在這個字元旁邊。
操作步驟1002:對記憶體內容進行「強認證」,並將結果儲存在記憶體中的某處(例如,可以藉由實體離線準備記憶體影像進行預先計算,其實體具有執行強認證的能力),且提供給安全記憶體陣列2常駐在其中的IC。
應當理解,通常在IC外部準備一個記憶體影像(memory image),然後將其「注入」到IC中,並與附加在內容上的認證代碼一起進行編程。
操作步驟1003:照常使用記憶體,其包括執行記憶體讀取操作。每個記憶體讀取操作包括:
首先,對目前的內容進行字元認證計算,其又稱為重新計算的「字元認證」。
接著,從記憶體中讀取在操作步驟1001中存儲的預先計算的字元認證資料,並且將計算的認證資料以及預先計算的字元認證資料進行比較。
如果重新計算的「字元認證資料」等於從記憶體中讀取的預先計算的「字元認證資料」,則繼續操作,因為一切資料很好。否則,若出現不相等,則假設已識別出錯誤,進入錯誤修正序列。
適當的錯誤修正序列流程在第7圖中所示,包括測試可能的錯誤修正,且可以包括以下操作的全部,或適當地排序的任何子集,例如以下順序,且還可以藉由錯誤修正功能來控制或落實,其錯誤修正功能可以由軟體實施並且可以常駐在例如第1圖的處理器1中。
操作步驟1006:對待修正的內容執行錯誤修正,待修正的內容包括字元及其相關的字元認證,兩者係組合的(例如依序組合),從而提供組合的位元串。錯誤修正包括:掃描所有位元,翻轉組合後的位元串中的每個位元(如果目標是修正單位元錯誤)以及每對位元(如果目標是修正雙位元錯誤)之至少一種,且重新檢查字元認證資料。不要與儲存在記憶體中的記憶體字元認證資料進行比較,因為錯誤可能在字元認證資料中而不是字元。代替的,翻轉一位元,重新計算字元認證資料,且將重新計算的字元認證與可用的字元認證資料進行比對。舉例來說,可以從記憶體中讀取X個位元之讀取資料以及Y個位元之認證資料所形成之結構,然後在此組合結構中翻轉位元。如果被翻轉的位元在X位元之資料中,則對為修正後的資料的X位元重新計算認證,且將重新計算的認證資料與從記憶體中讀取的Y位元之認證資料進行比較。
如果被翻轉的位元是Y位元之認證資料之位元,則重新計算從記憶體中讀取的X位元之資料之認證資料,且與經過修正的Y位元認證資料進行比較。
如果找到匹配(發現相比較的字元認證資料相等),則表示字元及字元認證資料是「一致的」,則跳至操作步驟1009。如果未找到匹配,則翻轉下一位元(或下一對位元),並重複上述重新計算操作及比較操作。應當理解,在此處和其他地方,術語”下一個”可以是實際上相鄰的,或者可以是藉由任何合適的試探法所定義的位元之間的排序而被認為是序列的或順序上的下一個序列。
操作步驟1008:達到此步驟通常意味著位元翻轉(或用於兩位元錯誤的一對位元翻轉) 沒有產生可行的修正,因此錯誤修正在字元級別上失敗。因此將此記憶體內容標示為不可修正的記憶體內容,例如,藉由警告如第1圖所示的更高級別的軟體、暫停系統、處理器1及其組合可以提示(例如藉由產生合適的輸出指示)更高級別的修復,例如,將裝有積體電路的裝置發送到實驗室進行人工技術支援。
操作步驟1009:進行「強認證」,包括計算摘要,例如整個記憶體區域的HMAC,從而產生強認證結果。通常,強認證會產生摘要/MAC/簽章。
操作步驟10010:將強認證結果與操作步驟1002中儲存在記憶體中的預先計算的預計算強認證結果進行比較。如果結果相等,則存在強認證匹配;否則(兩結果不相等),存在強認證不匹配。
操作步驟10011:如果存在強認證匹配,表示修正後記憶體內容合格,則繼續照常使用此記憶體,例如執行操作步驟1003。
操作步驟10012:否則,亦即如果存在強認證不匹配,執行例如第8圖中的不匹配程序。如第8圖中所示,用於操作步驟10012中的不匹配程序的合適的流程,且其流程可以包括以下操作的全部,或適當地排序的任何子集,例如以下順序,且還可以藉由錯誤修正功能進行控制或落實。
操作步驟10012.5:藉由重做操作步驟1006來掃描第1圖中的整個記憶體陣列 2,但修正所有已識別的錯誤。
操作步驟10013:藉由重做操作步驟1009至操作步驟10011重做強認證。
操作步驟10014:如果現在強認證失敗(亦即不匹配),則假定無法修正,因此可能需要更高級別的修復。因此將記憶體內容標示為不可修正的記憶體內容,例如藉由警告如第1圖所示的更高級別的軟體、暫停系統、處理器1及其組合可以提示(例如藉由產生合適的輸出指示)更高級別的修復,例如,將裝有積體電路的裝置發送到實驗室進行人工技術支援。
測試可能的錯誤修正的功能,例如根據第7圖的方法,可以包含例如可用硬體或韌體實施的個別狀態機。其功能可從認證功能中取得「認證服務」,通常包括嘗試修正之後對字元認證進行的驗證(例如,上述操作步驟1006)、使用強認證來驗證整個記憶體(例如,上述操作步驟1009至操作步驟10012)、或是兩者之組合。
以上所有或大部分的硬體實施通常會產生最佳性能,例如,因為如果整個流程都在硬體中進行,則在使用記憶體時由硬體執行即時驗證,如果沒有錯誤,則不會造成性能損失。
如果幾乎所有的實施都在韌體中,則可以省略即時字元認證,而改採週期地、偶爾或是兩者組合的進行記憶體掃描以檢查錯誤,且之後如果發現錯誤,則執行修正及驗證(例如,上面的操作步驟1006至操作步驟10012)。
如果所有實施都在韌體中,則可以採用現有的(也稱為舊有的)IC。現有的IC通常具有現有的(又稱為舊有的)記憶體結構,其可以在軟體中對其進行邏輯上的重新排列或管理,以儲存在本文所述的錯誤修正程序中計算出的字元認證。在這種情況下,錯誤偵測及修正通常不會在如上所述的某個觸發下即時實行,而是離線實行。
可以採用任何合適的實施方式,以確保用於測試可能的錯誤修正的介面具有認證功能或者從「認證服務」取得的認證功能,即使在現有(或舊有)IC其將舊有認證功能可用於將記憶體內容與某些標準內容(舉例來說,在最近的認證記憶體更新之後立即計算的摘要)進行比較。實施方式通常可以確保認證功能將建議的待測試的錯誤與標準內容進行比較。可透過以下範例確保上述實施方式:
(1) FW可以從記憶體中讀取資料字元以及字元認證資料。
(2) FW可以自行計算資料字元的認證資料或使用一些專用硬體來計算資料字元的認證。
(3) FW可以將計算結果及從記憶體中讀取的認證資料進行比較,並查看資料結構是否一致或有錯誤。
(4) 如果FW識別出錯誤,則FW可以執行本文所描述的位元翻轉程序,如以上操作(2)中那樣計算認證資料。
(5) 一旦透過記憶體完成錯誤修正,FW可以單獨或使用某些硬體來計算整個記憶體的內容之摘要,這些硬體可以加速或簡化系統的設計人員所選擇的任何MAC演算法的執行。
本文中某些實施例的優點是錯誤修正不會產生上述需要額外認證(通常為強認證及字元認證)的負擔。
本文中某些實施例的另一個優點是,如本文所描述的錯誤的推測性修正(測試各種可能的錯誤修正),而沒有對位元數設置硬性限制。相反的,習知的錯誤修正方式實施了某種錯誤修正代碼。例如,對於給定的X位元大小的資料,要修正某些預定數量的錯誤,二進制組合的數量以及所選的方法係表示了錯誤修正代碼所需的位元數量。一旦實施,就只能修正預定數量的位元錯誤,而不能修正更多。修正錯誤的實際複雜性通常會隨著嘗試修復的位元數量而成長。然而,如果需要且給定的使用情形是合理的,可以使用非常強的認證來驗證修正的任何數量的錯誤,則可以修正任何數量的位元錯誤。
本文中某些實施例的另一個優點是,利用認證進行驗證以產生具有高信賴度水平的真正正確的修正。舉例來說,如果使用強認證來驗證提議的修正,這通常意味著,一旦對「改正後的資料」(也就是提議的修正)的強認證的結果顯示與預期的強認證匹配(例如,等於),其暗示加密級別的信賴度對改正後的資料確實是正確的。
與實施ECC(錯誤修正代碼)的現有技術系統相比,本文中某些實施例的另一個優點是防止惡意的內容更改。然而,惡意攻擊可能會以相互一致的方式替換資料及錯誤修正代碼,從而使錯誤似乎已得到改正,而實際上內容或代碼是不良的或惡意的。相反的,因為本文的方法在密碼學上的強度,藉由使用本文所描述的用於錯誤修正的認證的優點,駭客變得不允許如上述惡意地替換資料及認證代碼。
應當理解,使用即時認證可能是特別有利的,由於性能保持不變(認證並行發生),及/或已讀取的資料可以立即使用而沒有延遲,除非發現它包含錯誤。
任何記憶體,例如代碼執行記憶體,或持續的或不經常更改的大資料區塊,及/或特別是在控制對記憶體內容的存取時,例如僅經由安全或受控(韌體)更新進行更改的記憶體內容,可以從第2圖的流程中受益,尤其是在記憶體不受保護或外部的情況下。可以從第2圖的流程中受益的記憶體包括但不限於EEPROM、硬碟、NAND快閃記憶體、NOR快閃記憶體、SDRAM或是SRAM。
應當理解,除了安全(韌體)更新之外,存在各種解決方案用於對記憶體的受控存取。特別地,已知各種技術可以嚴格控制對記憶體內容的存取,例如但不限於其內容只能被執行,又稱為僅執行(execute-only)記憶體的記憶體,或者其內容只能被讀取的記憶體,且在獲得某些存取特權或進行認證後,可以經由專用閘道進行更新或寫入,或者只有在更改存取控制設定之後才能寫入的記憶體,其設定只有具有某些存取特權時才可以改變的。
儲存內容不經常更改:例如,某些儲存內容的更改頻率通常足夠低,以使本文所描述的系統及方法產生的負擔具有成本效益。舉例來說,已知由於軟體更新定期或不定期發生,因此代碼每隔幾個月僅更改一次,或者,可能已知某些資料每隔幾天或幾週僅更改一次,或者可能已知平均在那些間隔內更改。相反的,某些資料可以由軟體操縱,因此每次執行或運行程式時都可能會更改。
許多變化型是可能的。舉例來說,根據某些實施例,一旦遇到錯誤,就將其改正,也稱為修正,然後立即修復記憶體。之後,無論運行什麼程序,都能繼續運行。
替代地或附加地,可以藉由將實際記憶體內容修復延緩到稍後來提供覆蓋修補(overlay patch),以使裝置能夠繼續運行。這可能是有利的,因為NVM的處理時間可能會很長,當裝置嘗試線上完成此操作時引起延遲,因此當裝置離線完成此操作且稍後執行,便能使裝置能夠繼續運行。在專用置換修補中的快取(非揮發性或揮發性)內容可以常駐在任何電腦記憶體中,通常在同一IC上,使用目標記憶體的任何處理器都可以存取其記憶體,以便在需要目標記憶體時將其拔出修復。
可能之變化型的另一個示例,可以是單獨地或以任何合適的組合使用任何合適的認證來測試可能的錯誤修正,包括但不限於強認證及字元認證級別。
如果流程要求通過強認證來僅識別記憶體中存在的錯誤,且一旦識別出存在錯誤,每個儲存位元可以被翻轉,且之後強認證可以用來驗證位元翻轉(或其一對位元)。然而,儘管強認證是繁重的,亦即耗時長且消耗資源的操作,但這對於小型儲存區域而言可能是完全可行的實施,為此,可能不需要提供兩個級別的認證。
在許多使用情況下,使用2個級別對於確保這個程序是有效的。在本文中,2個級別稱為字元認證級強認證,且在程度上更一般地有所不同,亦即前者時間較短及/或消耗較少的資源,後者時間較長及/或消耗更多的資源
對於大型存儲區域,具有字元認證(這很常見),通常會導致效率更高的程序,因為可能會在字元基礎,也稱為字元級別上偵測到錯誤,且在字元級別上也可能會發生對建議的基本驗證,也稱為推測性修正(speculative corrections),因此,相對於省略字元級認證的實施例,不需要太頻繁地運行用於認證或驗證修正的強認證。
以下說明本發明之示例。
示例(1):推測建議的更正,施加建議的更正,然後通過強認證來驗證修正。如果失敗,再次重試、推測另一個修正等等。
示例(2):推測建議的更正,檢查字元認證,如果失敗,推測另一個提議的修正,且再次使用字元認證進行檢查, 繼續直到獲得成功的字元認證。然後,使用強認證作為修正的最終驗證。無需字元認證也可以使用。
另一個可能的變化型是,可以使用任何合適的方法對儲存內容實際進行驗證的建議修正。舉例來說,如果記憶體內容是代碼,則可以使用電源中斷安全代碼修復更新程序來修正代碼,以將經驗證的提議修正施加於代碼,例如因為身份驗證失敗而被發現是錯誤的代碼。
可以依據性能、區域、運行時間及可靠度的折衷來設計變化型,例如但不限於:
變化型A:較大的「即時代碼字元」會產生以下結果:
(1) 更小的快閃記憶體區域及獲取吞吐量負擔(throughput overhead)(對於給定的”冗餘”寬度)。
(2) 更長的位元修正時間(為了掃描所有位元) 。
(3) 較大的獲取延遲(如果在執行之前等待檢查,則可以使用US20140082721的方法,此申請中專利文件(https://patents.google.com/patent/US20140082721A1/en?oq=13%2f965%2c256),藉由引用將其公開內容併入本文描述了一種計算裝置,包括:一輸入橋,其耦合以接收一資料項序列,以供該裝置在執行一程式時使用;一輸出橋;一處理核心,耦合以從該輸入橋接收該資料項序列,且執行該程式,以使該輸出橋回應於該資料項序列中的一給定資料項,輸出一訊號;以及一認證邏輯,用於在該處理核心執行該程式時,接收及認證該資料項序列,並禁止藉由該輸出橋輸出該訊號,直到該給定資料項已被認證為止。
變化型B:相對於較小的選擇,較大的「即時冗餘字元」產生以下結果:
(1) 更安全,更可靠,更快速的修正。
(2) 較大的快閃記憶體區域以及獲取吞吐量負擔。
變化型C:相對於較小的選擇,較大的「強認證」大小(以位元為單位)會產生以下結果:
(1) 更安全,亦即對已認證的原始內容或記憶體的校證內容是正確的信賴度更大。
(2) 較大的快閃記憶體區域負擔(通常可以忽略) 。
(3) SHA256-512 HMAC似乎是一個不錯的選擇。
變化型D:與較大的選擇相比,較小的代碼分段(將代碼分成每個具有「強認證」的分段時)會產生以下結果:
(1) 較大的區域負擔。
(2) 更快的修正時間。
(3) 如果HASH是累積的,即可以保留開啟/循環運行時間,亦即對整個代碼使用一個HASH,同時保留中間結果以加快修正程序。
一種建議是動態地確定權衡參數,例如,選擇不同(較大或較小)的「即時冗餘字」及/或不同(較大或較小)的「強認證」大小及/或不同(較大或較小)的分段(將代碼分為具有「強認證」的每個分段時)。每個快閃記憶體統計訊息及/或每個磨損級別(wear level),例如,當目標記憶體老化時,將上述權衡參數更改為比目標記憶體較年輕時更快及/或更強健的錯誤修正,例如,由於較舊及/或更磨損的快閃記憶體,相對於較年輕及/或較少磨損的快閃記憶體的操作較慢。
根據某些實施例,提供了具有統計修正的即時「字元認證」。與其對整個目標記憶體中的所有單位元翻轉選項(可能的修正)執行蠻力的,也稱為基本型掃描相反,如果在給定的字元中偵測到錯誤,則採取「捷徑」(相對於基本型實施例)。
嘗試藉由掃描或搜尋給定字元的所有單位元翻轉再次嘗試修正給定的字元,且如果當負載字元可以被修正為與認證的字元一致時,則啟用強認證作為對記憶體內容的完整性的最高驗證。
因此,本發明的實施例更可包括以下實施例:
實施例(A): 一種用於組合認證及錯誤修正的方法,包括:啟用強認證,以驗證目標記憶體內容的至少一部分的完整性,包括掃描整個目標記憶體中至少一些的至少一些字元翻轉選項。
實施例(B):根據實施例(A)的方法,其中對整個目標記憶體執行掃描。
實施例(C) :具有統計修正實施例的即時「字元認證」,根據實施例(A)的方法,其中採用字元認證,並且其中如果在給定字元中偵測到認證錯誤,則僅對給定字元執行掃描,而不是整個目標記憶體,從而嘗試修正給定的字元,以及如果當負載字元與認證字元保持一致時,則啟用強認證作為記憶體內容完整性的最高驗證。
應當理解,在統計修正中,不能保證成功修正記憶體內容。
在第1圖中,「其他處理器功能」可以理解,所說明的處理器可以具有除本文所描述的特定功能以外的任何主要功能,並且可以使用任何周邊設備,例如但不限於計時器、通訊通道、轉換器的全部或任何子集。
在第10圖中「翻轉一位元」的步驟,例如 可以使用普通邏輯設計者及軟體設計者已知的任何合適的置換掃描程序以硬體、軟體及其組合來實施。
在第9圖以及第10圖之至少一者的「計算認證」的步驟,可以包含線上的字元認證計算。應當理解,字元認證可以具有不同的強度等級;通常,強度及性能之間需要進行權衡。如果將強度發揮到極致,則可以假設字元認證可能是修正的最終裁定。在這種情況下,強認證變為可選的(optional)。因此,可以單獨使用字元認證,或者可以單獨使用強認證,或者可以同時使用兩者,在這種情況下,可以簡化字元認證(可以以較低級別的強度執行,從而產生更好的性能),則依靠強認證做出最終裁定。
一般而言,記憶體系統以及具體NVM系統會使用錯誤修正流程。例如,在使用錯誤修正碼的情況下,系統能够偵測記憶體錯誤但是無法判斷修正錯誤的優先順序(例如,不需要試錯實驗)。此些流程可包含以下操作a至x: 如第13圖所示,當偵測到錯誤時可觸發:
操作步驟(a): 此系統會產生嘗試或是推定或是候選修正值。
操作步驟(b):系統藉由翻轉操作步驟(a)所判斷之可能錯誤的位元,試著使用嘗試或是推定或是候選修正值來取代疑似錯誤資料。
操作步驟(c):此系統執行特定檢查(例如使用第1至12圖之實施例所述)以認證或是驗證推定修正是成功的,例如,判斷推定修正是否成功。
第1至12圖之系統以及方法係為操作第13圖之試錯程序的系統範例。
如第13圖所示之操作,推定修正包含某一位元之翻轉,如果操作(c)判斷翻轉不成功,接著系統會回到操作(a)並繼續翻轉另一些位元;如果在操作(c)所有位元都已經翻轉且都沒有成功,接著系統放棄修正(NVM系統送到實驗室進行維修)或是重新進行二位元翻轉的全部程序。
本發明之試錯流程之週期可能是耗時以及消耗電力。用語”n個週期”通常包含對給定位元翻轉執行上述操作(a), (b)與(c),並對另一些位元翻轉重覆操作(a), (b)與(c)。如果第n個週期失敗,則執行第n+1週期,依此類推。對於給定字元w中所偵測到的錯誤或是可疑的錯誤,最大的對於一錯誤的每次執行週期數量是字元w的位元數目。
通常一週期會從猜一位元(會二位元)翻轉開始,而結束於嘗試驗證一嘗試修正以判斷嘗試修正是否成功。
第1至12圖之實施例構成基於試錯的錯誤修正之範例。
應注意的是,一記憶體位元會保存造成此位元的電荷,而當執行"讀取"時此位元會產出某一電壓位準。電壓位準接著以閥值判斷是否電壓位準應解譯成邏輯"0"或是"1"(針對二進位位元),或是對於n級(n-level)記憶體,判斷此電壓位準應解譯成00、01、10或是11。例如,二進位位元可表示0V以及2V之間的電壓位準,如果電壓位準低於1V,則記憶體位元之電壓位準視為邏輯0;如果所讀取的電壓位準高於1V,則記憶體位元之電壓位準視為視為邏輯1。這裡所指的1V可做為閥值(threshold)來區分邏輯0與邏輯1。在一健康記憶體中,記憶體及其控制機制可確保電荷保持記憶體單元中或是放電,讓讀取電壓位準能盡可能地接近0V以及2V之邊緣,以避免讀取電壓位準接近閥值1V,藉此防止因為物理性檢查不絕對精準而造成的模糊結果。
應注意的是,在特定記憶體中,例如但不局限於NVM。資料是否能讀取與在一個給定的時間點從給定位元單元狀態得出的給定電壓讀取的每一位元單元狀態的品質、強度或是信心程度有關,或是與在一個給定的時間點給定電壓讀取與其略上方或略下方的臨界位準之間的一距離。
在相同範例之內容中,二進位位元電壓的範圍介於0V以及2V之間,而閥值位準為1V;假定為邏輯0的給定位元實際上可能會儲存不同的電荷量,因此可能會讀取多種不同的電壓位準例如0.1V、0.2V、0.373187V或是0.999999V、或是任何介於上述數字之間的電壓值。而在這些情狀下所讀取的位元都會視為0。然而,特別是NVM,所存取的資料是表示實際讀取的電壓位準、或是實際電壓位準與電壓閥值之間的距離。如果此資料表示讀取到0.1V,由於此電壓值遠離閥值1V,所以此邏輯0之讀取之品質或強度、或是信心程度是高的。相反,如果NVM提供的資料表示讀取到0.999999V的電壓,此位元仍然視為邏輯0,但是此邏輯0讀取之品質、強度或是信心程度是極低的。同樣地,讀取到0.9V或是0.8V的品質或是強度也是遠低於讀取到0.1V電壓的品質或是強度,但會高於讀取0.999999V電壓的品質或是強度。
通常會根據有支援偵測位元單元狀態相對於通常預先定義的閥值位準之間品質或是強度功能的習知NVM之特性做最佳化,所謂閥值位準是作為相鄰位元單元狀態之間的臨界點(cut-off point)。一般而言,各種記憶體,例如但不局限於NVM,會具有內置機制(例如邊界讀取功能)提供位元在0與1之間連續有多精確或是位元有多"強"的指示、或是在不是正好輸出0或是1的情況下位元數值的信心程度。因此,邊界讀取輸出表示正進行讀取的邏輯0實際上預設為0.2V或是0.36V;當記憶體進行讀取而沒有啟動邊界讀取,則此操作只會輸出0或是1而沒有產生0或是1之品質或是強度的指示。
通常,為了對位元檢查順序做最佳化,本發明之方法會根據每一位元的讀取電壓與其相鄰電壓閥值(例如高於或低於讀取電壓的)的距離對位元進行分級。通常,用於分級的距離數值係定義為所讀取之電壓值與最接近此電壓值之閥值(高於或低於電壓值的閥值)之間的距離。因此,此距離值會採用以下數值中較小的:
(i) 電壓讀值與高於電壓讀值之電壓閥值之間電壓差的絕對值;以及
(ii) 電壓讀值與低於電壓讀值之電壓閥值之間電壓差的絕對值。
接著,此方法會安排電壓讀值離相鄰的電壓閥值較近的位元優先於電壓讀值離相鄰的電壓閥值較遠的位元。這樣做的好處在於電壓讀值與相鄰閥值之間的距離大代表此位元是健康(healthy)位元而比較不可能有錯誤、磨損(eroded)或是消失(evaporated)。相反地,電壓讀數與相鄰閥值之間的距離小代表此位元是相對不健康位元而比較可能有錯誤、磨損(eroded)或是消失(evaporated)。因此,本發明的優點在於安排高度可疑(highly suspect)的位元優先於電壓讀值離電壓閥值較遠的"較不可疑(less suspect)"位元。較不可疑位元代表妥善的記憶體功能。
依照位元錯誤之偵測,修正週期包含一試錯(trial and error)程序,其在一時間上翻轉1個(或是2個、或是3個)位元,並驗證結果。
閥值位準可能用於判斷用於成功執行錯誤修正所需時間最佳化的位元掃描之順序。
例如,通常如果偵測到位元錯誤,例如在具有B位元的給定字元W中儲存以及預先計算的金鑰雜湊訊息認證碼或是其他任何類型之訊息驗證代碼(為特殊代碼)偵測出不符合,則本發明之方法會對哪一個位元較可能/較不可能成功(如果做位元翻轉能成功修正的)以將B位元分級或是排序,而從如果進行翻轉最有可能產生成功修正值的位元開始進行,而結束於如果進行翻轉最不可能產生成功修正值的位元。通常,最有可能成功修正的位元是給定低的位元單元狀態品質/強度而最有可能錯誤的位元。
最不可能成功修正的位元是給定位元單元狀態品質/強度而不可能錯誤的位元。接著,上述試錯流程通常包含上述(a)至(c)的操作,字元W的各個位元都會執行這些操作,且當一位元翻轉在操作(c)產生成功結果時停止操作。因此,相比於位元不是以上述順序進行掃瞄(例如是以字元中的位元之物理順序進行掃瞄),因為先從最有可能成功的位元開始而一旦發現成功位元就停止執行週期,因此在統計上可降低試錯流程的週期數量(執行次數)。
在本文中第1至12圖之實施例中,此系統可包含以下元件之全部或是任何子集合:
一NVM或其他記憶體系統,其提供本文中描述的品質資料或是信心程度資料;
一針對預先定義行長度的金鑰雜湊訊息認證碼(HMAC)簽章,或是其他任何類型的行簽章(line signature);
一強加密簽章/認證的機制,用於需要保持完整度之資料塊之全部。
須注意的是,在特定實施例,用於全部資料塊的整體強驗證(strong overall auth)是可選的,也可以只提供行驗證(line auth)。
特定實施例用以根據優先修正提供閥值位準
給定具有b個位元的錯誤字元,以及給定試錯方法,其包含翻轉b個位元並嘗試辨識能修正位元錯誤的驗證位元翻轉,以產生b個或更少推定修正,特定實施例用以根據特定位元之優先順序提供閥值位準。
藉由檢查哪一個位元接近閥值,可最佳化位元檢查順序。請參閱第14a與14b圖,其繪示根據最有可能/最不可能修正成功對位元進行排序/分級。
此方法通常包含以下操作之全部或是任何子集合,而操作的適當順序如上述內容:
操作步驟2010: Read_R=讀取快閃記憶體字元(包含驗證)。
操作步驟2020: Read_H=讀取具有較高閾值(類似margin-read1)的快閃記憶體字元,其中"較高"是指高於一給定的(例如預設的或預先決定的)閥值位準。
須注意的是對於每一位元(邏輯0或是邏輯1)一邊界讀取會回傳由給定閥值位準決定的電壓,而不會回傳電壓位準。然而,閥值通常可能會變化以判定邏輯0與1的強度,以代替全部依賴預設閥值來區分邏輯0與1的機制。使用較高閥值讀取會讓邊界讀取之輸出偏移向邏輯0,延續前一範例,考輸出電壓2V以及電壓1V之間各種電壓的位元會被視為邏輯1。當閥值變得越來越高(例如在相同步驟),在讀取時一個或多個位元的邏輯狀態或是讀值在某些點會從1改變成0(即便位元保存的物理狀態相同),這表示此些位元輸出的電壓剛好低於最近升高的閥值(其仍然高於倒數第二次升高的閥值)。因此,藉由運算每一數值(每一最近升高閥值)與預設閥值(其高於或低於升高閥值)之間的距離,每一次閥值升高後讀取位元會生產邏輯1與0有多強的電壓指示。
須注意的是邊界讀取是一已知的測試模式,其包含用於PGM或是ERS之後檢查記憶體單元之閾值電壓特性的慢速讀取(slow-speed reading)。如果晶片中執行的韌體包含代碼或是邏輯執行本發明之錯誤修正及/或位元翻轉優先順序方法,則邊界讀取對於NVM之終端使用者是有效的,接著作為韌體的代碼可使用全部NVM功能,包含邊界讀取功能。一般而言,對於NVM之任何使用者,邊界讀取在硬體或是韌體的程度是有效的。
操作步驟2030:辨識"弱"邏輯1,例如應是邏輯"1"的位元在不同次的讀取操作卻得到0而非1,當使用高於標準閥值之閥值(而不用用於非邊界讀取的標準閥值)進行邊界讀取所得到的邏輯值。通常藉由運算操作步驟2010的Read_R與操作步驟2020的Read_H進行互斥或(xor)運算來定義Check_bitsH。應注意的是如果Check_bitsH中的某一位元(例如位元4)為1,則表示原來字元中位元4存在"弱的"邏輯1。
操作步驟2040:逐一透過”Check_bitsH”的位元索引(bit indices)或是位元,決定此字元是否匹配驗證值。
操作步驟2050:如果發現匹配,這通常表示成功,即表示發現好的修正候選者。此時,本發明之方法會嘗試對此”好的"候選者進行驗證或是認證。例如,執行字元驗證(word auth),以及如果字元驗證成功,則執行強認證(string auth),以完全驗證此修正候選者。
因此,結束流程。如果此方法發現位元索引2對應的字元有匹配驗證,則不需要再檢查其他位元索引,例如位元索引3或4。
否則,如果沒有發現匹配。
操作步驟 2060: Read_L=使用較低閾值讀取快閃記憶體字元(類似邊界讀取0)。
操作步驟2070: 辨識”弱”邏輯0,辨識"弱"邏輯0,例如應是邏輯"0"的位元不同次的讀取得到1而非0,當使用低於標準閥值之閥值(而不用用於非邊界讀取的標準閥值)進行邊界讀取所得到的邏輯值。通常藉由對操作2010的Read_R以及操作2060的Read_L進行互斥或運算來定義出Check_bitsL。
應注意的是如果Check_bitsL中的某一位元(例如位元7)為1,則通常表示原來字元中的位元7的"弱0"之存在。
操作步驟2080: 逐一透過”Check_bitsL”的位元索引(bit indices)或是位元,決定此字元是否匹配驗證值。
操作步驟2090: 如果發現匹配成功,則結束流程。
操作步驟20100: 辨識強位元,例如對已辨識出的"弱"邏輯0以及1進行非或(NOR)運算;所謂強位元是不會被較高讀取邊界或是較低讀取邊界所擷取。通常,Check_rest={BitwiseNOT(以逐位元方式將Check_bitsL與Check_bitsH進行或(OR)運算。
操作步驟20100a: 以逐位元方式(bitwise)將操作步驟2070的Check_bitsL與操作步驟2030的Check_bitsH進行或(OR)運算。
操作步驟20100b: 將操作步驟20100a的BitwiseOR的BitwiseNOT與操作步驟2030的Check_bitsH進行或(OR)運算,以定義Check_rest。
已辨識出(例如已經安排優先順序)的容易出錯的邏輯1與0(即是具有可能錯誤數值的位元),通常只有當容易出錯的邏輯1與0也沒有發現錯誤時,才會以適當順序(例如任意順序)檢查其餘的位元,例如被視作強的位元。這是由於如果最可疑的位元沒有發現是可成功修正的位元,則此方法亦通常會掃瞄(scan)其他位元一些或是全部,以判斷多個強位元中是否有哪一個可成功修正。由於特定狀態之位元(被預估比較可能是錯誤位元)並不一定是不佳位元,而有時當此方法對較高優先的位元(具有弱邏輯1或弱邏輯0的位元)沒有成功時,可掃瞄其餘位元(一些或是全部)。
操作步驟20110: 逐一透過”Check_bitsL”的位元索引(bit indices)或是位元,決定此字元是否匹配驗證值。
操作步驟20120:如果發現匹配,例如如果在操作110發現字元匹配驗證,則表示成功。
操作步驟20130:否則,例如在操作步驟20110中字元與驗證不匹配,則表示失敗。通常,因為,沒有位元可供修正檢查,因此整個修正程序不合格,而此方法會進行較高層級的方式(higher instance)以修復位元錯誤,例如輸出表示需要由實驗室進行修復的錯誤訊號。
操作步驟20140:結束流程。
須注意的是,除了操作步驟2020至2050會辨識被視為邏輯0(而非邏輯1)的位元中可能是錯誤的位元,操作步驟2060至2090與操作步驟2020至2050相似。 須注意的是,在此具體實施例,此方法先查找可能錯誤的邏輯1,因為逐步升高的閥值會透露出讀取電壓接近預設閥值。隨後,此方法通常會對邏輯0做相同的操作。然而,此方法可能先開始查找邏輯0,如果都沒有找到,則可以檢查邏輯1。通常,如果使用中的記憶體已知在一方向更敏感,例如邏輯1比邏輯0比較可能錯誤,則此方法可從查找邏輯1開始,一般而言,此方法可從已知比較可能磨損的邏輯值開始。因此,在一實施例中,可以只進行2020至2050、或是只進行操作2060至2090,或是先進行操作2060至2090而接著進行操作2020至2050。
須注意的是,關於在操作2020與2060中的閥值(其低於或高於用於標準讀取的標準閥值,而非使用於邊界讀取模式)使用,任何適當的較低閥值或是較高閥值都可使用,例如比標準閥值低10%、50%或是90%的閥值,或是高10%、50%或是90%的閥值。設計考量包含非常接近且低於/高於預設閥值或不用於邊界讀取模式的標準閥值的閥值,其可產生較少假警報但會漏掉更多錯誤位元(即是更弱的位元)。
相反地,遠離預設閥值的閥值會產生較敏感的邊界讀取,以比較可能找出弱位元,但也比較可能產生假警報,即是對不特別弱的位元也會產生警示。因此,依據對弱位元之偵測敏感度以及假警報之成本之間的折衷(例如根據記憶體之特性或是其他屬性),設計者可視需要選擇較低閥值或較高閥值。
根據特定實施例,可計數對弱邏輯1的成功修正之數量x,可計數對弱邏輯0的成功修正之數量y。接著,如果x>y,本發明之方法會安排弱邏輯1比弱邏輯0有較優先順序;如果y>x,本發明之方法會安排弱邏輯0比弱邏輯1有較優先順序。
第15圖所示之位元錯誤預防措施方法,亦稱為方法二,可週期地執行以進行預防性的記憶體維護。
須注意的是,錯誤修正可在具有位元錯誤偵測功能的系統上執行。然而,錯誤預防措施也可在不具有錯誤偵測功能但具有邊界讀取功能的系統上執行。
方法二可用以辨識可能即將發生錯誤的位元,可接著對此些位元進行預防性處理。
此方法通常包含以下操作之全部或是任何子集合,其以如同先前所述之適當順序執行:
操作步驟20210:讀取一資料區域。
操作步驟20212:對資料區域執行邊界0的讀取,亦稱為邊界讀取0。
操作步驟20214:對資料區域執行邊界1的讀取,亦稱為邊界讀取1。
一般而言,邊界讀取測試(邊界1或是1邊界0)會讀回寫入(邏輯1或是0)位元之相對強度,例如藉由逐步改變閥值而接近至邏輯1(或0),而提高(或是降低)閥值。在此過程中,位元從1翻轉至0(反之亦可)的操作係表示位元是否強或弱的寫成邏輯1(或是0),如上述內容。
操作步驟20220:如果操作步驟20210、20212與20214所產生的三個讀值不完全相同,則對上述內容檢查結果執行方法三。
操作步驟20230:否則如果操作步驟20210產生的三個讀值全部相同,則等待完整度檢查事件(例如強認證),並回到開始的操作步驟20210。
須注意的是,系統設計者可選地週期地或是不定期執行完整度檢查(integrity check),例如強認證,以重新確認記憶體內容之完整度。
須注意的是,由於NVM的設計/製造限制或是實施例之開發者之時間限制,特定實施例可只執行邊界讀取1以及邊界讀取0中之一者,而不是兩個都執行。
如果實施例只執行一側(0或是1)的邊界讀取,則邊界讀取完成後還是對應安排位元的優先順序。在選擇執行哪一側的邊界讀取時,可選擇對侵蝕較為敏感的一側(由NVM之製造商決定)執行邊界讀取。所謂侵蝕係指位元弱化或是變成錯誤的可能性。由於邏輯0與1的保存在電性上是相異的,例如邏輯0與1之一者可代表存在電荷而另一者代表缺少電荷,因此邏輯0與1之其中一者可能會比另一者對侵蝕更敏感而容易產生錯誤。然而,如果兩側(邏輯0以及1)都是有效且可行的,則此系統通常可對兩側都執行邊界讀取,並根據兩側的執行結果之適當組合來決定最後優先順序。例如,可分別對每一側安排優先順序,並依據實際電壓讀值與最接近讀值的電壓閥值之間的距離對位元1、2、3…進行分級。接著,將根據邊界讀取1對位元的分級與根據邊界讀取0對位元的分級相加,藉此產生每一位元的結合分級。接著,根據結合分級之順序安排位元的優先順序。
須注意的是,分級不需要根據與閥值之間的距離。此外,如果根據邏輯1比邏輯0較有可能/較不可能產生錯誤的知識或是經驗結果,全部的邏輯1可能會分級成r_1而全部的邏輯0可能會分級成r_0,造成全部邏輯0都分級在邏輯1之後;反之亦然,造成全部邏輯1都分級在邏輯0之後。
第16圖所示之方法通常包含以下操作之全部或是任何子集合,並以如同先前所述之適當順序進行:
操作步驟20310:如果有錯誤檢查機制(例如簽章/奇偶檢查/冗餘檢查機制),則使用此錯誤檢查機制來檢查資料區域之常規讀取(相對於邊界讀取)之錯誤。操作步驟20310之輸出可為可行(ok)或是不可行(不ok)。
操作步驟20320:如果操作步驟20310之輸出為可行(ok)、或是如果現存的錯誤檢查機制,則不做任何是或是讓位元變得更強,例如刷新資料,即在相同記憶體位置L重寫,像是把第一記憶體位置L之資料拷貝至另一記憶體位置,接著返回第一記憶體位置L。上述刷新資料的方法回與不符合的類型或是記憶體類型有關。
操作步驟20330:如果操作步驟20310之輸出是不可行(不ok),則逐位元地執行試錯修正,先安排不匹配的讀取位元(當讀取閥值提高或是降低時此位元的讀值會改變,表示比其他位元更有可能錯誤)的優先順序,接著在一時間(根據優先順序)翻轉位元並重新確認錯誤,直到發現匹配。
須注意的是,在本文中繪示以及描述的方法可經過必要的修改而應用於多層式記憶體單元,其可藉由一個以上閥值來儲存二個以上的數值;相對地,只儲存0或是1的記憶體單元只能透過將0翻轉至1(或1翻轉至0)來進行修正。如同先前所述,多層式記憶體單元之位元通常是經過比較以及分級,分級標準可包含實際位準與(最接近)閥值之間的距離,而最接近的閥值通常包含閥值T,其特徵是全部閥值中閥值T與此記憶體單元之實際電壓之間的電壓差異是最小的。此好處在於因為閥值T最有可能在對應位元之侵蝕事件中被跨越。
多層式記憶體單元可根據實際位準與給定記憶體單元之兩相鄰狀態或是數值的任二相鄰位準之間的閥值之間的距離執行分級,例如先前所述之方法。因此,對於多層式記憶體單元,此方法可檢查當接近一判斷閥值時,此記憶體單元是否仍保持電壓位準。然而,對於二進位(0/1)記憶體,嘗試修正不必然是位元翻轉,而可包含嘗試將數值從目前代表可疑錯誤的數值移動到可造成錯誤修正的相鄰數值。例如,如果記憶體單元代表四個數值,即0、1、2或是3,或是八個數值,即0至7。接著,假設讀到的數值為2。
如果數值2是預定地接近數值2以及數值1之間的閥值(例如比起到數值2以及數值3之間的閥值,更接近數值1以及數值2之間的閥值),則此方法可嘗試把數值2修正成1; 否則,如果此數值2是接近數值2以及數值3之間的閥值,則此方法可嘗試把數值2修正成數值3。
通常,如在本文中描述之錯誤修正期間,記憶體是不可用的(unavailable)。因為如果系統中的積體電路用於記憶體或是占用記憶體進行錯誤偵測以及修正,則積體電路的功能性應用則因維無法存取記憶體而無法執行。
因此,當偵測到一記憶體錯誤,及/或當週期性或邏輯地啟動或其他觸發機制進行記憶體檢查,則適當的邏輯電路會停止功能性應用,而記憶體修正功能會接管記憶體,一旦記憶體修正完成(以及如果記憶體錯誤修正成功),則控制權會回到功能性應用。
須注意的是,在特定使用情況,一旦偵測到錯誤,可能不會讓系統繼續使用記憶體,以避免危害系統。通常,系統設計者會設計適當的邏輯電路根據依據發現的錯誤來判斷是否停止所有操作直到錯誤被修正、或是繼續操作並等待、或是延期直到在將來適當的時機才進行修正、或是根本不修改。
例如,如果在重要的微處理器操作碼中有位元進行錯誤翻轉,此邏輯電路可停止所有操作。此手段可防止重要應用在執行時不受損害、或是產生無法預期的有害結果、或是造成可能的災難性誤動作。如果重要資料(例如密碼金鑰)中有位元翻轉進行,則此邏輯電路亦可停止所有操作。
相反地,如果在非重要的音訊檔或是視頻檔(其最多是造成瞬時雜訊或是娛樂視頻中不正確的像素,因此重要性低)進行錯誤位元翻轉,則此邏輯電路可繼續操作。在此情況下,可考量延期修正直到後續適合的時機,或是根本跳過修正。
須注意的是,傳統的實體資料操作可用於實現本發明之"試錯(trial and error)"位元翻轉。例如,一旦NVM中辨識出錯誤字元,實體資料操作可包含以下操作之全部或是任何子集合,以如同先前所述之適當順序執行:
(i):拷貝將包含此字元的最小擦除NVM塊拷貝至SRAM。
(ii):將位元計數器i設定為0。
(iii):讀取此錯誤字元為變數A。
(iv):拷貝變數A至變數B,執行B={B XOR 2^i}。翻轉變數B中的位元i。
(v):寫入變數B,其為具有翻轉的位元i的字元,並回到此資料塊拷貝到SRAM的字元位置。
(vi):在SRAM之資料塊上執行完整度檢查。
(vii):如果操作vi之完整度檢查成功,表示錯誤已經成功修正,接著可抹除相關NVM資料塊,並且把SRAM上成功修正的資料塊拷貝回NVM。
(viii):否則,如果完整度檢查在位元i上發生錯誤,表示翻轉位元i沒有成功修正錯誤,因此不會將其拷貝回去。替代地,把i遞增1,在i>16之情況下,回到操作(iv)。
(ix):如果i=16,產生一表示修正嘗試失敗輸出。
須注意的是,如果需要在適當的位置進行位元翻轉,如果記憶體是NVM,則目標資料塊可放置在揮發性記憶體(例如SRAM),接著操作位元翻轉,抹除NVM中的目標資料塊,從揮發性記憶體將具有翻轉位元之資料寫回NVM。
請參閱第17圖,其為根據錯誤修正的試錯的簡化流程圖,其與第13圖所示之根據可能錯誤之位元的降序(descending order)進行位元翻轉。如第17圖之流程圖包含操作步驟20a至20c。
操作步驟(20a): 此系統會產生嘗試或是推定或是候選修正值。
操作步驟(20b):系統藉由翻轉操作步驟(20a)所判斷之可能錯誤的位元以及根據可能錯誤之位元的降序(descending order),即較可能錯誤的位元優先於較不可能錯誤的位元優先翻轉,試著使用嘗試或是推定或是候選修正值來取代疑似錯誤資料。
操作步驟(20c):此系統執行特定檢查(例如使用第1至12圖之實施例所述)以認證或是驗證推定修正是成功的,例如,判斷推定修正是否成功。
本發明之範圍包含各個實體實現方式,包含但不局限於,當錯誤修正執行時功能性系統無法使用記憶體。本發明之保護範圍包含各種實體實現方式,例如但不局限於,將目標資料塊(subject chunk)拷貝至SRAM以及在SRAM完成所有位元操作以及修正嘗試,接著經過修正的資料塊拷貝回NVM,藉此抱持"有效的(available)"NVM留待後續使用。
須注意的是,本發明之方法可在韌體中實現方法1、2以及3中的至少一種或是在增加面對NVM的介面上增加邏輯電路,而將本發明之方法應用於舊有NVM(即使是正在使用中的)。可選地,NVM上可增加硬體以加速(相對於僅使用韌體的方式)本發明之方法的全部或是部分操作。
特定實施例之一優點在於可加速執行時檢查,例如字元驗證(word auth)。
須注意的是,在一些使用情況下,欲嘗試各種可能的錯誤修正時不須先提供或是接收或是產生已經有錯誤的位元的指示。
須注意的是,根據每一位元對於邊界讀取的回應以安排位元之錯誤修正優先順序是與使用特殊錯誤修正無關。例如,當使用第1至12圖之實施例時,可藉由安排比較可能錯誤之位元優先於比較不可能錯誤的位元以統計上降低任何試錯修正方法之整體修正週期時間。但是安排優先順序的方式不限於使用本發明揭露之優先順序。
須注意的是,在本發明中位元翻轉係指在欲保護實際記憶體完整度,在試錯基礎上的位元之實際翻轉,其中成功修正錯誤的位元會保留翻轉狀態,而沒有成功修正錯誤的位元翻轉會被再翻轉一次。此外,翻轉操作可在記憶體內容之全部拷貝或是部分拷貝上進行位元翻轉,此拷貝內容係在其它地方而非在欲保護完整度的實際記憶體位置,而一旦有發現一位元成功修正錯誤,則此已翻轉的位元會儲存於實際記憶體。在試錯過程中拷貝資料中翻轉但不產生任何錯誤修正的其他位元,實際是不翻轉的,例如在原來記憶體是不翻轉的,而在拷貝資料中可不翻轉回來。
替代地,本文描述的某些實施例可以部分地或排他地(亦即,沒有韌體)在硬體中實施,在這種情況下,本文描述的一些或全部變數,參數,序列操作及計算可以在硬體中。
應當理解,諸如「強制性」、「要求」、「需要」及「必須」之類的術語是指為了清楚起見而在本文描述的特定實施方式或應用的背景下做出的實施方式選擇,並且不旨在進行限制,因為, 在替代實施方式中,相同的元件可能被定義為非強制性和非要求的,甚至可能被完全消除。
在分離的實施例的上下文中描述的本發明的特徵,包括操作,也可以在單個實施例中組合提供。例如,系統實施例旨在包括相應的流程實施例,反之亦然。特徵也可以與本領域中已知的特徵相結合,且特別地,儘管不限於在背景技術部分或其中提到的出版物中所描述的那些。
相反,為簡短在單個實施例的上下文中或以某種順序描述的本發明的特徵,包括操作,可以分離地或以任何合適的子組合的方式提供,包括本領域已知的特徵(特別是,但不限於在背景技術部分或其中提到的出版物中描述的內容),或以其他不同順序排列。「例如」用於表示不旨在限制的示例。
每種方法可以包含說明或描述的一些或全部操作,以適當的,例如本文說明或描述方式排序。
雖然本發明以前述之實施例揭露如上,然其並非用以限定本發明,任何熟習相像技藝者,在不脫離本發明之精神和範圍內,當可作些許之更動與潤飾,因此本發明之專利保護範圍須視本說明書所附之申請專利範圍所界定者為準。
1:處理器
2:記憶體陣列
6:硬體
7:韌體
10:積體電路
16:系統
18:軟體
10、20、30、80、140、150、160、170;210、220、230、310、320、330、340、350、1001、1002、1003、1006、1008、1009、10010、10011、10012、10012.5、10013、10014、(a)~(c)、2010、2020、2030、2040、2050、2060、2070、2080、2090、20100、20100a、20100b、20110、20120、20130、20140、20210、20212、20214、20220、20230、20310、20320、20330、20a、20b、20c:操作步驟
在以下圖式中說明本發明的某些實施例:
第1圖是根據本發明的一個實施例的積體電路的示意圖,其積體電路具有一些要實現的功能(又稱為「其他功能」),且具有錯誤修正功能,包括利用認證來測試可能的錯誤修正的功能。
第2圖是用於將認證與錯誤修正相結合的流程的簡化流程圖說明。
第3圖是用於執行第2圖中的操作30的示例流程的簡化流程圖說明。
第4圖是當記憶體是基於頁面的非揮發性記憶體時,且用於實行錯誤修正及驗證的示例流程的簡化流程圖說明。
第5圖是用於執行第2圖中的操作步驟220的示例流程的簡化流程圖說明。
第6圖是用於第1圖的積體電路的操作的流程的簡化流程圖說明。
第7圖是合適的錯誤修正序列流程的簡化流程圖說明,包括測試可能的錯誤修正。
第8圖是用於執行第7圖中的操作步驟10012的示例流程的簡化流程圖說明。
第9圖是第1圖的儲存區域3的示意圖,也顯示了字元認證比較功能。負載(payload)和認證大小僅以示例方式表示,而可以具有任何其他數值。
第10圖是根據某些實施例的掃描及錯誤修正功能的示意圖。應當理解,可以序列地,或基於任何合適的試探法順序地翻轉位元。
第11圖是第1圖的儲存區域3的示意圖,也顯示了強認證比較功能。
第12圖是根據某些實施例顯示如何觸發強認證週期的示意圖。
第13圖係為基於試錯的錯誤修正之簡單流程圖,其通常由第1至12圖之範例系統偵測到錯誤時觸發。
第14a、14b與15圖係為對於n位元之錯誤字元進行試錯方法之簡單流程圖,例如第13圖中包含翻轉b位元中的部份位元或是所有位元,造成B或是更少的推定修正,並在嘗試辨識用於修正位元錯誤之經驗證的位元翻轉,提供特定位元安排基於閥值位準優先順序;第14a與14b圖係根據較不可能/較可能成功(most/least likely to succeed)來排序/分級位元。
第15圖係繪示位元錯誤防範的方法,其週期地執行以進行預防性記憶體維修,例如辨識出可能快錯誤的位元,以對此位元進行預防性處理。
第16圖係繪示錯誤修正方法以及更新記憶體內容的簡化流程圖。
第17圖係為根據錯誤修正的試錯的簡化流程圖,其與第13圖所示之根據可能錯誤之位元的降序(descending order)進行位元翻轉。
包括在本發明範疇內的方法和系統,可以包括功能區塊的一些(例如,任何合適的子集)或全部,用任何適當的順序,如圖所示,以具體說明的實施方式用示例的方式顯示。
本文描述及說明的計算的,功能的或邏輯的構件可以用各種形式實施,舉例來說,像是硬體電路,但不限於習慣的VLSI電路、邏輯閘陣列或可編程硬體裝置,例如但不限於FPGA,或作為軟體程式代碼,其軟體程式代碼儲存在至少一種有形或無形的電腦可讀取介質上,並且藉由至少一個處理器或其任何合適的組合執行。
特定功能構件可以由一個特定的軟體代碼序列或多個此類軟體代碼組成,這些軟體代碼共同作用、運轉或利用參考如討論中的功能構件所描述的作用。舉例來說,構件可以分佈在多個代碼序列上,像是但不限於物件(objects)、程序(procedures) 、功能(functions) 、常式(routines)和程式(programs),且可以發起自通常協同操作的幾個電腦檔案。
如果適當的話,本文描述的任何邏輯功能可以被實施為及時應用程式,且其可以採用任何適當的架構選項,像是但不限於ASIC或DSP或其任何適當的組合。實際上,本文提到的任何硬體構件可以包括一個或多個硬體裝置,例如晶片,其可以位於同一地點或是位置彼此相遠離。
(a)~(c):步驟流程
Claims (17)
- 一種安排記憶體中至少一位元之試錯嘗試修正之優先順序的方法,其中使用至少一閾值來設定閥值電壓值,以決定邏輯位元位準,此方法包含: 對複數個位元分級使得複數個位元中的第一位元分級在第二位元之前,而第二位元比第一位元比較不可能是錯誤的;以及 根據分級順序依序嘗試修正複數個位元,藉此定義複數個嘗試修正,包含在嘗試修正比較不可能錯誤的第二位元之前,先嘗試修正比第二位元比較可能錯誤的第一位元。
- 如請求項1所述之方法,其中該記憶體包含複數個單層式儲存單元(single-level cell),而依序嘗試修正的步驟包含: 根據分級順序,依序翻轉複數個位元,藉此定義複數個嘗試位元翻轉,且在翻轉比較不可能錯誤的第二位元之前,先翻轉比第二位元比較可能錯誤的第一位元。
- 如請求項1所述之方法,更包含: 偵測至少一位元中的位元錯誤,其中該偵測之步驟會觸發分級以及依序嘗試。
- 如請求項1所述之方法,其中該記憶體包含有一晶片且該晶片包含一NVM。
- 如請求項2所述之方法,其中該複數個位元會持續進行翻轉直到以下事件之一者發生: 所有位元都已經翻轉;以及 複數個位元翻轉中的一嘗試位元翻轉被判斷成功修正錯誤。
- 如請求項1所述之方法,其中該複數個嘗試修正之步驟會繼續進行直到以下事件之一者發生: 已經對所有位元嘗試修正;以及 複數個嘗試修正中之一者被判斷成功修正錯誤。
- 如請求項1所述之方法,其中該記憶體晶片具有原有認證功能,其中依序嘗試修正(例如依序翻轉)會持續進行直到以下事件之其中一者發生: 已經對所有位元嘗試修正,例如所有位元都已經翻轉; 原有認證功能可判斷複數個嘗試修正(例如位元翻轉)中的一嘗試修正(例如位元翻轉)有成功修正錯誤。
- 如請求項2所述之方法,其中該分級步驟包含如果成功從1修正成0的次數比從0修正成1的次數多,則對於儲存1的位元分配較高修正優先權,對於儲存0的位元分配較低修正優先權。
- 如請求項2所述之方法,其中該分級步驟包含: 如果成功從1修正成0的次數比從0修正成1的次數少,則對於儲存0的位元分配較高修正優先權,對於儲存1的位元分配較低修正優先權。
- 如請求項1所述之方法,其中該分級步驟包含判斷待修正之每一個位元之電壓讀取距離,電壓讀取距離係為一用於轉換讀取一邏輯位元值之電壓的電壓閾值。
- 如請求項2所述之方法,其中該分級步驟包含判斷待翻轉之每一個位元之電壓讀取距離,電壓讀取距離係為一用於轉換讀取一邏輯位元值之電壓的電壓閾值。
- 如請求項10所述之方法,其中該依序嘗試修正之步驟包含: 當用於第一嘗試修正之距離小於用於第二嘗試修正之距離時,在進行複數個嘗試修正中第二嘗試修正之前,先進行複數個嘗試修正中的一第一嘗試修正。
- 如請求項11所述之方法,其中該依序翻轉之步驟包含當用於複數個嘗試位元翻轉之第一位元翻轉之距離小於用於複數個嘗試位元翻轉之第二位元翻轉之距離時,在進行第二位元翻轉之前先進行第一位元翻轉。
- 如請求項10所述之方法,其中在使用作為截止點以轉換電壓讀取成一邏輯位元值的至少一電壓閾值中,個別電壓閾值是最接近電壓讀值。
- 如請求項1所述之方法,其中該記憶體包含一晶片,而執行此方法之代碼係為在晶片中執行的韌體。
- 如請求項15所述之方法,其中該晶片具有邊界讀取功能,而此韌體使用邊界讀取功能以判斷每一待修正位元之電壓讀取與個別電壓閾值之距離。
- 一種用於安排記憶體中至少一位元之試錯嘗試修正之優先順序的系統,其中邏輯位元位準係由使用至少一閾值之設定閥值電壓值所決定,此系統包含: 一電路,用於分級複數個位元,使得複數個位元中的第一位元會分級在第二位元之前,其中第二位元與第一位元相比是比較不可能錯誤;以及 一控制器,用於根據分級順序依序嘗試修正複數個位元,藉此定義複數個嘗試修正,其包含在嘗試修正第二位元之前,先嘗試修正第二位元,其中第一位元相比於第二位元是比較可能錯誤的。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/423,676 | 2019-05-28 | ||
US16/423,676 US11475170B2 (en) | 2019-05-28 | 2019-05-28 | System and method for correction of memory errors |
US16/588,089 US11342044B2 (en) | 2019-05-28 | 2019-09-30 | System and method for prioritization of bit error correction attempts |
US16/588,089 | 2019-09-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202103176A true TW202103176A (zh) | 2021-01-16 |
TWI747268B TWI747268B (zh) | 2021-11-21 |
Family
ID=73506344
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW109114958A TWI747268B (zh) | 2019-05-28 | 2020-05-05 | 用於排位元錯誤修正嘗試之優先順序的系統以及方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11342044B2 (zh) |
JP (1) | JP7097407B2 (zh) |
CN (1) | CN112015335B (zh) |
TW (1) | TWI747268B (zh) |
Family Cites Families (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3239795B2 (ja) * | 1997-04-23 | 2001-12-17 | 三菱電機株式会社 | 誤り訂正復号装置および誤り訂正復号方式 |
US7403952B2 (en) | 2000-12-28 | 2008-07-22 | International Business Machines Corporation | Numa system resource descriptors including performance characteristics |
US8190964B2 (en) * | 2002-04-05 | 2012-05-29 | Sentel Corporation | Decoding method |
US6838331B2 (en) | 2002-04-09 | 2005-01-04 | Micron Technology, Inc. | Method and system for dynamically operating memory in a power-saving error correction mode |
CA2447204C (en) | 2002-11-29 | 2010-03-23 | Memory Management Services Ltd. | Error correction scheme for memory |
JP3797323B2 (ja) * | 2002-12-17 | 2006-07-19 | ソニー株式会社 | 誤り訂正方法及び誤り訂正装置 |
US20050283566A1 (en) | 2003-09-29 | 2005-12-22 | Rockwell Automation Technologies, Inc. | Self testing and securing ram system and method |
US20060256615A1 (en) | 2005-05-10 | 2006-11-16 | Larson Thane M | Horizontal and vertical error correction coding (ECC) system and method |
US7681109B2 (en) | 2005-10-13 | 2010-03-16 | Ramot At Tel Aviv University Ltd. | Method of error correction in MBC flash memory |
DE102006003146B4 (de) | 2006-01-23 | 2016-05-12 | Infineon Technologies Ag | Vorrichtung und Verfahren zum Auslesen eines Datenwortes und Vorrichtung und Verfahren zum Speichern eines Datenblocks |
EP2003653B1 (en) * | 2006-04-06 | 2010-08-04 | Advantest Corporation | Test device and test method |
KR100769776B1 (ko) * | 2006-09-29 | 2007-10-24 | 주식회사 하이닉스반도체 | 낸드 플래시 메모리 소자의 프로그램 방법 |
KR100842680B1 (ko) | 2007-01-08 | 2008-07-01 | 삼성전자주식회사 | 플래시 메모리 장치의 오류 정정 컨트롤러 및 그것을포함하는 메모리 시스템 |
KR100813630B1 (ko) | 2007-02-07 | 2008-03-14 | 삼성전자주식회사 | 독출 성능을 향상할 수 있는 플래시 메모리 시스템 및그것의 독출 방법 |
US7626868B1 (en) | 2007-05-04 | 2009-12-01 | Flashsilicon, Incorporation | Level verification and adjustment for multi-level cell (MLC) non-volatile memory (NVM) |
FR2917920B1 (fr) | 2007-06-22 | 2009-10-09 | Centre Nat Rech Scient | Procede d'authentification utilisant un decodage de code correcteur d'erreurs a partir d'une matrice publique |
US9152496B2 (en) | 2007-12-21 | 2015-10-06 | Cypress Semiconductor Corporation | High performance flash channel interface |
US20110047604A1 (en) | 2008-03-18 | 2011-02-24 | Clevx, Llc | Computing input system with secure storage and method of operation thereof |
KR101792868B1 (ko) * | 2010-11-25 | 2017-11-02 | 삼성전자주식회사 | 플래시 메모리 장치 및 그것의 읽기 방법 |
US9009574B2 (en) * | 2011-06-07 | 2015-04-14 | Marvell World Trade Ltd. | Identification and mitigation of hard errors in memory systems |
US8456919B1 (en) * | 2011-11-10 | 2013-06-04 | Sandisk Technologies Inc. | Method and apparatus to provide data including hard bit data and soft bit data to a rank modulation decoder |
US8730723B2 (en) | 2012-03-12 | 2014-05-20 | Flashsilicon Incorporation | Structures and methods of high efficient bit conversion for multi-level cell non-volatile memories |
US8856611B2 (en) * | 2012-08-04 | 2014-10-07 | Lsi Corporation | Soft-decision compensation for flash channel variation |
US10078462B2 (en) * | 2012-05-18 | 2018-09-18 | Cornell University | Methods and systems for providing hardware security functions using flash memories |
US9703945B2 (en) | 2012-09-19 | 2017-07-11 | Winbond Electronics Corporation | Secured computing system with asynchronous authentication |
US9076557B2 (en) | 2012-11-19 | 2015-07-07 | Texas Instruments Incorporated | Read margin measurement in a read-only memory |
US9146807B2 (en) * | 2012-12-04 | 2015-09-29 | Sandisk Technologies Inc. | Bad column handling in flash memory |
DE112015000378T5 (de) * | 2014-01-09 | 2016-09-22 | Sandisk Technologies Inc. | Selektives Rückkopieren für einen auf einem Chipplättchen gepufferten nichtflüchtigen Speicher |
IL231550A0 (en) | 2014-03-17 | 2014-08-31 | Nuvoton Technology Corp | Saving secure information in external memory |
US9438590B2 (en) | 2014-05-23 | 2016-09-06 | Fujitsu Limited | Privacy preserving biometric authentication based on error correcting codes |
US9438417B2 (en) | 2014-08-12 | 2016-09-06 | Robert Bosch Gmbh | System and method for shared key agreement over untrusted communication channels |
US9772935B2 (en) * | 2014-09-16 | 2017-09-26 | Empire Technology Development Llc | Data storage based on rank modulation in single-level flash memory |
US10594491B2 (en) * | 2015-12-24 | 2020-03-17 | Intel Corporation | Cryptographic system memory management |
US10432232B2 (en) | 2016-03-04 | 2019-10-01 | Sandisk Technologies Llc | Multi-type parity bit generation for encoding and decoding |
US10725860B2 (en) | 2016-03-04 | 2020-07-28 | Sandisk Technologies Llc | Storage system and method for handling a burst of errors |
US10026488B2 (en) | 2016-08-18 | 2018-07-17 | Sandisk Technologies Llc | Non-volatile memory with read disturb detection for open blocks |
KR102706981B1 (ko) | 2016-08-23 | 2024-09-19 | 에스케이하이닉스 주식회사 | 컨트롤러, 반도체 메모리 시스템 및 그것의 동작 방법 |
US10248484B2 (en) | 2017-02-21 | 2019-04-02 | Intel Corporation | Prioritized error-detection and scheduling |
JP2019040470A (ja) * | 2017-08-25 | 2019-03-14 | 東芝メモリ株式会社 | メモリシステム |
-
2019
- 2019-09-30 US US16/588,089 patent/US11342044B2/en active Active
-
2020
- 2020-05-05 TW TW109114958A patent/TWI747268B/zh active
- 2020-05-28 JP JP2020093748A patent/JP7097407B2/ja active Active
- 2020-05-28 CN CN202010470566.6A patent/CN112015335B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
TWI747268B (zh) | 2021-11-21 |
JP2020195135A (ja) | 2020-12-03 |
JP7097407B2 (ja) | 2022-07-07 |
CN112015335B (zh) | 2023-06-30 |
CN112015335A (zh) | 2020-12-01 |
US11342044B2 (en) | 2022-05-24 |
US20200381076A1 (en) | 2020-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9762399B2 (en) | System and method for validating program execution at run-time using control flow signatures | |
US20100169750A1 (en) | Firmware verification using system memory error check logic | |
JP7038185B2 (ja) | レジスタ内容のインテグリティを検証するシステム、および、その方法 | |
TWI775346B (zh) | 防止回滾攻擊之系統及方法 | |
US11960632B2 (en) | Data attestation in memory | |
US10776493B2 (en) | Secure management and execution of computing code including firmware | |
JP6518798B2 (ja) | 安全な集積回路状態を管理する装置およびその方法 | |
US20190080111A1 (en) | Method for protecting unauthorized data access from a memory | |
TWI747268B (zh) | 用於排位元錯誤修正嘗試之優先順序的系統以及方法 | |
US20230259629A1 (en) | Secure programming of one-time-programmable (otp) memory | |
TWI748419B (zh) | 用於記憶體錯誤修正之系統及方法 | |
US11531785B2 (en) | PUF-based data integrity | |
CN108292260B (zh) | 用于软件自测试的装置和方法 | |
US20230274002A1 (en) | Firmware authenticity check | |
US20230384951A1 (en) | Cryptographic block locking in a non-volatile memory device | |
CN113348456A (zh) | 具有密码学组件的存储器装置 |