專利名稱:半導(dǎo)體存儲裝置及其控制方法和錯誤糾正系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及半導(dǎo)體存儲裝置(semiconductor storage device)、控制該半導(dǎo)體存 儲裝置的方法、以及錯誤糾正系統(tǒng),更具體地,本發(fā)明涉及包括糾正以非易失方式存儲信息 的半導(dǎo)體存儲器(semiconductor memory)的錯誤的錯誤糾正電路的半導(dǎo)體存儲裝置及其 控制方法和錯誤糾正系統(tǒng)。
背景技術(shù):
近來,存在廣為人知的半導(dǎo)體存儲器裝置,例如依靠保持的電荷量存儲信息的快 閃存儲器。用于通過設(shè)置電荷量的多個閾值來存儲兩比特或更多比特信息的多值存儲器技 術(shù)也得到發(fā)展。在半導(dǎo)體存儲器裝置中,電荷隨著時間的流逝放電,因此,如果電荷被放電得超過 閾值,則當(dāng)讀取信息時可能發(fā)生錯誤。具體來說,多值類型的存儲器裝置在閾值之間一般具 有較窄的間隔,這導(dǎo)致發(fā)生錯誤的可能性增大。No. 2007-87464號日本已公開專利申請公開了一種使用半導(dǎo)體存儲器裝置的存儲 裝置,其包括正確地恢復(fù)不正確的信息的錯誤糾正機制。存在這樣一種情況,其中在由多個比特組成的數(shù)據(jù)中包括很多由自從上次記錄數(shù) 據(jù)以來時間的流逝導(dǎo)致的錯誤,并且即使在這種情況下,一般要求具有高錯誤糾正能力的 糾正機制來糾正錯誤。具有高錯誤糾正能力的糾正機制要求大的電路規(guī)模、大的功耗和較 長的處理時間。一般來說,提供具有高錯誤糾正能力的糾正機制來保證即使自從上次存儲 信息以來已過去了較長時間也把不正確的信息恢復(fù)為正確的信息。高性能錯誤糾正機制相 同地可應(yīng)用于存儲裝置而與自從上次存儲信息以來流逝的時間的長度無關(guān)。因此,即使要在自從存儲信息以來只經(jīng)過了較短的一段時間以后讀取信息時也使 用高性能錯誤糾正機制。因此,即使要被讀取的信息沒有包含這么多錯誤,高性能錯誤糾正 機制也被很浪費地使用了。這導(dǎo)致了存儲裝置的功耗浪費。此外,為了增加錯誤糾正能力,一般要求增加作為錯誤糾正的對象的信息。使用例 如4千字節(jié)數(shù)據(jù)(其中多個512字節(jié)數(shù)據(jù)相互連接作為一個單元)產(chǎn)生錯誤糾正碼,而非 針對例如512字節(jié)數(shù)據(jù)產(chǎn)生錯誤糾正碼。這種技術(shù)使錯誤糾正能力能被提高。但是,這種 技術(shù)導(dǎo)致盡管希望讀取512字節(jié)數(shù)據(jù)卻讀取了 4千字節(jié)數(shù)據(jù)。這還迫使存儲裝置浪費地消 耗電功率。本發(fā)明的目的是提供一種能夠減少功耗和電路規(guī)模而不損害錯誤糾正能力的半 導(dǎo)體存儲裝置及其控制方法和錯誤糾正系統(tǒng)。
發(fā)明內(nèi)容
為了解決所述問題并實現(xiàn)所述目的,根據(jù)本發(fā)明的一個方面的半導(dǎo)體存儲裝置包 括臨時存儲單元,其能夠在其中存儲按矩陣排列、每一個均由多個數(shù)據(jù)形成的多個數(shù)據(jù) 塊;錯誤檢測碼產(chǎn)生單元,其產(chǎn)生錯誤檢測碼來針對每一個數(shù)據(jù)塊檢測錯誤;第一錯誤糾正碼產(chǎn)生單元,其產(chǎn)生第一錯誤糾正碼來針對由數(shù)據(jù)塊形成的每一個第一單元數(shù)據(jù)糾正錯 誤;第二錯誤糾正碼產(chǎn)生單元,其產(chǎn)生第二錯誤糾正碼來針對由按列方向排列的數(shù)據(jù)塊形 成的每一個第二單元數(shù)據(jù)糾正錯誤;第三錯誤糾正碼產(chǎn)生單元,其產(chǎn)生第三錯誤糾正碼來 針對由按行方向排列的數(shù)據(jù)塊形成的每一個第三單元數(shù)據(jù)糾正錯誤;和非易失半導(dǎo)體存儲 器,其能夠在其中存儲數(shù)據(jù)塊、產(chǎn)生的錯誤檢測碼和產(chǎn)生的第一到第三錯誤糾正碼。一種根據(jù)本發(fā)明的另一方面的控制半導(dǎo)體存儲裝置的方法,包括主機裝置;和 根據(jù)主機裝置的指令執(zhí)行從/向非易失存儲器的數(shù)據(jù)讀/寫的半導(dǎo)體存儲裝置,其中,所述 半導(dǎo)體存儲裝置包括臨時存儲單元,其把從主機裝置轉(zhuǎn)移的數(shù)據(jù)劃分為每一個均由多個 數(shù)據(jù)形成的多個數(shù)據(jù)塊,并在其中按矩陣存儲所述數(shù)據(jù)塊;錯誤檢測碼產(chǎn)生單元,其產(chǎn)生錯 誤檢測碼來針對每一個數(shù)據(jù)塊檢測錯誤;第一錯誤糾正碼產(chǎn)生單元,其產(chǎn)生第一錯誤糾正 碼來針對由數(shù)據(jù)塊形成的每一個第一單元數(shù)據(jù)糾正錯誤;第二錯誤糾正碼產(chǎn)生單元,其產(chǎn) 生第二錯誤糾正碼來針對由按列方向排列的數(shù)據(jù)塊形成的每一個第二單元數(shù)據(jù)糾正錯誤; 第三錯誤糾正碼產(chǎn)生單元,其產(chǎn)生第三錯誤糾正碼來針對由按行方向排列的數(shù)據(jù)塊形成的 每一個第三單元數(shù)據(jù)糾正錯誤;非易失半導(dǎo)體存儲器,其能夠在其中存儲數(shù)據(jù)塊、產(chǎn)生的 錯誤檢測碼和產(chǎn)生的第一到第三錯誤糾正碼;第一錯誤糾正單元,其在每一個數(shù)據(jù)塊上使 用與其對應(yīng)的第一錯誤糾正碼執(zhí)行第一錯誤糾正;第一錯誤檢測單元,其在經(jīng)過第一錯誤 糾正的塊中使用與其對應(yīng)的錯誤檢測碼檢測錯誤;第二錯誤糾正單元,其在經(jīng)過第一錯誤 糾正的塊中由第一錯誤檢測單元檢測到的錯誤上使用與其對應(yīng)的第二錯誤糾正碼執(zhí)行第 二錯誤糾正;和第二錯誤檢測單元,其在經(jīng)過第二錯誤糾正的塊中使用與其對應(yīng)的錯誤檢 測碼檢測錯誤;和傳送單元,其把經(jīng)過第二錯誤糾正的數(shù)據(jù)和第二錯誤檢測單元檢測的結(jié) 果傳送到主機裝置,并且,主機裝置包括第三錯誤糾正單元,其在從半導(dǎo)體存儲裝置接收到 的、經(jīng)過第二錯誤糾正的塊中由第二錯誤檢測單元檢測到的錯誤上使用與其對應(yīng)的第三錯 誤糾正碼執(zhí)行第三錯誤糾正。
圖1是固態(tài)驅(qū)動器(SSD)的結(jié)構(gòu)例子的框圖;圖2是NAND存儲器芯片中所包含的一個塊的結(jié)構(gòu)例子的電路圖;圖3是用于說明錯誤糾正碼(ECC)電路中的錯誤糾正原理的概要的示意圖;圖4是ECC電路中的編碼系統(tǒng)的主要部分的框圖;圖5是存儲在DRAM中的數(shù)據(jù)的格式的例子的示意圖;圖6是轉(zhuǎn)移到NAND存儲器的數(shù)據(jù)的格式的示意圖;圖7是用于說明ECC電路的錯誤檢測碼產(chǎn)生操作和錯誤糾正碼產(chǎn)生操作的示意 圖;圖8是從圖7繼續(xù)的示意圖;圖9是從圖8繼續(xù)的示意圖;圖10是ECC電路中的解碼系統(tǒng)的主要部分的框圖;圖11是用于說明第一錯誤糾正之后的錯誤檢測的示意圖;圖12是第一錯誤信息的例子的示意圖;圖13是用于說明第二錯誤糾正之后的錯誤檢測的示意6
圖14是第二錯誤信息的例子的示意圖;圖15是在由第二 ECC糾正單元執(zhí)行過第一輪錯誤糾正以后塊數(shù)據(jù)的示意圖;圖16是在由第三ECC糾正單元執(zhí)行過第一輪錯誤糾正以后塊數(shù)據(jù)的示意圖;圖17是在由第二 ECC糾正單元執(zhí)行過第二輪錯誤糾正以后塊數(shù)據(jù)的示意圖;圖18是在由第三ECC糾正單元執(zhí)行過第二輪錯誤糾正以后塊數(shù)據(jù)的示意圖;圖19是從寫開始經(jīng)過的時間與所需的糾正能力之間的關(guān)系的示意圖;圖20是用于說明根據(jù)本發(fā)明的第二實施例的錯誤糾正的原理的示意圖;圖21是根據(jù)第二實施例的SSD和主機裝置的結(jié)構(gòu)的示意圖;圖22是根據(jù)第二實施例的ECC電路中的解碼系統(tǒng)的主要部分的框圖。
具體實施例方式下面將參考附圖詳細說明本發(fā)明的示范性實施例。應(yīng)該注意,本發(fā)明不局限于這 些實施例。此外,下列實施例中的部件包括本領(lǐng)域技術(shù)人員可以想到的那些,或者包括大致 相同的部件。當(dāng)錯誤糾正編碼/解碼被施加于具有缺陷比特的存儲器(例如快閃存儲器)時, 本發(fā)明的第一實施例通過執(zhí)行三種類型的具有不同錯誤糾正能力的糾正編碼,允許減小功 耗和電路規(guī)模。圖1是固態(tài)驅(qū)動器(SSD) 100的結(jié)構(gòu)例子的框圖。SSD 100通過例如先進技術(shù)附件 (ATA)接口(I/F) (ATA/IF)2的存儲器連接接口連接到例如個人計算機或者中央處理單元 (CPU)核的主機裝置(主機)1,所以SSD 100起到主機裝置1的外部存儲器的作用。SSD100 可以通過例如RS232C接口(RS232C I/F)的通信接口 3與調(diào)試裝置200執(zhí)行數(shù)據(jù)傳送/接 收。SSD 100包括作為非易失存儲器的NAND快閃存儲器(此后稱為“NAND存儲器”)10、作 為控制器的驅(qū)動控制電路4、作為易失存儲器的動態(tài)隨機訪問存儲器(DRAM) 20、電源電路5 和用于狀態(tài)指示的發(fā)光二極管(LED)6。電源電路5從由設(shè)置在主機裝置1側(cè)中的電源電路提供的外部直流電源產(chǎn)生內(nèi)部 直流電源的多個不同電壓,并把這些電壓提供給SSD100中的電路。此外,電源電路5檢測 外部電源的上升沿或者下降沿,產(chǎn)生加電復(fù)位信號或者關(guān)機復(fù)位信號,并把信號提供給驅(qū) 動控制電路4。在這種情況下,NAND存儲器10包括執(zhí)行四個并行操作的四個并行操作元件IOa 到10d,并且每一個并行操作元件均包括兩個NAND存儲器包(memory package)。每一個 NAND存儲器包由多個堆疊的NAND存儲器芯片形成(例如每芯片2吉字節(jié)(GB))。在圖1 中,NAND存儲器包由四個堆疊的NAND存儲器芯片形成,因此,NAND存儲器10具有64吉字 節(jié)的容量。如果NAND存儲器包由8個堆疊的NAND存儲器芯片形成,則NAND存儲器10具 有128吉字節(jié)的容量。DRAM 20起到主機裝置1和NAND存儲器10之間的數(shù)據(jù)轉(zhuǎn)移高速緩存的作用,并且 也起到用于工作區(qū)域的存儲器的作用。驅(qū)動控制電路4控制主機裝置1和NAND存儲器10之間通過DRAM 20的數(shù)據(jù)轉(zhuǎn) 移,并且也控制SSD 100中的部件。驅(qū)動控制電路4具有以下功能把狀態(tài)指示信號提供給 LED 6、從電源電路5接收加電/關(guān)機復(fù)位信號,并把復(fù)位信號和時鐘信號提供給自己的電路和SSD 100中的部件。NAND存儲器芯片被配置成排列多個塊,每一個塊均為數(shù)據(jù)刪除的單元。圖2是 NAND存儲器芯片中所包含的一個塊的結(jié)構(gòu)例子的電路圖。該塊包括(m+1)個沿著X方向 順序排列的NAND串(其中m:零或更大的整數(shù))。分別被包含在(m+1)個NAND串中的選 擇晶體管STl在其漏極被連接到位線BLO到BLm,并分別在其柵極共同連接到選擇柵極線 SGD0選擇晶體管ST2分別在其源極共同連接到源極線SL,并在其柵極共同連接到選擇柵極 線 SGS。存儲器單元晶體管MT由包括在半導(dǎo)體襯底上形成的疊柵結(jié)構(gòu)的金屬氧化物半導(dǎo) 體場效應(yīng)晶體管(MOSFET)形成。疊柵結(jié)構(gòu)具有在半導(dǎo)體襯底上通過柵極絕緣薄膜形成的 電荷存儲層(浮柵電極)和在所述電荷存儲層上通過柵極間絕緣薄膜形成的控制柵電極。 存儲器單元晶體管MT導(dǎo)致閾值電壓根據(jù)存儲在浮柵電極中的電子數(shù)量變化,并根據(jù)閾值 電壓的不同在其中存儲數(shù)據(jù)。存儲器單元晶體管MT可以被配置成存儲一個比特,或者可以 被配置成存儲多個值(2比特或者更多數(shù)據(jù))。在NAND串中,(n+1)個存儲器單元晶體管MT被在選擇晶體管STl的源極和選擇 晶體管ST2的漏極之間排列,使得其電流路徑被串聯(lián)連接。更具體地,多個存儲器單元晶體 管MT被沿Y方向以使擴散區(qū)域(源極區(qū)域或者漏極區(qū)域)由相鄰晶體管共享的方式串聯(lián)。控制柵電極按從位置最靠近選擇晶體管STl的存儲器單元晶體管MT開始的順序 依次連接到字線WLO到WLn。因此,連接到字線WLO的存儲器單元晶體管MT的漏極被連接 到選擇晶體管STl的源極,而連接到字線WLn的存儲器單元晶體管MT的源極被連接到選擇 晶體管ST2的漏極。塊的NAND串中的存儲器單元晶體管MT的控制柵電極共同連接到字線WLO到WLn 中的每一個。即,在塊的同一行中的存儲器單元晶體管MT的控制柵電極被連接到相同的字 線WL。連接到相同字線WL的(m+1)個存儲器單元晶體管MT被作為一個頁面處理,并且數(shù) 據(jù)的寫和讀被針對每一個頁面執(zhí)行。位線BLO到BLm中的每一個中的選擇晶體管STl的漏極共同連接到另一個塊。即, 多個塊的同一列中的NAND串被連接到相同的位線BL。如圖1中所示,在NAND存儲器10中,四個并行操作元件(NAND包)IOa到IOd通 過四個通道(chO到ch3)并聯(lián)連接到驅(qū)動控制電路4,所述每一個通道具有8比特。基于 四個并行操作元件IOa到IOd被單獨操作還是并行操作,并且基于這兩者之一與是否使用 NAND存儲器10的雙倍速模式的組合,提供了下列三種類型的訪問方式(1)8比特正常模式操作一個通道以8比特為單元來讀/寫數(shù)據(jù)。數(shù)據(jù)轉(zhuǎn)移的尺寸單元是頁面尺寸(4 千字節(jié))。(2)32比特正常模式并行操作四個通道以32比特為單元來讀/寫數(shù)據(jù)。數(shù)據(jù)轉(zhuǎn)移的尺寸單元是頁面 尺寸X4(16千字節(jié))。(3)32比特雙倍速模式并行操作四個通道,此外使用NAND存儲器10的雙倍速模式來讀/寫數(shù)據(jù)。數(shù)據(jù) 轉(zhuǎn)移的尺寸單元是頁面尺寸X4X2(32千字節(jié))。
在其中四個通道被并行操作的32比特正常模式或者32比特雙倍速模式中,并行 操作的四個或八個塊被確定為NAND存儲器10的刪除的單元,并且并行操作的四個或八個 頁面被確定為向NAND存儲器10寫的單元和從NAND存儲器10讀的單元。驅(qū)動控制電路4包括控制器41、錯誤糾正碼(ECC)電路42和NAND I/F 43??刂破?1通過ATA接口 2與主機裝置1執(zhí)行數(shù)據(jù)傳送/接收,并且也執(zhí)行對DRAM 20的訪問控制。NAND I/F 43與NAND存儲器10的NAND包IOa到IOd中的每一個執(zhí)行接口處理 (或者執(zhí)行向/從NAND存儲器10的NAND包IOa到IOd中的每一個的輸入/輸出控制(ctrl I/O))。ECC電路42為要被寫到NAND存儲器10的數(shù)據(jù)產(chǎn)生錯誤檢測碼和錯誤糾正碼。ECC 電路42也在從NAND存儲器10讀取的數(shù)據(jù)上執(zhí)行錯誤檢測和錯誤糾正。下面說明如上配置的SSD 100的操作的概述。當(dāng)被請求寫入的數(shù)據(jù)(寫數(shù)據(jù))從 主機裝置1提供到SSD 100時,控制器41把寫數(shù)據(jù)暫時存儲在DRAM 20中??刂破?1通 過每一個預(yù)定單元把存儲的寫數(shù)據(jù)提供給ECC電路42。ECC電路42為寫數(shù)據(jù)產(chǎn)生錯誤糾 正碼和錯誤檢測碼。NAND I/F 43把添加了錯誤糾正碼和錯誤檢測碼的寫數(shù)據(jù)寫到NAND存 儲器10。在SSD 100中,當(dāng)從主機裝置1輸入數(shù)據(jù)讀請求時,NAND I/F 43讀取被請求讀取 的數(shù)據(jù)(讀數(shù)據(jù)),并且也讀取被添加到所述數(shù)據(jù)的錯誤糾正碼和錯誤檢測碼,并把帶有所 述碼的數(shù)據(jù)提供給ECC電路42。ECC電路42在讀數(shù)據(jù)上執(zhí)行錯誤檢測和錯誤糾正??刂?器41把經(jīng)過錯誤糾正的數(shù)據(jù)存儲在DRAM 20中,然后把數(shù)據(jù)轉(zhuǎn)移到主機裝置1。下面說明ECC電路42的基本操作過程。ECC電路42在要被寫到NAND存儲器10 的數(shù)據(jù)上執(zhí)行具有不同錯誤糾正能力的三種類型的錯誤編碼,從而允許減少功耗和電路規(guī) 模。使用第一錯誤糾正碼(圖6中的ECC 1)以數(shù)據(jù)塊D為基礎(chǔ)執(zhí)行錯誤糾正。使用第二 錯誤糾正碼(圖6中的ECC 2)執(zhí)行逐列的錯誤糾正,列由多個數(shù)據(jù)塊D形成。使用第三錯 誤糾正碼(圖6中的RS)來執(zhí)行逐行的錯誤糾正,行由多個數(shù)據(jù)塊D形成。這三者的錯誤 糾正能力的水平按如下的升序提供第一錯誤糾正碼〈第二錯誤糾正碼〈第三錯誤糾正碼。圖3是用于說明ECC電路42中的錯誤糾正的原理的概要的示意圖。圖3表示從 NAND存儲器10讀取的數(shù)據(jù),并且每一個均由多個數(shù)據(jù)形成的數(shù)據(jù)塊D被按矩陣排列。陰影 區(qū)域代表包含錯誤數(shù)據(jù)的錯誤數(shù)據(jù)塊。首先,以數(shù)據(jù)塊D為基礎(chǔ)執(zhí)行錯誤糾正(第一錯誤 糾正)(A)。接著,在其中錯誤不能被糾正的數(shù)據(jù)塊D上執(zhí)行逐列的錯誤糾正(第一輪第二 錯誤糾正)(B)。進一步,在其中錯誤不能被糾正的數(shù)據(jù)塊D上執(zhí)行逐行的錯誤糾正(第一 輪第三錯誤糾正)(C)。在其中錯誤不能被糾正的數(shù)據(jù)塊D上再次執(zhí)行逐列的錯誤糾正(第 二輪第二錯誤糾正)(D)。進一步,在其中錯誤不能被糾正的數(shù)據(jù)塊D上執(zhí)行逐行的錯誤糾 正(第二輪第三錯誤糾正)(E)。利用這些操作,沒有錯誤的數(shù)據(jù)被解碼(F)。如上面所說明的那樣,在第一實施例中,首先以數(shù)據(jù)塊為基礎(chǔ)執(zhí)行錯誤糾正(第 一錯誤糾正)。如果存在其中錯誤不能被糾正的任何數(shù)據(jù)塊,則逐列的錯誤糾正(第二錯誤 糾正)和逐行的錯誤糾正(第三錯誤糾正)被交替重復(fù),直到錯誤被消除,并且沒有錯誤的 數(shù)據(jù)被解碼為止。圖4是ECC電路42中的編碼系統(tǒng)的主要部分的框圖。圖5是當(dāng)要從主機裝置1轉(zhuǎn)移的數(shù)據(jù)被存儲在DRAM 20中時的格式的例子的示意圖。圖6是轉(zhuǎn)移到NAND存儲器10 的數(shù)據(jù)的格式的示意圖。如圖4中所示,ECC電路42包括八個錯誤檢測碼產(chǎn)生器50_1到50_8 (錯誤檢測 碼產(chǎn)生單元)、八個第一 ECC產(chǎn)生器51-1到51-8 (第一錯誤糾正碼產(chǎn)生單元)、第二 ECC產(chǎn) 生器52 (第二錯誤糾正碼產(chǎn)生單元)和八個第三ECC產(chǎn)生器53-1到53-8 (第三錯誤糾正 碼產(chǎn)生單元)。錯誤檢測碼產(chǎn)生器50-1到50-8 (或者它們可以被表示為錯誤檢測碼產(chǎn)生器50) 中的每一個產(chǎn)生錯誤檢測碼以便在寫數(shù)據(jù)的每一個數(shù)據(jù)塊D中檢測錯誤。數(shù)據(jù)塊D的大小 是例如512字節(jié)??梢允褂醚h(huán)冗余校驗和(CRC)-32、CRC_16等作為錯誤檢測碼。第一實施例使用 CRC-32,并且CRC-32(此后稱為“CRC”)的大小被設(shè)置為4字節(jié)。任何公知的裝置可以被用 作錯誤檢測碼產(chǎn)生器50,因此,省略其詳細說明。第一 ECC產(chǎn)生器51-1到51_8 (或者,它們可以被表示為第一錯誤檢測碼產(chǎn)生器 51)中的每一個產(chǎn)生第一錯誤糾正碼以便糾正由數(shù)據(jù)塊D和對應(yīng)的錯誤檢測碼形成的每一 個第一單元數(shù)據(jù)中的錯誤??梢允褂美鏗amming 碼和 BCH 碼(Bose-Chaudhuri-Hocquenghem 碼)的錯誤糾 正碼作為第一錯誤糾正碼以便實現(xiàn)按一個比特或者按多個比特的錯誤糾正。第一實施例使 用Hamming碼作為第一錯誤糾正碼,并且Hamming碼的大小被設(shè)置為4字節(jié)。任何公知的 裝置可被用作第一 ECC產(chǎn)生器51,因此,省略其詳細說明。第二 ECC產(chǎn)生器52為每一個第二單元數(shù)據(jù)UDa產(chǎn)生第二錯誤糾正碼,第二單元數(shù) 據(jù)UDa由按列方向排列的多個第一單元數(shù)據(jù)形成。根據(jù)期望實現(xiàn)的錯誤糾正能力和要使用 的錯誤糾正碼來決定作為產(chǎn)生第二錯誤糾正碼的單元的寫數(shù)據(jù)的數(shù)量。使用與第一錯誤糾正碼相比具有更高的錯誤糾正能力的錯誤糾正碼作為第二錯 誤糾正碼,并且使用允許多個比特的錯誤糾正的錯誤糾正碼。具體來說,可以使用BCH碼和 低密度奇偶校驗(LDPC)碼等等。第一實施例被配置成為由按列方向排列的八個第一單元 數(shù)據(jù)形成的每一個第二單元數(shù)據(jù)UDa產(chǎn)生BCH碼,并把BCH碼的大小設(shè)置為24字節(jié)。任何 公知的裝置可被用作第二 ECC產(chǎn)生器52,因此,省略其詳細說明。 第三ECC產(chǎn)生器53-1到53_8 (或者,它們可以被表示為第三ECC產(chǎn)生器53)中的 每一個為每一個第三單元數(shù)據(jù)UDb產(chǎn)生第三錯誤糾正碼,第三單元數(shù)據(jù)UDb由按行方向排 列的多個數(shù)據(jù)塊D形成。根據(jù)期望實現(xiàn)的錯誤糾正能力和要使用的錯誤糾正碼來決定作為 產(chǎn)生第三錯誤糾正碼的單元的數(shù)據(jù)塊D的數(shù)量。使用與使用第二錯誤糾正碼的錯誤糾正相比允許具有更高能力的錯誤糾正的 錯誤糾正碼作為第三錯誤糾正碼,其執(zhí)行多個比特的錯誤糾正。更具體地,可以使用 Reed-Solomon(RS)碼等作為第三錯誤糾正碼。第一實施例被配置成為由1024個第一單元 數(shù)據(jù)D形成的每一個第三單元數(shù)據(jù)UDb產(chǎn)生RS碼,并把RS碼的大小設(shè)置為512字節(jié),和數(shù) 據(jù)塊D相同。第三ECC產(chǎn)生器53例如為每一個第三單元數(shù)據(jù)UDb產(chǎn)生四個RS碼。因此, 能夠糾正組成第三單元數(shù)據(jù)UDb的1024個數(shù)據(jù)塊D中的四個寫數(shù)據(jù)中的錯誤。任何公知 的裝置可被用作第三ECC產(chǎn)生器53,因此,省略其詳細說明。如圖5中所示,當(dāng)從主機裝置1接收寫數(shù)據(jù)D(l,l)到D(8,1024)時,控制器41在DRAM 20中按列方向順序地存儲八個數(shù)據(jù)塊D(l,ρ)到D(8,ρ)作為第一 ECC產(chǎn)生器51的 處理的單元,并在DRAM 20中存儲1024個第一單元數(shù)據(jù)D (q,1)到D (q,1024)作為第三ECC 產(chǎn)生器53的處理的單元,并順序地把所存儲的數(shù)據(jù)逐列地轉(zhuǎn)移到ECC電路42。其中ρ是1 到1024的任意數(shù)字,并且q是1到8的任意數(shù)字。對應(yīng)于按列方向排列的八個數(shù)據(jù)塊D (1,ρ)到D(8,ρ),分別提供八個錯誤檢測碼 產(chǎn)生器50-1到50-8。八個錯誤檢測碼產(chǎn)生器50-1到50-8為八個數(shù)據(jù)塊D(1,ρ)到D(8, P)分別產(chǎn)生八個CRC。使用所述八個CRC來檢測與其對應(yīng)的八個數(shù)據(jù)塊D(1,ρ)到D(8,p) 中的錯誤。所述八個CRC被分別輸出到第一 ECC產(chǎn)生器51-1到51-8和第二 ECC產(chǎn)生器 52。注意,錯誤檢測碼產(chǎn)生器50-1到50-8分別為按列方向排列的八個RS(l,r)到RS(8, r)產(chǎn)生CRC,其中,r是1到4的任意數(shù)字。對應(yīng)于按列方向排列的八個數(shù)據(jù)塊D(l,p)到D(8,p),分別提供八個第一ECC產(chǎn)生 器51-1到51-8。八個第一 ECC產(chǎn)生器51-1到51_8為每一個第一單元數(shù)據(jù)產(chǎn)生Hamming 碼,或者分別從八個數(shù)據(jù)塊D(l,p)到D(8,p)以及從八個CRC(l,p)到CRC(8,p)產(chǎn)生。八 個Hamming碼被分別用于對應(yīng)的八個單元數(shù)據(jù)D(l,p)到D(8,p)的第一錯誤糾正。所述八 個Hamming碼被輸出到第二 ECC產(chǎn)生器52。第一 ECC產(chǎn)生器51_1到51_8為八個RS (l,r) 到RS (8,r)和按列方向排列的對應(yīng)的八個CRC分別產(chǎn)生Hamming碼,其中r是1到4的任 意數(shù)字。第二 ECC產(chǎn)生器52為由按列方向排列的八個第一單元數(shù)據(jù)形成的每一個第二單 元數(shù)據(jù)UDa產(chǎn)生一個BCH碼,或者為數(shù)據(jù)塊D (1,ρ)到D (8,ρ)和對應(yīng)的八個CRC (1,ρ)到 CRC (8, ρ)產(chǎn)生一個BCH碼。所述BCH碼被用于第二單元數(shù)據(jù)UDa中的錯誤糾正(排除ECC I(Lp)到ECC 1(8,ρ))。在第一實施例中,由第二單元數(shù)據(jù)UDa和BCH碼形成的數(shù)據(jù)的大 小對應(yīng)于一個頁面(對NAND存儲器10的最小存取單元)。第三ECC產(chǎn)生器53為由按行方向排列的1024個數(shù)據(jù)塊D (q,l)到D (q,1024)形 成的每一個第三單元數(shù)據(jù)UDb產(chǎn)生四個RS碼。對應(yīng)于存儲在DRAM 20中的寫數(shù)據(jù)行,提供 了八個第三ECC產(chǎn)生器53-1到53-8。第三ECC產(chǎn)生器53包括其中存儲第三單元數(shù)據(jù)UDb 的緩沖器。具體來說,第三ECC產(chǎn)生器53-1為由數(shù)據(jù)D(l,l)到D(l,1024)形成的第三單 元數(shù)據(jù)UDbl產(chǎn)生四個RS(1,1)到RS(1,4)。對于分別對應(yīng)于第二到第八行的第三ECC產(chǎn)生 器53-2到53-8也是如此。對于圖6中所示的每一個頁面,數(shù)據(jù)塊D、CRC、Hamming碼、BCH碼和RS碼被通過 NAND I/F 43轉(zhuǎn)移到NAND存儲器10。NAND存儲器10按頁面的順序在其中存儲這些數(shù)據(jù)。 例如,當(dāng)一個存儲器塊由1028個頁面形成時,圖6中所示的數(shù)據(jù)被存儲在NAND存儲器10 中的一個存儲器塊中(按8比特正常模式)。但是,在32比特模式(32比特正常模式或者 32比特雙倍速模式)中,這些數(shù)據(jù)被并行寫到每一個通道的存儲器芯片。下面將參考圖4到圖9說明數(shù)據(jù)寫操作以后ECC電路42的錯誤檢測碼產(chǎn)生操作 和錯誤糾正碼產(chǎn)生操作。首先,參考圖5,針對每一個沿列方向的八個數(shù)據(jù)塊D(l,ρ)到D(8,p),控制器41 順序地把作為要被寫到NAND存儲器10的對象的數(shù)據(jù)寫到DRAM 20,在其中存儲數(shù)據(jù)塊 D(Ll)到D(8,1024),并順序地把所存儲的八個數(shù)據(jù)塊D(l,l)到D(8,1024)逐列分別輸出 到錯誤檢測碼產(chǎn)生器50-1到50-8、第一 ECC產(chǎn)生器51-1到51_8、第二 ECC產(chǎn)生器52、和第
11三ECC產(chǎn)生器53-1到53-8。然后,如圖7中所示,錯誤檢測碼產(chǎn)生器50-1到50-8產(chǎn)生分別對應(yīng)于接收到的八 個數(shù)據(jù)塊D(l,l) IlJD(8,1)的八個錯誤檢測碼CRC(1,1)到CRC(8,1)。第一ECC產(chǎn)生器51-1 到51-8從八個寫數(shù)據(jù)D(l,l) IlJ D(8,1)和八個CRC(1,1)到CRC(8,1)分別產(chǎn)生Hamming 碼 ECC 1(1,1)到 ECC 1(8,1)。隨后,如圖8中所示,由八個數(shù)據(jù)塊D(l,l)到D(8,l)和對應(yīng)的八個錯誤檢測碼 CRC(Ll)到CRC(8,1)形成的第二單元數(shù)據(jù)UDa 1被輸出到第二 ECC產(chǎn)生器52。第二 ECC 產(chǎn)生器52使用第二單元數(shù)據(jù)UDa 1產(chǎn)生BCH碼ECC 2來糾正第二單元數(shù)據(jù)UDa 1中的錯 誤。BCH碼ECC 2被連接到第二單元數(shù)據(jù)UDa 1的末端以形成頁面1 (頁面1)。頁面1被 存儲在NAND存儲器10中。圖6中所示的用于頁面2到頁面1024的數(shù)據(jù)用與上面相同的產(chǎn)生操作產(chǎn)生。頁 面2到頁面1024被存儲在NAND存儲器10中。如圖9中所示,第三ECC產(chǎn)生器53-1到53_8順序地把接收到的第一單元數(shù)據(jù)D (1, P)到D(8,p)逐列地分別存儲在緩沖器中,并使用第三單元數(shù)據(jù)UDbl、UDb 2,...UDb 8來 分別產(chǎn)生四個RS(q,l)到RS (q,4)。更具體地,第三ECC產(chǎn)生器53-1使用第三單元數(shù)據(jù)UDb 1來產(chǎn)生四個RS(1,1)到RS(1,4)。由第三ECC產(chǎn)生器53-2到53-8執(zhí)行的RS產(chǎn)生操作與 第三ECC產(chǎn)生器53-1的操作相同。在第一實施例中,第三ECC產(chǎn)生器53-1到53_8相互并 行地執(zhí)行錯誤糾正碼產(chǎn)生操作。第三ECC產(chǎn)生器53-1到53-8的并行操作允許減少處理時 間。當(dāng)使用RS碼時,使用四個冗余碼來一般地獲取兩個錯誤位置信息和兩個錯誤糾 正信息,因此,兩個錯誤可以被糾正。但是,在第一實施例中,CRC被單獨用來識別數(shù)據(jù)塊D 的錯誤位置。因此,在第一實施例中,使用四個冗余碼可以糾正四個錯誤。具體來說,能夠 在1024個數(shù)據(jù)塊D (1,1) IlJ D (1,1024)中糾正四個錯誤。隨后,錯誤檢測碼產(chǎn)生器50-1到50-8為每一個RS(1,1)到RS(8,4)分別產(chǎn)生 CRC α,1025)到CRC (8,1028),與數(shù)據(jù)塊D類似。第一 ECC產(chǎn)生器51-1到51-8分別為每一 個 RS(1,1) IljRS (8,4)和每一個 CRC (1,1025)到 CRC (8,1028)產(chǎn)生 Hamming 碼(1,1025)到 (8,1028)。此外,第二 ECC 產(chǎn)生器 52 分別為 RS (1,1) |lj RS (8,4)和對應(yīng)的 CRC (1,1025)到 CRC(8,1028)產(chǎn)生BCH碼ECC 2,并且BCH碼ECC 2被分別連接到這些碼的末端以形成頁面 1025到頁面1028。頁面1025到頁面1028被轉(zhuǎn)移到NAND存儲器10,并存儲于其中。利用 這些操作,產(chǎn)生了如圖6中所示的數(shù)據(jù)。圖10是ECC電路42中的解碼系統(tǒng)的主要部分的框圖。圖11到圖19是用于說明 ECC電路42中的數(shù)據(jù)讀取的示意圖。如圖10中所示,ECC電路42包括八個錯誤檢測單元 60-1到60-8、八個第一 ECC糾正單元61-1到61-8、第二 ECC糾正單元62,以及八個第三 ECC糾正單元63-1到63-8。在這個圖中,省略了控制器41和NANDI/F 43以簡化說明。在SSD 100中,當(dāng)從主機裝置1輸入數(shù)據(jù)讀取請求時,存儲在NAND存儲器10的一 個存儲器塊中的塊數(shù)據(jù)(圖6中所示的數(shù)據(jù))被通過NAND I/F 43(按8比特正常模式) 讀取,并且控制器41把讀取的塊數(shù)據(jù)存儲在DRAM 20中。具體來說,DRAM 20在其中存儲圖 6中所示的塊數(shù)據(jù)。注意,在32比特模式(32比特正常模式或者32比特雙倍速模式)中, 塊數(shù)據(jù)被并行地從通道的存儲器芯片讀取。
八個第一 ECC糾正單元61-1到61_8 (或者,它們可以被表示為第一 ECC糾正單元 61)被對應(yīng)于按列方向排列的八個數(shù)據(jù)塊D (1,ρ)到D (8,ρ)和對應(yīng)的CRC(1,ρ)到CRC (8, P)提供,或者,被對應(yīng)于行數(shù)提供。第一ECC 糾正單元 61-1 到 61-8 使用 Hamming 碼 ECC l(l,p)到 ECC 1(8,ρ)分別 在按列方向排列的八個數(shù)據(jù)塊D(l,ρ)到D(8,ρ)和CRC(1, P)到CRC(8, ρ)上執(zhí)行第一錯 誤糾正,并在存儲在DRAM 20中的數(shù)據(jù)中更新對應(yīng)于經(jīng)過第一錯誤糾正的數(shù)據(jù)DC 1_1到DC 1-8(圖10)的數(shù)據(jù)。同樣地,第一 ECC糾正單元61-1到61-8分別在RS(1,1)到RS(8,4) 和對應(yīng)的CRC(1,1025)到CRC(8,1028)上執(zhí)行第一錯誤糾正。任何公知的裝置可以被用作 第一 ECC糾正單元61,因此省略其詳細說明。八個錯誤檢測單元60-1到60-8 (或者,它們可以被表示為錯誤檢測單元60)被對 應(yīng)于按列方向排列的八個數(shù)據(jù)塊D(l,p)到D(8,p)和對應(yīng)的CRC(l,p)到CRC(8,p)提供, 或者被對應(yīng)于行數(shù)提供。錯誤檢測單元60-1到60-8分別使用為八個數(shù)據(jù)塊D(l,ρ)到D(8,ρ)產(chǎn)生的八 個CRC(l,p)到CRC(8,p)在第一單元數(shù)據(jù)D(l,p)到D(8,p)中檢測錯誤。任何公知的裝 置可以被用作錯誤檢測單元60,因此省略其詳細說明。第二 ECC糾正單元62使用為每一個頁面產(chǎn)生的BCH碼ECC 2在由八個第一單元 數(shù)據(jù)D(l,ρ)到D(8,ρ)和對應(yīng)的八個CRC(1,ρ)到CRC(8,ρ)形成的第二單元數(shù)據(jù)中執(zhí)行 第二錯誤糾正,并在存儲在DRAM 20中的數(shù)據(jù)中更新對應(yīng)于經(jīng)過第二錯誤糾正的數(shù)據(jù)DC 2 的數(shù)據(jù)。以和上面相同的方式在頁面1025到1028上執(zhí)行第二錯誤糾正。對應(yīng)于按列方向排列的八個第一單元數(shù)據(jù)D(l,ρ)到D(8,ρ)提供八個第三ECC 糾正單元63-1到63-8 (或者,它們可以被表示為第三ECC糾正單元63)。第三ECC糾正單 元63-1使用四個RS(1,1)到RS(1,4)在由按行方向排列的1024個讀數(shù)據(jù)D(1,1)到D(l, 1024)形成的第三單元數(shù)據(jù)UDb 1中執(zhí)行第三錯誤糾正。同樣地,第三ECC糾正單元63-2 到63-8在第三單元數(shù)據(jù)UDb 2到UDb 8中執(zhí)行第三錯誤糾正。任何公知的裝置可以被用 作第三ECC糾正單元63,因此省略其詳細說明。在第一實施例中,所有的四個Reed-Solomon碼RS(1,1)到RS(1,4)都被用于錯誤 糾正。因此,第三ECC糾正單元63-1可以在1024個讀數(shù)據(jù)D (1,1)到D (1,1024)中恢復(fù)四 個讀數(shù)據(jù)。分別對應(yīng)于第二到第八行的第三ECC糾正單元63-2到63-8也是如此。由第三 ECC糾正單元63-1到63-8糾正的經(jīng)過第三錯誤糾正的數(shù)據(jù)DC 3被轉(zhuǎn)移到DRAM 20,并且 在存儲在DRAM 20中的數(shù)據(jù)中,對應(yīng)于經(jīng)過第三錯誤糾正的數(shù)據(jù)DC 3的數(shù)據(jù)被更新。被第一 ECC糾正單元61-1到61_8、第二 ECC糾正單元62和第三ECC糾正單元 63-1到63-8糾正的數(shù)據(jù)塊D(l,l)到D(8,1024)的數(shù)據(jù)被控制器41轉(zhuǎn)移到主機裝置1。下面將參考圖11到圖19說明數(shù)據(jù)讀取操作后ECC電路42的錯誤檢測操作和錯 誤糾正操作。在錯誤糾正操作之前,存儲在NAND存儲器10的一個存儲器塊中的塊數(shù)據(jù)(圖6 中所示的數(shù)據(jù))被轉(zhuǎn)移到DRAM 20(按8比特正常模式)。S卩,DRAM 20在其中存儲圖6中 所示的塊數(shù)據(jù)。頁面1到頁面1028的數(shù)據(jù)被逐頁面地(排除BCH碼ECC 2)順序地分別轉(zhuǎn)移到第 一 ECC糾正單元61-1到61-8。第一 ECC糾正單元61-1到61-8使用Hamming碼ECC 1(1,
131)到 ECC 1(8,1028)在數(shù)據(jù)塊 D(l,l)到 D (8,1024)和對應(yīng)的 CRC(1,1)到 CRC(8,1024) 上,以及逐頁面地在RS(1,1) IlJ RS(8,4)和對應(yīng)的CRC(1,1025) |lj CRC(8,1028)上執(zhí)行第 一錯誤糾正,并且經(jīng)過第一錯誤糾正的數(shù)據(jù)DCl-I到DC1-8被存儲在DRAM 20中。隨后,錯誤檢測單元60執(zhí)行錯誤檢測操作。更具體地,經(jīng)過第一錯誤糾正的第一 單元數(shù)據(jù)D(l,l)到D(8,1024)和對應(yīng)的CRC(1,1)到CRC(8,1024),以及經(jīng)過第一錯誤糾正 的 RS(1,1) IlJ RS(8,4)和對應(yīng)的 CRC(1,1025)到 CRC(8,1028)被逐頁面地從 DRAM 20 分別 轉(zhuǎn)移到錯誤檢測單元60-1到60-8。錯誤檢測單元60-1到60-8使用對應(yīng)的CRC(1,1)到CRC (8,1028)分別在經(jīng)過第 一錯誤糾正的數(shù)據(jù)塊D(l,l)到D(8,1024)和經(jīng)過第一錯誤糾正的RS(1,1)到RS(8,4)中 逐頁面地檢測錯誤。錯誤檢測單元60-1到60-8逐頁面地產(chǎn)生第一錯誤信息Sl到S8,作 為錯誤檢測結(jié)果分別指示在哪個讀數(shù)據(jù)塊D和RS碼RS中存在錯誤。第一錯誤信息Sl到 S8被轉(zhuǎn)移到第二 ECC糾正單元62。如果錯誤檢測單元60-1到60_8分別檢測到在數(shù)據(jù)塊D 中存在錯誤,則被糾正之前的數(shù)據(jù)塊D而非經(jīng)過第一錯誤糾正的數(shù)據(jù)DCl-I到DC1-8被轉(zhuǎn) 移到第二 ECC糾正單元62。這是因為被錯誤檢測單元60-1到60-8檢測到其中存在錯誤 的數(shù)據(jù)塊D不可能被糾正,或者,數(shù)據(jù)塊D包含超出了第一 ECC糾正單元61-1到61-8的糾 正能力的錯誤,并且由第一 ECC糾正單元61-1到61-8執(zhí)行的錯誤糾正導(dǎo)致了施加給數(shù)據(jù) 塊D的額外錯誤。結(jié)果,被糾正之前的數(shù)據(jù)包含比具有額外錯誤的數(shù)據(jù)更少的錯誤,因此, 被糾正之前的數(shù)據(jù)被發(fā)送到第二 ECC糾正單元62。對于RS(1,1)到RS(8,4)也是如此。圖11是用于說明第一錯誤糾正之后的錯誤檢測的示意圖,并且圖12是第一錯誤 信息Sl到S8的例子的示意圖。在圖11和圖12中,如果作為第一錯誤糾正后錯誤檢測的 結(jié)果,存在不具有錯誤的第一單元數(shù)據(jù),則用于該數(shù)據(jù)的第一錯誤信息被設(shè)置為S = 0,而 如果作為第一錯誤糾正后錯誤檢測的結(jié)果存在具有錯誤的第一單元數(shù)據(jù),則用于該數(shù)據(jù)的 第一錯誤信息被設(shè)置為S = 1。圖11和圖12的例子指示在第一單元數(shù)據(jù)1、4和5中存在 錯誤。具有錯誤的第一單元數(shù)據(jù)是用于第二錯誤糾正的對象。在第一錯誤糾正后的第二單元數(shù)據(jù)UDa 1到UDa 1028和第一錯誤信息Sl到S8 被逐頁面地轉(zhuǎn)移到第二 ECC糾正單元62。第二 ECC糾正單元62通過使用包含在第二單元 數(shù)據(jù)UDa中的BCH碼ECC 2并參考第一錯誤信息Sl到S8,在作為第二錯誤糾正的對象的第 一單元數(shù)據(jù)上執(zhí)行第二錯誤糾正。被第二 ECC糾正單元62糾正的經(jīng)過第二錯誤糾正的數(shù) 據(jù)DC 2被轉(zhuǎn)移到DRAM 20,并且存儲在DRAM 20中的數(shù)據(jù)中對應(yīng)于經(jīng)過第二錯誤糾正的數(shù) 據(jù)DC 2的數(shù)據(jù)被更新。隨后,錯誤檢測單元60-1到60-8執(zhí)行錯誤檢測操作。更具體地,經(jīng)過第二錯誤糾 正的數(shù)據(jù)塊D (1,1)到D (8,1024)和對應(yīng)的CRC (1,1)到CRC (8,1024),以及經(jīng)過第二錯誤糾 正的 RS(1,1) IlJ RS(8,4)和對應(yīng)的 CRC(1,1025) IljCRC(8,1028)被逐頁面地從 DRAM 20 分 別轉(zhuǎn)移到錯誤檢測單元60-1到60-8。錯誤檢測單元60-1到60-8使用對應(yīng)的CRC(1,1)到CRC(8,1028)分別在經(jīng)過第 二錯誤糾正的數(shù)據(jù)塊D(l,l)到D(8,1024)和經(jīng)過第二錯誤糾正的RS(1,1)到RS(8,4)中 檢測錯誤。錯誤檢測單元60-1到60-8逐頁面地產(chǎn)生第二錯誤信息Sl到S8,作為錯誤檢測 結(jié)果分別指示在哪個第一單元數(shù)據(jù)和RS碼RS中存在錯誤。第二錯誤信息Sl到S8被分別 轉(zhuǎn)移到第三ECC糾正單元63-1到63-8。和第一錯誤糾正的情況類似,如果作為錯誤檢測單
14元60-1到60-8的檢測結(jié)果有其中存在錯誤的數(shù)據(jù)塊D,則被糾正之前的數(shù)據(jù)塊D而非經(jīng) 過第二錯誤糾正的數(shù)據(jù)DC 2被分別轉(zhuǎn)移到第三ECC糾正單元63-1到63-8。這是因為具 有被錯誤檢測單元60-1到60-8檢測到的錯誤的數(shù)據(jù)塊D不可能被糾正,或者,數(shù)據(jù)塊D包 括超出了第二 ECC糾正單元62的糾正能力的錯誤,并且由第二 ECC糾正單元62執(zhí)行的錯 誤糾正導(dǎo)致了施加給數(shù)據(jù)塊D的額外錯誤。結(jié)果,被糾正之前的數(shù)據(jù)包含比具有額外錯誤 的數(shù)據(jù)更少的錯誤,因此,被糾正之前的數(shù)據(jù)被發(fā)送到第三ECC糾正單元63-1到63-8。對 于RS(1,1)到RS(8,4)也是如此。在第一實施例中,錯誤檢測單元60-1到60-8并行地執(zhí) 行錯誤檢測操作。錯誤檢測單元60-1到60-8的并行操作允許減少處理時間。圖13是用于說明在第二錯誤糾正后的錯誤檢測的示意圖,并且圖14是第二錯誤 糾正之后第二錯誤信息Sl到S8的例子的示意圖。在圖13和圖14中,如果作為第二錯誤 糾正后錯誤檢測的結(jié)果存在不具有錯誤的第一單元數(shù)據(jù),則用于該數(shù)據(jù)的第二錯誤信息被 設(shè)置為S = 0,而如果作為第二錯誤糾正后錯誤檢測的結(jié)果存在具有錯誤的塊,則用于該塊 的第二錯誤信息被設(shè)置為S = 1。圖13和圖14的例子指示在第一單元數(shù)據(jù)5中存在錯誤。 具有錯誤的第一單元數(shù)據(jù)是用于第三錯誤糾正的對象。圖15是在由第二 ECC糾正單元62執(zhí)行的第一輪錯誤糾正之后的塊數(shù)據(jù)的例子的 示意圖。陰影線指示錯誤檢測單元60-1到60-8在其中檢測到錯誤的數(shù)據(jù),因為錯誤不能 被由第二 ECC糾正單元62執(zhí)行的第一輪錯誤糾正所糾正。如果作為由第二 ECC糾正單元62執(zhí)行的第一輪錯誤糾正的結(jié)果在所有的讀數(shù)據(jù) 中不存在錯誤,則在這個步驟結(jié)束錯誤糾正操作。即,以后說明的第三ECC糾正單元63將 不執(zhí)行錯誤糾正。例如,第三ECC糾正單元63通過停止來自電源電路5的電源,或者通過 停止來自時鐘電路(未示出)的時鐘信號的供給來停止錯誤糾正操作。結(jié)果,當(dāng)只有很少 的錯誤時,數(shù)據(jù)讀取時間可被減少。此外,第三ECC糾正單元63不執(zhí)行錯誤糾正操作,并且 這允許減少功耗。隨后,由第三ECC糾正單元63執(zhí)行第一輪錯誤糾正操作。更具體地,由按行方向 排列的1024個數(shù)據(jù)塊D(l,l)到D(l,1024)形成的第三單元數(shù)據(jù)UDb 1和與其對應(yīng)產(chǎn)生的 四個RS(1,1)到RS(1,4)被從DRAM 20發(fā)送到第三ECC糾正單元63_1。第三ECC糾正單元 63-1使用RS(1,1) IlJ RS(1,4)在數(shù)據(jù)塊D(l,l)到D(l,1024)中執(zhí)行錯誤糾正。對于對應(yīng) 于第二到第八行的第三ECC糾正單元63-2到63-8也是如此。在第一實施例中,第三ECC糾正單元63-1到63-8并行地執(zhí)行錯誤糾正操作,并且 其并行操作允許減少處理時間。被第三ECC糾正單元63-1到63-8糾正的經(jīng)過第三錯誤糾 正的數(shù)據(jù)DC 3被轉(zhuǎn)移到DRAM 20。在存儲在DRAM 20中的數(shù)據(jù)中,對應(yīng)于經(jīng)過第三錯誤糾 正的數(shù)據(jù)DC 3的數(shù)據(jù)被更新。圖16是在由第三ECC糾正單元63執(zhí)行過第一輪第三錯誤糾正以后塊數(shù)據(jù)的例子 的示意圖。讀數(shù)據(jù)D(l,2)和D(l,6)中的錯誤被第三ECC糾正單元63-1糾正,如圖16中 所示,并且讀數(shù)據(jù)D(8,1)和D(8,1022)中的錯誤被第三ECC糾正單元63_8糾正。如上面所說明的那樣,在由第三ECC糾正單元63執(zhí)行錯誤糾正之前,使用錯誤檢 測單元60來識別其中存在錯誤的讀數(shù)據(jù)的位置。結(jié)果,第三ECC糾正單元63僅在其中檢 測到錯誤的讀數(shù)據(jù)上執(zhí)行錯誤糾正。這允許減少由第三ECC糾正單元63執(zhí)行糾正的時間, 并且也減少功耗。
隨后,由第二 ECC糾正單元62在頁面1到頁面1028上執(zhí)行第二輪的第二錯誤糾 正。第二錯誤糾正操作和由第二 ECC糾正單元62執(zhí)行的第一輪的錯誤糾正相同。圖17是 在由第二 ECC糾正單元62執(zhí)行過第二輪第二錯誤糾正之后塊數(shù)據(jù)的例子的示意圖。讀數(shù) 據(jù)D(2,1)、D(3,2)和D(2,1022)中的錯誤被第二 ECC糾正單元62糾正,如圖17中所示。此后,錯誤檢測單元60-1到60-8在所有的數(shù)據(jù)塊D和RS碼中檢測錯誤。該錯誤 檢測操作和由錯誤檢測單元60-1到60-8執(zhí)行的第一輪錯誤檢測操作相同。由第三ECC糾 正單元63-1到63-8在第三單元數(shù)據(jù)UDb 1到UDb 8上分別執(zhí)行第二輪的第三錯誤糾正。 第三錯誤糾正操作和由第三ECC糾正單元63-1到63-8執(zhí)行的第一輪的錯誤糾正相同。圖18是在由第三ECC糾正單元63執(zhí)行過第二輪第三錯誤糾正之后塊數(shù)據(jù)的例 子的示意圖。數(shù)據(jù)塊D(2,5)中的錯誤被第三ECC糾正單元63-2糾正。此外,數(shù)據(jù)塊D(3, 4)、D(3,7)和D(3,1023)中的錯誤被第三ECC糾正單元63_3糾正。利用這些操作,數(shù)據(jù)塊 D(Ll)到D(8,1024)中的所有錯誤都被糾正。此后,其中所有錯誤都被糾正的數(shù)據(jù)塊D(l,l)到D(8,1024)被從DRAM 20輸出到
主機裝置1。圖19是自從寫入數(shù)據(jù)到NAND存儲器10所經(jīng)過的時間和所需的糾正能力之間的 關(guān)系的示意圖。如圖19中所示,如果經(jīng)過的時間變得更長,則寫到NAND存儲器10的數(shù)據(jù) 中的錯誤的數(shù)量增加。錯誤糾正能力因此與錯誤數(shù)量上的增加相關(guān)聯(lián)地改變。此外,第一 ECC糾正單元61到第三ECC糾正單元63的每一個錯誤糾正能力被判定,以便不使用過剩 水平或者不足水平的錯誤糾正能力。更具體地,第一 ECC糾正單元61到第三ECC糾正單元 63的錯誤糾正能力被判定,以便當(dāng)經(jīng)過的時間較短時錯誤糾正只能由第一 ECC糾正單元61 執(zhí)行,并且,在經(jīng)過的時間已經(jīng)經(jīng)過預(yù)定的時間(當(dāng)錯誤數(shù)量急劇增加時的時間)后,錯誤 糾正可以被第一 ECC糾正單元61、第二 ECC糾正單元62和第三ECC糾正單元63執(zhí)行。如上面所說明的那樣,根據(jù)第一實施例,能夠在讀數(shù)據(jù)上首先使用第一錯誤糾正 碼(Hamming碼)執(zhí)行第一錯誤糾正,然后在第一錯誤糾正的結(jié)果上使用第二錯誤糾正碼 (BCH碼)執(zhí)行第二錯誤糾正,并且在第二錯誤糾正的結(jié)果上使用第三錯誤糾正碼(RS碼) 進一步執(zhí)行第三錯誤糾正。因此,即使第一錯誤糾正碼到第三錯誤糾正碼的錯誤糾正能力 被降低,也可以保證期望的糾正能力,并且電路規(guī)模也可以被減小。使用具有低水平錯誤糾正能力的第一錯誤糾正碼(Hamming碼)、具有中等水平 錯誤糾正能力的第二錯誤糾正碼(BCH碼)以及具有高水平錯誤糾正能力的第三錯誤糾正 碼(RS碼),錯誤糾正被三重地執(zhí)行,并且這能夠極大地降低高水平錯誤糾正的解碼的頻 率。結(jié)果,即使不提供硬件,使用軟件也能夠令人滿意地執(zhí)行錯誤糾正,這使電路規(guī)模得以 減小。當(dāng)確定在所有讀數(shù)據(jù)中不存在錯誤時,作為由第一 ECC糾正單元61執(zhí)行的第一錯 誤糾正的結(jié)果,第二 ECC糾正單元62和第三ECC糾正單元63不執(zhí)行錯誤糾正。因此,當(dāng)只 有很少的錯誤時,數(shù)據(jù)讀取時間可被減少。更具體地,當(dāng)只有很少的錯誤時數(shù)據(jù)讀取時間上 的減少與當(dāng)存在很多錯誤時具有高糾正能力的性能相容。此外,通過停止第二 ECC糾正單 元62和第三ECC糾正單元63的操作,功耗可以被降低。此外,使用第二錯誤糾正碼(BCH碼)來按列方向在數(shù)據(jù)上執(zhí)行錯誤糾正,而使用 第三錯誤糾正碼(RS碼)來按行方向在數(shù)據(jù)上執(zhí)行錯誤糾正。這些糾正允許NAND存儲器10的存儲器塊中所有頁面上的錯誤糾正。而且,第一實施例對于其中因要存儲的數(shù)據(jù)的位 置所致錯誤概率大大不同的半導(dǎo)體存儲器特別有用,因為可以在具有高錯誤概率的區(qū)域上 執(zhí)行很多次錯誤糾正。使用錯誤檢測單元60來實現(xiàn)識別其中存在錯誤的數(shù)據(jù)的位置,因此,第二 ECC糾 正單元62和第三ECC糾正單元63只須在其中檢測到錯誤的讀數(shù)據(jù)上執(zhí)行錯誤糾正。這使 得能夠減少第二 ECC糾正單元62和第三ECC糾正單元63的處理時間。此外,因為使用錯誤檢測碼(CRC)可以檢測其中存在錯誤的數(shù)據(jù)的位置,第三ECC 糾正單元63無需執(zhí)行錯誤檢測。這使得所有RS碼(在第一實施例中的四個RS碼)能夠 用于錯誤糾正。下面將參考圖20到圖22說明根據(jù)本發(fā)明的第二實施例的SSD。第二實施例被配 置成使得SSD 100執(zhí)行第一和第二錯誤糾正,而主機裝置201而非SSD 100執(zhí)行具有高水 平錯誤糾正能力的第三錯誤糾正。這種配置允許減少SSD 100上的負載,因為幾乎所有的 錯誤都可以被第一和第二錯誤糾正糾正,而第三錯誤糾正與其他的錯誤糾正相比使用得遠 遠不那么頻繁,卻要求長的處理時間。圖20是用于說明根據(jù)第二實施例的錯誤糾正的原理的示意圖。圖21是根據(jù)第二 實施例的SSD 100和主機裝置201的配置的示意圖。參考圖20,第一錯誤糾正(A)和第二 錯誤糾正(B)由SSD 100執(zhí)行,而第三錯誤糾正(C)及此后的處理由主機裝置201執(zhí)行。如圖21中所示,主機裝置201包括使用CRC在每一個數(shù)據(jù)塊D中檢測錯誤的錯 誤檢測單元101、使用BCH碼(第二錯誤糾正碼)執(zhí)行第二錯誤糾正的第二 ECC糾正單元 102,以及使用RS碼(第三錯誤糾正碼)執(zhí)行第三錯誤糾正的第三ECC糾正單元103。主機 裝置201的CPU執(zhí)行軟件以允許錯誤檢測單元101、第二 ECC糾正單元102和第三ECC糾正 單元103的實施。SSD 100把經(jīng)過第二錯誤糾正的數(shù)據(jù)塊D (1,1)到D (8,1024)和對應(yīng)的CRC(1,1) 到 CRC (8,1024)、RS (1,1)到 RS (8,4)以及對應(yīng)的 CRC (1,1025)到 CRC (8,1028)、ECC 1(1, 1)到ECC 1(8,1028)和第二錯誤信息傳送到主機裝置201。主機裝置201使用第二錯誤信息在從SSD 100接收到的經(jīng)過第二錯誤糾正的數(shù)據(jù) 上執(zhí)行第三錯誤糾正,并使用CRC檢查糾正的結(jié)果。如果檢測到錯誤,則第二錯誤糾正被再 次執(zhí)行,并且第二和第三錯誤糾正被交替地重復(fù),直到錯誤被消除為止(執(zhí)行圖15到圖19 中的處理)。圖22是根據(jù)第二實施例的ECC電路242中的解碼系統(tǒng)的主要部分的框圖。ECC電 路242中的解碼系統(tǒng)無需包含第三ECC糾正單元,因此,電路規(guī)??杀粶p小。根據(jù)第二實施例,因為第三錯誤糾正被主機裝置201執(zhí)行,所以無需由SSD 100執(zhí) 行第三錯誤糾正,這使得SSD 100上的負荷和電路規(guī)模得以減小。在第二實施例中,本發(fā)明被應(yīng)用于具有NAND存儲器的SSD,但是,本發(fā)明可以被應(yīng) 用于具有例如NOR型存儲器的其他快閃電可擦除可編程只讀存儲器(EEPROM)的任何SSD。工業(yè)適用性根據(jù)本發(fā)明,能夠提供能減少功耗和電路規(guī)模而不損害錯誤糾正能力的半導(dǎo)體存 儲裝置、用于控制其的方法和錯誤糾正系統(tǒng)。
權(quán)利要求
一種半導(dǎo)體存儲裝置,包含臨時存儲單元,其能夠在其中存儲多個數(shù)據(jù)塊,所述多個數(shù)據(jù)塊按矩陣排列并且每一個數(shù)據(jù)塊均由多個數(shù)據(jù)形成;錯誤檢測碼產(chǎn)生單元,其產(chǎn)生錯誤檢測碼來針對每一個數(shù)據(jù)塊檢測錯誤;第一錯誤糾正碼產(chǎn)生單元,其產(chǎn)生第一錯誤糾正碼來針對由數(shù)據(jù)塊形成的每一個第一單元數(shù)據(jù)糾正錯誤;第二錯誤糾正碼產(chǎn)生單元,其產(chǎn)生第二錯誤糾正碼來針對由按列方向排列的數(shù)據(jù)塊形成的每一個第二單元數(shù)據(jù)糾正錯誤;第三錯誤糾正碼產(chǎn)生單元,其產(chǎn)生第三錯誤糾正碼來針對由按行方向排列的數(shù)據(jù)塊形成的每一個第三單元數(shù)據(jù)糾正錯誤;和非易失半導(dǎo)體存儲器,其能夠在其中存儲數(shù)據(jù)塊、產(chǎn)生的錯誤檢測碼和產(chǎn)生的第一到第三錯誤糾正碼。
2.如權(quán)利要求1所述的半導(dǎo)體存儲裝置,還包含第一錯誤糾正單元,其在每一個數(shù)據(jù)塊上使用與其對應(yīng)的第一錯誤糾正碼執(zhí)行第一錯 誤糾正;第一錯誤檢測單元,其在經(jīng)過第一錯誤糾正的塊中使用與其對應(yīng)的錯誤檢測碼檢測錯誤;第二錯誤糾正單元,其在經(jīng)過第一錯誤糾正的塊中被第一錯誤檢測單元檢測到的錯誤 上使用與其對應(yīng)的第二錯誤糾正碼執(zhí)行第二錯誤糾正;第二錯誤檢測單元,其在經(jīng)過第二錯誤糾正的塊中使用與其對應(yīng)的錯誤檢測碼檢測錯 誤;和第三錯誤糾正單元,其在經(jīng)過第二錯誤糾正的塊中被第二錯誤檢測單元檢測到的錯誤 上使用與其對應(yīng)的第三錯誤糾正碼執(zhí)行第三錯誤糾正。
3.如權(quán)利要求1所述的半導(dǎo)體存儲裝置,其中,錯誤糾正能力的水平按如下降序提供 第三錯誤糾正 > 第二錯誤糾正 > 第一錯誤糾正。
4.如權(quán)利要求2所述的半導(dǎo)體存儲裝置,其中,第二錯誤糾正單元和第三錯誤糾正單 元交替地重復(fù)各自的錯誤糾正操作。
5.如權(quán)利要求1所述的半導(dǎo)體存儲裝置,其中,錯誤檢測碼產(chǎn)生單元產(chǎn)生錯誤檢測碼 來檢測第三錯誤糾正碼中的錯誤。
6.如權(quán)利要求1所述的半導(dǎo)體存儲裝置,其中,第一單元數(shù)據(jù)包含對應(yīng)于數(shù)據(jù)塊的錯 誤檢測碼。
7.如權(quán)利要求1所述的半導(dǎo)體存儲裝置,其中,第二單元數(shù)據(jù)包含分別對應(yīng)于形成第 二單元數(shù)據(jù)的數(shù)據(jù)塊的錯誤檢測碼。
8.如權(quán)利要求1所述的半導(dǎo)體存儲裝置,其中,第二錯誤糾正碼產(chǎn)生單元產(chǎn)生第二錯 誤糾正碼來糾正每一按列方向排列的多個第三錯誤糾正碼中的錯誤。
9.如權(quán)利要求2所述的半導(dǎo)體存儲裝置,其中第一錯誤檢測單元產(chǎn)生第一錯誤信息來識別其中檢測到錯誤的數(shù)據(jù)塊, 第二錯誤糾正單元基于第一錯誤信息執(zhí)行第二錯誤糾正, 第二錯誤檢測單元產(chǎn)生第二錯誤信息來識別其中檢測到錯誤的數(shù)據(jù)塊,并且第三錯誤糾正單元基于第二錯誤信息執(zhí)行第三錯誤糾正。
10.如權(quán)利要求1所述的半導(dǎo)體存儲裝置,其中,非易失半導(dǎo)體存儲器是NAND快閃存儲ο
11.一種控制半導(dǎo)體存儲裝置的方法,包含在臨時存儲裝置中存儲多個數(shù)據(jù)塊,所述多個數(shù)據(jù)塊按矩陣排列并且每一個數(shù)據(jù)塊均 由多個數(shù)據(jù)形成;產(chǎn)生錯誤檢測碼來針對每一個數(shù)據(jù)塊檢測錯誤;產(chǎn)生第一錯誤糾正碼來針對由數(shù)據(jù)塊形成的每一個第一單元數(shù)據(jù)糾正錯誤; 產(chǎn)生第二錯誤糾正碼來針對由按列方向排列的數(shù)據(jù)塊形成的每一個第二單元數(shù)據(jù)糾 正錯誤;產(chǎn)生第三錯誤糾正碼來針對由按行方向排列的數(shù)據(jù)塊形成的每一個第三單元數(shù)據(jù)糾 正錯誤;和在非易失半導(dǎo)體存儲器中存儲數(shù)據(jù)塊、產(chǎn)生的錯誤檢測碼和產(chǎn)生的第一到第三錯誤糾 正碼。
12.如權(quán)利要求11所述的控制半導(dǎo)體存儲裝置的方法,還包含在每一個數(shù)據(jù)塊上使用與其對應(yīng)的第一錯誤糾正碼執(zhí)行第一錯誤糾正; 在經(jīng)過第一錯誤糾正的塊中使用與其對應(yīng)的錯誤檢測碼檢測錯誤; 在經(jīng)過第一錯誤糾正的塊中被第一錯誤檢測單元檢測到的錯誤上使用與其對應(yīng)的第 二錯誤糾正碼執(zhí)行第二錯誤糾正;在經(jīng)過第二錯誤糾正的塊中使用與其對應(yīng)的錯誤檢測碼檢測錯誤;和 在經(jīng)過第二錯誤糾正的塊中被第二錯誤檢測單元檢測到的錯誤上使用與其對應(yīng)的第 三錯誤糾正碼執(zhí)行第三錯誤糾正。
13.一種錯誤糾正系統(tǒng),包含 主機裝置;和半導(dǎo)體存儲裝置,其根據(jù)主機裝置的指令執(zhí)行從/向非易失存儲器的數(shù)據(jù)讀/寫,其中 所述半導(dǎo)體存儲裝置包括臨時存儲單元,其把從主機裝置轉(zhuǎn)移的數(shù)據(jù)劃分為每一個均由多個數(shù)據(jù)形成的多個數(shù) 據(jù)塊,并在其中按矩陣存儲所述數(shù)據(jù)塊;錯誤檢測碼產(chǎn)生單元,其產(chǎn)生錯誤檢測碼來針對每一個數(shù)據(jù)塊檢測錯誤; 第一錯誤糾正碼產(chǎn)生單元,其產(chǎn)生第一錯誤糾正碼來針對由數(shù)據(jù)塊形成的每一個第一 單元數(shù)據(jù)糾正錯誤;第二錯誤糾正碼產(chǎn)生單元,其產(chǎn)生第二錯誤糾正碼來針對由按列方向排列的數(shù)據(jù)塊形 成的每一個第二單元數(shù)據(jù)糾正錯誤;第三錯誤糾正碼產(chǎn)生單元,其產(chǎn)生第三錯誤糾正碼來針對由按行方向排列的數(shù)據(jù)塊形 成的每一個第三單元數(shù)據(jù)糾正錯誤;非易失半導(dǎo)體存儲器,其能夠在其中存儲數(shù)據(jù)塊、產(chǎn)生的錯誤檢測碼和產(chǎn)生的第一到 第三錯誤糾正碼;第一錯誤糾正單元,其在每一個數(shù)據(jù)塊上使用與其對應(yīng)的第一錯誤糾正碼執(zhí)行第一錯 誤糾正;第一錯誤檢測單元,其在經(jīng)過第一錯誤糾正的塊中使用與其對應(yīng)的錯誤檢測碼檢測錯誤;第二錯誤糾正單元,其在經(jīng)過第一錯誤糾正的塊中被第一錯誤檢測單元檢測到的錯誤 上使用與其對應(yīng)的第二錯誤糾正碼執(zhí)行第二錯誤糾正;第二錯誤檢測單元,其在經(jīng)過第二錯誤糾正的塊中使用與其對應(yīng)的錯誤檢測碼檢測錯 誤;和傳送單元,其把經(jīng)過第二錯誤糾正的數(shù)據(jù)和第二錯誤檢測單元檢測的結(jié)果傳送到主機 裝置,并且主機裝置包括第三錯誤糾正單元,其在從半導(dǎo)體存儲裝置接收到的、經(jīng)過第二錯誤糾正的塊中被第 二錯誤檢測單元檢測到的錯誤上使用與其對應(yīng)的第三錯誤糾正碼執(zhí)行第三錯誤糾正。
全文摘要
一種允許減少功耗和電路規(guī)模而不損害錯誤糾正能力的半導(dǎo)體存儲裝置、控制其的方法和錯誤糾正系統(tǒng)。固態(tài)驅(qū)動器(SSD)的錯誤糾正碼(ECC)電路使用第一錯誤糾正碼(Hamming碼)在讀數(shù)據(jù)上執(zhí)行第一錯誤糾正,并進一步使用第二錯誤糾正碼(BCH碼)在第一錯誤糾正的結(jié)果上執(zhí)行第二錯誤糾正。此外,ECC電路使用第三錯誤糾正碼(RS碼)在第二錯誤糾正的結(jié)果上執(zhí)行第三錯誤糾正。
文檔編號G06F12/16GK101946239SQ20088012699
公開日2011年1月12日 申請日期2008年9月19日 優(yōu)先權(quán)日2008年2月29日
發(fā)明者山家陽 申請人:株式會社東芝