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