朱文斌,劉春平,黃振
基于FPGA的高可靠性SDRAM控制器設(shè)計(jì)與實(shí)現(xiàn)?
朱文斌1,劉春平1,黃振2
(1.深圳大學(xué),廣東深圳518060;2.清華大學(xué)航天航空學(xué)院,北京100084)
為了實(shí)現(xiàn)空間電磁環(huán)境中數(shù)據(jù)緩存,提出了一種采用FPGA設(shè)計(jì)具有高可靠性的SDRAM控制器方案。該控制器采用自頂向下的模塊化設(shè)計(jì),包括頂層控制和底層驅(qū)動(dòng)兩層狀態(tài)機(jī),并且通過上電自校驗(yàn)和關(guān)鍵控制模塊三模冗余提高其可靠性。在此基礎(chǔ)上,完成了控制器的FPGA硬件實(shí)現(xiàn)和測試。測試結(jié)果表明,該設(shè)計(jì)方案具有很高可靠性和可移植性,對(duì)應(yīng)用于空間電磁環(huán)境中的數(shù)據(jù)緩存系統(tǒng)的工程實(shí)現(xiàn)具有指導(dǎo)意義。
空間電磁環(huán)境;數(shù)據(jù)緩存;SDRAM控制器;可靠性;三模冗余;自校驗(yàn)
在空間電磁環(huán)境中,由于受到高能輻射粒子的影響,電子器件會(huì)出現(xiàn)單離子翻轉(zhuǎn)(Single Event Upset,SEU)等現(xiàn)象,從而導(dǎo)致FPGA內(nèi)部寄存器內(nèi)容改變,引起傳輸數(shù)據(jù)的錯(cuò)誤,控制信號(hào)的錯(cuò)亂,甚至是整個(gè)工作系統(tǒng)的失效[1],因此,需要設(shè)計(jì)高可靠性的數(shù)據(jù)緩存控制器。常用的數(shù)據(jù)存儲(chǔ)芯片包括SDRAM和DDR-SDRAM兩種,均具有單位面積存儲(chǔ)容量大和存取速度快的特點(diǎn)。但與DDR-SDRAM相比,SDRAM外圍電路更簡單,其控制器實(shí)現(xiàn)的復(fù)雜度低,有利于可靠性的提高。從控制器的實(shí)現(xiàn)方案來看,采用FPGA實(shí)現(xiàn)具有較強(qiáng)的靈活性,并能支持更高的數(shù)據(jù)吞吐量[2]。因此,本文將主要解決如何利用FPGA實(shí)現(xiàn)具有高可靠性的SDRAM控制器,首先是采用自頂向下的模塊化設(shè)計(jì)思路,根據(jù)SDRAM的工作原理,將控制器劃分成不同的功能模塊,使各個(gè)模塊功能上主次分明;其次是增加上電自校驗(yàn)功能,對(duì)關(guān)鍵控制模塊進(jìn)行三模冗余設(shè)計(jì),進(jìn)一步增強(qiáng)控制器的可靠性。
在控制器總體設(shè)計(jì)方面,考慮到其可靠性,盡量簡化頂層控制模塊和底層控制模塊之間的接口,頂層控制模塊只需管理讀寫操作;為了提高控制器的可移植性,元件實(shí)例化時(shí)需要通過GENERIC進(jìn)行參數(shù)的映射[3],使用時(shí)只需在頂層模塊中設(shè)置相關(guān)參數(shù),可移植性強(qiáng)。
2.1 SDRAM工作原理
控制器通過ras、cas、we 3根控制線向SDRAM發(fā)送控制信號(hào)。SDRAM的主要工作過程包括上電初始化、正常讀寫操作、換行和自動(dòng)刷新操作。
(1)上電初始化
SDRAM芯片上電之后需要等待200μs的穩(wěn)定時(shí)間,然后進(jìn)行初始化操作。初始化主要包括預(yù)充電、自動(dòng)刷新和模式寄存器設(shè)置等操作。
(2)正常讀寫操作
讀寫操作包括了突發(fā)讀寫和非突發(fā)讀寫兩種工作模式,在讀寫操作中行列選通分時(shí)進(jìn)行,時(shí)間間隔為tRCD。
(3)換行和自動(dòng)刷新操作
在SDRAM中進(jìn)行換行操作包括發(fā)送預(yù)充電命令關(guān)閉當(dāng)前行和發(fā)送激活命令打開新的工作行兩個(gè)步驟。
SDRAM的存儲(chǔ)原理是用電容里的電荷量來表示數(shù)據(jù),因此需要不斷地刷新來保持電容里的電荷。刷新周期為64ms,每次只刷新一行。進(jìn)行刷新操作之前要先關(guān)閉當(dāng)前工作行,然后發(fā)送刷新命令。
2.2 SDRAM控制器功能模塊劃分
基于SDRAM的工作原理,在控制器的設(shè)計(jì)過程中采用了自頂向下的模塊化設(shè)計(jì)方法。整個(gè)控制器包括了頂層控制和底層控制兩大部分。圖1是SDRAM控制器的底層模塊劃分,包括初始化模塊、地址命令數(shù)據(jù)緩存控制模塊、控制信號(hào)選擇模塊、讀寫數(shù)據(jù)控制模塊和主控制模塊5個(gè)模塊,主控制模塊是整個(gè)控制器的核心。
下面介紹各個(gè)模塊的功能。
(1)初始化模塊
初始化模塊的主要功能是上電等待200μs的穩(wěn)定時(shí)間之后進(jìn)行預(yù)充電、自刷新、模式寄存器設(shè)置等操作并發(fā)出相應(yīng)的控制命令。
(2)地址命令數(shù)據(jù)緩存控制模塊
SDRAM在工作過程中因?yàn)橐M(jìn)行刷新、尋址等操作,不可能總處于數(shù)據(jù)傳輸狀態(tài),從而使得它的帶寬不能達(dá)到百分之百的利用率[4]。地址命令數(shù)據(jù)緩存控制模塊的作用就是配合主控制模塊工作,當(dāng)主控制模塊進(jìn)行刷新、尋址等操作時(shí)對(duì)頂層控制模塊送來的命令、地址、數(shù)據(jù)在fifo中暫存。此外,SDRAM上電自校驗(yàn)的功能也是在該模塊中完成。
(3)控制信號(hào)選擇模塊
初始化模塊和主控制模塊在工作時(shí)都會(huì)發(fā)出控制信號(hào)和地址??刂菩盘?hào)選擇模塊在初始化完成前選擇初始化模塊發(fā)送的控制信號(hào)和地址,初始完成之后選擇主控制模塊的控制信號(hào)和地址。
(4)讀寫數(shù)據(jù)控制模塊
讀寫數(shù)據(jù)控制模塊配合SDRAM的雙向數(shù)據(jù)總線工作,通過控制雙向buffer中三態(tài)門的導(dǎo)通來控制數(shù)據(jù)流方向。
(5)主控制模塊
主控制模塊是整個(gè)控制器的核心,由一個(gè)包含13個(gè)狀態(tài)的狀態(tài)機(jī)來完成對(duì)SDRAM的控制,這樣可以簡化頂層控制模塊的復(fù)雜度。
3.1 頂層控制狀態(tài)機(jī)設(shè)計(jì)
控制器頂層控制模塊與底層控制模塊之間包括讀寫命令(0為寫,1為讀)、地址和數(shù)據(jù)3個(gè)主要接口。這樣設(shè)計(jì)的優(yōu)點(diǎn)是頂層控制模塊只需控制SDRAM讀寫和相應(yīng)的地址和數(shù)據(jù),無需管理刷新、預(yù)充電等操作,可以簡化頂層控制的復(fù)雜度,這樣根據(jù)具體應(yīng)用需求只需改變頂層控制模塊。
圖2包括空閑態(tài)、讀寫判斷狀態(tài)、寫狀態(tài)、寫等待、讀狀態(tài)、讀等待6個(gè)狀態(tài)。系統(tǒng)復(fù)位之后處于空閑態(tài),等待底層控制模塊上電初始化和自校驗(yàn)均成功之后進(jìn)入讀寫判斷狀態(tài),并根據(jù)外部控制信號(hào)進(jìn)行相應(yīng)的讀寫操作。
3.2 底層控制狀態(tài)機(jī)設(shè)計(jì)
底層控制狀態(tài)機(jī)包含在控制器底層主控制模塊中,是整個(gè)SDRAM控制器的核心。該狀態(tài)機(jī)包括13個(gè)狀態(tài),對(duì)SDRAM的讀、寫、預(yù)充電和刷新等操作都是通過這個(gè)狀態(tài)機(jī)實(shí)現(xiàn)。圖3是SDRAM控制器底層控制狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移圖。
狀態(tài)轉(zhuǎn)移包括4個(gè)主要流程:
(1)寫流程:激活→fifo判斷→地址判斷→寫狀態(tài)→寫等待→fifo判斷;
(2)讀流程:激活→fifo判斷→地址判斷→讀狀態(tài)→讀等待→fifo判斷;
(3)換行流程:地址判斷→預(yù)充電等待→預(yù)充電→激活;
(4)刷新流程:fifo判斷→預(yù)充電-1等待→預(yù)充電-1→刷新→激活。
當(dāng)SDRAM需要進(jìn)行換行或刷新流程的時(shí)候,如果有讀或?qū)懨顝捻攲涌刂颇K發(fā)送過來,命令、數(shù)據(jù)、地址被暫存在fifo中。當(dāng)刷新或者換行操作完成之后再進(jìn)行相應(yīng)讀或?qū)懖僮鳌?/p>
在外空間環(huán)境中,單粒子翻轉(zhuǎn)(Single Event Upset,SEU)、工作溫度突變和電磁輻射的干擾都會(huì)影響電子器件的正常工作。為了提高SDRAM工作的可靠性,必須采取一些相應(yīng)的措施:首先,采集系統(tǒng)每次上電開始正常讀寫工作之前需要通過控制器對(duì)SDRAM工作狀況進(jìn)行自校驗(yàn),確認(rèn)其能否正常工作;其次,根據(jù)控制器模塊劃分情況,對(duì)SDRAM控制器中的部分關(guān)鍵模塊做三模冗余(TMR)設(shè)計(jì)[5]。
4.1 SDRAM上電自校驗(yàn)
所謂上電自校驗(yàn)是指SDRAM上電初始化完成之后向SDRAM寫入若干數(shù)據(jù)再讀出來并做累加和校驗(yàn),確認(rèn)SDRAM是否工作正常。
上電自校驗(yàn)的控制過程是在控制器底層的地址命令數(shù)據(jù)緩存控制模塊中完成。具體實(shí)現(xiàn)方式是控制器上電初始化完成之后向SDRAM的4個(gè)bank的第一行分別寫8個(gè)固定的數(shù)據(jù),然后再從4個(gè)bank中將寫入的數(shù)據(jù)讀出來,并進(jìn)行累加和校驗(yàn)。因?yàn)閷懭氲臄?shù)據(jù)是固定的,所以讀出來累加和也是一個(gè)固定值。如果累加和與預(yù)期的值相等,則認(rèn)為SDRAM可以正常工作,否則認(rèn)為其失效。SDRAM自校驗(yàn)的結(jié)果會(huì)發(fā)送到外部控制處理器,根據(jù)校驗(yàn)結(jié)果,外部控制處理器會(huì)對(duì)數(shù)據(jù)采集流程做相應(yīng)的調(diào)整。
4.2 三模冗余設(shè)計(jì)(TMR)
設(shè)計(jì)上電自校驗(yàn)功能是為檢測SDRAM芯片能否正常工作。為了提高數(shù)據(jù)緩存的可靠性,SDRAM控制器本身也要進(jìn)行可靠性設(shè)計(jì)??紤]到設(shè)計(jì)的復(fù)雜度和硬件資源等綜合情況,選擇傳統(tǒng)的三模冗余(TripleModule Redundancy,TMR)方法進(jìn)行容錯(cuò)設(shè)計(jì)。
圖4是三模冗余的電路實(shí)現(xiàn)方案,模塊1、模塊2和模塊3功能完全相同,3個(gè)模塊的輸出經(jīng)過表決系統(tǒng)之后有一個(gè)最終的輸出。在SDRAM控制器中,由于采取了自頂向下的模塊化設(shè)計(jì)思路,控制器的各個(gè)模塊有主次之分,在控制器中主控制模塊、初始化模塊和地址命令數(shù)據(jù)緩存控制模塊比較關(guān)鍵,因此對(duì)這3個(gè)模塊做了三模冗余設(shè)計(jì),來提高控制器的可靠性。
控制器設(shè)計(jì)使用的開發(fā)工具是XILINX的ISE10.1[7],仿真工具使用的是Modelsim SE 6.2e。FPGA芯片選用的是XILINX的xc5vsx50t-1ff665,SDRAM芯片是MICRONE的MT48LC16M16A2TG,這兩款芯片都是工業(yè)級(jí)的。在用上述器件搭建好的實(shí)驗(yàn)平臺(tái)上對(duì)設(shè)計(jì)好并且仿真完成的SDRAM控制器進(jìn)行了測試。圖5是用XILINX的Chipscope軟件抓取的SDRAM上電自校驗(yàn)測試時(shí)序圖,ras、cas、we 3根線組成控制總線。自校驗(yàn)時(shí)首先向SDRAM 4個(gè)bank(0、1、2、3)各寫8個(gè)數(shù),前4個(gè)數(shù)是5,后4個(gè)數(shù)是10,讀出來的校驗(yàn)數(shù)據(jù)累加和為240。圖中數(shù)據(jù)(0)、數(shù)據(jù)(1)和數(shù)據(jù)(2)就是從3個(gè)功能相同的模塊分別輸出的數(shù)據(jù)總線作為三模冗余的表決電路輸入,數(shù)據(jù)門控也是3個(gè)。為了測試三模冗余的效果,對(duì)數(shù)據(jù)(2)和相應(yīng)的數(shù)據(jù)門控做了特殊處理,全部置為0。自校驗(yàn)標(biāo)志顯示模塊(0)和模塊(1)發(fā)出自校驗(yàn)成功標(biāo)志,模塊(2)發(fā)出自校驗(yàn)失敗標(biāo)志,再次經(jīng)過三模冗余表決之后自校驗(yàn)結(jié)果成功。修改了頂層模塊中的相關(guān)參數(shù)對(duì)SDRAM的各種工作模式進(jìn)行了測試,測試結(jié)果表明該控制器對(duì)各種工作模式均適應(yīng),完全滿足數(shù)據(jù)緩存系統(tǒng)的需要。
本文采用FPGA設(shè)計(jì)了具有高可靠性的SDRAM控制器。與傳統(tǒng)的SDRAM控制器相比較,由于按照自頂向下的模塊化設(shè)計(jì)思路,控制器具有間接的分層結(jié)構(gòu)的控制狀態(tài)機(jī),使其具有更好的可靠性和可移植性。特別是為使得控制器適應(yīng)空間電磁環(huán)境,通過對(duì)關(guān)鍵控制模塊的三模冗余設(shè)計(jì),進(jìn)一步提高了控制器的抗單離子翻轉(zhuǎn)能力。在硬件上的測試結(jié)果表明,在部分模塊出錯(cuò)的情況下,控制器均能夠克服這些錯(cuò)誤的影響,正確地完成SDRAM讀寫操作,該控制器已成功應(yīng)用于空間電磁環(huán)境中的數(shù)據(jù)緩存系統(tǒng)。
[1]姚睿,王友仁,于盛林,等.基于進(jìn)化硬件的自修復(fù)TMR系統(tǒng)設(shè)計(jì)及其可靠性分析[J].傳感器與微系統(tǒng),2007,26(8):72-75,78.
YAORui,WANG You-ren,YU Sheng-lin,et al.Design and reliability analysis of selfrepair TMR systems based on evolvable hardware[J].Transducer and Microsystem Technologies,2007,26(8):72-75,78.(in Chinese)
[2]王艷春,祖靜,崔春生.基于FPGA的SDRAM的控制器實(shí)現(xiàn)與性能分析[J].電子測試,2010(12):44-46,57.
WANGYan-chun,ZU Jing,CUIChun-sheng.Realization of FPGA and the analysis performance of SDRAM controller[J].Electronic Test,2010(12):44-46,57.(in Chinese)
[3]VoInei A Pedroin.VHDL數(shù)字電路設(shè)計(jì)教程[M].喬廬峰,王志功,譯.北京:電子工業(yè)出版社,2009.
VoInei A Pedroin.Circuit design wth VHDL[M].Translated by QIAO Lu-feng,WANG Zhi-gong.Beijing:Publishing House of Electronics Industry,2009.(in Chinese)
[4]武文杰,劉皓,李少謙.基于FPGA的支持切換Bank的SDRAM控制器設(shè)計(jì)[J].信息技術(shù),2006,30(1):33-36.
WUWen-jie,LIU Hao,LI Shao-qian.Design of SDRAM controller supporting alterating Bank accesse based on FPGA[J].Information Technology,2006,30(1):33-36.(in Chinese)
[5]李冬梅,王志華,高文煥,等.FPGA中的空間輻射效應(yīng)及加固技術(shù)[J].電子技術(shù)應(yīng)用,2000,26(8):4-6.
LIDond-mei,WANG Zhi-hua,GAOWen-huan,et al. Space Radiation Effects and Reinforcement Technology of FPGA[J].Application of Electronic Technique,2000,26(8):4 -6.(in Chinese)
[6]馬連川,劉波.一種分布式三模冗余控制系統(tǒng)的實(shí)現(xiàn)[J].北方交通大學(xué)學(xué)報(bào),2000,24(5):71-74.
MA Lian-chuan,LIU Bo.Implementation of a Distributed Triple Modular Redundancy Control System[J].Journal of Northern Jiaotong University,2000,24(5):71-74.(in Chinese)
[7]田耕,徐文波,胡彬.Xilinx ISE Design Suite 10.x FPGA開發(fā)指南:邏輯設(shè)計(jì)篇[M].北京:人民郵電出版社,2008.
TIANGeng,XUWen-bo,HUBin.Xilinx ISEDesign Suite10.x FPGA Development Guide—LogicDesign[M].Beijing:People′s Posts and Telecommunications Press,2008.(in Chinese)
ZHUWen-bin was born in Xi′an,ShaanxiProvince,in 1986. He is now a graduate student.His research concerns FPGA and embedded system development.
Email:zwb-maci@126.com
劉春平(1968—),男,重慶人,博士,深圳大學(xué)副教授;
LIU Chun-ping was born in Chongqing,in 1968.He is now an associate professorwith the Ph.D.degree.
黃振(1969—),男,重慶人,博士,副教授。
HUANG Zhen was born in Chongqing,in 1969.He is now an associate professor with the Ph.D.degree.
Design and Implementation of a High Reliability SDRAM Controller Based on FPGA
ZHUWen-bin1,LIU Chun-ping1,HUANG Zhen2
(1.Shenzhen University,Shenzhen 518060,China;2.School of Aerospace,Tsinghua University,Beijing 100084,China)
A designmethod of high reliability SDRAM controller based on FPGA is proposed for data cache utilized in space electromagnetic environment.This controller ismodularized from top to bottom,including two layers statemachine of top controland bottom driver.Its reliability is improved by the functions of power-on selfchecking and critical controlmodule triplemodular redundancy(TMR).Finally,the FPGA hardware implementation and testing of the controller are completed,and the test results show that this design is highly reliable and flexible,which can be provided as guidance for realization of a practical data cache system in space electromagnetic environment.
space electromagnetic environment;data cache;SDRAM controller;reliability;triple modular redundancy;self-checking
TN409
A
10.3969/j.issn.1001-893x.2011.10.023
朱文斌(1986—),男,陜西西安人,深圳大學(xué)光電工程學(xué)院碩士研究生,主要從事FPGA及嵌入式系統(tǒng)開發(fā)工作;
1001-893X(2011)10-0113-04
2011-06-14;
2011-08-17