本發(fā)明關(guān)連于一種閃存裝置,特別是一種于控制邏輯錯(cuò)誤時(shí)重新配置存儲控制器的方法以及使用該方法的裝置。
背景技術(shù):
對于以現(xiàn)場可編程化邏輯門陣列(FPGA,Field-Programmable Gate Array)封裝的固態(tài)硬盤(SSD,Solid State Drive)儲存系統(tǒng)中的控制器,單粒子翻轉(zhuǎn)(SEU,Single Event Upset)是造成控制邏輯錯(cuò)誤的原因之一。單粒子翻轉(zhuǎn)是微電子裝置中的敏感裝置因?yàn)榘柗W踊蛴钪嫔渚€沖擊造成的狀態(tài)翻轉(zhuǎn)。因此,本發(fā)明提出一種于控制邏輯錯(cuò)誤時(shí)重新配置控制器中的邏輯的方法以及使用該方法的裝置,用以克服上述的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的實(shí)施例提出一種于控制邏輯錯(cuò)誤時(shí)重新配置存儲控制器的方法,由處理單元執(zhí)行,包含下列步驟。周期性詢問編碼器是否存儲控制器發(fā)生錯(cuò)誤。當(dāng)編碼器答復(fù)存儲控制器發(fā)生錯(cuò)誤時(shí),驅(qū)動(dòng)存儲控制器的固定區(qū)域中的重配置控制邏輯,用以重新程序化存儲控制器的整個(gè)可重配置區(qū)域,其中,可重配置區(qū)域以現(xiàn)場可編程化邏輯門陣列實(shí)施。
本發(fā)明的實(shí)施例提出一種于控制邏輯錯(cuò)誤時(shí)重新配置控制器的裝置,包含固定區(qū)域與可重配置區(qū)域。固定區(qū)域包含處理單元以及重配置控制邏輯。處理單元周期性詢問編碼器是否存儲控制器發(fā)生錯(cuò)誤。當(dāng)編碼器答復(fù)存儲控制器發(fā)生錯(cuò)誤時(shí),驅(qū)動(dòng)存儲控制器的固定區(qū)域中的重配置控制邏輯,用以重新程序化存儲控制器的整個(gè)可重配置區(qū)域??芍嘏渲脜^(qū)域以現(xiàn)場可編程化邏輯門陣列實(shí)施。
附圖說明
圖1系依據(jù)本發(fā)明實(shí)施例的固態(tài)硬盤儲存系統(tǒng)的系統(tǒng)架構(gòu)圖。
圖2系依據(jù)本發(fā)明實(shí)施例的閃存中的儲存單元示意圖。
圖3系依據(jù)本發(fā)明實(shí)施例的存儲控制器的邏輯分割示意圖。
圖4系依據(jù)本發(fā)明實(shí)施例的重新配置存儲控制器的方法流程圖。
圖5系依據(jù)本發(fā)明實(shí)施例的重新配置存儲控制器的方法流程圖。
圖6系依據(jù)本發(fā)明實(shí)施例的重新配置存儲控制器的方法流程圖。
圖7系依據(jù)本發(fā)明實(shí)施例的重新配置存儲控制器的方法流程圖。
符號說明
10 系統(tǒng); 110 處理單元;
120 只讀存儲器; 130 靜態(tài)隨機(jī)存取存儲器;
140 動(dòng)態(tài)隨機(jī)存取存儲器;
150 存取接口; 160 主裝置;
170 存取接口; 180 儲存單元;
210 存儲器單元陣列; 220 行解碼單元;
230 列編碼單元; 240 地址單元;
250 數(shù)據(jù)緩存器; 300a 可重配置區(qū)域;
300b 固定區(qū)域; 310 重配置控制邏輯;
S410~S480 方法步驟 S510~S520 方法步驟;
S610 方法步驟
具體實(shí)施方式
以下說明系為完成發(fā)明的較佳實(shí)現(xiàn)方式,其目的在于描述本發(fā)明的基本精神,但并不用以限定本發(fā)明。實(shí)際的發(fā)明內(nèi)容必須參考之后的權(quán)利要求范圍。
必須了解的是,使用于本說明書中的“包含”、“包括”等詞,系用以表示存在特定的技術(shù)特征、數(shù)值、方法步驟、作業(yè)處理、元件以及/或元件,但并不排除可加上更多的技術(shù)特征、數(shù)值、方法步驟、作業(yè)處理、元件、元件,或以上的任意組合。
于權(quán)利要求中使用如“第一”、“第二”、“第三”等詞系用來修飾權(quán)利要求中的元件,并非用來表示之間具有優(yōu)先權(quán)順序,先行關(guān)系,或者是一個(gè)元件先于另一個(gè)元件,或者是執(zhí)行方法步驟時(shí)的時(shí)間先后順序,僅用來區(qū)別具有相同名字的元件。
圖1系依據(jù)本發(fā)明實(shí)施例的固態(tài)硬盤儲存系統(tǒng)的系統(tǒng)架構(gòu)圖。固態(tài)硬盤儲存系統(tǒng)的系統(tǒng)架構(gòu)10中包含只讀存儲器120,儲存重新配置存儲控制器的信息。于此須注意的是,此信息也可備份在儲存單元180中。當(dāng)處理單元110執(zhí)行靜態(tài)隨機(jī)存取存儲器130的控制核心算法時(shí),根據(jù)主裝置160透過存取接口150發(fā)出的命令,寫入數(shù)據(jù)到儲存單元180中的指定地址,或者從儲存單元180中的指定地址讀取數(shù)據(jù)。詳細(xì)來說,處理單元110可透過存取接口170寫入數(shù)據(jù)到儲存單元180中的指定地址,以及從儲存單元180中的指定地址讀取數(shù)據(jù)。系統(tǒng)架構(gòu)10使用數(shù)個(gè)電子信號來協(xié)調(diào)處理單元110與儲存單元180間的數(shù)據(jù)與命令傳遞,包含數(shù)據(jù)線(data line)、頻率信號(clock signal)與控制信號(control signal)。數(shù)據(jù)線可用以傳遞命令、地址、讀出及寫入的數(shù)據(jù);控制信號線可用以傳遞芯片致能(chip enable,CE)、地址提取致能(address latch enable,ALE)、命令提取致能(command latch enable,CLE)、寫入致能(write enable,WE)等控制信號。存取接口170可采用雙倍數(shù)據(jù)率(double data rate,DDR)通訊協(xié)議與儲存單元180溝通,例如,開放NAND快閃(open NAND flash interface,ONFI)、雙倍數(shù)據(jù)率開關(guān)(DDR toggle)或其它接口。處理單元110另可使用存取接口150透過指定通訊協(xié)議與主裝置160進(jìn)行溝通,例如,通用序列總線(universal serial bus,USB)、先進(jìn)技術(shù)附著(advanced technology attachment,ATA)、序列先進(jìn)技術(shù)附著(serial advanced technology attachment,SATA)、快速周邊組件互聯(lián)(peripheral component interconnect express,PCI-E)或其它接口。處理單元110、只讀存儲器120、靜態(tài)隨機(jī)存取存儲器130、存取接口150及170可統(tǒng)稱為一個(gè)存儲控制器(storage controller)。
圖2系依據(jù)本發(fā)明實(shí)施例的閃存中的儲存單元示意圖。儲存單元180可包含由MxN個(gè)存儲器單元(memory cells)組成的陣列(array)210,而每一個(gè)存儲器單元儲存至少一個(gè)位(bit)的信息。閃存可以是NAND型閃存,或其它種類的閃存。為了正確存取信息,行解碼單元220用以選擇存儲器單元陣列210中指定 的行,而列編碼單元230用以選擇指定行中一定數(shù)量的字節(jié)的數(shù)據(jù)作為輸出。地址單元240提供行信息給行解碼器220,其中定義了選擇存儲器單元陣列210中的那些行。相似地,列解碼器230則根據(jù)地址單元240提供的列信息,選擇存儲器單元陣列210的指定行中一定數(shù)量的列進(jìn)行讀取或?qū)懭氩僮?。行可稱為為字符線(wordline),列可稱為位線(bitline)。數(shù)據(jù)緩存器(data buffer)250可儲存從存儲器單元陣列210讀取出的數(shù)據(jù),或欲寫入存儲器單元陣列210中的數(shù)據(jù)。存儲器單元可為單層式單元(single-level cells,SLCs)、多層式單元(multi-level cells,MLCs)或三層式單元(triple-level cells,TLCs)。
圖3系依據(jù)本發(fā)明實(shí)施例的存儲控制器的邏輯分割示意圖。存儲控制器可包含可重配置區(qū)域(reconfigurable region)130a及固定區(qū)域(fixed region)300b。固定區(qū)域300b可包含輸出入控制邏輯(I/O control logic)、主裝置通訊邏輯(master-device communications logic)及重配置控制邏輯(re-configuration control logic)310等。固定區(qū)域300b另可包含處理單元110的運(yùn)算邏輯單元,用以依據(jù)加載的韌體進(jìn)行數(shù)學(xué)運(yùn)算以及控制其它元件。例如,輸出入控制邏輯包含對只讀存儲器120以及靜態(tài)隨機(jī)存取存儲器130等的輸出入控制。主裝置通訊邏輯可實(shí)施于存取接口150。固定區(qū)域300b中的邏輯不能重新配置??芍嘏渲脜^(qū)域300a以現(xiàn)場可編程化邏輯門陣列實(shí)施??芍嘏渲脜^(qū)域300a包含固態(tài)硬盤儲存系統(tǒng)的控制核心算法,可占超過存儲控制器的90%空間。可重配置區(qū)域300a包含可編程化邏輯區(qū)塊的陣列及階層式可重新組態(tài)的相互連結(jié),使得區(qū)塊與區(qū)塊可連接在一起,例如,數(shù)個(gè)邏輯閘可依據(jù)不同組態(tài)相互連接在一起。一些邏輯區(qū)塊可組態(tài)來執(zhí)行復(fù)雜的綜合性功能,或者是簡單的邏輯閘,例如與門(AND)、或門(OR)、互斥或門(XOR)等。一些邏輯區(qū)塊可包含存儲元件,由簡單的正反器(flip-flops)或完整的記憶塊組成??芍嘏渲脜^(qū)域300a中的控制核心算法以及固定區(qū)域300b中的邏輯可組織成數(shù)個(gè)碼區(qū)段(code segments),并在每一個(gè)碼區(qū)段加上循環(huán)冗余校驗(yàn)碼(CRC-Cyclic Redundancy Check)進(jìn)行保護(hù)。解碼單元可使用循環(huán)冗余校驗(yàn)碼檢查存儲控制器中的控制核心算法及邏輯是否發(fā)生錯(cuò)誤,并且當(dāng)錯(cuò)誤發(fā)生時(shí)嘗試修正其中的錯(cuò)誤。然而,當(dāng)控制核心算法及邏輯無法修復(fù)時(shí)(亦可稱為控制邏輯錯(cuò)誤),需要執(zhí)行一個(gè)方法,用以重新配置存儲控制器??刂七壿嬪e(cuò)誤也可以代表存儲控制器發(fā)生錯(cuò)誤。
于一種實(shí)施方式中,存儲控制器可偵測可重配置區(qū)域300a的哪個(gè)部份發(fā)生不可恢復(fù)的錯(cuò)誤,接著,僅重新組態(tài)發(fā)生錯(cuò)誤的部分。為完成此偵測需要實(shí)施特定的硬件電路以及/或軟件指令?;蛘呤牵枰ㄙM(fèi)額外的時(shí)間來完成此偵測,在主裝置160所發(fā)出的命令逾時(shí)前,可能造成來不及完成重新組態(tài)以及處理此命令。于另一種實(shí)施方式,存儲控制器可重新組態(tài)整個(gè)可重配置區(qū)域300a而不進(jìn)行如上所述的偵測。圖4系依據(jù)本發(fā)明實(shí)施例的重新配置存儲控制器的方法流程圖。本領(lǐng)域技術(shù)人員理解當(dāng)存儲控制器接收到主裝置160所發(fā)出的命令時(shí),使用控制核心算法來驅(qū)動(dòng)存取接口170,用以完成此命令,例如數(shù)據(jù)讀取命令、數(shù)據(jù)寫入命令等。在使用控制核心算法前,解碼單元需要先檢查存儲控制器中的控制核心算法及邏輯是否正確。當(dāng)解碼單元無法修復(fù)于存儲控制器的控制核心算法及邏輯中發(fā)生的錯(cuò)誤時(shí),可發(fā)出最高優(yōu)先權(quán)的中斷給處理單元110。當(dāng)處理單元110接收到中斷后(步驟S410),暫停存取(步驟S420)。換句話說,處理單元110并不使用包含無法恢復(fù)錯(cuò)誤的控制核心算法來驅(qū)動(dòng)存取接口170。接著,儲存目前的執(zhí)行狀態(tài)(例如,執(zhí)行變量值,尚未寫入儲存單元180的數(shù)據(jù),已讀取但尚未答復(fù)給主裝置160的數(shù)據(jù)等)于動(dòng)態(tài)隨機(jī)存取存儲器140(步驟S430)。詳細(xì)來說,于步驟S430,處理單元110驅(qū)動(dòng)輸出入控制邏輯儲存目前的執(zhí)行狀態(tài)至動(dòng)態(tài)隨機(jī)存取存儲器140。處理單元110驅(qū)動(dòng)重配置控制邏輯310的開始執(zhí)行重配置作業(yè),用以重新程序化整個(gè)可重配置區(qū)域300a(步驟S440)。詳細(xì)來說,重配置控制邏輯310透過輸出入控制邏輯驅(qū)動(dòng)讀取只讀存儲器120中儲存的信息,例如使用硬件描述語言(HDL,Hardware Description Language)撰寫的指令、邏輯區(qū)塊間相互連接的對照表等,并根據(jù)此信息來重新程序化整個(gè)可重配置區(qū)域300a。接著,反復(fù)執(zhí)行一個(gè)循環(huán),用以詢問重配置控制邏輯310重配置作業(yè)是否完成(步驟S450)。當(dāng)重配置控制邏輯310回復(fù)重配置作業(yè)完成的消息后(步驟S450中”是”的路徑),處理單元110啟動(dòng)整個(gè)存儲控制器的再初始化作業(yè)(re-initiation operation),使得存儲控制器處于可用狀態(tài)(步驟S460)。接著,從動(dòng)態(tài)隨機(jī)存取存儲器140恢復(fù)(restore)執(zhí)行狀態(tài)(步驟S470),以及根據(jù)恢復(fù)的執(zhí)行狀態(tài)恢復(fù)存取(resume access)(步驟S480)。透過以上的方法,尚未執(zhí)行完的操作可以從斷點(diǎn)繼續(xù)執(zhí)行。存儲控制器僅在短暫的時(shí)間(少于1秒)失效,重配置之后則恢復(fù)正常。
圖5系依據(jù)本發(fā)明實(shí)施例的重新配置存儲控制器的方法流程圖。當(dāng)暫停存取后(步驟S420),完成當(dāng)前管道(pipeline)中操作(步驟S510)。當(dāng)完成當(dāng)前管道(pipeline)中操作后(步驟S510),處理單元110驅(qū)動(dòng)重配置控制邏輯310的開始執(zhí)行重配置作業(yè),用以重新程序化整個(gè)可重配置區(qū)域300a(步驟S440)。接著,當(dāng)處理單元110啟動(dòng)整個(gè)存儲控制器的再初始化作業(yè),使得存儲控制器處于可用狀態(tài)后(步驟S460),恢復(fù)存取(步驟S520)。步驟S410、S420、S440、S450、S460的詳細(xì)技術(shù)內(nèi)容請參考圖4的說明,為求簡潔不再贅述。
關(guān)于如何判斷上述存儲控制器發(fā)生錯(cuò)誤,請參考圖4及圖5描述的方法流程:一些實(shí)施例是透過中斷處理例程(interrupt handler)的機(jī)制偵測發(fā)生單粒子翻轉(zhuǎn)錯(cuò)誤(造成存儲控制器錯(cuò)誤),一旦接收到中斷,接著進(jìn)行重新組態(tài)。于一些實(shí)施例中,處理單元110也可周期性的詢問(polling)解碼單元是否發(fā)生單粒子翻轉(zhuǎn)錯(cuò)誤。一旦解碼單元答復(fù)發(fā)生單粒子翻轉(zhuǎn)錯(cuò)誤,則進(jìn)行重新組態(tài)。
圖6系依據(jù)本發(fā)明實(shí)施例的重新配置存儲控制器的方法流程圖。圖6的方法流程圖相似于圖4。然而,本領(lǐng)域技術(shù)人員可將圖4的步驟S410中的接收中斷修改為周期性詢問解碼單元是否發(fā)生存儲控制器錯(cuò)誤(步驟S610)。當(dāng)解碼單元答復(fù)發(fā)生控制邏輯錯(cuò)誤時(shí)(步驟S610中“是”的路徑),暫停存取(步驟S420)。為求說明書的簡潔,后續(xù)的步驟可參考圖4的說明,不再贅述。
圖7系依據(jù)本發(fā)明實(shí)施例的重新配置存儲控制器的方法流程圖。圖7的方法流程圖相似于圖5。然而,本領(lǐng)域技術(shù)人員可將圖5的步驟S410中的接收中斷修改為周期性詢問解碼單元是否發(fā)生存儲控制器錯(cuò)誤(步驟S610)。當(dāng)解碼單元答復(fù)發(fā)生控制邏輯錯(cuò)誤時(shí)(步驟S610中“是”的路徑),暫停存取(步驟S420)。為求說明書的簡潔,后續(xù)的步驟可參考圖5的說明,不再贅述。
雖然圖1中包含了以上描述的組件,但不排除在不違反發(fā)明的精神下,使用更多其它的附加元件,已達(dá)成更佳的技術(shù)效果。此外,雖然圖4至圖7的流程圖采用指定的順序來執(zhí)行,但是在不違反發(fā)明精神的情況下,本領(lǐng)域技術(shù)人員可以在達(dá)到相同效果的前提下,修改這些步驟間的順序,所以,本發(fā)明并不局限于僅使用如上所述的順序。此外,本領(lǐng)域技術(shù)人員亦可以將若干步驟整合為一個(gè)步驟,或者是除了這些步驟外,循序或平行地執(zhí)行更多步驟,本發(fā)明亦不因此而局限。
雖然本發(fā)明使用以上實(shí)施例進(jìn)行說明,但需要注意的是,這些描述并非用以限縮本發(fā)明。相反地,此發(fā)明涵蓋了本領(lǐng)域技術(shù)人員顯而易見的修改與相似設(shè)置。所以,申請權(quán)利要求范圍須以最寬廣的方式解釋來包含所有顯而易見的修改與相似設(shè)置。