在「基本原則」中,已說明瞭 VisualApplets 使用運算子和連結來建構 FPGA 應用程式的概念。本章將說明基於 FPGA 的資料處理中所使用的資料流模型。
FPGA 實作方式與在微處理器(CPU)上執行的軟體程式不同。CPU 必須在完整傳輸影像後才能開始處理影像,而 FPGA 則可以同時進行影像的傳輸與處理。
FPGA 實作中的所有功能都可以同時運作(即並行運作),而微處理器則是循序執行程式指令。這是一個非常重要的差異,也是 FPGA 實作的巨大優勢之一。由於一切都在並行運作,資料會以管線結構進行處理。各模組(即已實例化的運算子)透過連結相連。每個模組只要一有資料可用,就會立即開始處理影像或訊號資料。處理結果會透過連結傳送至下一個模組。大多數模組不會對輸入的影像資料進行緩衝,只要資訊可用,它們就會立即輸出計算結果。在設計中,資料傳輸的情況如下:
設計中的資料傳輸圖解如下:
該專案由三個模組組成:相機、緩衝區和 DMA 運算子。相機運算子是一個影像來源模組。它接收來自相機傳送的影像。但該模組不會收集完整畫格並在完整擷取後才輸出影像,而是在像素到達時立即將其轉發給下一個模組。緩衝區模組 ImageBuffer 是一個可以儲存影像資料的緩衝區,但只要輸出未被阻塞,它就會立即輸出可用的資料。DMA 模組則會將影像傳輸至主機 PC。
此管線結構的結果是,當同一影像的其他像素仍在從相機傳輸時,影像像素就已經傳輸至主機 PC 了。因此,模組內部不會儲存任何影像。這種非緩衝管線的優點在於,所有模組都可以並行執行並獲得高效利用。此外,延遲(像素完全處理所需的時間)也降至最低。
有關管線模型的實用指導,請參閱「管線概念」教學主題。有關如何在管線中處理延遲,請參閱「延遲」教學主題。
![]() |
注意 |
|---|---|
|
請務必記住,所有模組都可以並行執行,並在資料可用且輸出未被阻塞時立即輸出其結果。您可以將管線想像成帶有閥門、分支以及大小管徑的水管。 |
與微處理器程式不同,運算次數(即運算子的數量)不會影響處理速度,因為一切都是並行執行的。然而,applet 中使用的運算子越多,所需的硬體資源就越多。
只有在啟動各個處理程序的所有 DMA 後,applet 處理程序才能在硬體上使用。不過,如果處理程序不包含任何 DMA 通道,它將在 applet 初始化後立即啟動。這對於在開始影像擷取之前使用的觸發和訊號處理應用程式非常有用。
若要深入瞭解硬體上 VisualApplets applet 的初始化和使用方式,請參閱「在硬體上執行您的 Applet」一節,和/或 Framegrabber SDK 說明文件。
applet 中管線的頻寬取決於運算子的處理速度以及連接的連結。連結具有多個「連結屬性」(請參閱「連結屬性」)。其中之一就是定義頻寬的 Parallelism。Parallelism 定義了在一個設計時脈週期內,兩個運算子之間並行傳輸多少像素。Parallelism 越高,頻寬就越大。運算子會自動調整以符合連結所需的頻寬;如果無法做到,它們會重新定義頻寬。 有關 Parallelism 的實用指導,請參閱「Parallelism」教學主題。
讓我們假設一個簡單的例子。Parallelism 為 4 將導致 4 個像素並行傳輸。這意味著影像的前 4 個連續像素會從相機模組並行傳輸到其後續模組(在我們的例子中是緩衝區)。接著,接下來的 4 個像素會從相機模組傳輸到緩衝區模組。同時,前 4 個像素已在緩衝區模組中處理完畢,並被轉發到影像處理鏈中的下一個模組。
如前所述,Parallelism 定義了在設計時脈頻率的一個時脈週期內並行傳輸的像素數量。該頻率取決於所使用的硬體裝置。例如,microEnable IV 系列的擷取卡使用的是 62.5MHz 的設計時脈頻率。
![]() |
計算頻寬 |
|---|---|
|
連結的頻寬 b 由 Parallelism p 與頻率 f 的乘積決定: ![]() |
因此,為 4 的 Parallelism 將會產生以下頻寬:
。如果我們假設每個像素的 Bit Width 為 8 bit,這將會產生 250MB/s 的頻寬。所有硬體平台的基本設計時脈頻率清單可以在 裝置資源.
運算子可能會改變輸入連結與輸出連結之間的 Parallelism。因此,整個設計中的頻寬並非固定不變。這是因為所需的頻寬可能會改變。假設某個運算子縮小了圖像尺寸,因此所需的輸出頻寬也會隨之減少。
透過上述公式計算出的頻寬為理論值。實際頻寬會略低於理論值。
![]() |
重要事項 |
|---|---|
|
部分運算子無法處理輸入連結上提供的完整頻寬。您可以在 Operator Reference 中找到所有相關運算子的詳細資訊。 |
請注意頻寬與延遲之間的差異。延遲是由各個運算子各自定義的,且主要取決於演算法的實作方式。
![]() |
GUI 上的視覺化呈現 |
|---|---|
|
For visualization of the according link properties, VisualApplets provides two GUI buttons in the toolbar of the program window:
Display Link Info
![]()
Display Link Throughput
![]()
|
如先前所述,在 VisualApplets 中,像素會在管線中一個接一個地傳輸。若連結 Parallelism 大於一,則會同時傳輸多個像素。圖像或行中像素的傳輸順序如下:一般而言,來自相機的畫格(二維圖像)像素傳輸順序是從左上角的第一個像素開始,到右下角的最後一個像素結束。如果 VisualApplets 運算子在其處理過程中需要像素位置,則會預期相同的順序,即左 -> 右且上 -> 下。下圖說明瞭此順序:
然而,某些如相機的來源並不符合此順序。在這些情況下,可以使用 VisualApplets 運算子與設計來修正像素順序。若要這麼做,您應該具備一些關於像素傳輸協定的知識。您可以在 'Image Protocols, Image Dimensions and Data Structure' 一節中取得相關資訊。
Image Protocol 定義了傳輸像素與資料的圖像尺寸和資料結構。Image Protocol 是除了先前提及的連結 Property Parallelism 之外的另一項連結 Property。
影像協定有三種類型:
-
“2D” VALT_IMAGE2D
2D 影像協定用於傳輸影像,最常與面陣相機搭配使用。連結會傳輸以下資訊:
-
當傳輸像素時(像素有效信號)
-
當完成一行時(行結束信號)
-
當完成一個畫格時(畫格結束信號)
因此,2D 影像可以具有:
-
行中任意數量的像素
-
任意的影像高度
行或列中的像素位置本身不會被傳輸。此位置是根據目前行中的先前行數和先前像素數計算得出的。行中的像素之間不可能存在間隙。行長度可以任意設定。一行可以沒有像素,也就是說,允許出現空行。畫面至少必須由一個空行組成。
-
-
“1D” VALT_LINE1D
1D image protocol 用於傳輸行,通常用於線型掃描相機。連結會傳輸以下資訊:
-
當傳輸像素時(像素有效信號)
-
當一行完成時(行結束信號)
因此,1D 影像可以具備:
-
行中任意數量的像素
-
不受限制的影像高度
同樣地,行內的像素位置本身不會被傳輸。此位置是根據目前行中的先前行數和先前像素數計算得出的。行中的像素之間不可能存在間隙。行長度可以任意設定。一行可以沒有像素,也就是說,允許出現空行。
-
-
“0D” VALT_PIXEL0D
在 0D image protocol 中,不保留有關影像尺寸的資訊。它單純只是一個像素串流。不過,像素之間可能存在時間間隙,也就是說,像素會伴隨有效信號一起到達。0D protocol 通常用於資料傳輸,例如量測結果。
-
“Signal” VALT_SIGNAL
在信號協定中,傳輸簡化為單一位元資料傳輸,這些傳輸永遠有效(在每個時脈週期都有效)。因此,該協定不包含任何控制信號,例如 pixel valid 或 line/frame completed。信號協定用於觸發和信號處理系統中的信號運算子。
Image protocol 是一個 Link Property。每個運算子會各自決定其輸入接受哪些 Link Property 以及其輸出可提供哪些 Link Property。如需有關連結參數化的詳細資訊,請參閱 'Link Properties'。
在先前的章節中,已說明了 VisualApplets 設計的管線結構。如前所述,資料是透過連結在專案的模組之間進行傳輸。一旦某個模組處理完輸入像素並計算完輸出值,結果就會在輸出連結上輸出。然而,下一個模組可能無法處理該資料,因為它仍在處理另一個像素。在這種情況下,會套用 VisualApplets 的流量控制,並且管線會被封鎖。因此,模組可以封鎖其輸入。在此情況下,先前的模組將不會輸出其結果,並會將封鎖狀態向後傳遞至管線中。
讓我們來看看 Figure 33, 'Simple VisualApplets Design' 中所示的簡單範例。假設使用的電腦效能較慢,無法處理相機產生的頻寬。在這種情況下,DmaToPC 模組將無法將資料傳輸到主機 PC。因此,它會不時封鎖其輸入。封鎖信號會在設計中向上傳遞至影像緩衝區模組。現在,當封鎖處於作用中狀態時,影像緩衝區將不會輸出任何資料。由於 ImageBuffer 模組是一個緩衝區,所有後續進來的資料都會被緩衝,並且緩衝區的 Fill Level 將會增加。當相機停止發送資料時,將不會有新的輸入資料傳輸到緩衝區,資料將持續輸出直到緩衝區變空為止。
![]() |
提示 |
|---|---|
|
同樣地,您可以將流量控制想像成水管。如果閥門關閉,就無法再輸送水。緩衝區運算子就像一個水庫,如果排水口無法消耗輸入串流,水庫就會被水填滿。 |
另請參閱 Stoppable and Non-Stoppable Data Streams 教學主題。



![[備註]](../common/images/admon/note.png)

![[提示]](../common/images/admon/tip.png)

![[重要]](../common/images/admon/important.png)







上一頁

