1 引言
高速數(shù)據(jù)采集系統(tǒng)目前已在雷達(dá),、聲納、圖像處理,、語音識(shí)別,、通信、瞬態(tài)信號(hào)測試等領(lǐng)域得到廣泛應(yīng)用,。它的關(guān)鍵技術(shù)是高速ADC技術(shù),、數(shù)據(jù)存儲(chǔ)與傳輸技術(shù)和抗干擾技術(shù)。當(dāng)大量的高速實(shí)時(shí)數(shù)據(jù)經(jīng)過模數(shù)轉(zhuǎn)換后,,必須高速存儲(chǔ),,多通道高采樣率的數(shù)據(jù)采集系統(tǒng)會(huì)產(chǎn)生巨大的數(shù)據(jù)流。這樣就需要高速大容量的存儲(chǔ)板將數(shù)據(jù)存儲(chǔ)起來,,然后再讀回計(jì)算機(jī)進(jìn)行處理,。基于以上原因,,本文設(shè)計(jì)了可以同時(shí)存儲(chǔ)兩通道采樣數(shù)據(jù)的大容量存儲(chǔ)板,,板中采用了64片Samsung公司的高速大容量存儲(chǔ)器K9F2G08UOM,使整塊板卡的存儲(chǔ)容量達(dá)到128Gbit,。采用FPGA作為控制器,,通過標(biāo)準(zhǔn)的CPCI工控機(jī)箱操作存儲(chǔ)板,并通過CPCI總線將存儲(chǔ)板上的數(shù)據(jù)高速讀回計(jì)算機(jī),,提高了讀取數(shù)據(jù)的速度,。
2 K9F2G08UOM簡介
NOR Flash和NAND Flash是目前市場上的兩種主要的非易失性閃存技術(shù),本設(shè)計(jì)的目的是為了高速存儲(chǔ)大容量的數(shù)據(jù),,因此,,選擇NAND型K9F2G08U0M存儲(chǔ)器。它的存儲(chǔ)容量是2 Gbit,,8位位寬,,頁大小為2 048×8 bit,每塊由64頁組成,共有2 048塊,。每頁帶有64×8 bit的空閑存儲(chǔ)區(qū),,共有8 192 K×8 bit的空閑存儲(chǔ)區(qū)。頁編程的典型時(shí)間為300μs,,最大頁編程時(shí)間為700μ8,。頁內(nèi)連續(xù)最小訪問時(shí)間為30 ns/Byte,即數(shù)據(jù)寫入Flash數(shù)據(jù)寄存器的速度可達(dá)33 MB/s,。但是單頁數(shù)據(jù)的典型編程速度為2 048/300μs=6.8 MB/s,,最慢的編程速度為2 048/700μs=2.9 MB/s。塊擦除的典型時(shí)間為2 ms,。K9F2G08U0M具有硬件數(shù)據(jù)保護(hù)功能,,即在電源上電、掉電期間關(guān)閉編程/擦除操作,。K9F2G08U0M內(nèi)部寫控制器使得所有的編程和擦除操作自動(dòng)進(jìn)行,,片內(nèi)包含一個(gè)頁(2 048+64字節(jié))的數(shù)據(jù)寄存器,讀寫過程中始終是將存儲(chǔ)單元數(shù)據(jù)或外部數(shù)據(jù)先緩存到數(shù)據(jù)寄存器,,然后再讀出數(shù)據(jù)或?qū)懭氪鎯?chǔ)單元,。因此,它是基于頁讀寫,,基于塊擦除的,。當(dāng)然,它也支持隨機(jī)讀寫,。但本設(shè)計(jì)目的是高速存儲(chǔ)數(shù)據(jù),,因此對(duì)它的讀寫操作完全是基于頁的。K9F2G08U0M的主要引腳有CLE(命令鎖存允許),、ALE(地址鎖存允許),、CE(片選)、WE(寫允許),、RE(讀允許),、WP(寫保護(hù))、R/B(準(zhǔn)備好/忙),、PRE(上電讀使能),、I/O0~I(xiàn)/O7(輸入,輸出),。其中I/O0~I(xiàn)/O7既可作為數(shù)據(jù)輸入輸出引腳,,又可作為命令地址的輸入引腳,命令,、地址,、數(shù)據(jù)分時(shí)復(fù)用,,根據(jù)不同的命令區(qū)分地址和數(shù)據(jù)。一般的操作流程為:
1) 寫入命令,,通知器件所要完成的操作(讀,、寫、擦除等),;
2) 寫入地址,,即寫入要讀寫數(shù)據(jù)的起始地址,包括列地址和頁地址,;
3) 如果是讀或者擦除,,寫入一個(gè)確認(rèn)命令。如果是寫操作,,輸人待編程的數(shù)據(jù),,完成后輸入編程確認(rèn)命令。
因?yàn)镵9F2G08U0M共有128 K頁,,每頁的大小為(2 048+64)×8 bit,,所以在寫入地址時(shí)列地址需要12根地址線,頁地址需要17根地址線,。這樣就需要5個(gè)時(shí)鐘周期來寫入地址。前兩個(gè)時(shí)鐘寫入列地址,,后三個(gè)時(shí)鐘寫人頁地址,。
3 系統(tǒng)設(shè)計(jì)
3.1 總體硬件設(shè)計(jì)
外部數(shù)據(jù)采集系統(tǒng)是2個(gè)40 MHz采樣的16位A/D通道,所以設(shè)計(jì)時(shí)分成兩個(gè)通道獨(dú)立設(shè)計(jì),。雖然K9F2G08U0M的數(shù)據(jù)寄存器寫入速度可達(dá)33MB/s,,但在FPGA設(shè)計(jì)時(shí),為了在時(shí)序上更加可靠,,選擇使用25 MHz的時(shí)鐘設(shè)計(jì),,則K9F2G08U0M的寫入速度為50 MB/s(把兩個(gè)K9F2G08U0M并成16bit,寫入速度即為25 M×l6 b/s),。這樣,,在FPGA內(nèi)部開辟3個(gè)頁大小的雙口RAM作為緩存區(qū)就能滿足40 M×16 b/s的寫入速度,即在寫第2,、3個(gè)RAM的時(shí)間(25 ns×2 048×2=102.4μs)內(nèi),,啟動(dòng)第1個(gè)RAM把數(shù)據(jù)寫 入Flash的數(shù)據(jù)寄存器,所需時(shí)間為40 ns×2 048=81.92μs,,小于102.4μs,。
在讀回?cái)?shù)據(jù)時(shí),如以20 MHz讀取Flash,,以40MHz讀出緩沖區(qū)中的數(shù)據(jù),,3個(gè)雙口RAM就能剛好滿足要求,,如圖1。讀取K9F2G08U0M一頁數(shù)據(jù)能達(dá)到33 MHz的速度,,為了讓讀寫Flash使用同一時(shí)鐘,,讀Flash也采用25 MHz的速度。同時(shí)為了增加系統(tǒng)設(shè)計(jì)的冗余,,采用4頁的雙口RAM作為緩沖區(qū),。所以每片F(xiàn)PGA內(nèi)部至少需要4×2 048×16 bit="131" 072 bit的存儲(chǔ)空間。
由于數(shù)據(jù)在寫入Flash后還有較長的編程時(shí)間,,一頁的編程時(shí)間典型值為300μs,,最大值為700μs。數(shù)據(jù)在存儲(chǔ)上不能有任何的停頓,,否則就會(huì)丟失數(shù)據(jù),,所以不能使用R/B信號(hào)進(jìn)行設(shè)計(jì)。為了系統(tǒng)更加可靠,,選擇最大編程時(shí)間700μs,。兩次對(duì)同一組Flash進(jìn)行寫操作的時(shí)間間隔為700μs+81.92μs=781.92μs,一頁的數(shù)據(jù)寫到雙口RAM要用25ns×2 048=51.2μs,??倳r(shí)間除以寫一頁數(shù)據(jù)的時(shí)間:781.92/51.2=15.3μs,說明一個(gè)循環(huán)內(nèi)至少需要16組Flash才能滿足要求,。所以在設(shè)計(jì)中,,對(duì)于每路A/D采樣通道都用一片F(xiàn)PGA作為緩沖和控制系統(tǒng),在每片F(xiàn)PGA內(nèi)部都采用4個(gè)緩沖區(qū),,每個(gè)緩沖區(qū)對(duì)應(yīng)一條外部總線,,每條總線上掛有4組K9F2G08U0M×2(將兩片F(xiàn)lash并成16位操作,即把I/O并成16位,,共用控制信號(hào)線),。系統(tǒng)整體框圖如圖2所示。
圖2中2個(gè)外部接口連接2個(gè)A/D通道,,采用兩片F(xiàn)PGA作為控制和緩沖區(qū),,每片控制16組Flash。存儲(chǔ)板通過PCI9054與CPCI總線相連,,通過CPCI總線可以將存儲(chǔ)板數(shù)據(jù)高速讀回計(jì)算機(jī),。
3.2 系統(tǒng)設(shè)計(jì)思想
為了解決高速的數(shù)據(jù)采集和低速的Flash訪問速度之間的矛盾,采取將數(shù)據(jù)流串并轉(zhuǎn)換,,復(fù)制多個(gè)操作模塊并行處理的設(shè)計(jì)方法,。通過利用FPGA內(nèi)部的存儲(chǔ)區(qū)實(shí)現(xiàn)4個(gè)雙口RAM作為緩沖區(qū)。每條外部Flash總線用一個(gè)雙口RAM,,采集到的數(shù)據(jù)分時(shí)加載到4個(gè)RAM中,,然后再寫入Flash,。寫入Flash的操作以流水方式進(jìn)行,具體方式如圖3所示,。首先,,外部A/D采樣通道寫數(shù)據(jù)到RAM1。當(dāng)RAM1寫滿時(shí),,加載數(shù)據(jù)到第一組Flash數(shù)據(jù)寄存器,,加載完成后第一組Flash進(jìn)入自動(dòng)編程階段;當(dāng)RAM2寫滿時(shí),,第2組Flash加載開始,,數(shù)據(jù)加載完成后,進(jìn)入自動(dòng)編程階段,。依次加載RAM3,,當(dāng)RAM4寫滿,第4組Flash開始加載后,,F(xiàn)PGA內(nèi)部控制重新寫RAM1,,開始對(duì)第5組Flash操作,然后依此循環(huán)方式對(duì)第6~16組Flash進(jìn)行操作,;當(dāng)?shù)?6組數(shù)據(jù)加載完成后,,第1組Flash已經(jīng)編程結(jié)束,接著從第1組Flash開始加載和編程,??煽闯鱿?6組Flash寫入數(shù)據(jù)是并行的,通過并行寫操作,,可存儲(chǔ)高速采集的數(shù)據(jù)。
FPGA內(nèi)部設(shè)計(jì)大體可劃分為PCI9054操控部分和數(shù)據(jù)錄放部分,。PCI9054操控部分一方面跟PCI9054接口,,一方面要完成對(duì)Flash的操作。數(shù)據(jù)錄放部分主要完成外部數(shù)據(jù)寫入,、讀出以及擦除,、建立無產(chǎn)塊信息列表等功能。由于對(duì)4組Flash的操作都是一樣的,,所以數(shù)據(jù)錄放部分可以分為數(shù)據(jù)流控制部分和Flash操控部分,。數(shù)據(jù)流控制部分控制數(shù)據(jù)寫入或讀取哪組Flash;Flash操控部分用于對(duì)Flash的具體操作,。圖4為數(shù)據(jù)錄放部分FPGA功能結(jié)構(gòu),。為了節(jié)省內(nèi)部存儲(chǔ)單元的數(shù)量,寫入和讀取數(shù)據(jù)要使用同樣的緩存區(qū),。
3.3 無效塊的建立和操作
當(dāng)一個(gè)塊中有一位或更多位不能正確操作時(shí),,就定義此塊為無效塊,。無效塊并不影響其他塊的正常工作,各個(gè)塊之間是相互獨(dú)立的,。所選的K9F2G08U0M在出廠時(shí)可能存在無效塊,,在使用中也可能產(chǎn)生新的無效塊,但是器件的第一個(gè)塊一定不是無效塊,。NAND Flash在出廠時(shí)就標(biāo)記本身的無效塊,,每個(gè)塊的第一頁或第二頁的空閑區(qū)的第一個(gè)數(shù)據(jù)不是FFh,則表示此塊為無效塊,。為了保證Flash的正確操作,,必須在操作之前建立無效塊信息表。在每片F(xiàn)PGA中設(shè)計(jì)了4個(gè)2 048×1 bit的RAM用于存儲(chǔ)無效塊的信息,。RAM的每一個(gè)存儲(chǔ)單元存儲(chǔ)相應(yīng)總線上的4組Flash的無效塊信息,。其中某一塊的無效塊信息是4組Flash的無效塊信息相“與”后的結(jié)果(1表示正常,0表示無效塊),。在對(duì)Flash進(jìn)行讀,、寫或擦除操作之前,應(yīng)先從RAM中讀取無效塊信息,,然后根據(jù)無效塊信息決定是否對(duì)當(dāng)前塊操作,。
3.4 讀寫Flash操作
對(duì)Flash的讀寫操作都是基于頁的,讀寫操作的時(shí)序分別如圖5和圖6所示,。計(jì)算機(jī)通過CPCI總線發(fā)送出讀或?qū)懨詈?,F(xiàn)PGA內(nèi)部根據(jù)接收到的命令執(zhí)行相應(yīng)操作。寫Flash時(shí),,外部采集的數(shù)據(jù)輸入RAM1,,RAM1滿后,開始向RAM2寫入數(shù)據(jù),,同時(shí)選通第一條總線上第一組Flash的寫模塊,,在寫模塊中通過計(jì)數(shù)器產(chǎn)生ALE、CLE,、WE,、RE等控制寫Flash的相應(yīng)時(shí)序,將數(shù)據(jù)從RAM中編程到Flash內(nèi)存,,并令頁地址加1,,依次循環(huán)(循環(huán)流程見圖3)。當(dāng)總線上的第4組Flash的頁地址為64時(shí),,塊地址加1,,并讀取無效塊信息,如果為無效塊,,則屏蔽此塊,,重新讀取下一塊信息,,直至讀取到正常塊為止。如果是正常塊,,則向此塊中寫入數(shù)據(jù),,同時(shí)將頁地址清零。讀操作與寫操作類似,,只不過是將Flash中的數(shù)據(jù)讀出先送到RAM,,然后依循環(huán)次序讀取RAM即可。
3.5 PCI9054操控部分的設(shè)計(jì)
通過編寫PCI9054專用的驅(qū)動(dòng)和應(yīng)用軟件,,實(shí)現(xiàn)由計(jì)算機(jī)通過CPCI總線操控存儲(chǔ)板卡,。在應(yīng)用軟件中,對(duì)Flash讀寫或者擦除等命令自定義為對(duì)CPCI總線發(fā)送特定的數(shù)據(jù),。而在FPGA內(nèi)部根據(jù)PCI9054發(fā)送的局部端數(shù)據(jù)線上的特定數(shù)據(jù)判斷是何種操作,,并執(zhí)行相應(yīng)操作。FPGA和PCI9054通信的主要信號(hào)線有LHOLD,、LHOLDA,、READY、ADS,、ADDR,、DATA,利用這些信號(hào)線可以實(shí)現(xiàn)PCI9054局部端和FPGA握手,。將數(shù)據(jù)寫到計(jì)算機(jī)中,。在PCI9054專用的驅(qū)動(dòng)和應(yīng)用軟件中,利用DMA方式讀取Flash,,讀取速度可提高至1.3 MHz×16 bit,。
4 結(jié)束語
本設(shè)計(jì)采用流水、并行處理技術(shù),,利用FPGA內(nèi)部嵌入的存儲(chǔ)塊設(shè)計(jì)一組高速數(shù)據(jù)緩沖區(qū),,使得多個(gè)慢速的存儲(chǔ)器件并行工作,令系統(tǒng)內(nèi)外部數(shù)據(jù)的速率匹配,,避免了外置高速緩存,簡化了硬件電路,,且極大地提高了存儲(chǔ)數(shù)據(jù)的速率,。大容量高密度閃存器件可使單片存儲(chǔ)板容量高達(dá)128 Gbit。在FP-GA內(nèi)部設(shè)計(jì)中,,建立Flash無效塊信息列表,,并在此基礎(chǔ)上對(duì)Flash進(jìn)行讀、寫,、擦除及重建無效塊信息等操作,。使系統(tǒng)具有集成度高,、靈活性好、可移植性強(qiáng),、速度快等特點(diǎn),。通過CPCI總線采取DMA方式讀取,極大地提高了讀取速度,。當(dāng)接收到的數(shù)據(jù)帶寬很大,,速度很高時(shí),可將存儲(chǔ)板并聯(lián)起來,,多個(gè)存儲(chǔ)板級(jí)聯(lián)可滿足更大的存儲(chǔ)容量需求,,也可將級(jí)聯(lián)并聯(lián)二者結(jié)合起來以滿足不同系統(tǒng)的要求。整個(gè)系統(tǒng)基于CPCI工控機(jī)箱,,更適合于野外的工作環(huán)境,,并能及時(shí)保存、分析數(shù)據(jù),。