張超,何衛(wèi)鋒
(上海交通大學(xué)微納電子學(xué)系,上海 200240)
NAND Flash由于存儲(chǔ)容量大,功耗低的特點(diǎn)被廣泛應(yīng)用于手機(jī)、數(shù)碼照相機(jī)、平板電腦等移動(dòng)設(shè)備中[1]。新型NAND Flash采用MLC、TLC等多比特存儲(chǔ)技術(shù)提升NAND Flash的存儲(chǔ)容量,但同時(shí)其數(shù)據(jù)出錯(cuò)率也會(huì)隨之升高[2]。目前,NAND Flash已使用BCH碼的糾錯(cuò)編碼技術(shù)來降低數(shù)據(jù)出錯(cuò)率,而低密度奇偶校驗(yàn)碼(Low-Density Parity-Check Codes,LDPC)碼可借助信道軟信息進(jìn)行軟判決譯碼,相比BCH碼擁有更好的糾錯(cuò)性能,被視為是未來更適用于NAND Flash的數(shù)據(jù)編碼方式之一[3]。
LDPC碼的軟判決譯碼是通過信息的反復(fù)迭代計(jì)算來完成的,譯碼所需的迭代周期不固定,迭代周期越長,譯碼處理的時(shí)間也越長。為了使得任何迭代周期下譯碼器的處理速度都能滿足實(shí)時(shí)處理的性能要求,已有的譯碼器設(shè)計(jì)方案[4-6]將譯碼器的時(shí)鐘頻率和工作電壓固定為最大迭代周期所需的時(shí)鐘頻率和工作電壓。這樣做的問題是當(dāng)譯碼迭代次數(shù)小于最大迭代次數(shù)時(shí),譯碼器的工作頻率和電壓會(huì)大于實(shí)際需求,帶來額外的功耗開銷,不適用于NAND Flash這類對(duì)功耗和能效有較高要求的應(yīng)用場(chǎng)景。
針對(duì)LDPC譯碼迭代周期可變的特點(diǎn),本文設(shè)計(jì)并實(shí)現(xiàn)了一款帶有自適應(yīng)電壓頻率調(diào)節(jié)機(jī)制(Adaptive Voltage and Frequency Scaling,AVFS)的高能效LDPC譯碼器,該系統(tǒng)能夠?qū)崟r(shí)監(jiān)測(cè)譯碼器中輸入FIFO的使用情況,并據(jù)此動(dòng)態(tài)調(diào)節(jié)LDPC譯碼器的時(shí)鐘頻率和工作電壓,達(dá)到降低能耗開銷、提高處理能效的目的。
準(zhǔn)循環(huán)低密度奇偶校驗(yàn)碼(Quasi-Cyclic Low-Density Parity-Check Codes,QC-LDPC)碼[7]是LDPC碼的重要分支,它具有準(zhǔn)循環(huán)的特殊結(jié)構(gòu),利于編解碼的硬件實(shí)現(xiàn)。對(duì)一個(gè)碼長為N×Z,信息位長度為(N-M)×Z的QC-LDPC碼來說,校驗(yàn)矩陣H可由M行N列的基矩陣P、Z行Z列的單位矩陣I和零矩陣擴(kuò)展而來。公式(1)中P矩陣的每個(gè)元素pi,j代表移位系數(shù)。公式(2)中校驗(yàn)矩陣H中的每一個(gè)元素I(pi,j)代表單位矩陣I循環(huán)右移pi,j位后的矩陣,特殊情況下當(dāng)pi,j為-1時(shí)代表該位置填充和單位矩陣同樣大小的零矩陣。
(1)
(2)
分層標(biāo)準(zhǔn)最小和算法[8](Layered Normalized Min-Sum Algorithm,LNMSA)按層對(duì)變量節(jié)點(diǎn)和校驗(yàn)節(jié)點(diǎn)進(jìn)行信息更新,最終根據(jù)后驗(yàn)信息輸出硬判決碼字,每一層對(duì)應(yīng)QC-LDPC碼基矩陣P的一行,包含相同校驗(yàn)節(jié)點(diǎn)個(gè)數(shù),當(dāng)一層的校驗(yàn)信息更新結(jié)束后立即更新后驗(yàn)信息用于下一層信息更新。設(shè)Bj為后驗(yàn)信息,它代表信道軟信息,初始值是一個(gè)對(duì)數(shù)似然比,來自于信道本身。設(shè)Cij為從變量節(jié)點(diǎn)j傳遞到校驗(yàn)節(jié)點(diǎn)i的信息,Vij為從校驗(yàn)節(jié)點(diǎn)i傳遞到變量節(jié)點(diǎn)j的信,Zj為硬判決輸出碼字。此外 N(i) 表示和校驗(yàn)節(jié)點(diǎn)i相連的所有變量節(jié)點(diǎn)集合,α是一常數(shù),通常取0.75。譯碼的整體過程可分為信息初始化、變量節(jié)點(diǎn)更新、校驗(yàn)節(jié)點(diǎn)更新、譯碼檢測(cè)4個(gè)步驟:
步驟1 信息初始化:
(3)
步驟2 變量節(jié)點(diǎn)更新:
Vij=Bj-Cij(4)
步驟3 校驗(yàn)節(jié)點(diǎn)更新:
(5)
(6)
Bj=Cij+Vij
(7)
min和submin分別代表最小值和次最小值,min position代表最小值所處的列號(hào)。
步驟4 譯碼檢測(cè):
(8)
R=H×Zj
(9)
如果R不為0代表譯碼不成功,則重復(fù)步驟2和步驟3重新更新變量節(jié)點(diǎn)和校驗(yàn)節(jié)點(diǎn)直至譯碼成功或到達(dá)最大迭代次數(shù)。
本節(jié)將基于分層標(biāo)準(zhǔn)最小和譯碼算法,針對(duì)碼率為8/9,碼長為9216的LDPC碼,設(shè)計(jì)一種帶有AVFS調(diào)節(jié)機(jī)制的LDPC譯碼器。
如圖1所示,整個(gè)帶AVFS的LDPC譯碼系統(tǒng)由電壓時(shí)鐘供給電路、主電路以及外部數(shù)據(jù)接口三部分組成。首先,電壓時(shí)鐘供給電路包含DC-DC轉(zhuǎn)換器和自適應(yīng)時(shí)鐘發(fā)生器,負(fù)責(zé)向主電路提供電壓和時(shí)鐘源。前者可輸出可變電壓,調(diào)壓范圍為0.7V~1.0V,調(diào)節(jié)步長為0.1V,而后者能夠接收可變電壓輸出不同頻率的時(shí)鐘信號(hào)。其次,主電路由AVFS有限狀態(tài)機(jī)和LDPC譯碼器構(gòu)成。AVFS有限狀態(tài)機(jī)可根據(jù)一定規(guī)則控制DC-DC轉(zhuǎn)換器調(diào)節(jié)譯碼系統(tǒng)的工作電壓。最后,兩個(gè)異步FIFO組成了譯碼器和外部電路的數(shù)據(jù)接口,其中一個(gè)異步FIFO用于存儲(chǔ)譯碼器的輸出碼字,另一FIFO用于接收信道軟信息和反饋當(dāng)前自身的使用情況給AVFS狀態(tài)機(jī)。本文中,F(xiàn)IFO的使用情況用FIFO的剩余深度作為指標(biāo)來衡量,它指的是FIFO中已經(jīng)寫入的數(shù)據(jù)量和讀出的數(shù)據(jù)量之差。整體電路可劃分為兩個(gè)時(shí)鐘域,輸出FIFO的讀時(shí)鐘和存有軟信息的FIFO的寫時(shí)鐘共用同一時(shí)鐘,固定為200MHz,模擬外部電路固定的時(shí)鐘頻率,其余電路共用另一時(shí)鐘(Global Clk),該時(shí)鐘頻率可根據(jù)AVFS機(jī)制調(diào)節(jié)。
圖1 帶AVFS的LDPC譯碼系統(tǒng)結(jié)構(gòu)
AVFS的電壓頻率調(diào)節(jié)機(jī)制如下所述:AVFS狀態(tài)機(jī)在每次譯碼迭代開始前根據(jù)當(dāng)前的譯碼器工作信息(已執(zhí)行的譯碼迭代次數(shù)、譯碼是否已成功、當(dāng)前頻率檔位)計(jì)算出一個(gè)預(yù)期的輸入FIFO剩余深度并與當(dāng)前的實(shí)際剩余深度進(jìn)行比較,根據(jù)結(jié)果挑選下一個(gè)工作電壓點(diǎn),控制DC-DC變換器完成電壓調(diào)節(jié)。自適應(yīng)時(shí)鐘發(fā)生器再根據(jù)不同的電壓產(chǎn)生不同頻率的時(shí)鐘信號(hào),至此完成一次電壓頻率調(diào)節(jié)。
圖2展示了詳細(xì)的AVFS調(diào)節(jié)流程圖,每次譯碼迭代開始前當(dāng)FIFO的剩余深度超出預(yù)期值時(shí),代表譯碼處理速率小于軟信息輸入速率,AVFS狀態(tài)機(jī)就會(huì)提升譯碼器的工作電壓和頻率,反之則會(huì)降低工作電壓和頻率。此外當(dāng)譯碼結(jié)束后,如果下一組待譯碼軟信息還未完全載入至FIFO中,AVFS狀態(tài)機(jī)也會(huì)降低當(dāng)前的工作電壓和頻率減小譯碼器空閑期間的靜態(tài)功耗。綜上所述,AVFS調(diào)節(jié)機(jī)制會(huì)使得譯碼處理時(shí)間和輸入一組軟信息的時(shí)間更加匹配,在滿足性能需求的同時(shí)達(dá)到降低功耗開銷,提高處理能效的目的。
圖2 AVFS調(diào)節(jié)流程圖
圖3展示了RBER為6.5×10-3時(shí)AVFS系統(tǒng)工作的具體實(shí)例。本文所設(shè)計(jì)的譯碼器每經(jīng)1152個(gè)時(shí)鐘周期可向FIFO寫入一組待譯碼軟信息,當(dāng)輸入FIFO的剩余深度為1152時(shí)代表一組軟信息準(zhǔn)備就緒并可載入至譯碼器進(jìn)行譯碼,這一載入過程在圖中表現(xiàn)為FIFO剩余深度的下降。理想情況下,譯碼器進(jìn)行一次譯碼處理的時(shí)間和輸入一組軟信息的時(shí)間相同,F(xiàn)IFO的剩余深度應(yīng)當(dāng)總是不高于1152。然而隨著碼字的比特錯(cuò)誤類型不斷變化,當(dāng)出現(xiàn)較難糾正的錯(cuò)誤時(shí),譯碼所需的迭代次數(shù)就會(huì)增多,在時(shí)鐘頻率不變的情況下,譯碼的處理時(shí)間會(huì)大于輸入下一組軟信息的時(shí)間,F(xiàn)IFO不得不在譯碼器處理期間繼續(xù)接收新的數(shù)據(jù),可以看到此時(shí)剩余深度會(huì)超越1152,出現(xiàn)接近1500的高峰,這時(shí)AVFS系統(tǒng)就會(huì)提高工作頻率加快譯碼處理速率,圖中所示的時(shí)鐘頻率提升至272MHz就對(duì)應(yīng)這一過程。于此同時(shí),在之后一段時(shí)間內(nèi)如果譯碼迭代次數(shù)不再維持在高值時(shí),時(shí)鐘頻率會(huì)被降低以節(jié)省功耗。
圖3 輸入FIFO剩余深度變化與時(shí)鐘頻率調(diào)節(jié)
本節(jié)將對(duì)譯碼系統(tǒng)主電路中的LDPC譯碼器進(jìn)行結(jié)構(gòu)設(shè)計(jì),圖4為LDPC譯碼器的電路結(jié)構(gòu),主要由并行度為128的BNU和CNU處理單元、譯碼檢測(cè)器和存儲(chǔ)器三部分構(gòu)成。傳統(tǒng)譯碼器設(shè)計(jì)中的循環(huán)移位模塊被集成到對(duì)變量節(jié)點(diǎn)存儲(chǔ)器的讀寫控制器中。譯碼器在工作時(shí),首先將輸入FIFO中的軟信息載入到V node Memory中,然后依靠BNU和CNU處理單元完成迭代譯碼,期間會(huì)將后驗(yàn)信息輸出給檢測(cè)器,并將硬判決碼字寫入輸出FIFO,如果檢測(cè)器檢測(cè)譯碼成功,則會(huì)將碼字從輸出FIFO中讀出并拉高數(shù)據(jù)有效信號(hào)Valid指示外部接收電路接收碼字。
圖4 LDPC譯碼器結(jié)構(gòu)圖
存儲(chǔ)器包含變量節(jié)點(diǎn)存儲(chǔ)器(V Node Message Memory)、符號(hào)存儲(chǔ)器(Sign Memory)和最小值存儲(chǔ)器(Min Memory)。變量節(jié)點(diǎn)存儲(chǔ)器存儲(chǔ)的是變量節(jié)點(diǎn)信息。符號(hào)存儲(chǔ)器存儲(chǔ)的是變量節(jié)點(diǎn)的符號(hào)位。最小值存儲(chǔ)器存儲(chǔ)的是變量節(jié)點(diǎn)絕對(duì)值的最小值、次最小值、最小值的位置以及所有變量節(jié)點(diǎn)符號(hào)位連乘的結(jié)果。
圖5 BNU單元電路結(jié)構(gòu)
處理電路包含BNU、CNU和檢測(cè)器三部分。BNU處理單元的結(jié)構(gòu)如圖5所示,它可以根據(jù)公式(5)(6)恢復(fù)出校驗(yàn)節(jié)點(diǎn),然后利用公式(7)將變量節(jié)點(diǎn)與校驗(yàn)節(jié)點(diǎn)相加得到后驗(yàn)信息。CNU處理單元的電路結(jié)構(gòu)如圖6所示,它先是根據(jù)公式(4)將后驗(yàn)信息與恢復(fù)出的校驗(yàn)節(jié)點(diǎn)相減得到變量節(jié)點(diǎn),然后根據(jù)公式(5)計(jì)算新的校驗(yàn)節(jié)點(diǎn)。檢測(cè)器完成的是公式(8)(9)的功能,它能夠輸出硬判決碼字至FIFO中并檢測(cè)碼字是否已正確。
圖6 CNU單元電路結(jié)構(gòu)
自適應(yīng)時(shí)鐘發(fā)生器主要由扇出為4的反相器鏈和16分頻電路構(gòu)成。當(dāng)START信號(hào)由0變?yōu)?時(shí),反相器鏈開始振蕩并產(chǎn)生環(huán)振時(shí)鐘信號(hào)。為了使得不同PVT條件下自適應(yīng)時(shí)鐘發(fā)生器都能產(chǎn)生譯碼器所需要的時(shí)鐘頻率,環(huán)振時(shí)鐘的頻率需要具有一定的可配性便于硅后校準(zhǔn),因此電路中設(shè)有3比特的選擇信號(hào),可將反相器鏈配置為10、12、14、16、18、22、26或30級(jí)。后接的16分頻電路主要是為了降低環(huán)振時(shí)鐘頻率滿足譯碼電路需求,同時(shí)使得時(shí)鐘的占空比更貼近50%。
圖7 自適應(yīng)時(shí)鐘電路結(jié)構(gòu)
自適應(yīng)時(shí)鐘發(fā)生器在AVFS系統(tǒng)中的作用是接收DC-DC 變換器輸出的可變電壓,改變反相器鏈延時(shí),從而輸出不同頻率的時(shí)鐘。因此AVFS系統(tǒng)只需改變DC-DC變換器的輸出電壓即可同時(shí)完成電壓和頻率調(diào)節(jié)。需要注意的是在調(diào)壓還未結(jié)束時(shí),需要利用門控時(shí)鐘短時(shí)地關(guān)閉時(shí)鐘信號(hào),避免高電平上沖或者下沖引起電路功能出錯(cuò)。
為了證明所設(shè)計(jì)的自適應(yīng)時(shí)鐘發(fā)生器能夠滿足譯碼器的頻率需求,在最大譯碼迭代次數(shù)設(shè)定為4次的情況下,本文先是根據(jù)1、2、3、4四種迭代周期和輸入一組軟信息的固定時(shí)間計(jì)算出不同迭代周期所需的目標(biāo)時(shí)鐘頻率,如表1中第二列所示,分別為76MHz、141MHz、204MHz和270MHz。然后再對(duì)自適應(yīng)時(shí)鐘發(fā)生器在各電壓下進(jìn)行電路仿真,測(cè)得實(shí)際輸出的時(shí)鐘頻率,并與目標(biāo)時(shí)鐘頻率做比較。表1中的第三列展示了自適應(yīng)時(shí)鐘發(fā)生器在4種電壓下可輸出的不同時(shí)鐘頻率,其中工藝角、環(huán)境溫度、反相器鏈長度分別設(shè)置為TT、25℃和16級(jí)??梢钥吹剑赃m應(yīng)時(shí)鐘發(fā)生器在各電壓產(chǎn)生的頻率均大于目標(biāo)工作頻率,能夠滿足譯碼器需求。
表1 自適應(yīng)時(shí)鐘發(fā)生器頻率電壓表
本文提出的LDPC譯碼器在TSMC 28nm工藝下進(jìn)行了電路邏輯綜合。譯碼器在AVFS調(diào)節(jié)機(jī)制下共有4種工作電壓和頻率,表2展示了工作電壓固定為不同值時(shí)譯碼器的運(yùn)行功耗。為了測(cè)定工作電壓可變時(shí)譯碼器的運(yùn)行功耗,本文在不同信道噪聲下對(duì)10000組軟信息進(jìn)行譯碼測(cè)定運(yùn)行功耗和吞吐率。圖10展示了不同RBER下應(yīng)用AVFS調(diào)節(jié)機(jī)制后譯碼的吞吐率和平均功耗,圖中將吞吐率和功耗歸一化到不應(yīng)用AVFS時(shí)的吞吐率和功耗??梢钥吹皆诟鱎BER下吞吐率僅有1%左右的損失,而功耗卻能有24.7%-61.4%的降低,能效可提升至原來的1.3-2.5倍,因此證明AVFS調(diào)節(jié)機(jī)制能夠有效降低譯碼器功耗開銷,提高處理能效。
表2 LDPC譯碼器在各電壓頻率點(diǎn)的運(yùn)行功耗
表3展示了各譯碼器的性能參數(shù)。由于碼長越長,譯碼器的功耗和面積都會(huì)近似線性增長,為了公平對(duì)比,將其他設(shè)計(jì)的譯碼器功耗和面積都線性歸一化到本文9216比特碼長對(duì)應(yīng)的功耗和面積,同時(shí)再將面積根據(jù)不同工藝歸一化到28nm工藝對(duì)應(yīng)的面積。結(jié)果顯示當(dāng)RBER高達(dá)1.11×10-2時(shí),本文的譯碼器電路功耗為50.5mW,能效為31.3bit/nJ,與其他設(shè)計(jì)相比有著顯著的能效優(yōu)勢(shì)。
圖8 應(yīng)用AVFS后各RBER下譯碼器的功耗和吞吐率
表3 各譯碼器性能對(duì)比表
本文針對(duì)LDPC譯碼迭代周期動(dòng)態(tài)可變的特點(diǎn),設(shè)計(jì)了一款帶自適應(yīng)電壓頻率調(diào)節(jié)的高能效LDPC譯碼器。相較傳統(tǒng)固定工作電壓和頻率的譯碼器結(jié)構(gòu),本文的LDPC譯碼器的功耗降低了24.7%-61.4%,能效提升1.3-2.5倍。下一步將再結(jié)合門控電壓源、多閾值電壓技術(shù)等低功耗數(shù)字電路設(shè)計(jì)方法對(duì)譯碼器的功耗做進(jìn)一步優(yōu)化。