一種控制器的制造方法
【專利摘要】本發明提供了一種控制器,所述控制器包括:壞塊管理單元,用于獲取壞塊列表,將所述壞塊列表存儲至隨機存儲器RAM;壞塊映射單元,利用壞塊映射方法確定當前塊Block的操作地址不在所述壞塊列表中時,則確定所述當前塊Block是好塊;檢錯糾錯單元,用于在所述控制器進行讀寫操作時,對讀寫數據進行檢錯糾錯;其中,所述RAM輸出ram_dout與及RAM地址ram_addr位于同一個時鐘周期;如此,所述RAM輸出ram_dout與及RAM地址ram_addr位于同一個時鐘周期,所以可以在一個時鐘周期內確定出壞塊,進而提高了讀寫操作的速度;且所述檢錯糾錯單元可以在數據長度為512字節中糾正出1位錯,檢測出2位錯,提高了檢錯糾錯效率,進一步確保了NAND FLASH芯片的可靠性。
【專利說明】
一種控制器
技術領域
[0001] 本發明屬于數據存儲技術領域,尤其涉及一種控制器。
【背景技術】
[0002] Flash Memory屬于一種非揮發性存儲器,在國內也通常被叫作閃存(閃速存儲 器)。作為一種優良的單管存儲器,它的優點在于體積小、功耗低、速度快、成本低。近年來, Flash Memory已成為集成電路(IC,Integrated Circuit)技術發展的主要驅動器,主要包 含有勵1?、祖冊、0丨如1?、4勵等多種技術架構,其中以祖冊?1^5!1和如1??1^5!1這兩種架構在 市場的使用率最高。
[0003] 雖然NAND FLASH技術逐漸成熟,但在NAND FLASH芯片的使用上還是有著一些復雜 性,比如:沒有采用獨立的數據線和地址線,所有的指令、地址和數據信息共同復用一個I/O 口,以及在使用中有可能出現位反轉(bit-flipping)、需要壞塊(bad blocks)管理等問題。 這些問題導致NAND FLASH芯片整體的讀寫速度和數據可靠性降低。
[0004] 基于此,目前亟需一種NAND FLASH控制器,以能對壞塊進行管理,對數據進行糾錯 檢錯,以使NAND FLASH芯片在運行過程中能夠快速確定壞塊并提高糾錯檢錯率,進而保證 NAND FLASH芯片的讀寫速度和數據可靠性。
【發明內容】
[0005] 針對現有技術存在的問題,本發明實施例提供了一種控制器,用于解決現有技術 中的NAND FLASH控制器的糾錯檢錯率低,且不能快速定位壞塊導致NAND FLASH芯片的整體 可靠性及讀寫速度降低的技術問題。
[0006] 本發明提供一種控制器,所述控制器包括:
[0007] 壞塊管理單元,用于獲取壞塊列表,將所述壞塊列表存儲至隨機存儲器(RAM, Random Access Memory);
[0008] 壞塊映射單元,利用壞塊映射方法確定當前塊Block的操作地址不在所述壞塊列 表中時,則確定所述當前塊Block是好塊;
[0009] 檢錯糾錯單元ECC,用于在所述控制器進行讀寫操作時,對讀寫數據進行檢錯糾 錯;其中,所述RAM輸出ram_dout與及RAM地址ram_addr位于同一個時鐘周期。
[0010]上述方案中,所述壞塊映射單元還用于:利用壞塊映射方法確定當前塊Block的操 作地址處于所述壞塊列表,則確定所述當前塊Block是壞塊,跳過所述當前塊Block進行寫/ 擦操作。
[0011]上述方案中,所述壞塊映射方法包括:RAM順序比較法及單周期組合邏輯法。
[0012] 上述方案中,所述RAM順序比較法包括:將所請求的塊地址req_addr與所述壞塊列 表中的壞塊地址逐一比較;其中,所述壞塊地址按照從小到大的順序存放至所述RAM中。
[0013] 上述方案中,所述單周期組合邏輯法包括:將所述壞塊列表標記為陣列A [0014]儲存至一組寄存器中;
[0015] 根據所述請求的塊地址req_addr,按照地址逐漸增大的方式擴展出20個塊地址, 標記為陣列B;
[0016] 將所述請求的塊地址req_addr與所述陣列A中的壞塊地址[k]對齊;
[0017] 從所述陣列A中壞塊地址[k]開始,根據塊地址逐漸增大的方式,將所述陣列A中的 壞塊地址與所述陣列B中的塊地址逐一比較,獲取結果變量cmp;
[0018] 在所述結果變量cmp中,當確定出所述cmp中首個零值時,根據所述零值在所述陣 列B中查找對應的塊。
[0019] 上述方案中,當arrayA[k] < req_addr〈arrayA[k+l ]時,所述請求的塊地址req_ addr與所述陣列A中的壞塊地址[k ]對齊;其中,arrayA為所述陣列A,所述[k ]為對齊點。
[0020] 上述方案中,當數據長度為512字節時,所述檢錯糾錯單元發現并糾正出1位錯,檢 測出2位錯。
[0021 ]上述方案中,所述檢錯糾錯單元的校驗碼為3個字節。
[0022] 上述方案中,所述控制器還包括:均衡單元,用于對所述控制器的寫操作進行均 衡,使得所述塊Block及頁page的被寫次數保持均衡。
[0023] 上述方案中,所述壞塊包括:收集單元,用于對無用塊block進行收集匯總。
[0024]本發明提供了一種控制器,所述控制器包括:壞塊管理單元,用于獲取壞塊列表, 將所述壞塊列表存儲至隨機存儲器RAM;壞塊映射單元,利用壞塊映射方法確定當前塊 Block的操作地址不在所述壞塊列表中時,則確定所述當前塊Block是好塊;檢錯糾錯單元, 用于在所述控制器進行讀寫操作時,對讀寫數據進行檢錯糾錯;其中,所述RAM輸出ram_ dout與RAM地址ram_addr位于同一個時鐘周期;如此,所述RAM輸出ram_dout與RAM地址ram_ addr位于同一個時鐘周期,所以可以在一個時鐘周期內確定出壞塊,進而提高了讀寫操作 的速度;且所述檢錯糾錯單元可以在數據長度為512字節中糾正出1位錯,檢測出2位錯,提 高了檢錯糾錯效率,進一步確保了NAND FLASH芯片的可靠性。
【附圖說明】
[0025] 圖1為本發明實施例提供的控制器的整體結構示意圖;
[0026] 圖2為本發明實施例提供的壞塊列表保存至RAM中的示意圖;
[0027] 圖3為本發明實施例提供的壞塊映射單元進行壞塊映射時的時序圖;
[0028] 圖4為本發明實施例提供的壞塊映射單元利用單周期組合邏輯法確定壞塊時的處 理流程圖;
[0029]圖5為本發明實施例提供的主機host向NAND FLASH芯片寫數據時的ECC工作時序 示意圖;
[0030]圖6為本發明實施例提供的host向NAND FLASH芯片讀數據時的ECC工作時序示意 圖;
[0031 ]圖7為本發明實施例提供的利用漢明碼進行檢錯糾錯示意圖;
[0032] 圖8為本發明實施例提供的對NAND_FLASH芯片進行普通讀時的工作時序示意圖;
[0033] 圖9為本發明實施例提供的對NAND_FLASH芯片進行高速讀時的工作時序示意圖。
【具體實施方式】
[0034] 為了提高NAND FLASH芯片的整體可靠性及讀寫速度,本發明提供了一種一種控制 器,所述控制器包括:壞塊管理單元,用于獲取壞塊列表,將所述壞塊列表存儲至隨機存儲 器RAM;壞塊映射單元,利用壞塊映射方法確定當前塊Block的操作地址不在所述壞塊列表 中時,則確定所述當前塊Block是好塊;檢錯糾錯單元,用于在所述控制器進行讀寫操作時, 對讀寫數據進行檢錯糾錯;其中,所述RAM輸出ram_dout與及RAM地址ram_addr位于同一個 時鐘周期。
[0035] 下面通過附圖及具體實施例對本發明的技術方案做進一步的詳細說明。
[0036]本實施例一種控制器,如圖1所示,所述控制器包括:壞塊管理單元11、壞塊映射單 元12、檢錯糾錯單元13、控制單元mctrl 14及物理控制器15(phyc,Physical Controller); 其中,
[0037] 所述壞塊管理單元11用于掃描控制器芯片,獲取壞塊列表,將所述壞塊列表存儲 至隨機存儲器RAM。具體地,所述壞塊包括初始壞塊及遞增壞塊,所述初始壞塊又稱出廠壞 塊,由于初始壞塊信息會隨擦除操作而消失,因此拿到芯片后,應當首先讀取初始壞塊信 息、將其另行保存。
[0038] 遞增壞塊是在芯片的使用過程中,反復的寫/擦操作會導致電子在柵氧SiO2中的 積累,進而導致浮柵管的閾值電壓V th會逐漸漂移。如果所述Vth漂出可接受的正常范圍時, 則會導致壞塊。其中,所述芯片為NAND Flash芯片,所述控制器為所述NAND Flash芯片的 Mas ter,與閃存NAND進行通信,并對NAND進行讀、寫、擦等操作。
[0039]所以,在控制器對NAND Flash芯片進行操作的過程中,需要保存并維護一個壞塊 列表,表中包含了初始壞塊及遞增壞塊。
[0040] 當所述壞塊管理單元11獲取到所述壞塊列表后,所述壞塊映射單元12對NAND進行 讀、寫、擦等操作時,利用壞塊映射方法判讀當前塊Block的操作地址是否在所述壞塊列表 中時,如果當前塊Block的操作地址不在所述壞塊列表中時,則確定所述當前塊Block是好 塊;如果當前塊Block的操作地址在所述壞塊列表中時,則跳過該Block,找到下一個距離所 述當前塊Block最近的好塊,進行讀、寫、擦等操作。
[0041] 具體地,所述壞塊映射方法包括:RAM順序比較法及單周期組合邏輯法。所述RAM順 序比較法包括:將所請求的塊地址req_addr與所述壞塊列表中的壞塊地址逐一比較;期中, 所述壞塊地址按照從小到大的順序存放至所述RAM中。
[0042] 以8位寬2Gbit的NAND Flash為例。其片內共有1024個Block,最多2%是壞塊,即最 多可能有20個壞塊。如圖2所示,首先將壞塊列表存儲至RAM中。假設RAM中存儲的列表如表1 所示:
[0043]表 1
[0044]
[0045] 其中,在表1中,所述表中的左邊一列表示壞塊序號,右邊一列表示壞塊地址。由于 所請求的塊地址與列表中的壞塊,是按順序逐一比較的,因此要求RAM的壞塊必須按照從小 到大的順序排列好。否則,如果將小地址的壞塊放在RAM中靠后的位置,比如"628"后存放一 個地址為"15"的壞塊,則所述邏輯無法識別出壞塊"15"。
[0046] 這里,所述RAM采用"非Register輸出",那么進行壞塊映射的工作時序如圖3所示, 其中,在圖3中,所述req_addr為所請求的塊地址、所述req_ena為請求使能、所述req_ad_ temp為請求地址標志、所述ram_addr為RAM地址、所述ram_dout為所述RAM輸出、所述equal 為匹配、所述g〇〇d_addr為好塊地址、good_ena為好塊使能、所述comparing為比較。所述 ram_dout與ram_addr位于同一個時鐘周期。
[0047] 進一步地,為了實現實時的地址映射,可以考慮在單周期內即給出"下一個可用好 ±夬"的Block地址。這意味著對地址處理必須使用單周期組合邏輯完成。所述單周期組合邏 輯法仍需預先對壞塊地址進行排序,處理方法如圖4所示。
[0048] 具體地,首先將所述壞塊列表標記為陣列A儲存至一組寄存器中reg中。
[0049] 其次,根據所述請求的塊地址req_addr,按照地址逐漸增大(依次加1)的方式擴展 出20個塊地址,標記為陣列B。
[0050] 然后,將所述請求的塊地址req_addr與所述陣列A中的壞塊地址的值順次比較,找 到一個壞塊地址[k],將請求的塊地址req_addr與壞塊地址[k]對齊;其中,當arrayA[k] < req_addr〈arrayA[k+l ]時,所述請求的塊地址req_addr與所述陣列A中的壞塊地址[k]對 齊;其中,arrayA為所述陣列A,所述[k]為對齊點。
[0051] 再從所述陣列A中壞塊地址[k]開始,根據塊地址逐漸增大的方式,將所述陣列A中 的壞塊地址與所述陣列B中的塊地址逐一比較,相同為1、相異為0,獲取20位結果變量cmp。 實現如下:
[0052] arrayA[k]與arrayB[0](即req_addr)相比,
[0053] arrayA[k+l ]與arrayB[ 1 ](即req_addr+l)相比,
[0054] ……
[0055]最后,在所述結果變量cmp中,當確定出所述cmp中首個零值時,根據所述零值在所 述陣列B中查找對應的塊,那么這個塊即為好塊g〇〇d_blk。具體實現如下:
[0056] cmp ==0000_0000_0000_0000,則good_b Ik = arrayB [ 0 ]
[0057] cmp= =0000_0000_0000_0001,則 good_blk = arrayB[l]
[0058] cmp= =0000_0000_0000_0011,則 good_blk = arrayB[2]
[0059] ……
[0060] 在上述處理中,陣列A中的壞塊地址應當是從小到大排序的,這樣只需要進行一次 "對齊"操作即可,后續操作均為異或運算。
[0061] 進一步地,所述檢錯糾錯單元13(ECC,Error Checking And Correcting)用于在 所述控制器進行讀寫操作時,使用ECC編碼對讀寫數據進行檢錯糾錯操作;這里,所述ECC單 元13對輸入/輸出兩個方向的數據進行ECC校驗。ECC校驗的基本長度為512字節,對于512字 節中的數據,可以發現并糾正1位錯、檢測2位錯,對于2 3位的錯則無法保證發現。每512字 節的原始數據,其ECC校驗碼為3字節。
[0062] 而若一個頁Page包含2048字節,因此實際上ECC單元13將1個頁Page切分為4段、分 別進行校驗。host向NAND FLASH芯片寫數據時的ECC工作時序如圖5所示。在圖5中,①表示 每來1個頁Page之前,向ECC單元13發送一個start信號;②表示host向NAND FLASH寫入數 據,進入RAM的同時,將數據寫入ECC單元13;③表示寫數據使能;④表示phyc 15讀取RAM給 出的地址時,同時將該地址發送至ECC單元13;⑤表示ECC單元13在相應的地址輸出12字節 的校驗結果。
[0063] 進一步地,host向NAND FLASH芯片讀數據時的ECC工作時序如圖6所示。在圖6中, ①表示每來1個頁Page之前,向ECC單元13發送一個start信號;②表示來自NAND FLAS^W 個頁Page的有效數據;③表示來自NAND FLASH的1個頁Page的有效數據對應的ECC校驗碼; ④表示所述phyc 15寫RAM給出的地址,同時將該地址發送至ECC單元13;⑤表示ECC單元13 輸出的1個頁Page的校驗結果。
[0064] 這里,所述mctrl 14的主要功能包括:接收host的指令,對phyc 15進行控制;讀/ 寫每個page之前,向ECC單元13給出start信號。
[0065] 所述phyc 15為mctrl 14的slave單元,用于對NAND Flash芯片的管腳進行直接控 制、交互。各指令下的phy c動作如表2所示:
[0066] 表 2
[0069] 其中,在表2中,所述各指令釋義如下:所述RESET為復位指令;所述R_ID_MANU為讀 manual ID;所述R_ID_0NFI為讀ONFI ID;所述R_PARA_PAGE為讀參數;所述R_UNIQUE_ID為 讀unique ID;所述SET_FEATURE為特性設置;所述GET_FEATURE為獲取特性;所述R_STATUS 為讀狀態,所述R_STAT_ENH為讀狀態加強;所述R_PAGE為普通頁讀;所述R_PAG_CACH_SEQ為 順序讀cache ;所述R_PAG_CACH_RND為任意讀cache ;所述PRG_PAGE為頁編程;所述ERS_ BLOCK為塊擦除;所述ERS_BLK_2PLN為兩個?131^的塊擦除 ;所述840_81^_3041^為壞塊檢測; 所述BAD_BLK_S0RT為壞塊排序;所述CL為指令鎖存;所述AL為地址鎖存。
[0070] 實際應用中,如圖7所示,以漢明碼ECC為例,NAND Flash芯片每個頁Page包含2112 字節,其中有2048字節有效數據,若干字節無用數據以及12字節的ECC校驗字。
[0071]當host向NAND FLASH芯片進行寫入時,只給出2048字節的有效數據。由控制器來 算出ECC校驗碼,并將有效數據和校驗碼按照圖5所示的地址分布,寫入NAND FLASH中。 [0072]當host讀取NAND FLASH芯片時,控制器讀出1頁Page中的全部數據,并使用其中的 ECC校驗字對有效數據進行檢錯、糾錯,最終返回給host的回讀數據是進行過糾錯之后的 2048字節有效數據。
[0073] 這里,對所述NAND FLASH芯片進行讀操作時,可依據讀周期(tRC,RE#cycle time) 的時間長度將讀操作分為兩種:普通讀和高速讀;
[0074] 具體地,當tRC 2 30ns,則使用普通讀數據操作時序。如圖8所示,NAND FLASH芯片 在RE#下降沿送出數據、之后的RE#上升沿將數據置為高阻,同時控制器在RE#上升沿取走數 據。
[0075] 如果tRC〈30ns,則使用高速讀數據操作時序。如圖9所示,NAND FLASH芯片在RE#下 降沿送出數據,之后的RE#下降沿將數據置為高阻并輸出新的數據、控制器同時在此RE#下 降沿取走數據。
[0076] 進一步地,所述控制器還包括:均衡單元16、收集單元17及時鐘復位單元18;其中, 所述均衡單元16用于對所述控制器的寫操作進行均衡,使得所述塊Block及頁page的被寫 次數保持均衡;即使得各個塊block、頁page經歷的寫操作次數大體相同,以防出現一部分 塊block已經超過負荷、另一部分塊block卻從未被使用的現象。
[0077]所述收集單元17用于對NAND FLASH芯片中無用的所述block進行收集匯總。所述 無用塊block是指無用塊中存儲的數據已經被更新,寫入了別的塊中,所以無用塊block中 存儲的是無效數據。
[0078]所述時鐘復位單元18用于向其他模塊提供時鐘和復位信號。
[0079] 本發明實施例提供的NAND FLASH芯片共容量為1Gbit,包含有2*512 = 1024個 Block、1024*64 = 65536個 Page。
[0080] 本發明實施例提供的控制器所述RAM的ram_dout與ram_addr位于同一個時鐘周 期,所以可以在一個時鐘周期內確定出壞塊,進而提高了讀寫操作的速度;且所述檢錯糾錯 單元可以在數據長度為512字節中糾正出1位錯,檢測出2位錯,提高了檢錯糾錯效率,進一 步確保了NAND FLASH芯片的可靠性。
[0081] 以上所述,僅為本發明的較佳實施例而已,并非用于限定本發明的保護范圍,凡在 本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的保護 范圍之內。
【主權項】
1. 一種控制器,其特征在于,所述控制器包括: 壞塊管理單元,用于獲取壞塊列表,將所述壞塊列表存儲至隨機存儲器RAM; 壞塊映射單元,利用壞塊映射方法確定當前塊Block的操作地址不在所述壞塊列表中 時,則確定所述當前塊Block是好塊; 檢錯糾錯單元ECC,用于在所述控制器進行讀寫操作時,對讀寫數據進行檢錯糾錯;其 中,所述RAM輸出ram_dout與及RAM地址ram_addr位于同一個時鐘周期。2. 如權利要求1所述的控制器,其特征在于,所述壞塊映射單元還用于:利用壞塊映射 方法確定當前塊Block的操作地址處于所述壞塊列表,則確定所述當前塊Block是壞塊,跳 過所述當前塊Block進行寫/擦操作。3. 如權利要求2所述的控制器,其特征在于,所述壞塊映射方法包括:RAM順序比較法及 單周期組合邏輯法。4. 如權利要求3所述的控制器,其特征在于,所述RAM順序比較法包括:將所請求的塊地 址req_addr與所述壞塊列表中的壞塊地址逐一比較;其中,所述壞塊地址按照從小到大的 順序存放至所述RAM中。5. 如權利要求3所述的控制器,其特征在于,所述單周期組合邏輯法包括: 將所述壞塊列表標記為陣列A儲存至一組寄存器中; 根據所述請求的塊地址req_addr,按照地址逐漸增大的方式擴展出20個塊地址,標記 為陣列B; 將所述請求的塊地址req_addr與所述陣列A中的壞塊地址[k ]對齊; 從所述陣列A中壞塊地址[k]開始,根據塊地址逐漸增大的方式,將所述陣列A中的壞塊 地址與所述陣列B中的塊地址逐一比較,獲取結果變量cmp; 在所述結果變量cmp中,當確定出所述cmp中首個零值時,根據所述零值在所述陣列B中 查找對應的塊。 6 ·如權利要求5所述的控制器,其特征在于,當arrayA[k] < req_addr〈arrayA[k+l]時, 所述請求的塊地址req_addr與所述陣列A中的壞塊地址[k]對齊;其中,arrayA為所述陣列 A,所述[k]為對齊點。7. 如權利要求5所述的控制器,其特征在于,當數據長度為512字節時,所述檢錯糾錯單 元發現并糾正出1位錯,檢測出2位錯。8. 如權利要求5所述的控制器,其特征在于,所述檢錯糾錯單元的校驗碼為3個字節。9. 如權利要求1所述的控制器,其特征在于,所述控制器還包括:均衡單元,用于對所述 控制器的寫操作進行均衡,使得所述塊Block及頁page的被寫次數保持均衡。10. 如權利要求1所述的控制器,其特征在于,所述壞塊包括:收集單元,用于對無用塊 block進行收集匯總。
【文檔編號】G06F11/10GK105843700SQ201610178879
【公開日】2016年8月10日
【申請日】2016年3月25日
【發明人】謝凱毅, 謝元祿, 張坤, 劉璟
【申請人】中國科學院微電子研究所