趙 越,余紅英,王一奇
(1.中北大學(xué)電氣與控制工程學(xué)院,太原030051;2.山東航天電子技術(shù)研究所軟件中心,煙臺(tái)264010)
隨著現(xiàn)代探測(cè)設(shè)備的發(fā)展和更新,設(shè)備獲取的信息量變得更大,相應(yīng)的要求存儲(chǔ)的速率也要提高[1]。目前高速存儲(chǔ)系統(tǒng)主要分為基于PC的數(shù)據(jù)采集存儲(chǔ)系統(tǒng)和基于硬件平臺(tái)的采集存儲(chǔ)系統(tǒng)。計(jì)算機(jī)的體積限制了它在不同環(huán)境下的使用,而基于硬件平臺(tái)的存儲(chǔ)模塊集成度高、體積小,可以在更多環(huán)境下應(yīng)用。西安電子科技大學(xué)的安凱用2 GB的DDR3芯片作為緩存陣列,8塊Micro SD卡作為存儲(chǔ)介質(zhì),在800 MHz芯片時(shí)鐘下實(shí)現(xiàn)了470 MB/s的存儲(chǔ)速度[2],但芯片存儲(chǔ)模塊利用率不高。中北大學(xué)的石帥等在40 MB/s的芯片時(shí)鐘下用一塊FLASH芯片的兩個(gè)片選使用交錯(cuò)式雙頁(yè)面編程方法實(shí)現(xiàn)了30 MB/s的存儲(chǔ)速度,但沒(méi)有給芯片足夠的突發(fā)存儲(chǔ)時(shí)間[3]?,F(xiàn)有的高速采集存儲(chǔ)系統(tǒng)大多通過(guò)使用存儲(chǔ)速率更高的存儲(chǔ)芯片來(lái)增加存儲(chǔ)速度,在現(xiàn)有資源利用的角度沒(méi)有做更深入的探究。本文設(shè)計(jì)的高速存儲(chǔ)采集系統(tǒng)通過(guò)FPGA采集數(shù)據(jù),用NAND FLASH芯片作為存儲(chǔ)介質(zhì),通過(guò)FPGA直接操作NAND FLASH芯片,不僅能減小PCB占用面積,又能用流水線操作利用FLASH芯片的“Busy”時(shí)間[4]。雙FIFO用“乒乓讀寫”技術(shù),可以做到數(shù)據(jù)不間斷的存儲(chǔ),保證數(shù)據(jù)的實(shí)時(shí)性和可靠性。2塊NAND FLASH芯片有4個(gè)片選,通過(guò)FIFO乒乓讀寫結(jié)合四流水線操作可以完全發(fā)揮每一片NAND FLASH的性能,從而做到連續(xù)不間斷的高速數(shù)據(jù)存儲(chǔ)[5-6]。本系統(tǒng)在現(xiàn)有條件下,使用36 MB時(shí)鐘僅用2塊存儲(chǔ)芯片就可以實(shí)現(xiàn)18 MB/s的存儲(chǔ)速率,在使用同樣存儲(chǔ)速率的芯片時(shí),流水線操作可以充分發(fā)揮FLASH芯片的性能。
存儲(chǔ)系統(tǒng)由FPGA、FIFO組成和FLASH芯片組成(見(jiàn)圖1)。其中2個(gè)FIFO在“FIFO”模塊中進(jìn)行例化并控制兩FIFO讀寫順序。FPGA控制兩FIFO的讀寫順序,并將FIFO讀出的數(shù)據(jù)依照4條流水線的順序?qū)懭隖LASH。
圖1 存儲(chǔ)系統(tǒng)設(shè)計(jì)Fig.1 Storage system design
工作過(guò)程中,兩個(gè)FIFO先寫入相機(jī)接收到的數(shù)據(jù),然后FIFO1數(shù)據(jù)讀出,向第一片F(xiàn)LASH芯片寫數(shù)據(jù),完成后片選(Chip selection,CS)1需要進(jìn)行內(nèi)部編程,故進(jìn)入忙碌時(shí)間。此時(shí)FIFO1向CS2寫入數(shù)據(jù),CS2加載完成后繼續(xù)向CS3寫入數(shù)據(jù),第四步向CS4寫入數(shù)據(jù),至此FIFO1中的數(shù)據(jù)已全部讀出。此時(shí),若CS1的內(nèi)部編程已完成,忙碌時(shí)間已過(guò),則可以寫入數(shù)據(jù),進(jìn)入第2個(gè)循環(huán);否則按照實(shí)際情況在保證滿足相機(jī)數(shù)據(jù)實(shí)時(shí)寫入的條件下在CS4加載完成后添加延遲,等待CS1頁(yè)編程完成,開(kāi)始下一輪流水線操作。第二輪由FIFO2讀出數(shù)據(jù)向4片F(xiàn)LASH芯片中寫入,同時(shí)相機(jī)數(shù)據(jù)寫入FIFO1。此過(guò)程不斷循環(huán),即為FIFO的乒乓讀寫和4條流水線數(shù)據(jù)存儲(chǔ)的結(jié)合。四流水線寫入的工作過(guò)程如圖2所示。
圖2 四流水線寫入工作過(guò)程Fig.2 Four-line writing process
設(shè)計(jì)系統(tǒng)的數(shù)據(jù)來(lái)源是18 MB/s相機(jī)數(shù)據(jù),存儲(chǔ)芯片的時(shí)鐘為36 MHz。為了連續(xù)不間斷且高速地存儲(chǔ)相機(jī)返回的數(shù)據(jù),系統(tǒng)采用了2個(gè)FIFO乒乓操作和4條流水線數(shù)據(jù)存儲(chǔ)結(jié)合的設(shè)計(jì)[7]。
相機(jī)的時(shí)鐘頻率為18 MHz,1頁(yè)內(nèi)存的大小為4 KB,即4 096個(gè)字節(jié)。所以1頁(yè)數(shù)據(jù)的傳輸時(shí)間t1(單位:μs)為
系統(tǒng)選擇兩塊NAND FLASH芯片,4個(gè)片選端,采用四流水線設(shè)計(jì)。設(shè)計(jì)2個(gè)FIFO,每個(gè)FIFO的大小為16 KB,可以一次寫入4頁(yè)數(shù)據(jù)的同時(shí)緩存下面4頁(yè)的數(shù)據(jù)[4]。相機(jī)傳輸4頁(yè)數(shù)據(jù)的時(shí)間tc為
設(shè)計(jì)2個(gè)容量為16 KB的FIFO進(jìn)行乒乓操作,當(dāng)FIFO1進(jìn)行寫操作908μs時(shí),F(xiàn)IFO2進(jìn)行讀操作908μs,讀 出 來(lái) 的 數(shù) 據(jù) 同 步 寫 入NAND FLASH;FIFO2進(jìn) 行 寫 操 作908 ns時(shí),F(xiàn)IFO1進(jìn) 行 讀 操 作908 ns,依次循環(huán),保證相機(jī)輸入速率和NAND FLASH存儲(chǔ)速率進(jìn)行匹配,使紅外相機(jī)的數(shù)據(jù)能連續(xù)地寫入NAND FLASH中。
由于NAND FLASH采用36 MHz時(shí)鐘,所以NAND FLASH寫1頁(yè)數(shù)據(jù)需要的時(shí)間為1個(gè)起始命令(80H),5位頁(yè)地址,4 096位灰度圖數(shù)據(jù),1個(gè)停止命令(10H),1個(gè)0.1μs延遲[8-9]。
選用的NAND FLASH典型忙碌時(shí)間為200μs,最大忙碌時(shí)間為700μs[10]。只要保證下一次循環(huán)到CS1時(shí)CS1已經(jīng)完成頁(yè)編程操作,就可以保證四流水線操作的正確性,不浪費(fèi)芯片性能[11]。按照最大忙碌時(shí)間700μs算,每片F(xiàn)LASH芯片完成加載所需的時(shí)間ts為
則4片F(xiàn)LASH加載完需要460μs。
芯片1忙碌完成的時(shí)間tb為
可見(jiàn)460μs<815μs,所以此時(shí)芯片1可能未加載完成,所以在每寫完4片之后加1個(gè)400μs的延遲。所以四流水線模式寫編程頁(yè)(16 KB)的時(shí)間tq為
tq小于相機(jī)寫入FIFO的時(shí)間tc,能保證相機(jī)數(shù)據(jù)實(shí)時(shí)寫入NAND FLASH中,且滿足相機(jī)傳輸?shù)淖畲笏俾?8 MB/s。在四流水線工作模式下Busy時(shí)間被很好地利用,極大地提高了存儲(chǔ)速率和數(shù)據(jù)寫入的連續(xù)性[12]。
將一組連續(xù)的數(shù)據(jù)寫入FIFO,再由FIFO寫入FLASH(見(jiàn)圖3)。其中flag_read是讀FIFO的標(biāo)志位,高電平代表讀出;x是控制FIFO乒乓操作的標(biāo)志位,上升沿代表切換FIFO;q和indata連在一起,是從FIFO讀出的數(shù)據(jù);U4/data是FLASH1的數(shù)據(jù)總線,u4/data1是FLASH2的數(shù)據(jù)總線;fl_ce、fl_ce_1、fl_ce_2、fl_ce_1_2是flash片選信號(hào),低電平代表選中,分別代表芯片1到芯片4;rdreq_和rdreq1_是讀FIFO的標(biāo)志位,wrreq_和wrreq1_是寫FIFO的標(biāo)志位;fl_we和fl_we2是FLASH的寫使能信號(hào);其他信號(hào)是FLASH和寫FIFO的時(shí)鐘等。
圖3 數(shù)據(jù)存儲(chǔ)仿真時(shí)序圖Fig.3 Data storage simulation sequence diagram
由圖3可以看出,x的1個(gè)上升沿到來(lái)同時(shí)flag_read電平升高,開(kāi)始讀FIFO。fl_ce電平拉低,代表選中第一塊FLASH的第一片存儲(chǔ)芯片,即CS1,u4/data的數(shù)據(jù)開(kāi)始隨著時(shí)鐘在fl_we的上升沿持續(xù)寫入。rdreq_電平升高,說(shuō)明讀的是FIFO1中的數(shù)據(jù)。wrreq_1是低電平,F(xiàn)IFO2正在寫入數(shù)據(jù)。每組flag_read的高電平中間有3個(gè)下降沿,是切換片選時(shí)FPGA對(duì)FLASH輸入指令和地址的時(shí)間。CS1寫完后fl_ce拉高,fl_ce_1電平拉低,直到CS2寫完,開(kāi)始寫FLASH2,此時(shí)FLASH1的兩個(gè)片選信號(hào)可以暫時(shí)不變,直到再次寫FLASH1時(shí)根據(jù)流水線改變電平。u4/data和u4/data1是寫FLASH的信號(hào),所以結(jié)束后要給FLASH一個(gè)結(jié)束信號(hào)10H。
用上位機(jī)軟件將紅外圖片轉(zhuǎn)換為圖像數(shù)據(jù),并作為i1/data的數(shù)據(jù);將程序下載到硬件系統(tǒng)中,待FLASH寫入完成后連接上位機(jī)將FLASH中的數(shù)據(jù)讀取并顯示圖像,結(jié)果如圖4所示。
圖4 仿真數(shù)據(jù)顯示Fig.4 Simulation data display
通過(guò)仿真驗(yàn)證,F(xiàn)IFO乒乓讀寫和FLASH片選可以正確工作。
(1)硬件系統(tǒng)總體設(shè)計(jì)
相機(jī)采集存儲(chǔ)系統(tǒng)由紅外相機(jī)、FPGA主控系統(tǒng)、存儲(chǔ)部分、電源部分和上位機(jī)組成(見(jiàn)圖5)。
(2)硬件設(shè)計(jì)
電源模塊主要由3個(gè)AMS1117分別給系統(tǒng)提供1.2 V、2.5 V和3.3 V的電源電壓,供PCB上其他模塊使用。
主控系統(tǒng)由主控芯片及其外圍電路組成。主控芯片選用颶風(fēng)3系的EP3C25Q240C8N,功耗較低,資源適合本系統(tǒng);程序下載用10針JTAG下載口,程序固化在EPCS16里。
圖5 硬件總體設(shè)計(jì)Fig.5 Overall design of hardware
紅外相機(jī)的型號(hào)為L(zhǎng)A6110,分辨率為640×512,探測(cè)幀頻為50 Hz,時(shí)鐘頻率為18 MHz,輸出的數(shù)字信號(hào)支持Camera Link協(xié)議。
為了得到完整的紅外相機(jī)圖像,突發(fā)存儲(chǔ)速度需達(dá)到36 MB/s。存儲(chǔ)系統(tǒng)由兩塊NAND FLASH組成,采用三星的K9WBG08U 1M,時(shí)鐘頻率36 MHz,其大小為4 GB,2個(gè)一共8 GB,每塊NAND FLASH內(nèi)部有2個(gè)片選端,可以通過(guò)片選來(lái)操作具體的片。1片有8 192個(gè)塊,1塊有64頁(yè),1頁(yè)有4 KB的存 儲(chǔ)容量。
USB2.0通信模塊由MINI-B、68013和24LC64組成,可將FLASH中的數(shù)據(jù)傳輸?shù)缴衔粰C(jī)。
將主控芯片、電源管理、存儲(chǔ)芯片和接口等設(shè)計(jì)在1塊9 cm×8 cm的PCB上,集成度更高,小體積的特點(diǎn)使本系統(tǒng)可以應(yīng)用在更多場(chǎng)景。如圖6所示為PCB的設(shè)計(jì)。
圖6 系統(tǒng)PCB設(shè)計(jì)Fig.6 System PCB design
(3)硬件存儲(chǔ)系統(tǒng)驗(yàn)證
編寫一個(gè)偽隨機(jī)碼生成模塊,生成9階偽隨機(jī)碼[13]。將生成的偽隨機(jī)數(shù)寫入到NAND FLASH中,再用上位機(jī)讀取出來(lái),通過(guò)MATLAB仿真軟件可以將原始碼與上位機(jī)讀出的偽隨機(jī)碼做相關(guān)檢測(cè),得到的誤碼率即為存儲(chǔ)的誤碼率。用線性移位寄存器生成偽隨機(jī)碼,每次將9位2進(jìn)制數(shù)的最高位提取輸出,然后將偽隨機(jī)數(shù)左移一位,最高位和第4位進(jìn)行異或運(yùn)算,并將結(jié)果補(bǔ)充至最低位。將FPGA生成的偽隨機(jī)碼寫入NAND FLASH中,用上位機(jī)讀出的數(shù)據(jù)如圖7所示。
圖7 上位機(jī)讀出的數(shù)據(jù)Fig.7 Data read by the host computer
將讀出的數(shù)據(jù)與原始碼進(jìn)行相關(guān)性檢測(cè)試驗(yàn),為方便觀測(cè),每次截取100 KB的數(shù)據(jù)進(jìn)行相關(guān)檢測(cè)(見(jiàn)圖8)。所有數(shù)據(jù)完成檢測(cè)后,誤碼率約為10-6,數(shù)據(jù)比較可靠,對(duì)本試驗(yàn)的影響可忽略。
圖8 相關(guān)性檢測(cè)試驗(yàn)結(jié)果Fig.8 Results of correlation test
將存儲(chǔ)系統(tǒng)連接到紅外相機(jī),接通電源后紅外相機(jī)數(shù)據(jù)存儲(chǔ)到NAND FLASH中,然后連接上位機(jī)將NAND FLASH中的視頻讀出。上位機(jī)顯示的相機(jī)圖像如圖9所示。
圖9 上位機(jī)顯示的相機(jī)圖像Fig.9 Camera image displayed by the host computer
由圖片可以看出,畫面正常無(wú)壞點(diǎn),紙盒上的“DDS”“仰臥板”等字樣清晰可見(jiàn)。實(shí)驗(yàn)表明紅外相機(jī)的圖像得到正確的存儲(chǔ)和讀取。
經(jīng)過(guò)試驗(yàn)驗(yàn)證,系統(tǒng)可以實(shí)現(xiàn)18 MB/s的紅外相機(jī)數(shù)據(jù)實(shí)時(shí)存儲(chǔ)。存儲(chǔ)系統(tǒng)具有較強(qiáng)的適應(yīng)性,在存儲(chǔ)速率要求更高的條件下增加芯片數(shù)量,可以更好地
利用FLASH的Busy時(shí)間,在保證數(shù)據(jù)存儲(chǔ)連續(xù)性的同時(shí),在同樣的芯片性能下達(dá)到更高的存儲(chǔ)速度。若使用n組流水線,每組多個(gè)芯片流水處理,n組并行存儲(chǔ)的方法,可以達(dá)到n倍FLASH時(shí)鐘的存儲(chǔ)速度。