王耀利,王志斌,2,趙冬娥,2,張敏娟,黃艷飛,張 瑞
(1.中北大學(xué) 山西省光電信息與儀器工程技術(shù)研究中心,山西 太原030051;2.中北大學(xué) 儀器科學(xué)與動態(tài)測試教育部重點實驗室,山西 太原030051)
近年來,彈光調(diào)制傅里葉變換光譜儀 (PEM-FTS)在科研、環(huán)境和軍事等方面得到了越來越廣泛的應(yīng)用。通常情況下,彈光調(diào)制傅里葉變換光譜儀具有高速,高靈敏度等特點,每秒可產(chǎn)生上萬張干涉圖,要求其采集數(shù)據(jù)不僅速度快而且數(shù)據(jù)量大,需要輔以高速大容量的存儲器實現(xiàn)數(shù)據(jù)緩存。目前市場上使用的存儲器有很多種,包括FLASH,SRAM,SDRAM以及SD卡,硬盤等等。其中,SRAM速度快,控制簡單,適合小容量存儲,但當(dāng)緩存容量較大時,采用SRAM會造成成本高,功耗大,可靠性差的問題[1]。FLASH的存儲容量也比較小,很難用到需大容量緩存的場合。與以上兩種存儲器相比,SDRAM (synchronous dynamic random access memory)傳輸速度可以達(dá)到100M以上,容量也可達(dá)到幾十兆甚至幾百兆,具有傳輸速率快,容量大等特點[2],可以在多個領(lǐng)域應(yīng)用??删幊踢壿嬈骷﨔PGA具有靈活、設(shè)計周期短,具有模塊化和控制簡單等特點,同時也可以滿足彈光調(diào)制傅里葉變換光譜儀的要求。
本文根據(jù)彈光調(diào)制傅里葉變換光譜儀需高速大容量存儲的要求,為使所研光譜儀速度快、結(jié)構(gòu)緊湊并便于攜帶,并結(jié)合FPGA和SDRAM的特點,設(shè)計了一種基于FPGA控制的SDRAM存儲方案,使其工作在突發(fā)頁模式下,實現(xiàn)數(shù)據(jù)的高速存儲管理。用Verilog HDL語言對控制器進(jìn)行代碼開發(fā),在實驗室自行設(shè)計的基于FPGA的存儲控制卡上通過了硬件測試,實現(xiàn)了彈光調(diào)制干涉信號數(shù)據(jù)的海量緩存。
彈光調(diào)制器是一種基于高性能彈光晶體 (如熔融石英、硒化鋅等)彈光效應(yīng)的調(diào)制器件,利用壓電晶體 (如石英、壓電陶瓷)在光學(xué)各向同性的物質(zhì)上加以周期性變化的機(jī)械應(yīng)力,使彈光晶體共振,形成應(yīng)力駐波,由于彈光效應(yīng),彈光晶體出現(xiàn)周期性變化的雙折射,因此光通過彈光調(diào)制器后其相位被調(diào)制[3]。被測光通過彈光調(diào)制器后,由探測器探測到的干涉信號并將其轉(zhuǎn)化為電信號,調(diào)制后干涉信號為
式中:L——彈光調(diào)制后產(chǎn)生的最大光程差,σ——被測光波數(shù),f——調(diào)制頻率,I(σ)——被測光光譜。對干涉信號傅里葉變換便可獲得被測光的光譜
式中:T——調(diào)制周期 (T=1/f)。
彈光調(diào)制的調(diào)制頻率f為40~100KHz,光譜范圍為454~18180cm-1,光譜分辨率最高為10cm-1,由此可以看出彈光調(diào)制器經(jīng)相位調(diào)制后產(chǎn)生的干涉信號調(diào)制頻率較高,每秒可產(chǎn)生上萬張干涉圖。根據(jù)彈光調(diào)制傅里葉變換光譜儀的要求和式 (1)可得干涉信號的頻率最高可達(dá)100MHz左右,數(shù)據(jù)量大,這就為后續(xù)數(shù)據(jù)的采集和存儲提出了高速大容量的要求。
SDRAM時序要求比較嚴(yán)格,只有上電邏輯和模式設(shè)置正確才能正常工作。而且在存儲的時候必須首先激活相應(yīng)的存儲空間 (BANK),并給出相應(yīng)的行列地址。同時,每隔一定的時間需進(jìn)行刷新操作以保證數(shù)據(jù)不會丟失[4]。
SDRAM工作是以系統(tǒng)時鐘CLK上升沿觸發(fā)的,它包括如下幾根信號線:行地址選通RAS、列地址選通CAS、讀寫使能 WE、時鐘信號CKE/CLK、片選信號線CS。SDRAM的工作狀態(tài)由 WE/RAS/CAS組合在時鐘上升沿決定,同時地址線和BANK選擇控制線鎖定相應(yīng)的地址[5]。
SDRAM正常工作之前,首先要進(jìn)行初始化,依次為:200us輸入穩(wěn)定期,所有BANK預(yù)充電,8個刷新周期和模式寄存器設(shè)置 (MRS)[6]。設(shè)置完模式寄存器之后就開始進(jìn)入正常工作狀態(tài),首先由寫FIFO提供SDRAM寫請求,并激活相應(yīng)的BANK、行、列,數(shù)據(jù)開始寫入SDRAM。與此同時,讀FIFO提供SDRAM讀請求,亦需激活相應(yīng)的行、列,數(shù)據(jù)開始從SDRAM中讀出到讀FIFO。至此,完成了SDRAM讀寫操作。需要注意的是,SDRAM每讀寫完一行,需對其進(jìn)行預(yù)充電操作,關(guān)閉當(dāng)前讀寫完的一行,開啟下一需要讀寫的一行。不操作時SDRAM處于 W_IDLE(空操作)狀態(tài);如果有讀請求,寫請求或者自刷新請求信號產(chǎn)生,則進(jìn)入相應(yīng)的狀態(tài),在這些不同的響應(yīng)狀態(tài)中需要協(xié)調(diào)好SDRAM的控制總線、地址總線及數(shù)據(jù)總線,從而保證穩(wěn)定可靠地讀/寫SDRAM的數(shù)據(jù)。
SDRAM工作以狀態(tài)機(jī)的形式實現(xiàn)。其工作原理[7]如圖1所示。
圖1 SDRAM工作流程
SDRAM時序要求很高,故對時鐘的要求也比較高,在通常的SDRAM讀寫設(shè)計實驗中一般要用到兩個時鐘,一個是用于FPGA上的系統(tǒng)時鐘,一個是加在SDRAM上的工作時鐘。在本實驗中,F(xiàn)PGA系統(tǒng)時鐘為25MHz,而SDRAM工作時鐘達(dá)到了100MHz,為了使產(chǎn)生的時鐘能夠更穩(wěn)定的工作,實驗采用了Xilinx ISE中內(nèi)嵌的DCM時鐘管理模塊來實現(xiàn)。
在本實驗中,晶振提供的時鐘頻率為50MHz,要提供FPGA系統(tǒng)時鐘的25MHz和SDRAM工作時鐘的100 MHz,需要用到時鐘分頻和倍頻,這些在DCM時鐘管理模塊中都可以實現(xiàn)。而問題的關(guān)鍵在于SDRAM時鐘要求在100MHz的基礎(chǔ)上相移相應(yīng)的相位 (具體相移根據(jù)實際情況而定,以滿足芯片的建立保持時間為準(zhǔn),本實驗是有一個+2ns的相移),這就要用到DCM時鐘模塊的級聯(lián)[8],即第一級DCM實現(xiàn)零相移的100MHz的時鐘,第二級DCM在第一級的基礎(chǔ)上實現(xiàn)帶相移的100MHz的SDRAM工作時鐘。在Xilinx ISE中要實現(xiàn)DCM的級聯(lián),需要相關(guān)的器件原語調(diào)用。BUFG是全局緩沖,它的輸出到達(dá)FPGA內(nèi)部的IOB、CLB、選擇性塊RAM的時鐘延遲和抖動最小。BUFGCE是帶有時鐘使能端的全局緩沖。在兩個DCM例化核之間添加以下原語:
其中CLK_100M_OUT是第一級DCM核中100MHz的時鐘的輸出,CLK100M為第二級DCM核中要實現(xiàn)帶相移的100MHz的SDRAM工作時鐘的輸入。
為使產(chǎn)生的時鐘輸出達(dá)到無抖動延遲,在DCM的時鐘輸出之后添加BUFG原語:
其中clkphase_100M是第二級DCM核中帶相移的100MHz的時鐘的輸出,sdram_clk100M為要接入的SDRAM工作時鐘的輸入。
SDRAM存儲用到FIFO模塊,是因為外部數(shù)據(jù)與SDRAM控制器接收時的速率不匹配,實驗中外部數(shù)據(jù)與SDRAM控制器接收時的速率不匹配,外部數(shù)據(jù)產(chǎn)生速率是FPGA系統(tǒng)時鐘 (25MHz),而SDRAM數(shù)據(jù)接收速率為100MHz;同樣的,把SDRAM中存儲的數(shù)據(jù)通過串口傳輸?shù)缴衔粰C(jī)時,也會有一個速率匹配的問題,所以在SDRAM存儲系統(tǒng)設(shè)計中用到了FIFO模塊,其中有兩個FIFO,一個寫FIFO,一個讀FIFO。
由于以上不同步原因的存在,以及提高訪問率,降低功耗[9],在這里用到的是異步FIFO。FIFO模塊中有wr_clk和rd_clk,wr_data_count和rd_data_count,其中wr_data_count與wr_clk同步,rd_data_count與rd_clk同步。寫FIFO中,數(shù)據(jù)從外部寫入,時鐘與外部系統(tǒng)時鐘同步,即25M;而數(shù)據(jù)從FIFO讀出寫入SDRAM時,又與SDRAM工作時鐘同步,即100M。讀FIFO正好相反,數(shù)據(jù)寫入讀FIFO時鐘為100M,數(shù)據(jù)讀出讀FIFO為25M。
程序中SDRAM的讀寫請求與FIFO中的數(shù)據(jù)量息息相關(guān),根據(jù)數(shù)據(jù)有效程度同步產(chǎn)生SDRAM的讀寫請求。FIFO中一個寫計數(shù)器,一個讀計數(shù)器,經(jīng)過分析,寫FIFO中應(yīng)該使用讀計數(shù)器,讀FIFO中應(yīng)該使用寫計數(shù)器。原因如下。
在寫FIFO工作時,數(shù)據(jù)寫入一個的頻率是25M,在此時間內(nèi),數(shù)據(jù)可以讀出4個。根據(jù)assign sdram_wr_req= ((wrf_free>=9'd8)& ~syswr_done);
當(dāng)寫FIFO中數(shù)據(jù)量大于等于8個的時候就會向SDRAM發(fā)出寫入的請求,而此時如果用時鐘是25M的寫計數(shù)器時,就會出現(xiàn)一種錯誤,即當(dāng)FIFO中的數(shù)據(jù)讀出不到4個時,F(xiàn)IFO中的計數(shù)器顯示的還是8個,但是其數(shù)據(jù)量其實已經(jīng)變成7,6或5個了,本來當(dāng)FIFO中數(shù)據(jù)小于8個時,SDRAM寫請求就應(yīng)該取消了,但是這樣的話就把SDRAM寫請求的時間延長了,造成了SDRAM寫入錯誤。轉(zhuǎn)而言之,如果用時鐘頻率是100M的讀計數(shù)器時,就可以避免這個問題產(chǎn)生。讀FIFO亦是如此,總而言之,應(yīng)該用頻率比較大的計數(shù)器,否則頻率小的計數(shù)器趕不上數(shù)據(jù)增減的改變,容易出現(xiàn)錯誤。
本實驗中使用的SDRAM控制器主要有3個模塊構(gòu)成,即狀態(tài)控制模塊,命令生成模塊以及數(shù)據(jù)通路模塊[10]。
SDRAM狀態(tài)控制模塊,該模塊完成了SDRAM工作前的初始化過程以及模式寄存器的設(shè)置,確定了SDRAM工作模式;讀寫及自刷新操作狀態(tài)機(jī)實現(xiàn)了對SDRAM工作狀態(tài)的控制。在該狀態(tài)機(jī)中實現(xiàn)了SDRAM各工作狀態(tài)的轉(zhuǎn)換。突發(fā)讀寫[11]過程是主狀態(tài)機(jī)的重要一環(huán),負(fù)責(zé)將數(shù)據(jù)寫入和讀出SDRAM按照何種方式來進(jìn)行,本實驗采用的是突發(fā)全頁讀寫,即激活一次行列地址可以讀寫256個數(shù)據(jù)。
SDRAM命令模塊,該模塊根據(jù)狀態(tài)控制模塊兩個狀態(tài)機(jī)中不同狀態(tài)指示譯為相應(yīng)的命令,并結(jié)合相應(yīng)的地址進(jìn)入命令協(xié)調(diào)過程,對送入的命令進(jìn)行仲裁。對命令設(shè)定優(yōu)先級,遵循 “先到先執(zhí)行原則”,正在執(zhí)行的命令優(yōu)先級最高,刷新命令次之,最后是其他命令,以減少訪問沖突提高訪問效率[12]。
控制信號包括:sdram_cke,sdram_cs_n,sdram_we_n,sdram_ras_n,sdram_cas_n;
地址總線信號:sdram_addr,12位地址線復(fù)用[13]。
SDRAM數(shù)據(jù)讀/寫模塊,該模塊根據(jù)狀態(tài)轉(zhuǎn)換模塊的要求,通過雙向數(shù)據(jù)線方向控制實現(xiàn)數(shù)據(jù)線上讀寫狀態(tài)的轉(zhuǎn)換,主要是要配合數(shù)據(jù)總線使wrfifo的讀信號與數(shù)據(jù)總線占用同步,rdfifo的寫信號與數(shù)據(jù)總線占用同步,使得在讀寫狀態(tài)下數(shù)據(jù)以不同方向分別出現(xiàn)在數(shù)據(jù)總線上,這里需要參考工作狀態(tài)機(jī)work_state_r的轉(zhuǎn)換時序。
SDRAM在正式工作之前需要一定的時間對自身進(jìn)行配置,這段時間里數(shù)據(jù)不允許寫入到SDRAM中,如果強(qiáng)制寫入會造成數(shù)據(jù)的丟失,在這段時間需要用到計數(shù)器延遲相應(yīng)的時間等待SDRAM準(zhǔn)備完畢。在SDRAM存儲的整個工程中大量用到了計數(shù)器延遲的功能,準(zhǔn)確的實現(xiàn)了SDRAM工作時序的要求。
本設(shè)計采用的是三星公司12位的K4S641632N-LC60型號容量為64M的SDRAM芯片,以及Xilinx公司Spartan 3E系列的XC3S500E-4PQ208的FPGA芯片。實驗用Verilog HDL語言在Xilinx ISE 12.4的開發(fā)環(huán)境中進(jìn)行了設(shè)計輸入和綜合仿真。為了驗證準(zhǔn)確性,用 Modelsim 6.5進(jìn)行了功能仿真,并用NI-5122采集卡在LABVIEW環(huán)境下對單塊彈光調(diào)制器 (photoelastic modulator,PEM)產(chǎn)生的彈光調(diào)制干涉信號進(jìn)行數(shù)據(jù)采集,將采到的數(shù)據(jù)存儲到SDRAM中,然后將讀出的數(shù)據(jù)用MATLAB進(jìn)行數(shù)據(jù)處理,圖形還原。其存儲速度達(dá)到了100MHz。
初始化是一系列命令的集合,首先是發(fā)出NOP命令(空操作或命令禁止操作),200us時發(fā)出預(yù)充電命令,然后發(fā)八條刷新命令,最后發(fā)出LOAD MODEREGISTER(裝載模式寄存器)命令,本實驗中工作模式設(shè)置的是突發(fā)全頁讀寫,突發(fā)傳輸方式為順序傳輸,CAS延遲設(shè)置為3個時鐘周期。如圖2所示。
圖2 SDRAM上電初始化仿真
寫入操作是BURST(突發(fā))方式,BURST長度為一頁。全頁突發(fā)操作模式能夠很好地發(fā)揮SDRAM高速讀寫的性能,當(dāng)SDRAM工作在全頁突發(fā)模式時,讀寫操作所訪問的地址將在頁內(nèi)循環(huán),直至收到突發(fā)停止命令或預(yù)充電命令。此設(shè)計采用了突發(fā)停止命令終止頁模式 .在執(zhí)行寫入操作時,需要激活 (active)命令,寫 (burst write)命令,地址觸發(fā)等一系列操作。寫命令被觸發(fā)后,數(shù)據(jù)便以連續(xù)一頁即256個數(shù)據(jù)出現(xiàn)在數(shù)據(jù)總線上。讀完一頁之后,通過一個突發(fā)停止操作關(guān)閉當(dāng)前行,通過預(yù)充電命令(precharge)開啟下一需要被寫入的行。自動刷新 (autorefresh)命令周期性的刷新SDRAM,保證內(nèi)部數(shù)據(jù)不丟失。如圖3所示。
圖3 SDRAM寫操作仿真
原始數(shù)據(jù)是用NI公司的PXI-5122采集卡對彈光調(diào)制干涉信號進(jìn)行采集,采集的彈光調(diào)制干涉信號如圖4所示。經(jīng)過SDRAM寫入和讀出后,通過RS232串口在上位機(jī)上進(jìn)行顯示,然后將得到的數(shù)據(jù)經(jīng)MATLAB信號還原,得到的數(shù)據(jù)中出錯率在3%以內(nèi),誤差范圍較小,基本可以實現(xiàn)原始數(shù)據(jù)復(fù)原。結(jié)果如圖5所示。
圖4 NI-5122采集波形
圖5 MATLAB還原波形
本文基于Xilinx公司的Spantan-3E系列的FPGA芯片對彈光調(diào)制傅里葉變換光譜儀的高速數(shù)據(jù)存儲系統(tǒng)進(jìn)行了設(shè)計和軟件驗證,進(jìn)而選用三星公司的K4S641632N型號的SDRAM在硬件上實現(xiàn)了該系統(tǒng)數(shù)據(jù)的存儲,有效的解決了彈光調(diào)制傅里葉變換光譜儀高速,數(shù)據(jù)量大,需要緩存的問題。本實驗中SDRAM工作在突發(fā)頁操作模式下,數(shù)據(jù)讀寫速度達(dá)到了100MHz,存儲速度相較既有的存儲器使用上有了較大的提高,發(fā)揮了SDRAM存儲速度快、容量大的優(yōu)點,滿足了系統(tǒng)的實際要求。同時在系統(tǒng)中采用了模塊化的設(shè)計思想,適用于圖像采集,信號處理等許多方面,提高了系統(tǒng)設(shè)計的靈活性、簡化了二次開發(fā)。為后期采用更高性能的SDRAM數(shù)據(jù)存儲提供了良好的基礎(chǔ);但在調(diào)試過程中還存在一定的誤差,還需要進(jìn)一步完善。
[1]LI Jin,JIN Longxu,LI Guoning,et al.Application of SDRAM to the large field of view TDICCD space camera[J].Journal of Electronics &Information Technology,2012,34 (5):1246-1251(in Chinese).[李進(jìn),金龍旭,李國寧,等.SDRAM在大視場TDICCD空間相機(jī)中的應(yīng)用 [J].電子與信息學(xué)報,2012,34 (5):1246-1251.]
[2]LI Jun.Design of SDRAM controller and signal test[J].J of Wuhan Uni of Sci & Tech (Natural Science Edition),2006,27(3):596-598 (in Chinese).[黎俊.SDRAM 控制器設(shè)計及信號測試 [J].武漢科技大學(xué)學(xué)報 (自然科學(xué)版),2006,29(6):596-598.]
[3]JING Ning,WANG Zhibin,ZHANG Jilong,et al.Fast spectrum recovery of nonlinear optical path difference interferogram in photoelastic modulator [J].Laser Technology,2012,36(2):271-274 (in Chinese).[景寧,王志斌,張記龍,等.彈光調(diào)制非線性光程差干涉信號的快速反演 [J].激光技術(shù),2012,36 (2):271-274.]
[4]SONG Yiming,XIE Yu,LI Chunmao.Design of SDRAM controller based on FPGA [J].Application Research of Computers,2003,29 (9):10-13 (in Chinese). [宋一鳴,謝煜,李春茂.基于FPGA的SDRAM控制器設(shè)計 [J].計算機(jī)應(yīng)用,2003,29(9):10-13.]
[5]LU Genfeng.Embedded multi-cpu hardware design and implementation of video surveillance system [D].Chengdu:Southwest Jiaotong University,2009:1-69 (in Chinese).[陸艮峰.嵌入式多CPU視頻監(jiān)控系統(tǒng)硬件設(shè)計與實現(xiàn) [D].成都:西南交通大學(xué),2009:1-69.]
[6]WANG Qian,DING Tiefu.Realization of SDRAM controller in high-speed image storing system [J].Chinese Journal of Liquid Crystals and Displays,2006,21 (1):48-52 (in Chinese).[王騫,丁鐵夫.高速圖像存儲系統(tǒng)中SDRAM控制器的實現(xiàn)[J].液晶與顯示,2006,21 (1):48-52.]
[7]CHEN Yingsen,NING Weiming,ZENG Anjun.Design of SDRAM controller based on FPGA [J].Research on Telecommunication Technology,2008 (1):24-29 (in Chinese).[陳英森,寧韋銘,曾安軍.基于FPGA的SDRAM控制器設(shè)計[J].電信技術(shù)研究,2008 (1):24-29.]
[8]LI Yunzhi,LI Liping,YANG Heng.Application of LVDS difference interface based on FPGA [J].Design and Development of IC,2008,33 (12):1138-1142 (in Chinese). [李云志,李立萍,楊恒.基于FPGA的LVDS高速差分板間接口應(yīng)用 [J].集成電路設(shè)計與開發(fā),2008,33 (12):1138-1142.]
[9]ZHAO Chuanmeng,GAO Yan,ZHANG Rong.A simple design and implementation of SDRAM controller[J].Computer &Digital Engineering,2010,38 (8):197-200 (in Chinese).[趙傳猛,高巖,張蓉.一種簡單的SDRAM控制器實現(xiàn) [J].計算機(jī)與數(shù)字工程,2010,38 (8):197-200.]
[10]HOU Honglu,ZHANG Wenfang.Design scheme of SDRAM controller based on FPGA [J].Ordnance Industry Automation,2012,31 (2):57-61 (in Chinese).[侯宏錄,張文芳.基于FPGA的SDRAM控制器設(shè)計方案 [J].兵工自動化,2012,31 (2):57-61.]
[11]Hansoo Kim,In Cheol.High-performance and low-power memory-interface architechture for video processing applications[J].IEEE Transaction on Circuits and Systems for Video Technology,2001,11 (11):2011.
[12]Benny Akesson,Kees Goossens,Markus Ringhofer.A predictable SDRAM memory controller [C]//CODES+I(xiàn)SSS.NY,USA:ACM,2007.
[13]K4S641632N-LC60data sheet [M].Samsung.