肖侃
(上海貝嶺股份有限公司 數(shù)?;旌显O計部,上海 200233)
DDR2(Double Data Rate two)是 DDR2 SDRAM 的簡稱,是目前較主流的一種DRAM存儲器件[1]。與上一代DDR相比,它依然采用了在時鐘的上升/下降延同時進行數(shù)據(jù)傳輸?shù)幕痉绞剑珦碛袃杀兜念A讀取能力。換句話說,DDR2每個時鐘能夠以4倍外部總線的速度讀/寫數(shù)據(jù)[2]。
與SRAM相比,DRAM的結構決定了它有著較復雜的時序要求[1](包括需要上電初始化和定時刷新等),這對于一個嵌入式系統(tǒng)的設計而言,是一個不小的挑戰(zhàn)。常見的解決方法是:單獨設計一個DDR2控制器將DDR2的復雜時序轉化成類似于SRAM的簡單時序,同時完成初始化操作以及產(chǎn)生刷新指令以維持DDR2中的數(shù)據(jù)。
DDR2有若干芯片廠家生產(chǎn),但都基于JEDEC的標準,所以DDR2控制器必須也滿足該標準??紤]到整個系統(tǒng)采用的DDR2是ELPIDA公司的EDE1116AEBG芯片,故以該型號的芯片作為樣本。
DDR2控制器作為整個系統(tǒng)中的一個模塊,在系統(tǒng)中的位置如圖1所示。
圖1 系統(tǒng)框圖Fig.1 System block diagram
DDR2控制器接收系統(tǒng)其他模塊發(fā)出的讀寫DDR2的請求 (包括指令和地址),將其轉變?yōu)镈DR2可識別的控制信號;如果是讀指令,待DDR2完成指令之后,將相應的讀數(shù)據(jù)傳輸至發(fā)出請求的模塊;如果是寫指令,從發(fā)出請求的模塊中取出數(shù)據(jù)將其寫入DDR2;同時,要考慮DDR2自身的初始化和刷新等問題,保證其工作正常。
DDR2控制器與DDR2的接口部分的定義,如表1所示。
表1 控制器與DDR2的接口定義Tab.1 Interface of controller and DDR2
對DDR2的控制需依照JEDEC標準,有著嚴格的要求[3],其狀態(tài)轉換圖(狀態(tài)機)如圖2所示。
在設計之初,需要考慮3個要點:
1)數(shù)據(jù)跨時鐘域如何安全傳輸;
2)狀態(tài)機如何設計;
3)如何驗證。
本設計中跨時鐘域的數(shù)據(jù)較多,寬度較大,所以采用了異步FIFO作為跨時鐘域的接口。
狀態(tài)機即控制邏輯,直接關系到設計的質量,本設計的狀態(tài)機基本依照圖2設計。
由于FPGA的軟件可以方便的產(chǎn)生MCB(存儲器控制塊)模塊和相應的testbench,該模塊完全可以獨立實現(xiàn)DDR2的控制功能[4]。只需要把本設計替換掉MCB中相應的部分,即可很方便的進行FPGA驗證和仿真驗證。當然,設計時要使得兩者接口一致。
圖2 DDR2狀態(tài)機Fig.2 The finite state machine of DDR2
一般的DDR2控制器的設計只關注控制功能,DFT相關的事情留給DFT工程師考慮。但在某些特殊應用的情況下,比如試驗性的芯片研發(fā),需要對DDR2進行一個簡單的測試,這就需要在DDR2的控制器[5-6]中集成自測功能。
如圖3所示,整個DDR2控制器跨越兩個時鐘域,兩個時鐘域之間的通訊采用異步FIFO實現(xiàn),共分為3個異步FIFO, 即 “命令與地址 FIFO”、“寫數(shù)據(jù) FIFO”、“讀數(shù)據(jù)FIFO”。參數(shù)通過APB總線配置到模塊內(nèi)部,用以靈活控制模塊功能?!俺跏蓟笔巧想姾蟮谋匾襟E,從硬件實現(xiàn)的角度看,初始化是按照要求發(fā)出一系列的指令。“刷新”的實質是一個計數(shù)器,定時向“命令與地址FIFO”發(fā)送刷新指令。外部接口指的是和外部模塊的接口,本設計中共有兩組外部接口?!爸噶罱獯a”的作用是將指令轉化為DDR2的具體控制信號?!伴g隔時間”用于控制指令與指令之間的時間間隔,這些時間間隔均需要符合標準?!白詼y功能”即產(chǎn)生一系列的寫指令,將相關數(shù)據(jù)寫入DDR2,然后再從DDR2中將這些數(shù)據(jù)讀出,如果寫入和讀出的數(shù)據(jù)能夠匹配,即認為DDR2基本功能正常。
圖3 DDR2控制器結構圖Fig.3 Structure of DDR2 controller
如果沒有“自測功能”,也需要仲裁和輸入端口選擇等子模塊;將“自測功能”置于與外部接口同等的位置,只需要增加很少的開銷,即可實現(xiàn)自測功能。
經(jīng)過性能/面積等綜合考量,本設計采用了MARCH C+算法來實現(xiàn)“自測功能”。
圖4 MARCH C+算法的狀態(tài)機Fig.4 Finite state machine of MARCH C+
W0是指寫入0;R0是指讀出0;W1是指寫入1;R1是指讀出1;max是指地址最大,否則地址加1;min是指地址最小,否則地址減1。
為了使設計更加靈活,本設計可通過寄存器設置,來簡化算法或使算法更復雜。比如:DDR2的位寬是16 bit,第一次執(zhí)行 MARCH C+算法時,寫入 16 bit的 0或 16 bit的 1;如果想使算法更加復雜,測試覆蓋率更高,可以在第一次算法執(zhí)行結束后,第二次執(zhí)行算法,這時寫入16 bit的數(shù)據(jù)為0000000011111111或1111111100000000。以此類推,可以較自由的調節(jié)測試時間和測試覆蓋率之間的矛盾。
完成結構設計之后,用verilog語言完成了RTL描述[7-8],并通過仿真和FPGA驗證。在200 M主頻下,數(shù)據(jù)傳輸速率達到3.1 GB/s。與不增加自測功能的設計相比,本設計在綜合后面積增加不到10%。
文中為了解決項目中的特殊需求,創(chuàng)造性的提出一種新型DDR2控制器的結構,無需增加太多開銷,即可靈活的實現(xiàn)自測功能。該設計為相關設計提供了實例,具有良好的參考和應用價值。
[1]舒展.DDR控制器IP的設計與FPGA實現(xiàn)[D].合肥:合肥工業(yè)大學碩士學位論文,2009.
[2]夏軍,龐征斌,李小芳,等.一種高性能DDR2控制器的設計與實現(xiàn)[J].計算機工程與科學,2010,7(7):1-3.
XIA Jun,PANG Zheng-bin,LI Xiao-fang,et al.Design and Implementation of a High-Performance DDR2 Controller[J].Computer Engineering&Science,2010,7(7):1-3.
[3]張凌.基于FPGA的DDR2 SDRAM控制器的設計與實現(xiàn)[D].北京:北京航空航天大學,2009.
[4]須文波,胡丹.DDR2 SDRAM控制器的FPGA實現(xiàn)[J].江南大學學報,2006,5(2):1-4.
XU Wen-bo,HU Dan.Implementation of DDR2 SDRAM controllerin a FPGA[J].JournalofSouthern Yangtze University,2006,5(2):1-4.
[5]王江榮,劉偉.基于Haar小波的一類模糊控制器的優(yōu)化及應用[J].工業(yè)儀表與自動化裝置,2011(5):30-32,49.
WANG Jiang-rong,LIU Wei.Haar wavelet-based fuzzy controller for a class of optimization and application[J].Industrial Instrumentation&Automation,2011(5):30-32,49.
[6]余萍.基于動態(tài)線性化方法的自適應PD控制器的設計[J].工業(yè)儀表與自動化裝置,2012(1):32-34.
YU Ping.The design of adaptive PD controller based on dynamic linearization method[J].Industrial Instrumentation&Automation,2012(1):32-34.
[7]夏宇聞.Verilog數(shù)字系統(tǒng)設計教程[M].北京:北京航空航天大學出版社,2008.
[8]趙倩.Verilog數(shù)字系統(tǒng)設計與FPGA應用[M].北京:清華大學出版社,2012.