基于LabVIEW的FPGA模塊FIFO深度設定實(shí)現
1.3 開(kāi)發(fā)Host vi本文引用地址:http://dyxdggzs.com/article/193640.htm
在FPGA vi完成調試、編譯、下載到板卡之后,就需要在主控計算機上創(chuàng )建一個(gè)用戶(hù)界面程序Host vi。在用戶(hù)界面應用程序中可以完成一些實(shí)時(shí)性要求不高的操作,例如配置系統參數,管理數據等。Host vi通過(guò)FPGA接口函數與FPGA vi進(jìn)行通信,以及處理中斷。FPGA接口函數面板會(huì )在安裝LabVIEW FPGA模塊之后,自動(dòng)添加到LabVIEW的函數面板中。LabVIEW函數面板中的FPGA接口函數面板如圖4所示。

2 不同時(shí)鐘域的數據連續傳輸
本文中的中頻信號生成系統是將主控計算機模擬生成的數據通過(guò)FPGA送到AD9857發(fā)送出去。數據進(jìn)入FPGA的速率為52 MB/s,由于計算機的非實(shí)時(shí)性呈現斷續的形式,其實(shí)際的速率要低一些;數據傳出FPGA時(shí),其數據位寬為16 b,輸出頻率為10 MHz,固其持續傳輸速率為20 MB/s。數據進(jìn)入FPGA的速率高于出FPGA的速率,這就造成數據在不同時(shí)鐘域之間傳輸的問(wèn)題。為了避免數據的溢出和保證數據連續性,本文使用DMA FIFO作為主控計算機與FPGA之間的緩存。它的存儲空間包括兩部分:一是主控計算機部分,主控計算機開(kāi)辟一塊內存作為FIFO緩存;二是FPGA部分,FIFO占用部分Block Memory資源作為緩存。二者共同組成一個(gè)完整的FIFO,通過(guò)PXIe總線(xiàn)傳遞數據。FIFO的傳輸機制是:主控計算機首先把一個(gè)數組的數據存入作為FIFO緩存的內存中;DMA控制器會(huì )自動(dòng)查詢(xún)FPGA上的FIFO剩余空間,當滿(mǎn)足緩存剩余空間大于數據塊容量的條件時(shí),控制器通過(guò)PXIe總線(xiàn)把整個(gè)數據塊一并送入FPGA上的FIFO中;FPGA FIFO再將數據順序送出。
若在主控計算機向FIFO兩次寫(xiě)入數據的間隔期間,FIFO中的數據保持不被讀空,就能保證輸出FPGA的數據是連續的。而合適的FIFO深度是FIFO不被讀空的基礎,所以確定FIFO深度的設定方法是數據在不同時(shí)鐘域之間實(shí)現連續傳輸的關(guān)鍵。
3 FIFO深度的設定方法
3.1 FPGA FIFO深度的設定
DMA控制器將數據從主控計算機內存整塊的傳送到FPGA的FIFO緩存中,所以FIFO的深度要大于數據塊的大小。LabVIEW FPGA里塊存儲FIFO是以2 KB大小來(lái)應用的。DMA FIFO使用RIO設備可獲取的內置RAM來(lái)存儲數據信息,該存儲空間與內存讀/寫(xiě)是共享的。所以要留一部分RAM空間進(jìn)行內存的讀/寫(xiě),FIFO的最大值為RAM容量減去16 KB。PXIe-5641R的RAM的容量是1 098 KB,所以,FPGAFIFO的深度設定范圍為2~1 082 KB。
另一方面,實(shí)際上LabVIEW為了能使FPGA高效運行,對Block Memory方式FIFO的大小作了規定,其大小只能為2M-1(數據由FPGA傳向主控計算機)或2M+5(數據由主控計算機傳向FPGA),M為數據的地址寬度;當設定值不是這些標準值時(shí),LabVIEW會(huì )自動(dòng)的放大到距其最近的一個(gè)標準值。這樣就確定了FPGAFIFO的深度,但是還不能保證數據能夠連續輸出。
3.2 主控計算機FIFO深度的設定
由于對主控計算機內存部分FIFO的讀/寫(xiě)是以數組形式斷續進(jìn)行的。所以,數組的長(cháng)度和兩次寫(xiě)入的間隔時(shí)間是能否保證數據連續性的重要參數,同時(shí)考慮到數據輸出FPGA是連續且頻率固定的。根據FIFO不讀空的原則推測:當寫(xiě)入內存的數組的長(cháng)度N與數據寫(xiě)入內存的時(shí)間T和數據輸出FPGA的頻率F之間滿(mǎn)足如下的關(guān)系時(shí),就能做到數據的連續傳輸:
N/T>F (1)
鑒于主控計算機操作系統的非實(shí)時(shí)性,需要將主控計算機FIFO深度D的大小設定為N的若干倍;通過(guò)大量實(shí)驗并與NI工程師討論,確定當FIFO的深度D的大小為N的3~5倍時(shí),可完全滿(mǎn)足數據連續傳輸的要求。
3.3 實(shí)驗驗證

數據寫(xiě)入內存的時(shí)間與主控計算機運行速度以及數組的大小有關(guān)。表1所示的是數組長(cháng)度和寫(xiě)入內存的時(shí)間與輸出數據連續性之間關(guān)系的實(shí)驗結果。其中,平均寫(xiě)入內存時(shí)間指的是同一個(gè)數組循環(huán)執行寫(xiě)入操作10萬(wàn)次得到的平均結果。輸出FPGA的速率為10 MHz。
當數組長(cháng)度較小時(shí),單位時(shí)間內寫(xiě)入到內存中的數據較少,內存里的數據不能滿(mǎn)足FPGA FIFO讀取數據的需求,在下一組數據到達之前內存里的數據已經(jīng)讀空,故輸出的數據不能連續。當數組長(cháng)度增大之后,單位時(shí)間寫(xiě)入到內存的數據量也隨之增大,內存里的數據能夠滿(mǎn)足FP-GA FIFO讀取數據的需求,在內存讀空之前把下一組數據送入了內存,所以輸出的數據能夠保持連續性。實(shí)驗結果驗證了上述推測公式的正確性。
評論