在LabVIEW的FIFO中,我該如何轉換我的定點數(Fixed-Point)資料?



主要軟體:
主要軟體版本: 8.5
主要軟體修正版本:
次要軟體: N/A

問題: 我在LabVIEW FPGA模組中的計算使用了定點數(fixed-point)資料型態。我想傳送資料,但是如果我透過FIFO傳送資料或儲存於記憶體中,當FIFO或記憶體被讀取時,我只收到整數部分。我該如何傳送資料才能使小數部分(尾數)仍可完整保留?

解答:

根據不同的LabVIEW使用版本,有幾個不同的方法可以使用:

使用LabVIEW 8.6版
如果您是使用LabVIEW 8.6版,這可以很簡單的做到,只需將專案中DMA FIFO更改為可處理定點數。要做到這點,無論是建立FIFO時或編輯專案中它的設定,您可以選擇定點數(FXP)為FIFO的資料型態。這樣會允許您以未更動的方式透過FIFO傳送定點數資料。

使用LabVIEW 8.5.x版
在LabVIEW 8.5.x版中,DMA FIFO只支援U32的資料型態,無論是target和VI-scoped的FIFO或記憶體,皆不支援定點數資料。如果定點數值直接被傳入FIFO或記憶體中,小數的部分會因為被轉換為整數而被截去。

為了可以保存小數部分,可以將定點數轉變為相同位元的整數資料型態。

要做到這點,您會需要將定點數的二進位表示法傳入FIFO或記憶體,並當資料被讀取時再轉換這位元組。接下來的步驟詳細介紹透過DMA FIFO(使用U32資料型態)傳送定點數到host的方法。

注意:Target與VI-scoped的FIFO與記憶體可以傳送各種不同的資料型態。使得FIFO或記憶體的型態與定點數的字元長度相同,使讀FIFO或記憶體的資料型態達成一致。舉例來說,假如您欲傳送一個字元長度20的定點數,可以使用U32的FIFO。

FPGA轉換

  1. 使用Number to Boolean Array VI將定點數轉換為布林陣列。
  2. 使用Boolean Array to Number VI將這個布林陣列轉換為U32的整數。
  3. 將Boolean Array to Number的輸出接到FIFO Write VI。

Host轉換

  1. 在host端,從DMA FIFO中讀取資料。
  2. 在auto-indexed迴圈中,使用Number to Boolean Array VI將資料一一做轉換。
  3. 在for loop中放置一個Boolean Array to Number VI,並將布林陣列連接起來。
  4. 在Boolean Array to Number VI上按右鍵並選擇Properties。將representation改變為定點數,並根據FPGA上的定點數資料型態來填入Fixed-Point Configuration。
    Boolean Array to Numeric Properties
  5. 連接定點數輸出資料連接至for loop的auto-indexed通道。


    注意:為了轉換host上的數字,知道FPGA上的定點數資料型態設定是必要的。

一旦轉換好定點數資料,您就可以使用數值轉換VIs來將資料轉換為任意host需要的表現方式。

注意:使用Binary Array to Number並修改該VI的輸出設定是必要的。若只使用Binary Array to Number並搭配使用To FXP VIs,資料的小數部分仍然會被截去。



相關連結:

附加檔案:





報告日期: 09/26/2007
最後更新: 02/24/2009
文件偏號: 4DPGKPKO