具備多功能重設 I/O 硬體資料採集技術

概觀

R 系列多功能可重設 I/O (RIO) 介面卡,可由使用者定義其處理功能,提供靈活的系統時序與觸發效能。不同於固定式 ASIC 的裝置控制功能,多功能可重設 I/O 介面卡透過 FPGA 架構的系統時脈控制器,以設定所有類比與數位 I/O,適用於特殊應用作業。您可以使用可重設的多功能 I/O 硬體與 NI LabVIEW FPGA Module,執行完全靈活且客制化的 Data Acquisition (DAQ) 作業。

內容

簡介

透過 LabVIEW FPGA,DAQ 系統工程師即可針對任何輸入/輸出類型作業的應用,進行完全彈性的程式設計作業。不需深入了解如 VHDL 的硬體設計工具,即可將 LabVIEW 程式碼嵌入至 FPGA 晶片,以達到完全的硬體時脈速度與穩定性。

現在就先針對 DAQ 硬體的一般元件進行說明。假設目前有類比數位轉換器 (ADC)、數位類比轉換器 (DAC),以及數位輸入/輸出通道,且還有實際時脈與控制作業所需的 I/O。常見的多功能 DAQ 卡均使用功能豐富的 ASIC,以整合所需的多項重要功能。相較於市面上所有其他使用固定式 DAQ 的裝置,R 系列介面卡的不同之處在於採用 FPGA 架構的系統時脈控制器,以設定特定應用作業的所有數位與類比 I/O。可重設 FPGA 晶片是透過 LabVIEW FPGA Module 進行程式設計,其中仍沿用同樣的 LabVIEW 資料流程式圖,而透過最初階的新函式集以控制介面卡 I/O。與透過 NI-DAQmx 函式粹取一般作業相較,LabVIEW FPGA I/O 節點卻是針對所有通道提供最基礎且完整的彈性。下列章節將接著操作特定 NI-DAQmx 範例,並說明應如何使用可重設的硬體客制化多項資料。

時脈觸發

最常見的可重設 I/O 用途是客制化時脈與觸發。下圖即為 NI-DAQmx 的觸發類比輸入作業範例程式圖。

圖 1:透過 NI-DAQmx 觸發的類比輸入

如圖 1 所示,R 系列介面卡使用稱為 FPGA I/O 節點的函式,以讀寫所有的類比與數位 I/O 通道;而非針對通道設定使用不同的函式。接著來看看 LabVIEW FPGA 中使用 I/O 節點的相同功能。

圖 2:透過 R 系列與 LabVIEW FPGA 觸發的類比輸入

這裡可清楚看到,並沒有針對通用通道、取樣時脈、觸發,或開始/停止/清除作業所使用的設定函式。上述功能均由簡單的類比 I/O 讀取作業所取代,且所有時脈均是由如 While Loop 與「Case」結構的一般 LabVIEW 結構所控制。由於整個程式圖均於 FPGA 硬體中執行,因此 LabVIEW 程式碼可達到硬體時脈速度與穩定性。我們先進一步了解此程式圖的作業方式。類比 I/O 節點並非透過特定的取樣率,而是使用 For Loop 擷取各個樣本。當呼叫 FPGA I/O 節點時,相對應的 ADC 將數位化該筆輸入訊號,因此是由 For Loop 進行時脈。若要以 100kHz 進行訊號取樣,則應指定該迴路的延遲為 10 μs。迴路時脈函式將透過第二次迴路迭代 (Iteration) 確保該指定的延遲,因此這裡將使用序列架構,以達到取樣作業之間達到特定時段。LabVIEW FPGA 中的「Case」結構具有強大功能,可針對所有程式碼進行壓縮 (Encapsulate) 而成為硬體觸發。由於所有函式與結構,均透過邏輯閘於硬體中執行之,因此「Case」結構將以 10 µs 以內的精確度,於正確時間開始取樣作業。最後,由於目前均針對硬體層級進行作業,幾乎不會接觸抽象層,所以不需清除作業 ID 或釋放記憶體。

使用 FPGA 架構硬體的優點在於,能夠客制化所有的時脈與觸發功能,並可於硬體中建置所需的訊號處理與決策作業。現在來看某些客制應用在修改類比輸入觸發的必要作業。若要觸發擷取作業時,應如何讓 2 個類比輸入通道達到特定臨界值?透過 LabVIEW FPGA 則極為簡單。

 
圖 3:透過 R 系列與 LabVIEW FPGA 客制化觸發的類比輸入
 
我們針對第二個 FPGA I/O 節點、第二個比較函式,與「Boolean OR」函式,將之新增至程式圖中。R 系列介面卡並為個別的類比輸入通道指定 ADC,因此可進行同步取樣;且只要有任何 1 個通道未超過特定門檻,「Case」結構將執行「True case」,並於 10 微秒 的精確度之內開始接收作業。請注意:透過 NI-DAQmx 啟動的硬體無法產生這種觸發作業。您可以在軟體中實作這種觸發作業,但會需要較高潛時的軟體時序決策功能。若要將監控範圍擴充為全部 8 個通道,甚至新增數位觸發作業,則此客制化的程式碼將可能無法相容。如果欲進行前置觸發掃瞄 (Pre-trigger scan),則必須針對輸入通道進行連續取樣,並將資料傳輸至 FIFO 緩衝區。一旦觸發作業讀取完畢,FIFO 緩衝區與後續樣本,均將透過 DMA 通道傳輸至主機 (Host)。


若要使用 NI-DAQmx 驅動程式取樣第二個類比輸入通道,程式方塊圖就不會與圖 1 所示大不相同。不過,仍然會有限制,因為這兩個通道都會被迫以相同的時脈率參照相同的觸發器與取樣。我們來看看使用可重設 I/O 與 LabVIEW FPGA 進行多通道取樣的不同選項。

圖 4:透過 R 系列觸發的同時類比輸入

圖 4 即以類比輸入通道 0 (AIO) 的類比觸發方式,以 2 個不同類比輸入通道為架構,同步取樣的方式。由於所有的多功能可重設 I/O 介面卡均具有獨立的 ADC,因此 I/O 節點中的 2 個通道將可確實進行同步取樣。常見的多功能 DAQ 介面卡均透過單一 ADC 進行所有通道的多工,因此所有通道均必須共用相同的取樣時脈與觸發通道。圖 5 (下圖) 顯示了多功能可重設 I/O 介面卡實際上能以獨立速率對不同類比輸入通道進行取樣。由於在獨立迴路中安裝類比輸入 I/O 節點,因此各個通道可依截然不同的取樣率進行取樣,接著透過 2 個 DMA 通道個別串流資料。


圖 5:以多功能可重設 I/O 硬體觸發多速率類比輸入

最後,如果我們希望兩個通道都具備獨立的取樣速率,以及獨立的開始觸發器,我們可以將每個 I/O 節點置於平行迴路結構中,如圖 6 所示。這樣一來即可充分運用 FPGA 平行機制,而每項作業皆會使用專屬的專屬資源,並且完全獨立於其他任何的作業。


圖 6:採用多功能可重設 I/O 硬體,獨立觸發多重速率類比輸入

同步化

NI-DAQmx 驅動程式內建多組同步化選項,可針對輸入與輸出的時脈之間產生關聯性 (Correlating)。下方程式圖即透過數位「Start」觸發所同步化的類比輸入與輸出通道,其末端將針對類比輸入指定數位觸發,並使用類比輸入「Start」觸發訊號以觸發類比輸出產生作業。


圖 7:透過 NI-DAQmx 同步化類比輸入與輸出

若要以智慧型 DAQ 硬體建置相同的同步化結構,則不需要 Task ID 與快取 (On-board) 訊號路由功能,亦可達到相同作業。這是 LabVIEW FPGA 程式方塊圖的外觀。

圖 8:R 系列的同步化類比輸入與輸出

同樣的,此處使用「Case」結構於 FPGA 晶片上建置硬體觸發,而數位 Channel 0 上的升緣 (Rising edge) 接著初始化「True case」中的程式碼。在幾乎沒有抖動 (Jitter) 的情況下,可於序列結構中同步呼叫類比輸入與輸出節點;且若要讓節點具有個別的速率,亦可分別於 While Loop 中輕鬆放置類比 I/O 節點。此處必須特別注意,在程式圖中顯示的「Sine Generator」函式屬於 Express VI,並可透過此函式設定查找表 (Look-up table) 中的正弦值。

圖 8 中的 R 系列程式方塊圖,其功能等同於圖 7 中的 NI-DAQmx VI,而若要客制化此作業,則僅限於 R 系列介面卡具有所需的彈性。以新增「Pause」觸發為例,只要於內部的 While Loop 中新增「Case」結構,再使用另 1 組數位 I/O 節點選擇「True」或「False」,即可新增完畢。可對硬體進行程式設計的強大功能,可讓使用者進行極其多樣的 I/O 時脈與同步化作業。

多功能同步化的另 1 個範例,即是透過計數器產生有限脈波 (Finite pulse),並將計數器輸出做為類比輸入取樣時脈。上述程序即為建置可再觸發有限取樣擷取 (Retriggerable finite sample acquisition) 作業的常見方式。下方即為該項取消作業所需的 NI-DAQmx 程式碼。

圖 9:透過 NI-DAQmx 即可重新觸發的有限點數類比輸入

接著來比較相同功能的 LabVIEW FPGA 程式方塊圖。


圖 10:透過 R 系列與 LabVIEW FPGA 即可重新觸發的有限點數類比輸入

圖 10 清楚顯示,由於 LabVIEW 程式碼是於硬體中執行,因此可省下許多驅動設定步驟。透過簡單的數位輸入通道與 For Loop 結構,即建立由硬體再觸發的有限擷取作業。圖 9 所顯示的程式圖則使用 2 組計數器,以建立可再觸發的有限脈波列 (Pulse train);而常見的多功能 DAQ 介面卡亦僅具備 4 組計數器以搭配之。不過,多功能可重設 I/O 介面卡可使用 LabVIEW FPGA 將任何數位通道設定為計數器。下一節將進一步說明計數器/計時器實作方式。

接著將進一步利用可重設 I/O 介面卡的硬體時脈彈性,進行可由頻率觸發的取捨作業。雖然一般多功能 DAQ 介面卡無法達到此項功能,但是高速的快取決策 (Onboard decision making) 功能可計算輸入訊號的頻率,接著於「Case」結構中選擇所需的程式碼。針對多重裝置的同步化作業,多功能可重設 I/O 介面卡亦可使用 PCI/PCI Express 介面卡的 RTSI 匯流排,或是 PXI 模組的 PXI 觸發匯流排。這些外部的時脈與同步化通道,亦可透過程式圖上的 FPGA I/O 節點進行存取。

類比波形產生

多款多功能 DAQ 介面卡均具備類比輸出通道,可建置 FIFO 緩衝區以連續產生類比波形。所產生的波形可將 FIFO 使用為環形緩衝區 (Circular buffer),且不需進一步更新,亦可連續重複產生一系列的類比數值。由於資料並無法連續串流至介面卡,因此該作業較不需依賴通訊匯流排亦可進行。然而,若要修改波形,則必須重新開始輸出作業,以將新資料寫入至 FIFO。亦可將資料連續串流至硬體 FIFO,但輸出作業卻將發生潛時。多功能可重設 I/O 介面卡可將波形輸出儲存於硬體,甚至透過硬體觸發功能變更波形,藉以建立任意波形產生器。

下列為函式產生器範例,即透過數位輸入通道以觸發輸出波形的變更作業。以數位 I/O 的 0 與 1 為架構,可得到 4 組不同的狀態,或類比輸出的 4 組不同「Case」。


圖 11a:R 系列函式產生器 Case 0:零輸出


圖 11b:R 系列函式產生器 Case 1:正弦波

如果兩條線路皆低,則會執行 Case 0,如圖 11a 所示,輸出為 0 V 的固定值。如果 DIO 線路 0 為高,而 DIO 線路 1 則為低,則 Case 1 會在類比輸出 0 上執行並產生正弦波。這種正弦產生案例 (圖 11b) 使用正弦產生器 Express VI,讓您能在 LabVIEW FPGA 中使用所需的整數值,以互動方式設定正弦波形。


圖 11c:R 系列函式產生器 Case 2:方波

Case 2 (圖 11c) 即是於 While Loop 的每次迭代中,進行布林 (Boolean) 值的雙態觸變 (Toggle)。若該值為「低 (Low)」,則將整數 15000 寫入至 Analog Output 0,藉以對應 16 位元 DAC 輸出暫存器中的 15000。簽署的 16 位元整數值可能介於 -32768 與 32767 之間。在 -10 到 10 V 的輸出範圍中,寫入 -32768 至類比輸出 0 會產生 -10 V,而寫入 32767 則會產生 10 V。在本範例中,我們要寫入 15000,輸出點低於 5 V。(以下是數學:15000/32767 * 10 V = 4.5778 V)。基本上,Case 2 所輸出的方波將於 0 ~ 4.578 V 之間進行觸變。

圖 11d:R 系列函式產生器 Case 3:Sawtooth Wave

若 DIO 0 與 DIO 1 均為「高 (High)」,則將執行如圖 0 與 DIO 1 的最後「Case」,且將透過查找表 (Look-up table) 連續產生紡齒波 (Sawtooth wave)。此「Look-up table」VI 為另 1 組 Express VI, 可儲存任意波形值並透過程式設計的方式進行索引。在此範例中,我們已設定出將於類比輸出通道 0 上產生發射槽波。

由於已將所有數值存至 FPGA,因此可降低匯流排的使用率,並確保波形更新時的硬體時脈速度與穩定性。先前所提到類比輸入的觸發與同步化彈性,亦可套用於類比輸出,且可透過多功能可重設 I/O 介面卡以不同速率更新不同的類比輸出通道;各通道之間完全獨立。此意即不需影響其他通道的輸出,亦可修改單一週期性波形的頻率。請注意,大多數的資料擷取硬體均無法達到此項功能。

計數器/計時器作業

如上所述,一般多功能 DAQ 介面卡僅配備 4 組計數器,而多功能可重設 I/O 介面卡卻可針對任何數量的數位通道建置計數器功能。數位 I/O 節點並可利用 LabVIEW FPGA 中的單週期 Timed Loop,該特殊結構可透過 2.5 ~ 200 MHz 之間的特定速率執行程式碼。以 40 MHz 時脈為例,即可透過單週期 Timed Loop 功能,於任何數位通道中建立 40 MHz 的計數器。圖 12 (下圖) 為程式圖的外觀範例。

圖 12:R 系列的簡單事件計數器

由於計數器數值將以 U32 (32 位元的整數) 的資料類型傳送至指示元件 (Indicator),因此該程式碼將於 FPGA 晶片中處理 40 MHz、32 位元的計數器。使用者可複製並貼上數次以構成多組計數器,且所有不同數位通道上的計數器均可相互平行作業。不過,使用多功能可重設 I/O 介面卡的真正價值在於客制化計數器作業。使用者可選擇於每 3 組升緣 (Rising edge) 增加計數器,或根據「Count Register」的數值以觸發類比擷取作業。以有限脈波列或串聯事件 (Cascaded event) 計數作業為例,多項複雜的計數器作業均需使用 2 組計數器,意即一般多功能介面卡僅具備 2 組計數器。由於 R 系列硬體可具備最多 160 個數位通道,因此其計數器的最大數量往往不受可用 I/O 的限制,而由 FPGA 晶片的尺寸而定。因為 LabVIEW 程式碼是於晶片中執行,所以不需要如「Arm」或「Rearm」的一般計數器,亦可完全控制計數器的作業。

圖 13 即為計數器範例,以 NI-DAQmx 中的「Pause」觸發功能產生連續脈波列 (Pulse train)。

 
圖 13:NI-DAQmx 的連續脈波產生與暫停觸發器
 

在 LabVIEW FPGA 中,由於簡單的「Case」結構將於晶片中建置相同功能,因此並不需另外設定「Pause」觸發。透過多功能可重設 I/O 介面卡執行這項功能時,您可以看到以下內容 (圖 14)。

 
圖 14:R 系列的連續脈波產生與停止觸發器
 
在此情況下,數位 I/O 通道 0 為暫停觸發,而脈波則會在數位 I/O 通道 1 上產生。單週期定時迴圈可用來取得每個脈衝的 25 ns 解析度,因為這將是使用 40 MHz 時序來源的單一刻度值。

資料傳輸方式

配備 NI-DAQmx 驅動程式的傳統多功能 DAQ 與可重設硬體之間的主要差異,在於資料傳輸方式。NI-DAQmx 驅動程式可抽象化所有從裝置到主機電腦的傳輸作業。針對 FPGA 架構的硬體而言,此步驟必須完全於 LabVIEW 進行程式設計。仍有多種方法可緩衝裝置內的資料,並使用不同的資料傳輸方式,如 DMA 通道與中斷請求 (Interrupt request,IRQ)。

LabVIEW FPGA 中的 FIFO 緩衝區,即是透過 LabVIEW Project Explorer 所設定,並可使用快取 (On-board) 記憶體或硬體邏輯建置之。圖 18 即透過 LabVIEW Project Explorer,設定內建區塊記憶體中的整數 FIFO 緩衝區。

 
圖 18:LabVIEW FPGA 內的 FIFO 設定
 
一旦建立 FIFO,則可於 LabVIEW FPGA 程式圖上的多個迴路之間轉換資料。圖 19 的範例即顯示,資料寫入至迴路左邊的 FIFO 中,接著從迴路右邊的 FIFO 進行資料讀取。

 
圖 19:LabVIEW FPGA 程式方塊圖,具有 FIFO 與多個迴路
 
Direct Memory Access (DMA) 通道亦可透過 LabVIEW FPGA FIFO 進行建置,一樣可透過 Project Explorer 完成設定。

圖 20:LabVIEW FPGA 內的 DMA FIFO 設定

圖 21:LabVIEW FPGA 程式方塊圖,具有 DMA FIFO 與位元封包

所有的 DMA FIFO 轉換作業均為 32 位元,因此從 16 位元類比輸入通道傳送資料時,最好可整合 2 個通道或 2 個樣本的資料並將之 1 次傳輸,以達到更高的效率。這就是所謂的位元封裝,如圖 21 所示。當資料直接傳送至主機電腦記憶體時,即可於 Windows 環境中執行 LabVIEW 的主要介面函式,以讀取該資料 (如圖 22 所示)。


圖 22:包含 DMA「FIFO Read」與位元封裝 (Bit Unpacking) 功能的主要介面程式碼

如圖 22 所示,主要介面程式圖是以 FPGA Target VI 為參考,並於 While Loop 中連續讀取 DMA FIFO。此 32 位元資料即分割送入 2 個 16 位元的通道,並透過波形圖進行取樣並繪製之。而主機介面 VI 亦可讀寫至任何人接介面指示器 (Indicator),或於 FPGA VI 上進行控制作業,而如此一來必須寫入「Stop」按鈕的控制功能。

結論

雖然如 NI-STC3 之類的固定式 ASIC 可滿足大多數資料採集需求,但僅可透過 R 系列的可重設、FPGA 架構 I/O 時脈與控制功能,才能提供完全的彈性與客制化。透過 LabVIEW FPGA,觸發與同步化作業可簡化為圖形化的程式圖繪製,且完全切合使用者所需;再透過獨立的類比與數位 I/O 通道,R 系列介面卡更可妥善利用 FPGA 的平行機制。不論是多重取樣率、客制化計數器作業,或 40 MHz 的快速取決策 (On-board decision making) 功能,R 系列介面卡均掀起了多功能資料採取的可能性。