摘 要:為了解決基于LabVIEW FPGA模塊的DMA FIFO深度設(shè)定不當(dāng)帶來的數(shù)據(jù)不連續(xù)問題,結(jié)合LabVIEW FPGA的編程特點和DMA FIFO的工作原理,提出了一種設(shè)定FIFO深度的方法。對FIFO不同深度的實驗表明,采用該方法設(shè)定的FIFO深度能夠比較好地滿足系統(tǒng)對數(shù)據(jù)連續(xù)傳輸?shù)囊蟆Q芯拷Y(jié)果對深入展開研究和工程設(shè)計具有一定的指導(dǎo)意義。
關(guān)鍵詞:LabVIEW FPGA模塊; FIFO; 數(shù)據(jù)連續(xù)傳輸; 時鐘域
中圖分類號:TN958-34 文獻(xiàn)標(biāo)識碼:A
文章編號:1004-373X(2011)17-0149-04
LabVIEW FPGA-Based Data Continuous Transmission Between Two Clock Domains
CUI Pei-pei, HE Qiang, HAN Zhuang-zhi, SHANG Chao-xuan
(Department of Optics and Electronics Engineering, Ordnance Engineering College, Hebei shijiazhuang 050003, China)
Abstract: In order to solve the problem of data transmission discontinuity caused by the improperly depth setting of DMA FIFO based on LabVIEW FPGA, a method of setting the depth of FIFO is presented in combination with the characteristic of LabVIEW FPGA and the working principle of DMA FIFO. The experiment of FIFO with different depth indicates that the method can satisfy the requirement of the continuity of data transmission. The result has a certain instruction meaning for further research and engineering design.
Keywords: LabVIEW FPGA; FIFO; continuous data transmission; clock domain
0 引 言
20世紀(jì)80年代中期,NI公司推出了一種圖形化的編程語言LabVIEW[1],并于2003年推出FPGA模塊[2]。該模塊用于對NI公司RIO設(shè)備中的FPGA進(jìn)行編譯,使得工程師無需了解VHDL或其他底層硬件設(shè)計工具,就可以使用FPGA技術(shù)進(jìn)行系統(tǒng)的設(shè)計[3-5]。本文使用LabVIEW FPGA和PXIe-5641R中頻收發(fā)卡設(shè)計了一套中頻信號生成系統(tǒng)。中頻卡上的FPGA接收來自主控計算機的數(shù)據(jù),并將其發(fā)送到上變頻器AD9857。數(shù)據(jù)進(jìn)入FPGA的速率高于傳出的速率,持續(xù)的傳輸會造成數(shù)據(jù)的溢出,斷續(xù)的傳輸可能會造成數(shù)據(jù)不連續(xù)。使用基于LabVIEW FPGA的DMA FIFO作為主控計算機和FPGA之間的緩存,若DMA FIFO深度設(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進(jìn)行配置[6]。圖形化的程序直接在硬件上實現(xiàn),通過對RIO設(shè)備上的I/O接口的控制[7],可以靈活地對I/O信號進(jìn)行分析和處理,表現(xiàn)出比固定I/O硬件更加優(yōu)異的特性。使用LabVIEW FPGA模塊開發(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)出了極大的靈活性。
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 vi on”下一級子菜單中的“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板卡[8]沒有硬盤和操作系統(tǒng),因此不支持文件I/O和ActiveX功能。LabVIEW FPGA模塊的函數(shù)面板如圖3所示。
硬件對象不管是FPGA設(shè)備還是FPGA仿真器,都可以訪問LabVIEW FPGA函數(shù)。仿真器使用RIO設(shè)備的I/O接口,可在主機處理器上執(zhí)行邏輯算法。檢驗vi設(shè)計中的一些簡單性錯誤,避免不必要的反復(fù)編譯,尤其是在程序比較大的時候可節(jié)省大量的時間,提高編程效率。也可使用仿真器驗證vi的執(zhí)行流程,但無法驗證硬件的確定性,若需要驗證硬件性能的確定性,必須對FPGA vi進(jìn)行編譯。與其他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進(jìn)行通信,以及處理中斷。FPGA接口函數(shù)面板會在安裝LabVIEW FPGA模塊之后,自動添加到LabVIEW的函數(shù)面板中。LabVIEW函數(shù)面板中的FPGA接口函數(shù)面板如圖4所示。
2 不同時鐘域的數(shù)據(jù)連續(xù)傳輸
本文中的中頻信號生成系統(tǒng)是將主控計算機模擬生成的數(shù)據(jù)通過FPGA送到AD9857發(fā)送出去。數(shù)據(jù)進(jìn)入FPGA的速率為52 MB/s[9],由于計算機的非實時性呈現(xiàn)斷續(xù)的形式,其實際的速率要低一些;數(shù)據(jù)傳出FPGA時,其數(shù)據(jù)位寬為16 b,輸出頻率為10 MHz,固其持續(xù)傳輸速率為20 MB/s。數(shù)據(jù)進(jìn)入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空間進(jìn)行內(nèi)存的讀/寫,F(xiàn)IFO的最大值為RAM容量減去16 KB。PXIe-5641R的RAM的容量是1 098 KB,所以,F(xiàn)PGA FIFO的深度設(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)值。這樣就確定了FPGA FIFO的深度,但是還不能保證數(shù)據(jù)能夠連續(xù)輸出。
3.2 主控計算機FIFO深度的設(shè)定
由于對主控計算機內(nèi)存部分FIFO的讀/寫是以數(shù)組形式斷續(xù)進(jìn)行的。所以,數(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ù)傳輸:
鑒于主控計算機操作系統(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ù)到達(dá)之前內(nèi)存里的數(shù)據(jù)已經(jīng)讀空,故輸出的數(shù)據(jù)不能連續(xù)。當(dāng)數(shù)組長度增大之后,單位時間寫入到內(nèi)存的數(shù)據(jù)量也隨之增大,內(nèi)存里的數(shù)據(jù)能夠滿足FPGA 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和FPGA vi,二者是獨立而又有聯(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ù)[10]。
當(dāng)FPGA vi開始運行時,從Host vi讀取數(shù)據(jù)的FIFO需要一定的初始化時間,時間長度與FIFO的深度成正比。在初始化期間FIFO輸出一系列的無效默認(rèn)值。為了不讓無效值進(jìn)入到下一級的運算中,在DMA方式的FIFO之前加了一個FIFO函數(shù)——Get Number of Element to Read,該函數(shù)用于獲得FIFO內(nèi)有效數(shù)據(jù)的數(shù)量。當(dāng)有效數(shù)據(jù)的數(shù)量大于0時,再開始進(jìn)行下一級運算。考慮到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所示,首先要建立與之進(jìn)行通信的硬件對象,即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和1 000,形狀如圖7所示的波形時,輸出數(shù)據(jù)的波形如圖8所示。由于AD9857上變頻的原因,使得輸出波形在輸入的矩形包絡(luò)中帶有載波,載波頻率為60 MHz。根據(jù)表1中的數(shù)據(jù)可以得出結(jié)論:此處的編程和上述實驗的結(jié)果是一致的,即FPGA輸出頻率為10 MHz,數(shù)組長度大于500時,系統(tǒng)數(shù)據(jù)的輸出是連續(xù)。同時此結(jié)果也表明本文中的LabVIEW程序?qū)崿F(xiàn)了數(shù)據(jù)的連續(xù)傳輸。
5 結(jié) 語
在使用LabVIEW FPGA模塊和NI公司的RIO設(shè)備設(shè)計中頻信號生成系統(tǒng)時,F(xiàn)PGA收發(fā)數(shù)據(jù)的速率不同造成了數(shù)據(jù)傳輸?shù)牟贿B續(xù),設(shè)定合適的FIFO深度可以有效解決該問題。本文根據(jù)DMA FIFO的工作原理,確定了給FIFO兩個部分分別設(shè)定合適深度的方法。通過設(shè)定合適的FIFO深度,實現(xiàn)了數(shù)據(jù)的連續(xù)傳輸,為后續(xù)的工程設(shè)計奠定了基礎(chǔ)。該設(shè)定FIFO深度的方法也對其他使用LabVIEW FPGA模塊的工程設(shè)計具有一定的參考價值。
參 考 文 獻(xiàn)
[1]陳錫輝,張銀鴻.LabVIEW 8.20程序設(shè)計從入門到精通[M].北京:清華大學(xué)出版社,2007.
[2]陳明星,朱靈,張龍,等.基于LabVIEW的光纖傅里葉變換光譜儀數(shù)據(jù)處理技術(shù)[J].儀器儀表學(xué)報,2010,31(3):488-492.
[3]GOMEZ A, GOETHERT E. Control system design using LabVIEW FPGA for a digital picture kiosk [C]// Proceedings of the 2006 American Control Conference. Minneapolis, Minnesota, USA: IEEE, 2006: 1395-1409.
[4]MEARS L M, FALCON J S, KURFESS T R. Real-time identification of sliding friction using LabVIEW FPGA [C]// Proceedings of the 2006 American Control Conference. Minneapolis, Minnesota, USA: IEEE, 2006: 1410-1615.
[5]楊堯,王民鋼,趙岳樓.LabVIEW FPGA模塊在飛控計算機測試系統(tǒng)中的應(yīng)用[J].測控技術(shù),2010,29(3):48-51.
[6]AL-NAAMI B, CHEBIL J, TRABSHEH B, et al. Developing custom signal processing algorithm with LabView FPGA and Compact RIO to detect the aortic stenosis disease [J].Computers in Cardiology, 2006, 33: 193-196.
[7]GADGIL Shubhada, VERMA Dharmesh, PANSE M S. et al. Sea state monitoring HF radar controller using reconfigurable LabVIEW FPGA [C]// Proceedings of 2009 International Conference on Advances in Computing, Control, and Telecommunication Technologies. [S.l.]: [s.n.], 2009: 395-397.
[8]National Instruments. NI PXIe-5641R product in-depth [S]. [S.l.]: National Instruments, 2009.
[9]National Instruments. NI PXIe-5641R specifications-reconfigurable IF transceiver [S]. [S.l.]: National Instruments, 2009.
[10]秦紅磊,路輝,郎榮玲.自動測試系統(tǒng):硬件及軟件技術(shù)[M].北京:高等教育出版社,2007.
作者簡介:
崔佩佩 1986年出生,男,河北石家莊人,碩士研究生。主要研究方向為雷達(dá)信號處理。
何 強 1972年出生,男,天津人,博士,副教授。主要研究方向為雷達(dá)信號處理。
韓壯志 1970年出生,男,河北石家莊人,博士,副教授。主要研究方向為雷達(dá)信號處理。
尚朝軒 1964年出生,男,河南滑縣人,教授,博士生導(dǎo)師。主要研究方向為雷達(dá)系統(tǒng)仿真,雷達(dá)信號處理。