《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > LabVIEWFPGA模塊實(shí)現(xiàn)FIFO深度設(shè)定
LabVIEWFPGA模塊實(shí)現(xiàn)FIFO深度設(shè)定
摘要: 為了解決基于LabVIEWFPGA模塊的DMAFIFO深度設(shè)定不當(dāng)帶來(lái)的數(shù)據(jù)不連續(xù)問(wèn)題,結(jié)合LabVIEWFPGA的編程特點(diǎn)和DMAFIFO的工作原理,,提出了一種設(shè)定FIFO深度的方法。對(duì)FIFO不同深度的實(shí)驗(yàn)表明,,采用該方法設(shè)定的FIFO深度能夠比較好地滿足系統(tǒng)對(duì)數(shù)據(jù)連續(xù)傳輸?shù)囊蟆Q芯拷Y(jié)果對(duì)深入展開(kāi)研究和工程設(shè)計(jì)具有一定的指導(dǎo)意義,。
關(guān)鍵詞: 虛擬儀器 FIFO FPGA
Abstract:
Key words :

引言

數(shù)據(jù)進(jìn)入FPGA的速率高于傳出的速率,,持續(xù)的傳輸會(huì)造成數(shù)據(jù)的溢出,斷續(xù)的傳輸可能會(huì)造成數(shù)據(jù)不連續(xù),。使用基于LabVIEW FPGA的DMA FIFO作為主控計(jì)算機(jī)和FPGA之間的緩存,,若DMAFIFO深度設(shè)置的合適,,F(xiàn)IFO不會(huì)溢出和讀空,那么就能實(shí)現(xiàn)數(shù)據(jù)輸出FPGA是連續(xù)的,。

本文在介紹了LabVIEW FPGA模塊程序設(shè)計(jì)特點(diǎn)的基礎(chǔ)上,,結(jié)合DMA FIFO的工作原理,提出了一種設(shè)定FIFO深度的方法,,解決了FIFO溢出,、讀空的問(wèn)題,實(shí)現(xiàn)了數(shù)據(jù)的連續(xù)傳輸,。實(shí)驗(yàn)結(jié)果表明該方法正確,、可行,程序設(shè)計(jì)滿足系統(tǒng)對(duì)數(shù)據(jù)傳輸連續(xù)性的要求,。

1 LabVIEW FPGA模塊

LabVIEW FPGA是LabVIEW的一個(gè)子模塊,,使用該模塊可以通過(guò)圖形化的編程對(duì)NI公司RIO(Reconfigurable I/O)設(shè)備上的FPGA進(jìn)行配置。圖形化的程序直接在硬件上實(shí)現(xiàn),,通過(guò)對(duì)RIO設(shè)備上的I/O接口的控制,,可以靈活地對(duì)I/O信號(hào)進(jìn)行分析和處理,表現(xiàn)出比固定I/O硬件更加優(yōu)異的特性,。使用LabVIEWFPGA模塊開(kāi)發(fā)出來(lái)的系統(tǒng)具有開(kāi)發(fā)周期短,、結(jié)構(gòu)模塊化、升級(jí)方便等優(yōu)點(diǎn),。例如,,圖1表示了一個(gè)用LabVIEW FPGA模塊設(shè)計(jì)的程序,在FPGA上實(shí)現(xiàn)方波發(fā)生器,。該方波發(fā)生器通過(guò)數(shù)字接口DIO_1輸出方波,,其占空比和周期可調(diào)。LabVIEW FPGA模塊在程序的設(shè)計(jì)與實(shí)現(xiàn)上都展現(xiàn)出了極大的靈活性,。

FPGA上實(shí)現(xiàn)方波發(fā)生器

1.1 LabVIEW FPGA程序開(kāi)發(fā)流程

使用LabVIEW FPGA模塊開(kāi)發(fā)應(yīng)用程序的流程如圖2所示。首先創(chuàng)建FPGA vi,,之后用FPGA設(shè)備仿真器在主控計(jì)算機(jī)上運(yùn)行程序,,反復(fù)地調(diào)試、修改,,直至程序正確無(wú)誤,。然后編譯FPGA vi,并把程序下載到FPGA上,。FPGA部分的程序完成后,,再根據(jù)需要在主控計(jì)算機(jī)上創(chuàng)建用戶界面程序Host vi,最終就完成整個(gè)系統(tǒng)的設(shè)計(jì),。

FPGA設(shè)備仿真器的打開(kāi)方法是:首先在“項(xiàng)目瀏覽器”窗口中的打開(kāi)“我的電腦”子菜單,,右擊子菜單中的“FPGA Target”并在快捷菜單中選擇“Execute vion”下一級(jí)子菜單中的“Development Computer with Simulated I/O”,。然后再在FPGA vi中點(diǎn)擊“Run”按鈕,這時(shí)程序在FPGA的設(shè)備仿真器上運(yùn)行,。

1.2 開(kāi)發(fā)FPGA vi

發(fā)應(yīng)用程序的第一步是創(chuàng)建用于配置PXIe-5641R板載FPGA的程序,。在FPGA vi中可以實(shí)現(xiàn)算法邏輯,包括信號(hào)同步,,定制數(shù)字通信協(xié)議,,板載控制和預(yù)警處理判決機(jī)制等功能。通過(guò)LabVIEW FPGA模塊,,可使用LabVIEW開(kāi)發(fā)環(huán)境和許多類似的功能,。但是由于FPGA不支持浮點(diǎn)操作,所以LabVIEW FPGA模塊較之LabVIEW完整Windows版開(kāi)發(fā)軟件缺少了一些操作符和分析函數(shù),。另外,,由于PXIe-5641R板卡沒(méi)有硬盤(pán)和操作系統(tǒng),因此不支持文件I/O和ActiveX功能,。LabVIEW FPGA模塊的函數(shù)面板如圖3所示,。 

LabVIEW FPGA模塊的函數(shù)面板圖

硬件對(duì)象不管是FPGA設(shè)備還是FPGA仿真器,,都可以訪問(wèn)LabVIEW FPGA函數(shù),。仿真器使用RIO設(shè)備的I/O接口,可在主機(jī)處理器上執(zhí)行邏輯算法,。檢驗(yàn)vi設(shè)計(jì)中的一些簡(jiǎn)單性錯(cuò)誤,,避免不必要的反復(fù)編譯,尤其是在程序比較大的時(shí)候可節(jié)省大量的時(shí)間,,提高編程效率,。也可使用仿真器驗(yàn)證vi的執(zhí)行流程,但無(wú)法驗(yàn)證硬件的確定性,,若需要驗(yàn)證硬件性能的確定性,,必須對(duì)FPGA vi進(jìn)行編譯。與其他FPGA開(kāi)發(fā)工具一樣,,根據(jù)應(yīng)用程序的復(fù)雜程度和計(jì)算機(jī)資源的不同,,編譯步驟可能要花上幾分鐘到幾個(gè)小時(shí)的時(shí)間。

1.3 開(kāi)發(fā)Host vi

在FPGA vi完成調(diào)試,、編譯,、下載到板卡之后,就需要在主控計(jì)算機(jī)上創(chuàng)建一個(gè)用戶界面程序Host vi,。在用戶界面應(yīng)用程序中可以完成一些實(shí)時(shí)性要求不高的操作,,例如配置系統(tǒng)參數(shù),管理數(shù)據(jù)等,。Host vi通過(guò)FPGA接口函數(shù)與FPGA vi進(jìn)行通信,,以及處理中斷,。FPGA接口函數(shù)面板會(huì)在安裝LabVIEW FPGA模塊之后,自動(dòng)添加到LabVIEW的函數(shù)面板中,。LabVIEW函數(shù)面板中的FPGA接口函數(shù)面板如圖4所示,。

LabVIEW函數(shù)面板中的FPGA接口函數(shù)面板圖

2 不同時(shí)鐘域的數(shù)據(jù)連續(xù)傳輸

本文中的中頻信號(hào)生成系統(tǒng)是將主控計(jì)算機(jī)模擬生成的數(shù)據(jù)通過(guò)FPGA送到AD9857發(fā)送出去。數(shù)據(jù)進(jìn)入FPGA的速率為52 MB/s,,由于計(jì)算機(jī)的非實(shí)時(shí)性呈現(xiàn)斷續(xù)的形式,,其實(shí)際的速率要低一些;數(shù)據(jù)傳出FPGA時(shí),其數(shù)據(jù)位寬為16 b,,輸出頻率為10 MHz,,固其持續(xù)傳輸速率為20 MB/s。數(shù)據(jù)進(jìn)入FPGA的速率高于出FPGA的速率,,這就造成數(shù)據(jù)在不同時(shí)鐘域之間傳輸?shù)膯?wèn)題,。為了避免數(shù)據(jù)的溢出和保證數(shù)據(jù)連續(xù)性,本文使用DMA FIFO作為主控計(jì)算機(jī)與FPGA之間的緩存,。它的存儲(chǔ)空間包括兩部分:一是主控計(jì)算機(jī)部分,,主控計(jì)算機(jī)開(kāi)辟一塊內(nèi)存作為FIFO緩存;二是FPGA部分,F(xiàn)IFO占用部分Block Memory資源作為緩存,。二者共同組成一個(gè)完整的FIFO,,通過(guò)PXIe總線傳遞數(shù)據(jù)。FIFO的傳輸機(jī)制是:主控計(jì)算機(jī)首先把一個(gè)數(shù)組的數(shù)據(jù)存入作為FIFO緩存的內(nèi)存中;DMA控制器會(huì)自動(dòng)查詢FPGA上的FIFO剩余空間,,當(dāng)滿足緩存剩余空間大于數(shù)據(jù)塊容量的條件時(shí),,控制器通過(guò)PXIe總線把整個(gè)數(shù)據(jù)塊一并送入FPGA上的FIFO中;FPGA FIFO再將數(shù)據(jù)順序送出。

若在主控計(jì)算機(jī)向FIFO兩次寫(xiě)入數(shù)據(jù)的間隔期間,,F(xiàn)IFO中的數(shù)據(jù)保持不被讀空,,就能保證輸出FPGA的數(shù)據(jù)是連續(xù)的。而合適的FIFO深度是FIFO不被讀空的基礎(chǔ),,所以確定FIFO深度的設(shè)定方法是數(shù)據(jù)在不同時(shí)鐘域之間實(shí)現(xiàn)連續(xù)傳輸?shù)年P(guān)鍵,。

3 FIFO深度的設(shè)定方法

3.1 FPGA FIFO深度的設(shè)定

DMA控制器將數(shù)據(jù)從主控計(jì)算機(jī)內(nèi)存整塊的傳送到FPGA的FIFO緩存中,所以FIFO的深度要大于數(shù)據(jù)塊的大小,。LabVIEW FPGA里塊存儲(chǔ)FIFO是以2 KB大小來(lái)應(yīng)用的,。DMA FIFO使用RIO設(shè)備可獲取的內(nèi)置RAM來(lái)存儲(chǔ)數(shù)據(jù)信息,該存儲(chǔ)空間與內(nèi)存讀/寫(xiě)是共享的,。所以要留一部分RAM空間進(jìn)行內(nèi)存的讀/寫(xiě),,F(xiàn)IFO的最大值為RAM容量減去16 KB,。PXIe-5641R的RAM的容量是1 098 KB,,所以,F(xiàn)PGAFIFO的深度設(shè)定范圍為2~1 082 KB,。

另一方面,,實(shí)際上LabVIEW為了能使FPGA高效運(yùn)行,,對(duì)Block Memory方式FIFO的大小作了規(guī)定,其大小只能為2M-1(數(shù)據(jù)由FPGA傳向主控計(jì)算機(jī))或2M+5(數(shù)據(jù)由主控計(jì)算機(jī)傳向FPGA),,M為數(shù)據(jù)的地址寬度;當(dāng)設(shè)定值不是這些標(biāo)準(zhǔn)值時(shí),,LabVIEW會(huì)自動(dòng)的放大到距其最近的一個(gè)標(biāo)準(zhǔn)值。這樣就確定了FPGAFIFO的深度,,但是還不能保證數(shù)據(jù)能夠連續(xù)輸出,。

3.2 主控計(jì)算機(jī)FIFO深度的設(shè)定

由于對(duì)主控計(jì)算機(jī)內(nèi)存部分FIFO的讀/寫(xiě)是以數(shù)組形式斷續(xù)進(jìn)行的。所以,,數(shù)組的長(zhǎng)度和兩次寫(xiě)入的間隔時(shí)間是能否保證數(shù)據(jù)連續(xù)性的重要參數(shù),,同時(shí)考慮到數(shù)據(jù)輸出FPGA是連續(xù)且頻率固定的。根據(jù)FIFO不讀空的原則推測(cè):當(dāng)寫(xiě)入內(nèi)存的數(shù)組的長(zhǎng)度N與數(shù)據(jù)寫(xiě)入內(nèi)存的時(shí)間T和數(shù)據(jù)輸出FPGA的頻率F之間滿足如下的關(guān)系時(shí),,就能做到數(shù)據(jù)的連續(xù)傳輸:

N/T>F (1)

鑒于主控計(jì)算機(jī)操作系統(tǒng)的非實(shí)時(shí)性,,需要將主控計(jì)算機(jī)FIFO深度D的大小設(shè)定為N的若干倍;通過(guò)大量實(shí)驗(yàn)并與NI工程師討論,確定當(dāng)FIFO的深度D的大小為N的3~5倍時(shí),,可完全滿足數(shù)據(jù)連續(xù)傳輸?shù)囊蟆?/p>

3.3 實(shí)驗(yàn)驗(yàn)證

數(shù)據(jù)寫(xiě)入內(nèi)存的時(shí)間與主控計(jì)算機(jī)運(yùn)行速度以及數(shù)組的大小有關(guān),。表1所示的是數(shù)組長(zhǎng)度和寫(xiě)入內(nèi)存的時(shí)間與輸出數(shù)據(jù)連續(xù)性之間關(guān)系的實(shí)驗(yàn)結(jié)果。其中,,平均寫(xiě)入內(nèi)存時(shí)間指的是同一個(gè)數(shù)組循環(huán)執(zhí)行寫(xiě)入操作10萬(wàn)次得到的平均結(jié)果,。輸出FPGA的速率為10 MHz。

當(dāng)數(shù)組長(zhǎng)度較小時(shí),,單位時(shí)間內(nèi)寫(xiě)入到內(nèi)存中的數(shù)據(jù)較少,,內(nèi)存里的數(shù)據(jù)不能滿足FPGA FIFO讀取數(shù)據(jù)的需求,在下一組數(shù)據(jù)到達(dá)之前內(nèi)存里的數(shù)據(jù)已經(jīng)讀空,,故輸出的數(shù)據(jù)不能連續(xù),。當(dāng)數(shù)組長(zhǎng)度增大之后,單位時(shí)間寫(xiě)入到內(nèi)存的數(shù)據(jù)量也隨之增大,,內(nèi)存里的數(shù)據(jù)能夠滿足FP-GA FIFO讀取數(shù)據(jù)的需求,,在內(nèi)存讀空之前把下一組數(shù)據(jù)送入了內(nèi)存,所以輸出的數(shù)據(jù)能夠保持連續(xù)性,。實(shí)驗(yàn)結(jié)果驗(yàn)證了上述推測(cè)公式的正確性,。

4 數(shù)據(jù)連續(xù)傳輸?shù)腖abVIEW實(shí)現(xiàn)

在本文中系統(tǒng)軟件包括兩部分:Host vi和FPGAvi,二者是獨(dú)立而又有聯(lián)系的兩個(gè)部分,。Host vi運(yùn)行于主控計(jì)算機(jī)上,,F(xiàn)PGA vi運(yùn)行于FPGA上,二者通過(guò)FIFO來(lái)傳輸數(shù)據(jù),。

4.1 FPGA程序設(shè)計(jì)

使用圖形化的編程環(huán)境LabVIEW FPGA模塊來(lái)定義FPGA邏輯,,除了具有上述的優(yōu)點(diǎn)以外,LabVIEW作為一種并行結(jié)構(gòu)的編程語(yǔ)言,,非常適用于FPGA的并行結(jié)構(gòu),,能夠十分方便地實(shí)現(xiàn)多線程并行任務(wù),。

 

 

當(dāng)FPGA vi開(kāi)始運(yùn)行時(shí),從Host vi讀取數(shù)據(jù)的FIFO需要一定的初始化時(shí)間,,時(shí)間長(zhǎng)度與FIFO的深度成正比,。在初始化期間FIFO輸出一系列的無(wú)效默認(rèn)值。為了不讓無(wú)效值進(jìn)入到下一級(jí)的運(yùn)算中,,在DMA方式的FIFO之前加了一個(gè)FIFO函數(shù)——Get Number of Element to Read,,該函數(shù)用于獲得FIFO內(nèi)有效數(shù)據(jù)的數(shù)量。當(dāng)有效數(shù)據(jù)的數(shù)量大于0時(shí),,再開(kāi)始進(jìn)行下一級(jí)運(yùn)算,。考慮到FPGA有限的硬件資源和FPGA FIFO最小值的限制,,將數(shù)據(jù)的地址寬度設(shè)為M=11,,根據(jù)上文分析DMA FIFO的深度設(shè)為2M+5=2 053 KB。

4.2 主控計(jì)算機(jī)程序設(shè)計(jì)

Host vi是系統(tǒng)程序的另一部分部分,,它具有建立硬件對(duì)象(FPGA),、與硬件通信和圖形顯示等功能。主控計(jì)算機(jī)程序圖如圖6所示,,首先要建立與之進(jìn)行通信的硬件對(duì)象,,即FPGA;其次配置系統(tǒng)時(shí)鐘、輸出模式;再次創(chuàng)建FIFO,,設(shè)置其在主控計(jì)算機(jī)部分的FIFO深度;然后從電子表格讀取數(shù)據(jù),,并循環(huán)查詢FIFO剩余空間的大小,當(dāng)剩余空間大于數(shù)組長(zhǎng)度時(shí),,數(shù)據(jù)寫(xiě)入FIFO當(dāng)沒(méi)有足夠的空間時(shí),,數(shù)據(jù)保留到下一個(gè)循環(huán),滿足條件后再寫(xiě)入FIFO;最后關(guān)閉FIFO應(yīng)用,,處理錯(cuò)誤,。

 

當(dāng)輸入數(shù)組長(zhǎng)度分別為300和1 000,形狀如圖7所示的波形時(shí),,輸出數(shù)據(jù)的波形如圖8所示,。由于AD9857上變頻的原因,使得輸出波形在輸入的矩形包絡(luò)中帶有載波,,載波頻率為60 MHz,。根據(jù)表1中的數(shù)據(jù)可以得出結(jié)論:此處的編程和上述實(shí)驗(yàn)的結(jié)果是一致的,即FPGA輸出頻率為10 MHz,,數(shù)組長(zhǎng)度大于500時(shí),,系統(tǒng)數(shù)據(jù)的輸出是連續(xù)。同時(shí)此結(jié)果也表明本文中的LabVIEW程序?qū)崿F(xiàn)了數(shù)據(jù)的連續(xù)傳輸。

5 結(jié)語(yǔ)

通過(guò)設(shè)定合適的FIFO深度,,實(shí)現(xiàn)了數(shù)據(jù)的連續(xù)傳輸,為后續(xù)的工程設(shè)計(jì)奠定了基礎(chǔ),。該設(shè)定FIFO深度的方法也對(duì)其他使用LabVIEW FPGA模塊的工程設(shè)計(jì)具有一定的參考價(jià)值,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。