《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > LabVIEW FPGA模塊實現(xiàn)FIFO深度設(shè)定
LabVIEW FPGA模塊實現(xiàn)FIFO深度設(shè)定
Icbuy
Icbuy
摘要:   數(shù)據(jù)進入FPGA的速率高于傳出的速率,,持續(xù)的傳輸會造成數(shù)據(jù)的溢出,,斷續(xù)的傳輸可能會造成數(shù)據(jù)不連續(xù),。使用基于LabVIEW FPGA的DMA FIFO作為主控計算機和FPGA之間的緩存,,若DMAFIFO深度設(shè)置的合適,,F(xiàn)IFO不會溢出和讀空,,那么就能實現(xiàn)數(shù)據(jù)輸出FPGA是連續(xù)的,。   本文在介紹了LabVIEW FPGA模塊程序設(shè)計特點的基礎(chǔ)上,,結(jié)合DMA FIFO的工作原理,,提出了一種設(shè)定FIFO深度的方法,,解決了FIFO溢出、讀空的問題,,實現(xiàn)了數(shù)據(jù)的連續(xù)傳輸,。實驗結(jié)果表明該方法正確、可行,,程序設(shè)計滿足系統(tǒng)對數(shù)據(jù)傳輸連續(xù)性的要求,。
Abstract:
Key words :
</a>FIFO" title="FIFO">FIFO" title="FIFO">FIFO作為主控計算機和FPGA之間的緩存,若DMAFIFO深度設(shè)置的合適,,F(xiàn)IFO不會溢出和讀空,,那么就能實現(xiàn)數(shù)據(jù)輸出FPGA是連續(xù)的。

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

  1 LabVIEW FPGA模塊

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

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

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

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

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

  1.2 開發(fā)FPGA vi

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

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

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

  1.3 開發(fā)Host vi

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

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

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

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

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

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

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

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

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

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

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

  N/T>F (1)

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

  3.3 實驗驗證

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

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

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

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

  4.1 FPGA程序設(shè)計

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

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

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

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

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

  5 結(jié)語

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

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