文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.170744
中文引用格式: 張洪柳,張春. 一種可編程多路閃存控制器的設(shè)計(jì)與驗(yàn)證[J].電子技術(shù)應(yīng)用,2017,43(9):39-42.
英文引用格式: Zhang Hongliu,Zhang Chun. Design and verification method of one programmable multi-channel NAND Flash controller[J].Application of Electronic Technique,2017,43(9):39-42.
0 引言
固態(tài)硬盤相對于傳統(tǒng)機(jī)械硬盤,憑借其高讀寫性能、低功耗、低噪音、體積小、抗震性強(qiáng)等諸多優(yōu)點(diǎn),近年來在消費(fèi)類電子、軍工、航空航天等領(lǐng)域得到迅猛發(fā)展,并不斷搶占機(jī)械硬盤的原有市場份額。
固態(tài)硬盤主要由主控芯片、閃存芯片和DRAM緩存芯片組成。主控芯片作為固態(tài)硬盤的核心器件,其好壞優(yōu)劣直接決定固態(tài)硬盤產(chǎn)品的性能和可靠性;閃存芯片目前主流應(yīng)用的是15/16 nm的MLC顆粒,雖然存儲(chǔ)容量單顆可達(dá)128 Gb,接口性能可達(dá)400 MB/s,但數(shù)據(jù)保存性能較差,需要主控芯片具有極強(qiáng)的數(shù)據(jù)糾錯(cuò)能力,同時(shí)配合主控芯片中的FTL(Flash Translation Layer)固件進(jìn)行磨損均衡調(diào)度,以保證固態(tài)硬盤的整體壽命。
固態(tài)硬盤主控芯片早期主要以PATA為接口,經(jīng)過多年的市場發(fā)展已經(jīng)逐步升級為USB3.0(5 Gb/s)/SATAIII(6 Gb/s)接口,甚至在企業(yè)級已經(jīng)升級為PCIE3.0(8 Gb/s)接口,單盤容量最大可支持8 TB。而閃存單顆粒無論是接口速度還是容量,都無法滿足固態(tài)硬盤的整體需求,一般都是通過一顆主控加上多顆閃存陣列的方案實(shí)現(xiàn)。閃存控制器作為固態(tài)硬盤主控的關(guān)鍵模塊,其兼容性、糾錯(cuò)能力、吞吐量、閃存陣列組合方式等特性,往往決定了最終固態(tài)硬盤產(chǎn)品的成本、性能及穩(wěn)定性。本文所設(shè)計(jì)的閃存控制器可支持4路閃存通路,共支持4×8片閃存片選,最大容量可支持512 GB,支持更大容量可集成多個(gè)閃存控制器;在110 nm工藝下,閃存控制器接口速率可達(dá)4×200 MB/s,在55/40 nm工藝下,速率可達(dá)4×400 MB/s;在兼容性方面,本文閃存控制器提出了一種可編程的命令編碼方式,可有效保證對閃存各個(gè)廠商命令層的支持。
1 閃存控制器總體架構(gòu)
1.1 總體架構(gòu)
本文閃存控制器對外接口主要包括一個(gè)AHB[1]配置從端口、一個(gè)AHB數(shù)據(jù)從端口和4路閃存主機(jī)端口,每路閃存端口可外掛8片F(xiàn)lash片選[2]。如圖1所示。
閃存控制器只包含一個(gè)寄存器配置模塊,用于控制4路通路的數(shù)據(jù)傳輸并反映當(dāng)前狀態(tài)。4路通路模塊共用一個(gè)AHB數(shù)據(jù)從端口,AHB數(shù)據(jù)從端口通過地址譯碼產(chǎn)生選擇信號,分別對4路通路進(jìn)行數(shù)據(jù)讀寫,通過共用AHB數(shù)據(jù)端口,可降低芯片頂層集成的繁瑣程度,降低出錯(cuò)概率,便于驗(yàn)證,且不影響數(shù)據(jù)傳輸帶寬。4路通路模塊共用一個(gè)ECC解碼模塊,ECC解碼模塊數(shù)據(jù)輸入輸出位寬為32位,保證與4路閃存8位端口總位寬相一致,出于面積方面考慮,與4個(gè)8位寬的ECC解碼模塊相比,采用32 bit位寬可通過優(yōu)化算法和DC綜合等方法有效降低閃存控制器整體面積。
1.2 單通路模塊架構(gòu)
單通路模塊是整個(gè)閃存控制器的核心模塊,包含3個(gè)時(shí)鐘:AHB_CLK,NFC_CLK,NAND_CLK。所以按時(shí)鐘域可分為總線時(shí)鐘域、模塊時(shí)鐘域和閃存時(shí)鐘域。按照邏輯劃分可分為控制通路和數(shù)據(jù)通路,控制通路包括流程控制模塊、初始化模塊、地址生成模塊和指令控制模塊;數(shù)據(jù)通路包括數(shù)據(jù)控制模塊、加解擾模塊、取反模塊和閃存接口模塊,閃存控制器單通路模塊架構(gòu)如圖2所示。
2 設(shè)計(jì)實(shí)現(xiàn)
2.1 指令編碼
由于閃存業(yè)界分為兩大陣營,各自支持ONFI[3]和Toggle兩種不同協(xié)議,如果通過硬件實(shí)現(xiàn)命令層的傳輸控制,一旦閃存廠商協(xié)議升級或者變更,則會(huì)存在命令層不兼容的風(fēng)險(xiǎn),只有通過重新設(shè)計(jì)流片才能解決,這樣無疑會(huì)增加固態(tài)硬盤主控廠商的成本。
本文采用軟硬件結(jié)合的方式,提出了一種可編程的命令層實(shí)現(xiàn)方法,即CPU根據(jù)指令集格式進(jìn)行命令碼編程,寫入閃存控制器內(nèi)部指令SRAM中,閃存控制器根據(jù)指令SRAM中的指令進(jìn)行閃存顆粒的讀寫、擦除等操作,如果需要重復(fù)操作,CPU無需再次寫入,直接配置閃存控制器執(zhí)行上次操作即可。
2.1.1 指令集格式
指令集共包含4條指令:控制指令、地址指令、命令指令和數(shù)據(jù)指令,如表1所示。
控制指令一般作為一個(gè)命令層操作的起始指令,指令標(biāo)志為0xf,ce_num代表當(dāng)前操作的閃存片選,i代表操作完成后是否報(bào)告中斷,byte2和byte1保留,byte0代表當(dāng)前命令層操作總的word個(gè)數(shù)。
地址指令指令標(biāo)志為0x1,vn代表當(dāng)前指令有效地址個(gè)數(shù),byte0-2分別代表當(dāng)前操作的地址,比如閃存列地址為2個(gè)byte,則vn為2,byte0和byte1有效。
命令指令包含閃存spec定義的標(biāo)準(zhǔn)命令和自定義用戶命令,指令標(biāo)志為0x2,su代表當(dāng)前是spec命令還是用戶命令,command_code當(dāng)su為1時(shí)由CPU寫入閃存標(biāo)準(zhǔn)命令,當(dāng)su為0時(shí),由CPU寫入用戶命令。用戶命令主要用于滿足閃存命令間的一些時(shí)序參數(shù)及狀態(tài)操作,定義如表2。
數(shù)據(jù)指令主要包含系統(tǒng)數(shù)據(jù)和空閑區(qū)數(shù)據(jù)的讀寫操作,指令標(biāo)志為0x4,ms表示當(dāng)前是系統(tǒng)數(shù)據(jù)(main data)還是空閑區(qū)數(shù)據(jù)(spare data),rw代表讀寫操作,sector_count表示當(dāng)前操作數(shù)據(jù)塊的個(gè)數(shù)。
2.1.2 命令層編碼
軟件通過CPU將閃存控制器指令進(jìn)行編程后,形成一套閃存命令層編碼,可實(shí)現(xiàn)對閃存的讀寫擦除等各種操作。以閃存的擦除操作為例,如表3。
2.2 流程控制
流程控制模塊主要負(fù)責(zé)命令層編碼的取址、解析、執(zhí)行以及數(shù)據(jù)通路模塊的控制等操作。
流程控制模塊的狀態(tài)機(jī)如圖3所示。
其中初始化狀態(tài)主要負(fù)責(zé)檢測當(dāng)前閃存控制器外掛閃存的數(shù)量,通過輪詢單個(gè)閃存片選,發(fā)送復(fù)位指令后檢查閃存RB_n引腳狀態(tài),如果發(fā)送指令后檢測到RB_n信號線下降沿,則表示閃存外掛有效。CMDREC狀態(tài)主要記錄當(dāng)前CPU配置的命令層編碼起始地址及命令層有效個(gè)數(shù),如果執(zhí)行完一個(gè)命令層編碼后,需要在此狀態(tài)檢查命令層編碼的有效個(gè)數(shù),如果有效個(gè)數(shù)為0才能跳轉(zhuǎn)至IDLE狀態(tài)。
2.3 加解擾
由于MLC工藝越來越先進(jìn),閃存內(nèi)部單元間的干擾效應(yīng)(cell-cell-interference)越加明顯,如果一段數(shù)據(jù)全為0或者全為1,則會(huì)加劇該效應(yīng),以致超出ECC解碼模塊的糾錯(cuò)能力,所以需要將明文數(shù)據(jù)離散化后存入到閃存介質(zhì)中,最大化降低單元干擾效應(yīng)。
本文采用線性反饋的方式實(shí)現(xiàn)數(shù)據(jù)的離散化,如圖4。
3 驗(yàn)證方法
前仿真主要分為模塊級前仿真芯片級前仿真及系統(tǒng)級前仿真,系統(tǒng)級前仿真涉及技術(shù)層面太多,仿真效果精準(zhǔn)但仿真速度慢,往往花費(fèi)大量時(shí)間和人力,目前階段可實(shí)用性不強(qiáng),本文主要進(jìn)行了模塊級前仿真及芯片級前仿真。
3.1 模塊級前仿真
模塊級前仿真通過Verilog或者SystemVerilog[4]等硬件描述語言完成仿真平臺及閃存模型的實(shí)現(xiàn),主要針對閃存控制器的功能性及代碼覆蓋率進(jìn)行仿真,仿真速度快,覆蓋率高。如圖5所示。
ONFI接口讀取多個(gè)sector波形圖如圖6,Toggle接口讀取多個(gè)sector波形圖如圖7。
3.2 芯片級前仿真
芯片級前仿真主要基于SoC最小化平臺[5],通過C語言編寫ARM CPU的驅(qū)動(dòng)程序,對閃存控制器進(jìn)行典型應(yīng)用的激勵(lì)仿真,主要驗(yàn)證閃存控制器集成適用性及軟硬件結(jié)合的效率。芯片級驗(yàn)證平臺如圖8。閃存控制器讀取閃存數(shù)據(jù)波形如圖9,閃存控制器寫入閃存數(shù)據(jù)波形如圖10。
4 綜合結(jié)果
由于不同主控對閃存控制器的需求不同,集成參數(shù)不相同,最終的綜合結(jié)果也各不相同。本文中針對一般SATA類SSD主控的需求,后端綜合采用110 nm工藝庫,閃存控制器典型配置參數(shù)如下:
閃存通路數(shù):4
AHB接口位寬:32
閃存接口位寬:8
AHB_CLK/NFC_CLK:200 MHz
NAND_CLK:400 MHz
ECC糾錯(cuò)格式:1/8/16/24/40/60/72
線負(fù)載模型:enG1000K
綜合結(jié)果總門數(shù)約為1 030 K邏輯門,其中ECC解碼模塊占用490 K邏輯門,單路控制器門數(shù)約為135 K邏輯門。功耗情況如下:
單元內(nèi)部功耗:39.885 2 mW(89%)
線開關(guān)電源:4.929 6 mW(11%)
整體動(dòng)態(tài)功耗:44.814 9 mW(100%)
單元漏電功耗:3.574 6 mW
5 結(jié)論
本文根據(jù)固態(tài)硬盤主控芯片對閃存控制的操作需求,通過軟硬件結(jié)合可編程的方式,設(shè)計(jì)了一種高效且兼容性極強(qiáng)的專用固態(tài)硬盤閃存控制器。該控制器可覆蓋支持各類閃存廠商的操作命令,糾錯(cuò)能力能夠滿足不同工藝下閃存顆粒的需求,在支持容量、接口傳輸速率、電路面積、動(dòng)態(tài)功耗等方面也均可滿足固態(tài)硬盤主控芯片的要求,具有廣泛的應(yīng)用價(jià)值,并已成功應(yīng)用在固態(tài)硬盤設(shè)計(jì)中。
參考文獻(xiàn)
[1] ARM.AMBA@3 AHB-Lite Protocol V1.0 Specification.www.arm.com,2006.
[2] 陳宏銘,程玉華.針對固態(tài)硬盤應(yīng)用的多通路閃存控制器實(shí)現(xiàn)[J].中國集成電路,2012(1):37.
[3] Intel,Micron,Phison,et al.Open NAND Flash Interface Specification Revision 3.2.www.onfi.org,2013.
[4] Accellera,SystemVerilog 3.1a Language Reference Manual.www.accellera.org,2004.
[5] 張磊,李清江,聶洪山,等.基于SATA接口的固態(tài)硬盤設(shè)計(jì)[J].微處理機(jī),2011(4):77-78.
作者信息:
張洪柳,張 春
(清華大學(xué) 微電子學(xué)研究所,北京1000861)