《閃存問題之READ DISTURB》總結


來自 http://www.ssdfans.com/?p=1778

閃存存在幾個問題,影響着數據可靠性:

1.擦除次數,閃存擦除次數增多,會使隔離柵極的電化學鍵變弱。

2.data retention問題,隨着時間的流逝,存儲在閃存中的數據會消失,原因是浮柵極里面的電子跑出來了。電子跑出來的速度是跟擦除次數成正比的,也就是,閃存擦寫次數越多,電子跑得越快,也就是數據消失得越快。

3.program disturb和read disturb,顧名思義,就是讀寫閃存的時候,會影響數據。

還是這張圖,基本存儲單元結構圖,浮柵極被上下絕緣層(黃色標示)包裹,電荷就存儲在里面。牢記這張圖,這是閃存的根。

閃存由Block組成,是擦除的基本單元。一個Block包含若干個Page,上圖以256個Page為例。一個Wordline(上圖黃色所示)對應着一個Page或幾個Page,取決於SLC, MLC和TLC:對SLC來說,一個WordLine對應一個Page;MLC則對應2個Page,這兩個Page是一對:Lower Page 和Upper Page;TLC對應3個Page。(關於上述論斷,是按單個Plane來說的,而且是2D閃存的)一個Page有多大,那么WordLine上面就有多少個存儲單元(Cell),即有多少個Bitline。上圖示例有71488個bitline,表明該閃存Page大小是71488/8 = 8936 bytes。

以MLC為例:

我們知道,要使一個晶體管導通,在控制極必須加一個大於晶體管閾值電壓的控制電壓。對浮柵極晶體管來說,往浮柵極里面注入不同數量的電子,將改變晶體管的閾值電壓。由於不同的狀態有不同的閾值電壓,我們可以通過在控制極加不同的參考電壓來判斷當前存儲單元數據。以上圖為例,低比特數據代表lower Page數據,高比特數據代表Upper Page數據。 如果我們要讀Upper Page數據,要區分0還是1,只需在控制極加個參考電壓V2:如果晶體管導通,說明是1 (因為不管11還是10狀態,其閾值電壓都小於V2);否則就是0 (因為不管01還是00,閾值電壓都大於V2)。如果要讀取Lower Page數據,要區分0和1的話,就稍微復雜了:我們首先得在控制極加個參考電壓V1,如果導通,說明數據是1(因為11狀態閾值電壓小於V1);如果截止,沒有辦法說明是0和1,因為10,01,00三個狀態閾值電壓都比V1大,這個時候我們需要改變控制極的參考電壓為V2,再看晶體管的導通狀態,如果導通,說明數據是0 (10狀態閾值電壓小於V2),如果晶體管截止,還是無法判斷數據是0和1,因為01和00狀態閾值電壓都大於V2。這個時候,我們需要再次改變控制極的電壓為V3,這個時候,導通說明是1,截止說明數據是0。從中我們看出,讀lower page需要嘗試多次參考電壓,才能獲得最后的數據,而讀upper page時,只需一次,所以對MLC來說,讀lower page和讀upper page的時間是有所差異的。

在上圖中,如果我們把00和01狀態調換一下,如下圖所示:

如果我們還是讀lower Page數據。首先,我們在控制極加個參考電壓V1,如果晶體管導通,說明數據是1;如果截止,這個時候我們在控制極直接加參考電壓V3,如果導通,說明是0,因為不管10還是00,低比特都是0;如果截止,就是1。我們最多經過兩次電壓嘗試就把數據區分出來了,比前面少了一次電壓嘗試。有些閃存廠家采取前面那種編碼方式,而有些閃存廠家采取后面那種編碼方式。所以,不同商家的閃存特性存在差異。

如上圖所示,先看左邊(a)部分,如果我們要讀取一個Block當中的某個Page,需要在其它所有Wordline控制極上加一個Vpass電壓,這樣保證了其它晶體管都是導通的;對被讀取的Page,需要在其所在Wordline的控制極上加參考電壓Vref,可能加一次參考電壓就能把數據讀出來,也可能需要幾次,具體做法如前面描述。

再看右半部分(b)。讀操作時,襯底加電壓是0,讀取的page,控制極上的電壓是Vref,而對其他Page,控制極上加的電壓是Vpass。問題來了,由於其他Page上加了一個Vpass,相對來說是一個比較大的電壓,這樣就會在浮柵極和襯底形成一個較強的電場,可能就把一些電子吸入浮柵極,有點輕微Program的意思。隨着該Block上Page數據讀的次數越來越多,無辜的page(沒有被讀到的)中的浮柵極電子進入越來越多,導致里面數據狀態發生變化,也就意味着數據出錯。

這就是Read Disturb。同一個block上page讀,自己沒事,導致其他沒有被讀的page數據出錯。

Read Disturb會導致浮柵極進入電子,跟Data Retention浮柵極電子流失不同。由於有額外的電子進入,會導致晶體管閾值電壓右移(Data Retention問題導致閾值電壓左移),如下圖所示:

由於晶體管閾值電壓偷偷的發生了變化(變大了),閃存內部邏輯如果還是按照之前的參考電壓加在控制極上,然后去判斷數據的話,肯定會發生誤判,也就是讀到錯誤的數據。 閾值電壓右移的速度,也就是Read Disturb影響數據的程度,一方面與你讀該Block上數據的次數有關,讀的越多,右移越多,影響越大,另一方,還跟你block的擦除次數有關,擦寫次數越多,絕緣效果越差,電子進入浮柵極就越容易,read Disturb的影響也就越大。

閃存使用者如何對付Read Disturb呢?

一般做法就是記錄每個Block讀的次數,趕在這個數值達到閾值(閃存廠家提供)之前,把block上所有的數據刷新一遍(讀出來,擦除,然后在寫回),或者把數據搬到別的地方。回到開頭那個問題,Read Disturb為什么會導致SSD性能下降?就是因為一個Block上的數據讀的次數太多了,固件需要趕在UECC出現之前,把整個Block數據刷新或者搬移,占用底層帶寬,導致Host讀寫性能下降。

還有人研究發現,減小Vpass可以緩解Read Disturb。因為Vpass變小,電場減弱,吸入電子的能力減弱,能緩解read Disturb影響。一方面,現在閃存廠商都沒有開放調Vpass電壓的接口給用戶;另一方面,過低的Vpass會導致讀失敗。該方法只能緩解,不能從源頭上杜絕Read Disturb的影響。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM