高速大容量數(shù)據(jù)采集板卡的SDRAM控制器設(shè)計(jì)
摘 要:本文對(duì)高速、高精度大容量數(shù)據(jù)采集板卡所采用的SDRAM控制器技術(shù)進(jìn)行了討論,詳細(xì)介紹了基于FPGA的SDRAM控制器的設(shè)計(jì)、命令組合以及設(shè)計(jì)仿真時(shí)序,并將該技術(shù)應(yīng)用于基于PCI總線的100MHz單通道 AD9432高速大容量數(shù)據(jù)采集板卡,最后給出了板卡測(cè)試結(jié)果。
關(guān)鍵詞:SDRAM;FPGA;AD9432
引言
高速數(shù)據(jù)采集具有系統(tǒng)數(shù)據(jù)吞吐率高的特點(diǎn),要求系統(tǒng)在短時(shí)間內(nèi)能夠傳輸并存儲(chǔ)采集結(jié)果。因此,采集數(shù)據(jù)的快速存儲(chǔ)能力和容量是制約加快系統(tǒng)速度和容許采集時(shí)間的主要因素之一。通常用于數(shù)據(jù)采集系統(tǒng)的存儲(chǔ)器有先進(jìn)先出存儲(chǔ)器(FIFO)、雙端口RAM以及靜態(tài)RAM等,但是容量小,已經(jīng)不能滿足高速數(shù)據(jù)采集系統(tǒng)的需求。目前市場(chǎng)上的SDRAM和DDR SDRAM具有工作頻率高、容量大、功耗低的特點(diǎn),數(shù)據(jù)線位寬可以達(dá)到64bit,完全適用于高速數(shù)據(jù)采集系統(tǒng)。但是SDRAM控制相對(duì)復(fù)雜,而且需要定時(shí)刷新,是系統(tǒng)設(shè)計(jì)的一個(gè)技術(shù)難點(diǎn)。
本文設(shè)計(jì)的100MHz單通道AD9432高速大容量數(shù)據(jù)采集板卡,選擇大容量SDRAM作為采集數(shù)據(jù)存儲(chǔ)器。其中,自行設(shè)計(jì)的SDRAM控制器,采用了猝發(fā)讀寫操作模式,充分發(fā)揮猝發(fā)讀寫的高速高效率特性,實(shí)現(xiàn)對(duì)采集數(shù)據(jù)的高速存儲(chǔ)。
SDRAM控制器設(shè)計(jì)與仿真
SDRAM控制器的設(shè)計(jì)
SDRAM控制器的設(shè)計(jì)有多種方案,一種是采用市場(chǎng)上的專用SDRAM接口芯片,這種控制器接口固定,訪問容量有限,與A/D采樣電路連接時(shí),需要設(shè)計(jì)一個(gè)接口轉(zhuǎn)換電路,滿足專用芯片的接口時(shí)序;另一種是采用帶有SDRAM接口的DSP,例如TMS320C6000系列,但是容量有限,不易擴(kuò)展,而且這種方式通常要求對(duì)采集數(shù)據(jù)進(jìn)行預(yù)處理;還有一種是基于FPGA的SDRAM控制器,目前FPGA的技術(shù)比較成熟,編程方便,設(shè)計(jì)靈活,便于構(gòu)造大容量的SDRAM存儲(chǔ)器,但是控制器需要根據(jù)系統(tǒng)技術(shù)要求進(jìn)行設(shè)計(jì)。在本文的高速數(shù)據(jù)采集卡設(shè)計(jì)中,采用大容量FPGA設(shè)計(jì)SDRAM控制器。
基于FPGA的SDRAM控制器工作原理
SDRAM控制器是高速數(shù)據(jù)采集卡存儲(chǔ)單元的核心,控制板卡數(shù)據(jù)流。工作原理參見圖1。采集數(shù)據(jù)先送入A/D數(shù)據(jù)緩存器,由SDRAM控制器讀出并寫入大容量SDRAM存儲(chǔ)器。當(dāng)A/D轉(zhuǎn)換結(jié)束后,板卡修改狀態(tài)標(biāo)志或者發(fā)出中斷請(qǐng)求,主機(jī)發(fā)出讀取命令,SDRAM控制器切換工作狀態(tài),把數(shù)據(jù)從SDRAM中取出,寫入輸出緩存器,由主機(jī)通過總線接口將結(jié)果讀到系統(tǒng)中。其中,SDRAM控制器負(fù)責(zé)對(duì)SDRAM的定時(shí)刷新。SDRAM控制器根據(jù)設(shè)計(jì),可以對(duì)SDRAM執(zhí)行猝發(fā)讀寫、刷新等12種命令,完成對(duì)數(shù)據(jù)的訪問。
SDRAM的控制命令組合
SDRAM的控制是根據(jù)時(shí)鐘上升沿時(shí)刻控制信號(hào)的不同組合實(shí)現(xiàn)的??刂芐DRAM的基本操作包括:初始化、刷新、塊激活、讀寫訪問、預(yù)充電等。
基于FPGA的SDRAM控制器設(shè)計(jì)
整個(gè)SDRAM電路包括一片F(xiàn)PGA和多片SDRAM。FPGA內(nèi)部集成了SDRAM控制器、ADC接口、總線控制接口和3個(gè)FIFO。其中,2個(gè)FIFO組成乒乓A/D數(shù)據(jù)緩存器,另一個(gè)FIFO作為輸出緩存器,F(xiàn)IFO的深度和SDRAM頁長(zhǎng)度一致。在板卡設(shè)計(jì)中,根據(jù)需求對(duì)SDRAM控制操作進(jìn)行了簡(jiǎn)化,設(shè)計(jì)了初始化、自動(dòng)刷新、塊激活、猝發(fā)讀寫、預(yù)充電等六種操作,具體狀態(tài)機(jī)設(shè)計(jì)如圖2所示。系統(tǒng)上電初始化并發(fā)出復(fù)位信號(hào),SDRAM控制器進(jìn)入初始化狀態(tài),對(duì)SDRAM進(jìn)行刷新和模式設(shè)置,其中猝發(fā)長(zhǎng)度設(shè)為“full page”,然后進(jìn)入空閑狀態(tài),等待命令。當(dāng)主機(jī)啟動(dòng)A/D轉(zhuǎn)換,ADC接口將采集數(shù)據(jù)依次寫入A/D數(shù)據(jù)緩存器,當(dāng)其中一個(gè)FIFO滿,SDRAM控制器進(jìn)入猝發(fā)寫狀態(tài),發(fā)出塊激活和猝發(fā)寫命令,將A/D數(shù)據(jù)緩存器中的數(shù)據(jù)讀出并寫入SDRAM當(dāng)前頁,一頁數(shù)據(jù)寫操作后,發(fā)出塊預(yù)充電命令,關(guān)閉所有數(shù)據(jù)塊,退出猝發(fā)寫狀態(tài)。當(dāng)SDRAM控制器接到主機(jī)的讀數(shù)命令時(shí),轉(zhuǎn)入猝發(fā)讀狀態(tài),先后發(fā)出塊激活和猝發(fā)讀命令,把SDRAM一頁的數(shù)據(jù)讀出并寫入輸出緩存器,并用滿信號(hào)作為中斷信號(hào)向PCI總線發(fā)出申請(qǐng),通知主機(jī)讀取數(shù)據(jù)。每當(dāng)刷新計(jì)時(shí)器計(jì)數(shù)滿,狀態(tài)機(jī)轉(zhuǎn)到刷新狀態(tài),完成對(duì)SDRAM的刷新。
在編程實(shí)現(xiàn)SDRAM控制器中,應(yīng)該根據(jù)設(shè)計(jì)需求,選擇合適的控制命令組合,保證工程實(shí)現(xiàn)方案簡(jiǎn)單、可靠,并方便調(diào)試。在設(shè)計(jì)中應(yīng)該注意:
1. 每啟動(dòng)一次SDRAM的讀/寫操作,都需要經(jīng)過激活一個(gè)塊(鎖行地址)、鎖列地址(讀寫命令)等幾個(gè)過程,所以從發(fā)出地址到真正訪問一個(gè)地址空間需要4~6個(gè)時(shí)鐘周期。因此,SDRAM在非猝發(fā)模式時(shí)訪問效率非常低,不適合高速電路應(yīng)用。在本電路設(shè)計(jì)中,SDRAM的設(shè)置工作模式為猝發(fā)訪問,充分發(fā)揮了SDRAM高速高效特點(diǎn)。
2. 復(fù)位之后,SDRAM控制器自動(dòng)進(jìn)入初始化狀態(tài)。根據(jù)SDRAM初始化的要求,設(shè)置一個(gè)計(jì)數(shù)器,首先等待至少200ms,不做任何操作,然后產(chǎn)生一個(gè)Precharge All Banks命令,接著是兩個(gè)刷新命令,最后設(shè)置工作模式寄存器。完成這些初始化操作之后,SDRAM控制器進(jìn)入空閑狀態(tài),這時(shí)才可以對(duì)SDRAM進(jìn)行正常的操作。否則,SDRAM將處于一種不確定狀態(tài),無法保證操作的正確性。
3. SDRAM有多種刷新模式,Self Refresh通常工作于所有數(shù)據(jù)塊處于空閑的狀態(tài),功耗低,但是會(huì)使內(nèi)部時(shí)鐘和所有輸入緩沖無效,且控制復(fù)雜。Auto Refresh由定時(shí)器產(chǎn)生,易于控制。因此一般選擇Auto Refresh模式。通常設(shè)計(jì)一個(gè)計(jì)數(shù)器以計(jì)算時(shí)間間隔,達(dá)到刷新周期時(shí),產(chǎn)生刷新信號(hào),實(shí)現(xiàn)刷新時(shí)序。SDRAM要求在刷新之前所有的塊都處于空閑狀態(tài),但實(shí)際應(yīng)用中,有可能從任意一個(gè)狀態(tài)進(jìn)入刷新狀態(tài),因此不能保證所有的塊都處于空閑狀態(tài),因此,在刷新之前,首先對(duì)所有的塊預(yù)充電,然后刷新。
4. 對(duì)SDRAM進(jìn)行讀寫訪問操作時(shí),必須順序完成鎖行地址、鎖列地址、讀/寫命令和Precharge All Banks命令。使用Precharge All Banks命令是由于SDRAM不允許對(duì)同一個(gè)塊中的兩個(gè)頁進(jìn)行操作,為了防止誤操作,每完成一次操作都要關(guān)閉所有的塊,也可以在訪問之前先執(zhí)行該命令。
采用FPGA設(shè)計(jì)SDRAM控制器的最大優(yōu)勢(shì)在于設(shè)計(jì)實(shí)現(xiàn)的靈活性和高集成性,設(shè)計(jì)者可以根據(jù)需要選擇合適的控制命令組合,完成簡(jiǎn)單、可靠的控制。此外,目前市場(chǎng)上的SDRAM容量從幾十MB到數(shù)百M(fèi)B,器件類型從SDRAM到速度更高、容量更大的DDR SDRAM,在硬件修改不多的情況下,使用FPGA控制更靈活,更適合未來系統(tǒng)擴(kuò)展的需要。
SDRAM控制器的仿真
在設(shè)計(jì)中,本文選擇了Altera公司的ACEX1K100實(shí)現(xiàn)SDRAM控制器。圖3顯示了SDRAM控制器典型的猝發(fā)寫控制時(shí)序,控制器依次鎖行地址、鎖列地址、寫操作,最后是預(yù)充電命令,關(guān)閉所有頁,退出操作。猝發(fā)讀控制時(shí)序與之類似。
SDRAM控制器在高速數(shù)據(jù)采集卡中的實(shí)現(xiàn)
100MHz AD9432高速數(shù)據(jù)采集卡的系統(tǒng)結(jié)構(gòu)框圖如圖4所示。在數(shù)據(jù)采集卡設(shè)計(jì)中,SDRAM控制器是數(shù)據(jù)流控制核心,負(fù)責(zé)數(shù)據(jù)的高速猝發(fā)讀/寫和定時(shí)刷新。當(dāng)主機(jī)啟動(dòng)A/D轉(zhuǎn)換后,SDRAM控制器將采集結(jié)果存儲(chǔ)到SDRAM存儲(chǔ)器中,當(dāng)采集結(jié)束后,主機(jī)通過PCI接口采用DMA傳輸方式將采集數(shù)據(jù)讀到主機(jī)系統(tǒng)中。SDRAM控制器的時(shí)鐘為60MHz,數(shù)據(jù)線32bit。設(shè)計(jì)的SDRAM存儲(chǔ)器為32MB,由兩片Samsung的256MB SDRAM構(gòu)成,對(duì)于100MHz采樣率,可以存儲(chǔ)330ms的數(shù)據(jù),解決了高速數(shù)據(jù)采集卡的海量數(shù)據(jù)存儲(chǔ)的技術(shù)瓶頸。同時(shí),利用FPGA的編程靈活性,保留了繼續(xù)擴(kuò)展SDRAM的能力,以滿足更大容量的需求。
結(jié)語
板卡設(shè)計(jì)完成后,對(duì)主要性能指標(biāo)進(jìn)行了測(cè)試,主要包括ADC的動(dòng)態(tài)性能指標(biāo)及DMA數(shù)據(jù)傳輸速率。測(cè)試中設(shè)定系統(tǒng)采樣率為100MSPS,輸入信號(hào)為12.5MHz正弦信號(hào)。測(cè)試頻譜圖見圖5??梢杂?jì)算出系統(tǒng)實(shí)際信噪比約為61.94dB;ADC對(duì)10MHz的正弦信號(hào)采樣的有效位數(shù)為9.99bit;諧波失真(THD)=-39.22dB, 無雜散動(dòng)態(tài)范圍(SFDR)=40.71dB,指標(biāo)滿足設(shè)計(jì)要求。■
參考文獻(xiàn)
1 沈蘭蓀.高速數(shù)據(jù)采集系統(tǒng)原理及應(yīng)用[M].人民郵電出版社,1995
2 楊坤德,趙亞梅,馬遠(yuǎn)良.高速大容量多通道數(shù)據(jù)采集系統(tǒng)設(shè)計(jì),數(shù)據(jù)采集與處理J第17卷第4期2002,17(2):455
3 ACEX1K Programmable Logic Device Family Data Sheet.Altera,2001
4 K4S561632B CMOS SDRAM Data Sheet.Samsung,2000
評(píng)論