讓我們再次來看一下快速入門指南的設計。 如果您尚未完成快速入門的設計,您應該返回並先進行快速入門 (Getting Started)。 到目前為止,我們所做的唯一調整是參數名稱。 現在,我們想要調整 applet 以處理來自具有以下屬性的相機的影像
- 影像側邊尺寸 512 x 512
- 12 bit / pixel 灰階
- 雙分接基底組態模式下的 Camera Link 介面
我們的設計已經配備了 CameraGrayAreaBase 運算子。 此運算子來自 mE4VD4-CL 運算子庫,僅適用於 mE4 Camera Link 取像卡,亦即 mE4VD4-CL 庫是一個包含硬體 specific 運算子的庫。 CameraGrayAreaBase 運算子支援使用基底組態模式 Camera Link 的灰階面陣相機。 按兩下設計中的相機模組以開啟其屬性。 其中一個參數稱為 "Format"。在這裡,可以選擇特定的 Camera Link 格式。我們選擇 DualTap12Bit, 套用變更並關閉視窗。 我們的設計現在能夠擷取 12 bit 相機影像。
請注意,"Format" 參數是動態的。這意味著,該值可以在硬體中合成設計後進行更改, 從而允許靈活使用多種相機格式。 但是,如果我們按兩下相機上的連結,我們會發現該連結的 Bit Width 仍然是 8 bit/pixel。此外, 最大影像尺寸不夠大。 您可能會問自己,如果連結只有 8 bit,為什麼可以使用 12 bit 相機。 答案是,只有相機影像的八個最高有效位元被傳輸,也就是只使用可用的連結 bit。 根據相機運算子中的設定,運算子將自動從影像中選擇正確的 bit。 請參閱相機運算子的說明文件以取得更多資訊 ('CameraGrayAreaBase')。 我們將 Bit Width 更改為 12 bit 以處理完整的相機位元深度。
變更數值後,按一下套用。如您所見,相機、緩衝區和 DMA 之間連結的顏色已從黑色變為綠色。 這表示變更已被接受和驗證。此外,連結屬性 "bit width" 已透過 影像緩衝區傳播到 緩衝區與 DMA 模組之間的連結。因此,使用者不需要在每個連結上變更 bitwidth。 連結屬性會在模組中傳播,直到它們本身變更 link bitwidth 或需要使用者輸入為止。 如果您開啟緩衝區與 DMA 之間連結的連結屬性,您會發現此處無法 變更 bitwidth。
這是因為前置運算子 ImageBuffer 無法變更 link bit width。 因此,只有在連接的運算子允許變更(即根據定義屬於會影響 bit width 的運算)時,才能變更連結屬性。
相機所需的影像側邊尺寸為 512 x 512 pixel。在連結屬性中,我們可以看到稱為 Max. Img Width 和 Max. Image Height 的屬性。 這些屬性代表連結上的最大影像尺寸。這是最大值。允許任何較小的尺寸。 但是,超過此限制的影像尺寸將違反 VisualApplets 設計規則,並且您在硬體中使用 applet 時可能會遇到錯誤。
影像尺寸的設定應一律選擇所需的最小值,因為較小的影像尺寸可以節省 FPGA 邏輯和 memory 資源。 回到我們的範例:開啟相機與緩衝區之間連結的連結屬性,並選擇最大影像 width 和 height 為 512 x 512。 完成後,按一下套用。
同樣,您會注意到該變更直接影響了當前連結以及位於 緩衝區模組之後的連結的連結屬性。 此外,您可以看到緩衝區模組現在標記為紅色。這是因為我們現在建立了一個所謂的「非法 條件」。這意味著, 一個或多個連結屬性與模組中的參數設定不相容。 在我們的案例中,ImageBuffer 的參數設定無法與連結的設定一起使用。 如果您關閉所有屬性視窗並執行設計規則檢查 Ctrl+F7 您將會得到如下圖所示的錯誤訊息。
您可以按一下其中一個錯誤訊息,以突顯顯示發生錯誤的模組。 如果您的設計規模龐大且包含多個階層,無法立即看出運算子所在的位置,這項功能將非常實用。 現在,請開啟 Buffer 模組的屬性對話方塊。同樣地,您可以看到導致錯誤四個參數會以紅色標示。
此外,錯誤的原因現在也很明顯:運算子中的興趣區設定得比 連結上允許的最大 影像尺寸還要大。這將違反運算子的參數範圍和 VisualApplets 設計規則,因此 會導致錯誤。 您可以透過將 XLength 和 YLength 參數變更為數值 512,立即將您的設計恢復為有效狀態。
我們的設計快完成了。我們已經可以開始建置並在硬體中使用該設計。 不過,我們還應該考慮另一個步驟。到目前為止,我們將 12 bit pixel 值直接連接到 DMA 模組。 這會導致每個 pixel 傳輸 12 bit 到 PC。 由於 pixel 分布在多個 byte 中,因此軟體程式非常難以處理此格式。 因此,每個 pixel 應該正好消耗一個或多個 byte。在我們的範例中,我們將 pixel 擴展到 16 bit。為此, 我們需要在緩衝區和 DMA 模組之間放置另一個 運算子。有幾種運算子可以解決我們的任務。 我們將使用基礎運算子庫中的運算子 ConvertPixelFormat。將運算子放置在緩衝區和 DMA 模組之間。 如果您將運算子直接放在連結上方,運算子將自動插入。接下來,您應該將模組重新命名為 "To16Bit" 並開啟運算子後面的連結屬性。如您所見,模組輸出選擇了預設的 link bit width 即每個 pixel 8 bit。因此,模組已覆寫輸入 link bit width。輸入 link bit width 的任何變更都會被忽略。 模組將一律輸出參數化的值。預設的每個 pixel 八個 bit 會將 bit width 從 12 降低到 8,但相反地, 我們想要增加 bit width。因此,您只需要將連結屬性值變更為 16 bit 並確認變更。
ConvertPixelFormat operator 現在會透過在較低位元位置插入四個固定的零位元,將 12 bit 的輸入像素擴充為 16 bit。 換句話說,我們執行了向左位移四個 bit 的操作。 除了使用 ConvertPixelFormat operator 之外,也可以改用 ShiftLeft operator。 請在設計中用滑鼠選取 ConvertPixelFormat operator,並從快顯功能表或主功能表中按一下刪除,將其從設計中刪除; 或者直接按下 Del 。 從 arith operator library 中插入 ShiftLeft operator。將其插入設計中並檢查 link properties。 如您所見,link Bit Width 仍然是 12 bit,且無法在 link properties 中進行更改。 對於這個 operator,link Bit Width 是透過一個 Property 來更改的,即 Shift Property。請將 Property 值更改為 4, 套用變更並返回 link properties。 如您所見,link Bit Width 現已變更為 16 bit。 總結來說:某些 link properties 可以直接在 link 上更改,而有些則需要使用 operator properties 進行更改。 在各自的範例中,operator 需要這兩種方法,因為其中一個用於指定獨立於輸入 Bit Width 的輸出 Bit Width(即會自動決定位移值), 而位移 operator 則用於指定位移值。 在此,輸出 Bit Width 是由參數化值和輸入 Bit Width 自動決定的。
在本範例中,我们在較低的 bit 位置插入了四個 bit。如果您偏好將四個 bit 新增至較高的 bit 位置以取得 16 bit, 則可以改用 operator CastBitWidth。
有關位元運算 operator 的說明與範例,請參閱 operator reference。 請參閱 'ConvertPixelFormat'、'ShiftLeft'、'ShiftRight' 以及 'CastBitWidth'。
有關參數化和位元處理的實用指導,請參見 Parameterization 教學主題 以及 Bit Arithmetic 教學主題。
我們現在已完成基本擷取設計的擴充。 接下來,您可以在硬體中建置並使用您的設計。 您已學習了如何設定 Property 以及如何解決衝突。 在下一節中,將列出適用於各種相機的基本 Acquisition Applets。









上一頁

