在FPGA vi完成調試、編譯、下載到板卡之后,就需要在主控計算機上創建一個用戶界面程序Host vi。在用戶界面應用程序中可以完成一些實時性要求不高的操作,例如配置系統參數,管理數據等。Host vi通過FPGA接口函數與FPGA vi進行通信,以及處理中斷。FPGA接口函數面板會在安裝LabVIEW FPGA模塊之后,自動添加到LabVIEW的函數面板中。LabVIEW函數面板中的FPGA接口函數面板如圖4所示。
2 不同時鐘域的數據連續傳輸
本文中的中頻信號生成系統是將主控計算機模擬生成的數據通過FPGA送到AD9857發送出去。數據進入FPGA的速率為52 MB/s,由于計算機的非實時性呈現斷續的形式,其實際的速率要低一些;數據傳出FPGA時,其數據位寬為16 b,輸出頻率為10 MHz,固其持續傳輸速率為20 MB/s。數據進入FPGA的速率高于出FPGA的速率,這就造成數據在不同時鐘域之間傳輸的問題。為了避免數據的溢出和保證數據連續性,本文使用DMA FIFO作為主控計算機與FPGA之間的緩存。它的存儲空間包括兩部分:一是主控計算機部分,主控計算機開辟一塊內存作為FIFO緩存;二是FPGA部分,FIFO占用部分Block Memory資源作為緩存。二者共同組成一個完整的FIFO,通過PXIe總線傳遞數據。FIFO的傳輸機制是:主控計算機首先把一個數組的數據存入作為FIFO緩存的內存中;DMA控制器會自動查詢FPGA上的FIFO剩余空間,當滿足緩存剩余空間大于數據塊容量的條件時,控制器通過PXIe總線把整個數據塊一并送入FPGA上的FIFO中;FPGA FIFO再將數據順序送出。
若在主控計算機向FIFO兩次寫入數據的間隔期間,FIFO中的數據保持不被讀空,就能保證輸出FPGA的數據是連續的。而合適的FIFO深度是FIFO不被讀空的基礎,所以確定FIFO深度的設定方法是數據在不同時鐘域之間實現連續傳輸的關鍵。
3 FIFO深度的設定方法
3.1 FPGA FIFO深度的設定
DMA控制器將數據從主控計算機內存整塊的傳送到FPGA的FIFO緩存中,所以FIFO的深度要大于數據塊的大小。LabVIEW FPGA里塊存儲FIFO是以2 KB大小來應用的。DMA FIFO使用RIO設備可獲取的內置RAM來存儲數據信息,該存儲空間與內存讀/寫是共享的。所以要留一部分RAM空間進行內存的讀/寫,FIFO的最大值為RAM容量減去16 KB。PXIe-5641R的RAM的容量是1 098 KB,所以,FPGAFIFO的深度設定范圍為2~1 082 KB。
另一方面,實際上LabVIEW為了能使FPGA高效運行,對Block Memory方式FIFO的大小作了規定,其大小只能為2M-1(數據由FPGA傳向主控計算機)或2M+5(數據由主控計算機傳向FPGA),M為數據的地址寬度;當設定值不是這些標準值時,LabVIEW會自動的放大到距其最近的一個標準值。這樣就確定了FPGAFIFO的深度,但是還不能保證數據能夠連續輸出。
3.2 主控計算機FIFO深度的設定
由于對主控計算機內存部分FIFO的讀/寫是以數組形式斷續進行的。所以,數組的長度和兩次寫入的間隔時間是能否保證數據連續性的重要參數,同時考慮到數據輸出FPGA是連續且頻率固定的。根據FIFO不讀空的原則推測:當寫入內存的數組的長度N與數據寫入內存的時間T和數據輸出FPGA的頻率F之間滿足如下的關系時,就能做到數據的連續傳輸:
N/T>F (1)
鑒于主控計算機操作系統的非實時性,需要將主控計算機FIFO深度D的大小設定為N的若干倍;通過大量實驗并與NI工程師討論,確定當FIFO的深度D的大小為N的3~5倍時,可完全滿足數據連續傳輸的要求。
3.3 實驗驗證
數據寫入內存的時間與主控計算機運行速度以及數組的大小有關。表1所示的是數組長度和寫入內存的時間與輸出數據連續性之間關系的實驗結果。其中,平均寫入內存時間指的是同一個數組循環執行寫入操作10萬次得到的平均結果。輸出FPGA的速率為10 MHz。
當數組長度較小時,單位時間內寫入到內存中的數據較少,內存里的數據不能滿足FPGA FIFO讀取數據的需求,在下一組數據到達之前內存里的數據已經讀空,故輸出的數據不能連續。當數組長度增大之后,單位時間寫入到內存的數據量也隨之增大,內存里的數據能夠滿足FP-GA FIFO讀取數據的需求,在內存讀空之前把下一組數據送入了內存,所以輸出的數據能夠保持連續性。實驗結果驗證了上述推測公式的正確性。
用戶評論
共 0 條評論