資料流

在「基本原理」一章中,已闡述了VisualApplets 所提出的、 透過運算子與連結來建構 FPGA 應用的概念。本章將說明 基於 FPGA 的資料處理所採用的資料流模型。

FPGA 的實現方式與在微處理器(CPU)上執行的軟體程式有所不同。雖然 CPU 必須等到影像完全傳輸完畢後才能開始處理,但 FPGA 則能 同時進行影像傳輸與處理。

FPGA 與 CU 的資料傳輸/處理效能比較

圖 31. FPGA 與 CU 的傳輸/處理效能比較


FPGA 實現中的所有功能均可同時運作(即並行運作), 而微處理器則會依序執行程式指令。這是非常重要的 差異,也是 FPGA 實現的巨大優勢之一。 由於所有元件皆 以平行方式運作,資料便會以管線結構進行處理。各模組(即實例化的 運算子)透過連結相互連接。每個模組會在資料一經提供時, 立即開始處理影像或訊號資料。 處理結果會透過連結傳送至下一個模組。大多數 模組不會緩衝輸入的影像資料。一旦 資訊可用,它們便會立即輸出計算結果。在設計中,資料傳輸的流程如下:

在VisualApplets 資料處理流程中傳輸與處理影像

圖 32. 在VisualApplets 資料處理流程中傳輸與處理影像


該設計中的資料傳輸流程如圖所示:

簡單的 VisualApplets 設計

圖 33. 簡單的VisualApplets 設計


本專案由三個模組組成:攝影機、緩衝區以及 DMA 操作模組。 攝影機操作模組是影像來源模組。它接收由攝影機傳送的影像。 但該模組並非先收集完整畫面,待完整擷取後才輸出影像,而是 一收到像素資料,便會立即將其轉發至下一個模組。 緩衝區模組 ImageBuffer是一個緩衝區,可儲存影像資料,但 一旦輸出未被阻塞,便會立即輸出可用的資料。DMA 模組負責將 影像傳輸至主機電腦。

這種管線結構的結果是,當某些影像像素被傳輸至主機電腦時, 同一張影像的其他像素仍持續從相機傳輸中。因此,模組內部 並未儲存任何影像。這種無緩衝管線的優勢在於,所有 模組皆能並行運作,並得以高效利用。 此外,延遲(一個 像素從傳輸至模組到完成處理所需的時間)也降至最低。

有關管線模型的實務指引,請參閱 「管線概念教學」主題。 有關如何處理管線中的延遲,請參閱 「延遲教學」主題。

[注意] 注意

請時刻謹記,所有模組皆可並行執行,並在 結果一經產生且輸出未受阻滯時,立即輸出結果。不妨將這條處理流程想像成一條 配備閥門、分支,以及粗細不一管路的輸水管道。

與微處理器程式不同,運算次數(即 運算子的數量)並不會影響處理速度,因為所有運算皆以並行方式執行。 然而,小程式中使用的運算子越多,所需的硬體資源就越多。

不含 DMA 的處理程序 / 觸發處理程序

只有在該程序的所有 DMA 作業 均已啟動後,小程式程序才能在硬體上執行。然而,若某個程序不包含任何 DMA 通道,則該程序將在小程式初始化完成後立即啟動。此特性 對於觸發與訊號處理應用程式相當實用,因為這些應用程式通常在影像 擷取開始之前便會被使用。

若要進一步瞭解VisualApplets 小程式的初始化與在硬體上的使用方式, 請參閱「在硬體上執行您的程式」一節,以及/或Framegrabber SDK 的文件。

程序間通訊

進程之間的影像資料無法相互交換。不過,若使用運算子 TxSignalLinks 及 RxSignalLinks,即可建立 用於訊號的 進程間通訊。

Applet 的頻寬

Applet 中管線的頻寬取決於 運算子的處理速度以及連接的連結。每個連結都有幾項「連結屬性」 (請參閱「連結屬性」)。其中之一即是 並行度 ,該參數定義了頻寬。並行度 決定在一個設計 時鐘週期內,兩個運算子之間能並行傳輸多少個像素。並行度越高,頻寬就越高。運算子會 自動調整以滿足連結所需的頻寬;若無法達成, 則會重新定義該連結的頻寬。 有關並行度的實務指引,請參閱 Parallelism 教學主題。

Parallelism 針對 125 MHz 的時脈頻率

圖 34. 時脈頻率為 125 MHz 時的Parallelism


讓我們以一個簡單的例子來說明。若並行度為四,則會有四個像素被 並行傳輸。這表示影像中的前四個連續像素會 從相機模組並行傳輸至其後續模組(在本例中為緩衝模組) 。 接著,下四個像素會從相機模組傳輸至 緩衝模組。與此同時,前四個像素已在緩衝模組中完成處理, 並被轉發至影像處理鏈中的下一個模組。

如前所述,並行度定義了在 設計時鐘頻率的一個時鐘週期內,以並行方式傳輸的像素數量。該頻率取決於 所使用的硬體裝置。例如,microEnable IV 系列的幀擷取卡採用 62.5MHz 的設計時鐘頻率。

[提示] 頻寬的計算

一條鏈路的頻寬 b 由並行度 p 與 頻率 f 的乘積決定:

因此,四路並行將產生以下頻寬: . 若假設每像素的位元寬度為 8 位元,則將產生 250MB/s 的頻寬。所有硬體 平台的基本設計時脈頻率清單,可參閱 裝置資源.

操作員可調整輸入與輸出鏈路之間的並行度。因此, 頻寬在整個設計中並非恆定不變。這是因為所需的頻寬 可能會發生變化。假設某位操作員縮小了影像尺寸, 那麼所需的輸出頻寬也會隨之減少。

根據上述公式計算出的頻寬為理論值。實際 頻寬會比理論值略低一些。

[重要] 重要

某些運算子無法處理輸入鏈路上提供的全部頻寬。您 可在《運算子參考手冊》中查閱所有相關運算子的詳細資訊。

請注意頻寬與延遲之間的差異。延遲是由 各營運商分別定義的,且主要取決於演算法的實作方式。

[提示] GUI 上的視覺化呈現

為了可視化顯示相關的連結屬性,VisualApplets 在程式視窗的工具列中提供了兩個 GUI 按鈕 :

顯示連結資訊 顯示圖中每個鏈路的位元寬度與並行度:

顯示鏈路吞吐量 顯示圖中每條鏈路的最大像素吞吐量(單位為百萬像素/秒):

Pixel Order

如前所述,在VisualApplets 中,像素會透過 處理管線依次傳輸。若連結並行度大於一,則會 並行傳輸多個像素。圖像或行中像素的傳輸順序 如下:一般而言,幀(二維圖像)的像素會 從相機中傳輸,起始於左上角的第一個像素,並以 右下角的最後一個像素結束。若VisualApplets 運算子在處理時需要 像素位置,則預期其順序與此相同,即由左向右、由上向 下。下圖說明此順序:

Pixel Order

圖 35. 像素順序


然而,某些來源(例如相機)並未遵循此順序。在這些情況下, 可使用VisualApplets 操作符與設計來修正畫素順序。要做到這一點, 您應具備關於畫素傳輸協定的相關知識。您可在 「影像協定、影像尺寸與資料結構」一節中找到相關資訊。

影像協定、影像尺寸與資料結構

該 影像協定 定義了影像的尺寸以及 傳輸之像素與資料的資料結構。該 影像通訊協定 是 除前述鏈結屬性 Parallelism之外的另一項鏈路屬性。

影像通訊協定共有三種類型:

  • 「2D」 VALT_IMAGE2D

    2D 影像通訊協定用於傳輸影像,主要搭配 面掃描相機使用。資料透過一組連線進行傳輸

    • 當一個像素被傳輸時(像素有效 訊號)

    • 當一行完成時(行尾訊號)

    • 當一個幀完成時(幀結束 訊號)

    因此,一張 2D 影像可能包含:

    • 一行中任意數量的像素

    • 任意圖片高度

    二維影像通訊協定模型

    圖 36. 2D 影像通訊協定的模型


    像素在單行或行內的具體位置並不會被傳遞。該 位置是由於當前行內的前置行數及前置像素數 所決定的。同一行內的像素之間 不得有間隙。行長可為任意長度。 一行可能沒有任何像素, 也就是說,可能存在空行。一幀至少必須包含一條 空行。

  • 「1D」 VALT_LINE1D

    1D 影像通訊協定用於傳輸影像行,主要與線掃描 攝影機搭配使用。資料透過一組連線進行傳輸

    • 當一個像素被傳輸時(像素有效 訊號)

    • 當一行完成時(行尾 訊號)

    因此,一維影像可能包含:

    • 一行中任意數量的像素

    • 圖片高度不限

    一維影像通訊協定的模型

    圖 37. 一維影像通訊協定的模型


    同樣地,像素在行內的實際位置並不會被傳遞。該 位置是由於前幾行的數量以及當前行內的前幾像素 所決定的。同一行內的像素之間 不可能存在間隙。行長可以是任意的。 一行可能沒有任何像素, 也就是說,空行是可能的。

  • 「0D」 VALT_PIXEL0D

    在 0D 影像通訊協定中,並未保留任何關於影像尺寸的資訊。它 僅是一串像素流。不過,像素之間仍可能存在時間間隔,也就是說, 每個像素都附帶一個有效的訊號。0D 通訊協定主要用於資料 傳輸,例如測量結果。

    0D 影像通訊協定的模型

    圖 38. 0D 影像通訊協定的模型


  • 「Signal」 VALT_SIGNAL

    在訊號協定中,資料傳輸被簡化為單位元資料傳輸, 且這些傳輸始終有效(在每個時脈週期中均有效)。因此,該協定並未 包含任何控制訊號,例如 像素有效 或 行/幀完成等。此訊號協定適用於 觸發器與訊號處理系統中所使用的訊號運算子。

影像協定是一種連結屬性。每個運算子會自行決定其輸入端接受哪些 連結屬性,以及其輸出端提供哪些連結屬性。有關連結參數化的更多資訊,請參閱「連結屬性」。

流量控制

在前幾節中,已說明VisualApplets 設計的管線結構。 如前所述,資料是透過 連結在專案的各模組之間傳輸。一旦模組處理完一個輸入像素並完成 輸出值的計算,結果便會從輸出連結輸出。 然而,下一個模組 可能因仍在處理另一個像素而無法處理該資料。在此 情況下,VisualApplets 的流程控制機制便會生效,並使管線陷入阻塞狀態。因此, 模組可以阻塞其輸入。在此情況下,前置模組將不會輸出其 結果,並會將阻塞狀態向後傳遞至管線中的後續模組。

讓我們來看看圖 33「簡單的VisualApplets 設計」中所示的簡單範例。 假設使用了一台速度較慢的個人電腦,無法處理攝影機產生的頻寬。在 這種情況下,DmaToPC模組將無法將 資料傳輸至主機電腦。因此,它會不時阻塞其輸入。 此阻塞 訊號會在設計中傳遞至影像緩衝區模組。此時,當阻塞狀態 處於有效期間,影像緩衝區將不會輸出任何資料。由於 ImageBuffer模組是一個緩衝區,所有後續傳入的資料 都會被緩衝,而緩衝區的填滿程度也會隨之增加。 當攝影機停止 傳送資料時,將沒有新的輸入資料傳輸至緩衝區,且資料會持續輸出 直到緩衝區清空為止。

[提示] 提示

同樣地,您可以將流量控制想像成一條輸水管道。如果閥門 關閉,就無法再輸送水了。緩衝運算子就像一個水庫 ,當排水口無法消耗輸入的水流時,水庫便會蓄滿水。

另請參閱 《可中斷與不可中斷資料流教學》一文。