Applet 引數化

讓我們再次來看看「入門指南」的設計。 如果您到目前為止還沒有完成「入門指南」的設計,請先回到前一頁並完成「入門指南」的設計(入門指南)。 到目前為止,我們唯一進行的調整僅限於參數名稱。 現在,我們要調整這個 Applet,使其能夠處理來自具備以下特性的相機所拍攝的影像

  • 圖片邊長 512 x 512
  • 每像素 12 位元灰階
  • Camera Link 介面處於雙接點基座配置模式

我們的設計已內建 CameraGrayAreaBase 運算子。 此運算子來自 mE4VD4-CL 運算子函式庫,且僅適用於mE4 Camera Link 系列影像擷取卡,也就是說, mE4VD4-CL 函式庫是一個包含硬體 專用運算子的函式庫。 CameraGrayAreaBase 運算子支援採用Camera Link 且處於基本配置模式的灰階區域掃描攝影機。 請雙擊設計中的攝影機模組以開啟其屬性視窗。 其中一個參數名為「格式」(Format)。在此處可選取特定的Camera Link 格式。 我們選擇 DualTap12Bit, 套用變更並關閉視窗。 現在,我們的設計已能擷取 12 位元相機影像。

CameraGrayAreaBase 運算子的屬性

圖 198. 運算子 CameraGrayAreaBase 的屬性


請注意,「格式」參數是動態的。這表示,在設計完成硬體合成後,仍可變更其值, 這使得使用者能靈活運用多種相機格式。 然而,若我們雙擊相機處的連結,會發現該連結的位元寬度仍維持在 8 位元/像素。此外, 最大影像尺寸也不夠大。 您可能會疑惑:既然連線僅有 8 位元,為何還能使用 12 位元的相機? 答案是:系統僅傳輸相機影像中最高 8 位元的資料,也就是說,僅使用連線 所提供的位元。 運算子會根據相機運算子的設定,自動從影像中選取正確的位元。 請參閱攝影機操作程式的文件以獲取更多資訊('CameraGrayAreaBase')。 我們將位元寬度調整為 12 位元,以處理攝影機的完整位元深度。

已修改攝影師的連結Bit Width

圖 199. 變更了攝影師的連結Bit Width


修改數值後,請點擊「套用」。如您所見,相機、緩衝區與 DMA 之間的連結顏色已從黑色變為綠色。 這表示該變更已獲接受並通過驗證。此外,連結屬性「位元寬度」已透過 影像緩衝區傳遞至 緩衝區與 DMA 模組之間的連結。 因此,使用者無需在每條連結上皆變更位寬。 連結屬性會透過各模組逐級傳遞,直到該模組自行變更連結位寬,或需要使用者輸入為止。 若您開啟緩衝區與 DMA 之間連結的屬性,將會發現此處無法 變更位寬。

Bit Width 無法在緩衝模組輸出鏈路上進行變更

圖 200. 緩衝模組輸出鏈路上無法變更Bit Width


這是因為前置運算子ImageBuffer無法變更連結的位元寬度。 因此,只有當後續運算子允許此變更時(即其定義上屬於 會影響位元寬度的運算),才能變更連結屬性。

相機所需的影像邊長為 512 x 512 像素。在連結屬性中,我們可以看到名為「最大 影像寬度」和「最大影像高度」的屬性。 這些屬性代表連結上的最大影像尺寸。這是最大值,任何小於此值的尺寸皆可接受。 然而,若圖片尺寸超過此限制,將違反VisualApplets 的設計規範,且您在硬體上使用該小程式時 可能會遇到錯誤。

設定影像尺寸時,應始終選擇所需的最小值,因為較小的影像尺寸可節省 FPGA 邏輯與記憶體資源。 回到我們的範例:開啟相機與緩衝區之間連結的屬性,並將最大影像 寬度與高度設定為 512 x 512。 設定完畢後,請按下「套用」。

連結屬性變更後的非法狀態

圖 201. 連結屬性變更後的不合法狀況


同樣地,您會注意到此變更直接影響了當前連結以及位於 緩衝模組後方的連結之連結屬性。 此外,您可以看到緩衝模組現在已被標記為紅色。這是因為我們現在產生了所謂的「非法 狀態」。 這表示, 一個或多個連線屬性與模組中的參數設定不相容。 在我們的例子中,ImageBuffer 的參數設定無法與該連線的設定搭配使用。 若您關閉所有屬性視窗並執行設計規則檢查 Ctrl+F7 您將會收到如下圖所示的錯誤訊息。

DRC 錯誤訊息:參數無效

圖 202. DRC 錯誤訊息:參數無效


您可以點擊其中一則錯誤訊息,以突出顯示發生錯誤的模組。 若您的設計規模龐大且包含多個層級,以致無法立即辨識運算子所在位置時, 此功能便非常實用。 現在,請開啟 Buffer 模組的屬性對話方塊。您會發現,導致錯誤的這四個參數 均已標示為紅色。

紅色參數顯示非法狀態

圖 203. 紅色參數顯示非法狀態


此外,現在錯誤的原因已顯而易見:運算子中設定的感興趣區域,其大小超過了 該連結所允許的 最大影像尺寸。 這將違反運算子的參數範圍以及VisualApplets 的設計規則,因此 導致此錯誤。 您可以將 XLength 和 YLength 參數的值改為 512,立即使您的設計恢復至有效狀態。

我們的設計已接近完成。我們已經可以開始建置,並將此設計應用於硬體中。 然而,還有一個步驟需要我們考慮。到目前為止,我們將 12 位元的像素值直接連接至 DMA 模組。 這將導致每個像素的 12 位元資料被傳輸至個人電腦。 由於像素資料分散在多個位元組中,此格式對軟體程式而言極難處理。 因此,每個像素應精確佔用一個或多個位元組。在本範例中,我們將像素擴展為 16 位元。 為此, 我們需要在緩衝區與 DMA 模組之間 插入另一個運算子。有幾個運算子可以解決我們的任務。 我們將使用基礎運算子庫中的ConvertPixelFormat運算子。將該運算子放置在緩衝區與 DMA 模組之間。 若將運算子直接放置在連結上方,系統會自動插入該運算子。 接下來,您應將 該模組重新命名為 「To16Bit」,並開啟該運算子後方的連結屬性。如您所見,模組輸出端 預設採用連結的位元寬度 ,即每像素 8 位元。因此,該模組已覆寫了輸入連結的位元寬度。 任何對輸入連結位元 寬度的變更都會被忽略。 該模組將始終輸出參數化後的值。預設的每像素 8 位元會將位元寬度從 12 減少至 8,但我們實際上 希望增加位元寬度。因此,您只需將連結屬性值改為 16 位元,並確認變更即可。

ConvertPixelFormat 運算子現在會透過在較低位元位置插入四個恆定零位元, 將 12 位元的輸入像素擴展為 16 位元。 換言之,我們執行了四位元的左移操作。 除了使用 ConvertPixelFormat 運算子外,亦可改用 ShiftLeft 運算子。 請透過滑鼠選取 ConvertPixelFormat 運算子,並從彈出式 選單或主選單列中按下「刪除」鍵, 或直接按下 Del 。 從算術運算子庫中插入 ShiftLeft 運算子。將其插入設計中並檢查連結屬性。 如您所見,連結位元寬度仍為 12 位元,且無法在連結屬性中進行變更。對於此運算子, 其 連結位元寬度是透過一個參數來變更的。即 Shift 參數。 將參數值更改為 4,套用變更 並返回連結屬性。 如您所見,連結位寬現已變更為 16 位元。 總結而言:部分連結屬性可直接在連結上進行變更,而部分則需透過運算子屬性進行調整。 在相關範例中,這兩種方法對於運算子而言都是必要的,因為其中一種是用來指定輸出位寬, 且不依賴於輸入位寬,也就是說移位值會 自動決定;而移位運算子則用於指定移位值。 在此,輸出位寬會根據參數化值與輸入位寬自動決定。

新增 ConvertPixelFormat 運算子,支援 16 位元輸出

圖 204. 新增 ConvertPixelFormat 運算子,用於 16 位元輸出


新增 16 位元輸出用左移運算子

圖 205. 為 16Bit 輸出新增的 ShiftLeft 運算子


在此範例中,我們在較低的位元位置插入四個位元。若您希望在較高的位元位置 增加四個位元以獲得 16 位元,則可改用 CastBitWidth運算子。

有關位元操作運算子的說明與範例,請參閱運算子參考手冊。 請參閱「ConvertPixelFormat」、「ShiftLeft」、「ShiftRight」及「CastBitWidth」。

有關參數化與位元處理的實務指引,請參閱 「參數化教學」主題 以及 「位元Arithmetic教學」主題。

我們現已完成基本擷取設計的擴充工作。 接下來,您可以將設計建置並應用於硬體中。 您已經學會了如何設定參數以及如何解決衝突。 在下一節中,將提供適用於各類攝影機的基本擷取程式小工具清單。