藉由 VisualApplets,您可以將在 VHDL 中設計的影像處理模組轉換為 VisualApplets operator。
您可以將模組作為 IP 核心納入 VisualApplets 中。每個 IP 核心會建構一個 operator。實作完成後,這些 operator 的運作方式將與內建的 VisualApplets operator 相同。以這種方式實作的 operator 稱為 custom operator。

若要在 VisualApplets GUI 上提供您的 custom operator,您還需要定義一或多個包含該 custom operator 的自訂函式庫。每個 custom operator 都必須是特定自訂函式庫的一部分。
只需幾個步驟,即可將新的 custom operator 新增至 VisualApplets。您可以自行完成整個工作流程:
-
直接在 VA GUI 上指定 custom operator 的主要 Property 及其介面(operator 名稱、operator 版本、所需的 image in、image out 與 memory ports 的數量及 Property 等)。
-
根據您在步驟 1 中的輸入,讓 VisualApplets 為 operator 介面(黑盒子)產生 VHDL 程式碼,以及用於測試您實作內容的 VHDL 測試平台。
-
包裝您的 HDL 程式碼,使其介面與產生的黑盒子相符。自動產生的測試平台有助於測試您的實作內容。
-
建立您實作內容的網路表 (netlist)。如有需要,也請建立限制檔案 (constraints file)。
-
選用:建立 operator 文件(用於 operator 說明視窗)以及模擬模型(稍後可用於模擬包含該 custom operator 的 VA 設計)。
-
再次在 VA 中編輯 custom operator:新增產生的網路表,並可選擇性地新增說明檔案與模擬模型。
完成這些步驟後,您的影像處理模組即可直接在 VisualApplets 中作為 custom operator 使用,且其使用方式與任何其他 operator 相同。自訂函式庫會儲存為 *.val 或 *.vl 檔案(類似於使用者函式庫)。它們可以以此格式進行部署與散布。

VisualApplets(亦即 VisualApplets Custom Operator Functionality)在此工作流程中會使用兩次:
-
用於在 VisualApplets 中產生 operator 原型,以便匯出 HDL 程式碼來定義相關的 IP 核心介面(黑盒子與測試平台)。
-
透過新增合成所需的檔案以及(選用的)模擬與說明內容來完成 operator。
Generation of Operator Prototype:VA Custom Operator Functionality 可讓您建立 operator 原型,該原型可立即用於在 VisualApplets 中建立 operator 執行個體。針對此 operator 原型,可以匯出黑盒子介面以及 RTL 層級的模擬實體,以模擬所產生 operator 介面的通訊連接埠。接著,您可以開始編寫程式碼(即實作符合黑盒子介面的 HDL 程式碼)並模擬您的 custom operator 設計。然後,將產生的 FPGA 設計合成至 EDIF 或 NGC 網路表。您可以選擇性地新增限制檔案、為 VisualApplets 高階模擬建立動態連結函式庫,以及為 VisualApplets GUI 編寫 HTML 文件。
Completing the operator definition:VA Custom Operator Functionality 可讓您指定網路表、模擬函式庫和說明檔案。補充這些檔案後,operator 便可立即使用。
根據底層的流量控制機制,VisualApplets 支援不同類型的 operator 與連接埠。Operator 可以是 O 類型或 M 類型。
![]() |
Custom Operator 類型:M |
|---|---|
|
Custom operator 永遠是 M 類型。 |
Operator 連接埠可以是同步的或非同步的。在 VisualApplets 中,同步基本上是指多個連接埠的資料以同步方式傳輸,而非同步的連接埠則支援未對齊的通訊模式。
連接埠只有在具有共同的 M 來源,或是由 SYNC 模組提供來源時才是同步的;該來源與連接埠之間可以存在任何 O-operators 的組合。
根據 operator 輸入連接埠之間的相互關係,我們區分以下選項:
-
Synchronous inputs:所有輸入連接埠彼此同步。有一個輸出連接埠。
-
Asynchronous inputs:部分輸入連接埠彼此非同步,且所有輸出彼此同步。
不允許具備非同步輸出的運算子。具備同步輸入的運算子只能有一個輸出。如果需要多個輸出,則必須將輸入宣告為非同步。
![]() |
定義多個輸出 |
|---|---|
|
如果您想要建立具有多個輸出的運算子,則需要將其輸入宣告為非同步。多個輸出永遠是同步的。 |
這兩類(內建的 VisualApplets 運算子)的範例:
|
![]()
|
RemoveImage |
具有同步輸入和一個輸出的 M 運算子。 |
|
![]()
|
SYNC |
具有非同步輸入和多個同步輸出的 M 運算子。 |
VisualApplets 自訂運算子介面旨在順暢地整合您的新運算子,使其在 VisualApplets 中的行為如同內建運算子。您可以為自訂運算子定義任意數量的輸入和輸出連接埠。
-
Image In / Image Out:Image In 和 Image Out 連接埠可能支援多種影像格式。它們由易於使用的 FIFO 介面驅動。FIFO 位於自訂運算子的 VA 部分中,因此您只需實作流量控制,而無需實作 FIFO。
-
Memory ports:您也可以定義任意數量的 Memory ports。它們同樣使用位於自訂運算子 VA 部分中的 FIFO。
-
GPIO ports:除了影像連接埠之外,您還可以定義通用 I/O 連接埠,例如用於向運算子傳遞非同步訊號。
-
Registers:為了讓您的運算子的最終使用者能夠設定運算子並存取狀態資訊,您可以定義任意數量的寫入和讀取暫存器。
-
Clock:用於接收時脈脈衝的連接埠會為每個自訂運算子自動設定。
-
Reset/Enable port:用於接收重設或啟用命令的連接埠會為每個自訂運算子自動設定。

以下章節詳細說明上圖中所示的不同介面類型。
VisualApplets 連接兩個時脈輸入——設計時脈以及與設計時脈同步但頻率加倍的第二個時脈。除 Memory 介面外,所有介面都必須與設計時脈同步。Memory 介面可以設定為對讀取和/或寫入介面使用設計時脈或倍頻時脈。
Reset 和 Enable 輸入由實例化運算子的 VA 製程的相應「process enable」和「process reset」訊號驅動。請確保在您的運算子中實作以下行為作為對這些訊號的反應:
-
確認 Reset 會將運算子置於其初始狀態。
-
確認 Enable 會開始處理。
-
停用 Enable 會停止處理。
-
(當 Enable=0 時,不會讀取運算子的輸出 FIFO。根據影像處理管線的狀態,某些資料可能仍會寫入輸入連接埠,但流量控制可安全地防止任何 FIFO 內容損毀。)
-
僅當 Enable=0 時才會確認 Reset
自訂運算子的 VA 部分實作瞭對這些訊號的以下行為:
-
Reset 將清空所有連接埠介面 FIFO。
-
Reset 和 Enable 對運算子的參數沒有影響。
-
Reset 和 Enable 對運算子的 GPIO 介面沒有影響。
為了傳遞算子參數和狀態,自訂算子可以配備任意數量的 VisualApplets 參數。每個參數都會對應到自訂算子的獨立暫存器連接埠。VisualApplets 會負責分派進出算子暫存器的存取作業。
您可以定義自訂算子的影像輸入與影像輸出連接埠所支援的影像協定。如此一來,您算子的未來使用者便能從您提供的影像協定清單中進行選擇。
VisualApplets 提供以下影像格式供您算子的 ImgIn 與 ImgOut 連接埠支援:
-
grayXxP:每個像素具備 X 位元且 Parallelism 為 P 的灰階影像
-
rgbYxP: 每個色彩元件(紅、綠、藍)具備 Y/3 位元且 Parallelism 為 P 的彩色影像
-
hsiYxP: 每個色彩元件(HSI 色彩模型)具備 Y/3 位元且 Parallelism 為 P 的彩色影像
-
hslYxP: 每個色彩元件(HSL 色彩模型)具備 Y/3 位元且 Parallelism 為 P 的彩色影像
-
hsvYxP: 每個色彩元件(HSV 色彩模型)具備 Y/3 位元且 Parallelism 為 P 的彩色影像
-
yuvYxP: 每個色彩元件(YUV 色彩模型)具備 Y/3 位元且 Parallelism 為 P 的彩色影像
-
ycrcbYxP: 每個色彩元件(YCrCb 色彩模型)具備 Y/3 位元且 Parallelism 為 P 的彩色影像
-
labYxP: 每個色彩元件(LAB 色彩模型)具備 Y/3 位元且 Parallelism 為 P 的彩色影像
-
xyzYxP: 每個色彩元件(XYZ 色彩模型)具備 Y/3 位元且 Parallelism 為 P 的彩色影像
此外,影像尺寸以及像素元件是有號數還是無號數的資訊,可以透過選用的字尾來編碼。
The pixel data width X is limited to 64 bit. The width Y must be a multiple of 3 and is limited to 63 bit. The parallelism P defines the number of pixels which are contained in a single data word at the interface port. It must be chosen from following set of allowed values: P = {1, 2, 4, 8, 16, 32, 64}.
將影像資料封裝至給定介面寬度 N 的字組中時,必須遵循特定的規則:
-
所有 P 個像素的資料必須放入長度為 N 的單一字組中。資料是以 LSB 對齊方式儲存,這表示對於像素寬度 Z(灰階時 Z=X,彩色時 Z=Y),資料的分布方式如下:Pixel[0]->Bits[0..Z-1] .. Pixel[P-1]->Bits[(P-1)*Z..P*Z-1]。
-
對於 RGB 影像,三個色彩元件會以 LSB 對齊方式封裝至子字組 [0..Y-1] 中,順序如下:紅色使用位元 [0..Y/3-1],綠色使用位元 [Y/3..2*Y/3-1],藍色使用位元 [2*Y/3..3*Y/3-1]。
-
對於 YUV 彩色影像,適用與 RGB 相同的規則,其中 Y 扮演紅色的角色,U 扮演綠色的角色,而 V 扮演藍色的角色。
-
對於 HSI 彩色影像,適用與 RGB 相同的規則,其中 H 扮演紅色的角色,S 扮演綠色的角色,而 I 扮演藍色的角色。
-
對於 LAB 彩色影像,適用與 RGB 相同的規則,其中 L 扮演紅色的角色,A 扮演綠色的角色,而 B 扮演藍色的角色。
-
對於 XYZ 彩色影像,適用與 RGB 相同的規則,其中 X 扮演紅色的角色,Y 扮演綠色的角色,而 Z 扮演藍色的角色。
在 VisualApplets 中,任何連結都帶有最大影像寬度和最大影像高度等 Property。VisualApplets 允許您針對自訂算子所支援的任何影像協定,分別定義最大寬度和高度的選用條件限制。
對於影像介面連接埠,您可以定義允許的影像協定清單。此清單構成可能的 VisualApplets 影像格式的子集(見上方)。格式可以用以下 Property 來描述:
-
資料類型 uint 或 int
-
像素資料 Bit Width N = [1..64]
-
灰階或 Color Format(具有彙總寬度 N 的單一或三個資料元件)
-
Color Format 的風味 (RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)
-
2D、1D 或 0D
-
Parallelism P = {1,2,4,8,16,32,64}
隱含假設核心大小為 1x1。列出的格式從零開始編號, 並據此定義一個 ID。
當在 VisualApplets 中使用最終運算子時,您的運算子使用者可以 針對相關的影像通訊連接埠,選擇您在此處列出的任何格式。 根據 VA 使用者所做的選擇,對應的 ID 將輸出至 相關的自訂運算子連接埠。
這使自訂運算子能夠使其行為適應所選的格式。
影像輸入連接埠允許將影像資料從 VisualApplets 處理程序傳遞至 自訂運算子。這些連接埠命名為 ImgIn。如果您將 自訂運算子設計為支援其輸入通道的組態設定 (請參閱「Image Protocols」一節),則透過 VisualApplets 中的對應格式參數所選取的單一連接埠,可以驅動數個不同的通訊協定。 該介面基本上由一個 FIFO 和一個參數暫存器組成,該暫存器為實際 使用的資料格式提供 ID。自訂運算子必須負責讀取 FIFO,並根據所選影像格式的通訊協定來解譯 影像資料。運算子必須 根據提供 FIFO 填滿狀態資訊的狀態接腳,保證正確的流量控制,亦即當 FIFO 為空時不得讀取任何資料。
對於影像介面連接埠,需要定義允許的影像格式清單。 此清單構成可能 VisualApplets 影像格式 (請參閱「Image Protocols」一節) 的子集,其中格式可以用下列 Property 進行描述:
-
資料類型 uint 或 int
-
像素資料 Bit Width N = [1..64]
-
灰階或 Color Format(具有彙總寬度 N 的單一或三個資料元件)
-
Color Format 的風味 (RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)
-
2D、1D 或 0D
-
Parallelism P = {1,2,4,8,16,32,64}
隱含假設核心大小為 1x1。列出的格式從零開始編號, 並據此定義一個 ID。
當在 VisualApplets 中使用最終運算子時,使用者可以針對 有關的影像通訊連接埠,選擇您在此處列出的任何 格式。根據 VA 使用者所做的選擇,對應的 ID 將輸出至相關的 Custom Operator 連接埠。這使得自訂運算子能夠調整其行為以適應所選的 格式。
影像輸出連接埠允許將影像資料從自訂運算子傳遞至 VisualApplets 處理程序。這些連接埠命名為 ImgOut。如果您設計 自訂運算子以支援其輸出通道的適當組態設定 (請參閱 「Image Protocols」一節),則透過 VisualApplets 中的對應格式參數所選取的單一連接埠,可以驅動數個不同的通訊協定。 該介面基本上由一個 FIFO 和一個參數暫存器組成,該暫存器為 實際使用的資料格式提供 ID。自訂運算子必須負責根據所選影像格式的通訊協定將影像資料饋送至 FIFO 中。運算子必須 根據提供有關 FIFO 填滿狀態資訊的狀態接腳來保證正確的流量控制,亦即當 FIFO 已滿時不得寫入任何資料。
對於影像介面連接埠,需要定義允許的影像格式清單。 此清單構成可能 VisualApplets 影像格式 (請參閱「Image Protocols」一節) 的子集,其中格式可以用下列 Property 進行描述:
-
資料類型 uint 或 int
-
像素資料 Bit Width N = [1..64]
-
灰階或 Color Format(具有彙總寬度 N 的單一或三個資料元件)
-
Color Format 的風味 (RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)
-
2D、1D 或 0D
-
Parallelism P = {1,2,4,8,16,32,64}
隱含假設核心大小為 1x1。列出的格式從零開始編號, 並據此定義一個 ID。
當在 VisualApplets 中使用最終運算子時,使用者可以針對 有關的影像通訊連接埠,選擇您在此處列出的任何格式。根據 VA 使用者所做的選擇,對應的 ID 將輸出至相關的自訂 運算子連接埠。這使得自訂運算子能夠調整其行為以適應所選的 格式。
通用 I/O 介面允許連接自訂運算子的 專用訊號接腳。每個 GPIO 連接埠都對應到自訂運算子的一個接腳,該接腳不是輸入就是 輸出。
不支援雙向接腳。在 VisualApplets 中,對應的運算子 連接埠屬於 SIGNAL 類型。
![]() |
不支援雙向接腳 |
|---|---|
|
GPIO 接腳必須是輸入或輸出。不支援 雙向接腳。 |
首先,您需要輸入一些詳細資料來描述您的新自訂運算子。
VisualApplets 使用這些詳細資料來為您的自訂運算子產生 VHDL 黑箱 (Black Box) 以及用於模擬的對應測試平台 (Test Bench)。
您可以透過 VisualApplets GUI 輸入個別自訂運算子的組態設定。VisualApplets 會立即將指定的運算子提供用於設計中, 即使該運算子規格在網路表、模擬模型和 文件方面尚不完整。
![]() |
自訂函式庫檔案 |
|---|---|
|
包含所有運算子的自訂函式庫會儲存為單一 此檔案可以散布並直接應用於 VisualApplets 中。 只需將其複製到 VisualApplets 設定中所指定的自訂函式庫目錄中即可。 |
![]() |
XML 格式的運算子組態設定 |
|---|---|
|
VisualApplets 以 XML 格式儲存自訂運算子規格。您可以將 XML 內容從自訂函式庫匯出至檔案,例如用於在版本 控制系統中進行處理。另一方面,您也可以匯入 XML 以新增自訂運算子 (請參閱 「匯入和匯出個別自訂運算子」一節)。您不需要 知道此 XML 檔案的外觀。不過,如果您想查看,請參閱 「自訂運算子規格的 XML 格式」一節。 |
在開始定義新的自訂運算子之前,您需要建立一個新運算子所屬的自訂程式庫。
如果您已經有一個現成的自訂程式庫可供新自訂運算子使用,請跳過此節並前往「建立新自訂運算子」一節。
若要建立新的自訂程式庫:
-
在選單中,選取功能表項目。

-
為您的新自訂程式庫命名。
-
依預設,新的自訂運算子程式庫會以
*.val檔案格式儲存。如果您想在 VisualApplets 3.3.2 或更舊版本中開啟此程式庫,請選取 . -
按一下

![]() |
遵守有效 C 識別碼的慣例 |
|---|---|
|
在定義程式庫名稱時,請確保遵守有效 C 識別碼的慣例。 |
現在,新的自訂程式庫已建立。您可以在運算子面板的標籤頁中看到它:
當您將滑鼠游標移至自訂程式庫名稱上方時,工具提示會顯示該程式庫是否儲存為 *.vl 舊版檔案格式:

若要建立新的自訂程式庫,您可能需要指定一個目錄來儲存所有與自訂程式庫相關的檔案。您可以在 → → 中進行此設定。

若要定義新的自訂運算子:
-
在選單中,選取功能表項目。
-
在開啟的子選單中,選取。

-
在開啟的視窗中,透過按兩下程式庫名稱來選取自訂程式庫。

-
輸入您的自訂運算子名稱:

![[提示]](../common/images/admon/tip.png)
遵守 VHDL 命名慣例 在 VA GUI 中定義運算子名稱時,請確保符合 VHDL 命名慣例。
VHDL 的有效名稱定義如下:
「連接埠、信號、變數、實體名稱、架構主體或類似物件的有效名稱,由一個字母開頭,後面接任意數量的字母或數字,且中間不可有空格。有效名稱也稱為具名識別碼。VHDL 不區分大小寫。不過,名稱內可以使用底線,但不得以底線開頭或結尾。不允許連續兩個底線。」
-
在儲存之前,您必須定義新運算子的 Property:

如需關於定義新自訂運算子 Property 的詳細資訊,請參閱「定義自訂運算子的基本資訊」。
-
按一下按鈕。
對話方塊隨即開啟。您可以在此處定義您的自訂運算子。
-
按一下 按鈕。
現在,您的新自訂運算子會顯示在它所屬的自訂函式庫下方:

一旦您建立了新的自訂運算子並將其儲存至 VisualApplets,您隨時都可以中斷工作並繼續進行。若要繼續,請前往 Custom Library 標籤頁、開啟函式庫、在運算子名稱上按一下滑鼠右鍵,然後從子選單中選取 Edit。

![]() |
改用運算子範本 |
|---|---|
|
或者,您可以使用 VisualApplets 安裝中提供的自訂運算子範本來定義新的自訂運算子。關於如何使用該範本,請參閱「Custom Operator Template」一節。 |
首先,您需要定義自訂運算子的介面。
-
提供您的供應商名稱。您可以輸入任意字串。此資訊旨在供使用者辨識運算子。
-
Provide a version number for your operator, e.g., version 1.0. You can enter any number but you should comply with the version scheme <major>.<minor>. This information is intended for operator version identification by the user.

-
切換至 標籤頁。
在 標籤頁下,您可以描述影像輸入連接埠的屬性。
-
首先,您需要定義自訂運算子 ImgIn 連接埠的輸入模式:

![]() |
同步與非同步運算子連接埠 | |||||
|---|---|---|---|---|---|---|
|
運算子連接埠可以是同步的或非同步的。在 VisualApplets 中,同步基本上是指多個連接埠的資料是同步傳輸的,而彼此非同步的連接埠則支援未對齊的通訊模式。 唯有當連接埠具有共同的 M-source,或它們源自 SYNC 模組時,它們才是同步的;該來源與連接埠之間可以存在任意組合的 O 運算子。 根據運算子輸入連接埠之間的關係,我們區分以下選項:
不允許具備非同步輸出的運算子。具備同步輸入的運算子只能有一個輸出。如果需要多個輸出,則必須將輸入宣告為非同步。 如果您想要建立具有多個輸出的運算子,則需要將其輸入宣告為非同步。多個輸出永遠都是同步的。 這兩類(VisualApplets 內建運算子)的範例:
|
您可以定義一個或多個影像輸入連接埠(ImgIn)。每個 ImgIn 連接埠的使用次數可依您的指定而定。
-
按一下 按鈕
若要在 (ImgIn) 連接埠中建立第一個影像。
-
為 ImgIn 連接埠命名,並在 欄位中定義輸入連接埠的數量:>1 表示定義一個連接埠陣列,其名稱由基底名稱和索引組成。

程式視窗中的運算子呈現隨即會顯示輸入的 ImgIn 連接埠陣列:

-
在 面板中,您可指定此 ImgIn 連接埠所支援協定的屬性。

-
在 下方,指定 ImgIn 連接埠的寬度。
-
在 下方,指定 VA 核心至少須提供的輸入資料緩衝區 FIFO 深度。該值必須是 15 到 1023 之間、2 的冪次方減 1。
針對影像介面連接埠,您需定義允許的協定清單。協定可透過下列屬性進行描述:
-
灰階或色彩格式(具備聚合寬度 N 的單一或三個資料元件)
-
Color Format 的風味 (RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)
-
像素資料 Bit Width N = [1..64]
-
Parallelism P = {1,2,4,8,16,32,64}
-
2D (陣列)、1D (線條) 或 0D (原始)
-
資料類型 uint 或 int
-
最大影像尺寸
隱含假設核心大小為 1x1。
所列出的協定從零開始編號,因而定義了一個 ID(在下方的圖片中,可見於 面板表格的左側欄)。
如果您指定多個協定,即表示您將自訂運算子設計為支援其輸入通道的組態設定。在此情況下,單一連接埠可驅動數個不同的協定。
您的自訂運算子使用者可以在特定的 ImgIn 連接埠上選擇其要使用的協定。根據 VA 使用者所做的選擇,對應的 ID 將會輸出至相關的自訂運算子連接埠。這可讓自訂運算子根據所選的協定調整其行為。
-
-
在 下方,指定協定的色彩格式。

允許使用下列色彩格式:
-
grayXxP:每個像素具備 X 個位元且 Parallelism 為 P 的灰階影像
-
rgbYxP: 每個色彩元件 (紅、綠、藍) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
hsiYxP: 每個色彩元件 (HSI 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
hslYxP: 每個色彩元件 (HSL 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
hsvYxP: 每個色彩元件 (HSV 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
yuvYxP: 每個色彩元件 (YUV 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
ycrcbYxP: 每個色彩元件 (YCrCb 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
labYxP: 每個色彩元件 (LAB 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
xyzYxP:每個彩色元件具備 Y/3 位元(XYZ 色彩模型)且 Parallelism 為 P 的彩色影像
-
-
在 欄位的欄位中按兩下,並為特定格式指定像素資料寬度:

Pix.Width 的數值範圍取決於您在 下的選擇:
Gray:像素資料寬度(以下稱為 X)限制為 64 bit。
All color formats:像素資料寬度(以下稱為 Y)必須是 3 的倍數,且限制為 63 bit。
-
在 欄位的欄位中按兩下,並為特定格式指定 Parallelism。
The parallelism defines the number of pixels which are contained in a single data word at the interface port. It must be chosen from following set of allowed values: P = {1, 2, 4, 8, 16, 32, 64}. Packing of image data into words of a given interface width N (specified under ) must follow certain rules:
-
所有 P 個像素的資料必須裝入長度為 N 的單一 word 中。資料採用 LSB 對齊儲存,這表示對於像素寬度 Z(灰階時 Z=X,彩色時 Z=Y),資料分佈如下:Pixel[0]->Bits[0..Z-1] .. Pixel[P-1]->Bits[(P-1)*Z..P*Z-1]。
-
對於 RGB 影像,三個色彩元件會以 LSB 對齊方式封裝至子 word [0..Y-1] 中,順序如下:紅色使用 bits [0..Y/3-1],綠色使用 bits [Y/3..2*Y/3-1],藍色使用 bits [2*Y/3..3*Y/3-1]。
-
對於 HSI 彩色影像,適用與 RGB 相同的規則,其中 H 扮演紅色的角色,S 扮演綠色的角色,I 扮演藍色的角色。
-
對於 HSL 彩色影像,適用與 RGB 相同的規則,其中 H 扮演紅色的角色,S 扮演綠色的角色,L 扮演藍色的角色。
-
對於 HSV 彩色影像,適用與 RGB 相同的規則,其中 H 扮演紅色的角色,S 扮演綠色的角色,V 扮演藍色的角色。
-
對於 YUV 彩色影像,適用與 RGB 相同的規則,其中 Y 扮演紅色的角色,U 扮演綠色的角色,V 扮演藍色的角色。
-
對於 YCrCb 彩色影像,適用與 RGB 相同的規則,其中 Y 扮演紅色的角色,Cr 扮演綠色的角色,Cb 扮演藍色的角色。
-
對於 LAB 彩色影像,適用與 RGB 相同的規則,其中 L 扮演紅色的角色,A 扮演綠色的角色,B 扮演藍色的角色。
-
對於 XYZ 彩色影像,適用與 RGB 相同的規則,其中 X 扮演紅色的角色,Y 扮演綠色的角色,Z 扮演藍色的角色。
-
-
在 下,指定該協定支援 2D(區域)、1D(線形)還是 0D(Raw)影像。

-
:使用這些選填欄位,您可以為影像寬度和影像高度定義限制條件。
-
重複步驟 6 到 10,以為 ImgIn 連接埠支援任意數量的協定。
-
重複步驟 1 到 11,以為自訂運算子提供任意數量的 ImgIn 連接埠。

在 索引標籤下,您將描述影像輸出連接埠的屬性。
您可以定義一或多個影像輸出連接埠(ImgOut)。每個 ImgOut 連接埠都可以按照您指定的次數使用。
-
按一下 按鈕
以建立第一個影像輸出(ImgOut) 連接埠中建立第一個影像。
-
為 ImgOut 連接埠命名。
-
在 欄位的欄位中按兩下以建立連接埠陣列。Multiplicity >1 會定義一個連接埠陣列,其名稱由基礎名稱與索引組成。

程式視窗中的 operator 圖示會立即顯示所輸入的 ImgOut 通訊埠陣列:

-
在 面板中,您可指定此 ImgOut 通訊埠所支援的通訊協定屬性。
在 下,指定 ImgOut 通訊埠的寬度。
-
在 下,指定輸出資料的緩衝區 FIFO 深度,VA 核心至少需提供此深度。該數值必須介於 15 到 1023 之間,且為 2 的冪次方減 1。
針對影像介面連接埠,您需定義允許的協定清單。協定可透過下列屬性進行描述:
-
灰階或 Color Format(具有彙總寬度 N 的單一或三個資料元件)
-
Color Format 的風味 (RGB, HSI, HSL, HSV, YUV, YCrCb, LAB, XYZ)
-
像素資料 Bit Width N = [1..64]
-
Parallelism P = {1,2,4,8,16,32,64}
-
2D (陣列)、1D (線條) 或 0D (原始)
-
資料類型 uint 或 int
-
最大影像尺寸
隱含假設核心大小為 1x1。
所列出的協定從零開始編號,因而定義了一個 ID(在下方的圖片中,可見於 面板表格的左側欄)。
如果您指定多個協定,即表示您將自訂運算子設計為支援其輸入通道的組態設定。在此情況下,單一連接埠可驅動數個不同的協定。
您自訂 operator 的使用者可以在特定的 ImgOut 通訊埠上選擇要使用的通訊協定。根據 VA 使用者所做的選擇,對應的 ID 將會輸出至相關的自訂 operator 通訊埠。這可讓自訂 operator 根據所選的通訊協定調整其行為。
-
-
在 下方,指定協定的色彩格式。

允許使用下列色彩格式:
-
grayXxP:每個像素具備 X 個位元且 Parallelism 為 P 的灰階影像
-
rgbYxP: 每個色彩元件 (紅、綠、藍) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
hsiYxP: 每個色彩元件 (HSI 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
hslYxP: 每個色彩元件 (HSL 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
hsvYxP: 每個色彩元件 (HSV 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
yuvYxP: 每個色彩元件 (YUV 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
ycrcbYxP: 每個色彩元件 (YCrCb 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
labYxP: 每個色彩元件 (LAB 色彩模型) 具備 Y/3 個位元且 Parallelism 為 P 的彩色影像
-
xyzYxP:每個彩色元件具備 Y/3 位元(XYZ 色彩模型)且 Parallelism 為 P 的彩色影像
-
-
在 Pix.Width 欄位的欄位中按兩下,並為特定格式指定像素資料寬度:

Pix.Width 的數值範圍取決於您在 下的選擇:
Gray:像素資料寬度(以下稱為 X)限制為 64 bit。
All color formats:像素資料寬度(以下稱為 Y)必須是 3 的倍數,且限制為 63 bit。
-
在 欄位的欄位中按兩下,並為特定格式指定 Parallelism。
The parallelism defines the number of pixels which are contained in a single data word at the interface port. It must be chosen from following set of allowed values: P = {1, 2, 4, 8, 16, 32, 64}. Packing of image data into words of a given interface width N (specified under ) must follow certain rules:
-
所有 P 個像素的資料必須裝入長度為 N 的單一 word 中。資料採用 LSB 對齊儲存,這表示對於像素寬度 Z(灰階時 Z=X,彩色時 Z=Y),資料分佈如下:Pixel[0]->Bits[0..Z-1] .. Pixel[P-1]->Bits[(P-1)*Z..P*Z-1]。
-
對於 RGB 影像,三個色彩元件會以 LSB 對齊方式封裝至子 word [0..Y-1] 中,順序如下:紅色使用 bits [0..Y/3-1],綠色使用 bits [Y/3..2*Y/3-1],藍色使用 bits [2*Y/3..3*Y/3-1]。
-
對於 HSI 彩色影像,適用與 RGB 相同的規則,其中 H 扮演紅色的角色,S 扮演綠色的角色,I 扮演藍色的角色。
-
對於 HSL 彩色影像,適用與 RGB 相同的規則,其中 H 扮演紅色的角色,S 扮演綠色的角色,L 扮演藍色的角色。
-
對於 HSV 彩色影像,適用與 RGB 相同的規則,其中 H 扮演紅色的角色,S 扮演綠色的角色,V 扮演藍色的角色。
-
對於 YUV 彩色影像,適用與 RGB 相同的規則,其中 Y 扮演紅色的角色,U 扮演綠色的角色,V 扮演藍色的角色。
-
對於 YCrCb 彩色影像,適用與 RGB 相同的規則,其中 Y 扮演紅色的角色,Cr 扮演綠色的角色,Cb 扮演藍色的角色。
-
對於 LAB 彩色影像,適用與 RGB 相同的規則,其中 L 扮演紅色的角色,A 扮演綠色的角色,B 扮演藍色的角色。
-
對於 XYZ 彩色影像,適用與 RGB 相同的規則,其中 X 扮演紅色的角色,Y 扮演綠色的角色,Z 扮演藍色的角色。
-
-
在 下,指定該協定支援 2D(區域)、1D(線形)還是 0D(Raw)影像。

-
:使用這些選填欄位,您可以為影像寬度和影像高度定義限制條件。
-
重複步驟 6 至 10,以定義您希望 ImgOut 通訊埠支援的任意數量通訊協定。
-
重複步驟 1 至 11,以定義您希望自訂 operator 支援的任意數量 ImgOut 通訊埠。
通用 I/O 介面允許連接自訂運算子的 專用訊號接腳。每個 GPIO 連接埠都對應到自訂運算子的一個接腳,該接腳不是輸入就是 輸出。
不支援雙向接腳。在 VisualApplets 中,對應的 operator 通訊埠型別為 SIGNAL。
-
前往 分頁。
-
使用下列項目新增所需的任意數量 GPI 與 GPO: 按鈕
.
-
按兩下欄位以為特定的 GPI 或 GPO 命名。
程式視窗左上方面板中的自訂 operator 圖示會立即顯示已定義的 GPI 與 GPO:

![]() |
不支援雙向接腳 |
|---|---|
|
接腳只能是輸入或輸出。不支援雙向接腳。 |
可以將自訂 operator 設定為存取一個或多個 Memory 庫(DRAM、SRAM 等)。
所有 Memory 通訊埠都具有類似 FIFO 的介面,可用於寫入和讀取指令。這些 FIFO 位於自訂 operator 的 VA 部分中,因此您只需要實作流量控制,而不需要實作 FIFO。將 FIFO 內容轉發至連接至自訂 operator 之 Memory 控制器的時序完全由 VisualApplets 控制。
在 分頁下,您可以定義您的 operator 能夠存取外部 Memory。您可以指定最多 4 個通訊埠。您可以指定 operator 所需的 Memory 介面屬性。
![]() |
符合目標平台的 Memory 配置 |
|---|---|
|
請記住潛在目標平台(將執行包含自訂 operator 之 applet 的平台)的 Memory 配置。 |

|
參數名稱 |
Type |
描述 |
|---|---|---|
|
|
Integer |
資料寬度 |
|
|
Integer |
位址寬度 |
|
|
Integer |
標記寫入存取的旗標寬度。此參數必須 >= 1。 |
|
|
Integer |
標記讀取存取的旗標寬度。此參數必須 >= 8。 |
|
|
String |
此參數用來表示 Memory 介面時脈與設計時脈之間的關係。可使用下列數值:
|
在您輸入了 'Defining an Individual Custom Operator via GUI' 一節中所述的所有詳細資料後,即可進行實際的 VHDL 編碼。首先,您需要 VisualApplets 來產生 VHDL 黑箱和測試平台。
若要觸發 VHDL 黑箱和測試平台的產生:
-
在 VisualApplets 程式視窗的 面板中,前往 標籤頁。
-
開啟自訂庫並選取您要實作的自訂算子。
-
在算子名稱上按一下滑鼠右鍵,然後從子選單中選取 → 。

-
指定您要儲存所建立之 VHDL 檔案的資料夾。
此時會開始產生。產生成功後,會開啟確認對話方塊。按一下 以確認。
您可以在您指定的資料夾中找到所有產生的檔案。
產生的黑箱提供了您透過 GUI 指定的所有連接埠(請參閱 'Defining an Individual Custom Operator via GUI')。
在本章中,您可以找到關於這些連接埠在產生的 VHDL 黑箱中之外觀的詳細說明。
VisualApplets 支援兩個時脈網域。其中包含一個基礎設計時脈以及一個與該時脈同相且頻率加倍的衍生時脈。因此,自訂算子有兩個時脈輸入。此外,還有一個 Reset 和
Enable 如上所述的輸入。
|
連接埠 |
方向 |
Width |
描述 |
|---|---|---|---|
|
|
在 |
1 |
基礎設計時脈 |
|
|
在 |
1 |
時脈同步至 |
|
|
在 |
1 |
算子重設 |
|
|
在 |
1 |
啟用處理 |
正如章節所述,寫入暫存器連接埠的定義 'Defining an Individual Custom Operator via GUI' 會產生如下的介面,其中 PORTID 為暫存器名稱,且
PORTIDWidth 為已定義的暫存器位元寬度。
|
連接埠 |
方向 |
Width |
描述 |
|---|---|---|---|
|
|
在 |
PORTID |
暫存器資料 |
|
|
在 |
1 |
訊號寫入存取 |
如 'Defining the Registers of the Custom Operator' 中所述,讀取暫存器連接埠的定義會對應產生以下介面:
|
連接埠 |
方向 |
Width |
描述 |
|---|---|---|---|
|
|
輸出 |
PORTID |
暫存器資料 |
|
|
在 |
1 |
訊號讀取存取 |
為了在 VisualApplets 核心與自訂運算子之間進行資料通訊,可以設定如 'Defining the Image Input Ports' 中所述的影像通訊連接埠。通訊透過簡單的 FIFO 介面以及額外的格式識別符連接埠來完成。
用於將資料從 VisualApplets 核心傳輸至自訂運算子的 ImgIn 通道會產生如下介面,其中 PORTID 是對應連接埠型別名稱的名稱,而 X 則是 用於區分多個同類連接埠的連接埠編號:
|
連接埠 |
方向 |
Width |
描述 |
|---|---|---|---|
|
|
在 |
PORTID |
進入自訂運算子的資料 |
|
|
輸出 |
1 |
接受輸入資料 |
|
|
在 |
1 |
訊號行結束。如果啟用此旗標,則資料不包含像素值。 |
|
|
在 |
1 |
訊號影格結束。如果啟用此旗標,則資料不包含像素值。此旗標僅在同時發出行結束訊號時才會被確立。 |
|
|
在 |
1 |
緩衝區 FIFO 為空 |
|
|
在 |
|
緩衝區 FIFO 中的字數。此訊號可用於產生 FIFO 旗標,例如 |
|
|
在 |
|
用於通知目前影像資料格式的預先定義參數。N 是為此連接埠指定的影像格式數量。 |
下圖說明了 ImgIn 連接埠處的資料流。連接埠名稱元件 PORTIDX 已被替換為 ImgIn。波形顯示了大小為 3x2 的二維影格輸入。
當 ImgIn 連接埠是多個 O-synchronous 輸入連接埠的一部分時,所有連接埠都必須同時消耗 FIFO 資料。在這種情況下,所有連接埠的 FIFO 填充級別將完全相符,因此運算子只需要根據多個 O-synchronous 輸入之一的填充級別來實作流量控制。

用於將資料從自訂運算子傳輸至 VisualApplets 核心的 ImgOut 通道會產生如下介面,其中 PORTID 是對應連接埠型別名稱的名稱,而 X 則是 用於區分多個同類連接埠的連接埠編號:
|
連接埠 |
方向 |
Width |
描述 |
|---|---|---|---|
|
|
輸出 |
PORTID |
輸出資料 |
|
|
輸出 |
1 |
輸出資料有效 |
|
|
輸出 |
1 |
將目前的寫入存取發出訊號作為行結尾通知。此時寫入資料將不會被解釋為像素資料。 |
|
|
輸出 |
1 |
將目前的寫入存取發出訊號作為影格結尾通知。此時寫入資料將不會被解釋為像素資料。此旗標需要同時與行結尾選通信號相關聯。 |
|
|
在 |
1 |
Buffer FIFO 已滿,不再接受任何資料 |
|
|
在 |
|
緩衝區 FIFO 中的字數。此訊號可用於產生 FIFO 旗標,例如 |
|
|
在 |
|
用於通知目前影像資料格式的預先定義參數。N 是為此連接埠指定的影像格式數量。 |
下圖說明了 ImgOut 連接埠處的資料流。波形顯示了大小為 3x2 的二維影格之輸出。當 ImgOut 連接埠是多個 O-synchronous 輸出連接埠的一部分時,它們必須同時發出資料。

可以設定自訂運算子以擁有多達四個記憶體埠。所產生介面的 I/O 埠會獲得一個後綴 X,其中 X 是記憶體埠的索引。
|
姓名 |
方向 |
Width |
描述 |
|---|---|---|---|
|
|
輸出 |
|
透過 VisualApplets 核心將寫入資料輸出至記憶體 |
|
|
輸出 |
|
寫入旗標輸出 |
|
|
輸出 |
|
寫入位址 |
|
|
輸出 |
1 |
發出寫入指令 |
|
|
輸出 |
1 |
要求此寫入埠的優先權 |
|
|
在 |
1 |
可能僅接受單一後續寫入指令 |
|
|
在 |
1 |
由於相關的 FIFO 已滿,不接受任何寫入指令 |
|
|
在 |
1 |
寫入指令的 FIFO 為空 |
|
|
在 |
4 |
緩衝的寫入指令數量 |
|
|
在 |
|
來自 VisualApplets 核心的寫入旗標輸出 |
|
|
在 |
1 |
寫入旗標輸入有效 – 發出訊號表示 |
|
|
輸出 |
|
讀取旗標 |
|
|
輸出 |
|
讀取位址 |
|
|
輸出 |
1 |
發出讀取指令 |
|
|
輸出 |
1 |
要求此讀取埠的優先權 |
|
|
在 |
1 |
可能僅接受單一後續讀取指令 |
|
|
在 |
1 |
由於相關的 FIFO 已滿,不接受任何讀取指令 |
|
|
在 |
1 |
用於讀取指令的 FIFO 為空 |
|
|
在 |
4 |
已緩衝的讀取指令數量 |
|
|
在 |
|
讀取旗標輸入 – 僅在以下情況下有效: |
|
|
在 |
|
讀取資料輸入 |
|
|
在 |
1 |
讀取資料有效 |

上圖說明瞭記憶體介面協定波形。
在自訂 operator 的介面描述(「透過 GUI 定義個別自訂 operator」一節)中定義的任何 GPIO 輸入或輸出訊號,在產生的 operator 介面中都有對應的輸入或輸出埠。宣告通用接腳時,將建立以下連接埠:
-
iSig_名稱 對於名為的 GPIO 輸入訊號 名稱. -
oSig_名稱 對於名為的 GPIO 輸出訊號 名稱.
為了模擬包含自訂 operator 模組的 VisualApplets 設計,VisualApplets 會為連接至自訂 operator 的介面建立模擬測試台。
每個介面連接埠均獨立模擬,由 File I/O 驅動。模擬實體應由下列元素組成:
-
暫存器存取模擬。根據激勵檔案,可以寫入和讀取一組暫存器。
-
連接至 ImgIn 類型連接埠的畫格來源模擬器。受檔案激勵,這些類型的模組將畫格資料輸出至 ImgIn。
-
連接至 ImgOut 類型連接埠的畫格接收器模擬器。這種類型的模組會模擬連接至 ImgOut 的 operator。該模組會將接收到的資料寫入檔案。
-
記憶體連接埠模擬器。
-
GPIO 模擬器。每個用於輸入的 GPIO 訊號均由透過檔案設定的訊號產生器驅動。每個 GPIO 訊號輸出都會受到監控,並且訊號的變更會寫入報告檔案。
對於 RTL 層級模擬,VisualApplets 會建立一個 VHDL 檔案,其中包含一個名為 CustomOperator_<OPERATORNAME> 其中
<OPERATORNAME> 是指定的 operator 名稱。
此封裝包含以下元件 <OPERATORNAME> 和
<OPERATORNAME>_TB 其中後者是 VisualApplets 設計與自訂 operator 之間介面的測試台。以下顯示名為簡單自訂 operator 的產生的程式碼 RegExample
僅由一個讀取和寫入暫存器埠組成(Ctrl 和 Status),每個寬度為 4 位元:
component RegExample port( iDesignClk: in std_logic := '0'; iDesignClk2x: in std_logic := '0'; iReset: in std_logic := '0'; iEnable: in std_logic := '0'; ivReg_Ctrl_D: in std_logic_vector(3 downto 0); iReg_Ctrl_Wr: in std_logic; ovReg_Status_D: out std_logic_vector(3 downto 0); iReg_Status_Rd: in std_logic ); end component; component RegExample_TB generic( DesignClkPeriod: time := 16 ns; Register_StimuliFileName: string := "" ); end component;
測試台會建立自訂 operator 的實例,並將協定模擬模組連接到每個介面連接埠。以下章節將說明不同類型的模擬器、如何透過激勵檔案控制它們,以及如何產生輸出檔案。
產生的測試台實作了暫存器存取介面的模擬器。該模擬器設定為定址具有單一處理序的設計。寫入和讀取暫存器的位址從 0x4 開始,暫存器位址根據給定自訂 operator 元件中暫存器介面埠的順序以 1 的增量遞增(如上述範例元件) RegExample).讀取和寫入的暫存器位址是獨立計數的。模擬器由透過 entity 參數設定的文字檔來驅動
Register_StimuliFileName 如上述 VHDL 程式碼中所提供。
激勵檔案中可能存在以下指令:
|
指令 |
描述 |
|---|---|
|
|
行餘部分為註解 |
|
|
模擬全域重設 |
|
|
模擬處理重設。此指令具有以下語法: |
|
|
啟用處理程序。語法如下: |
|
|
等待一定數量的時脈週期。語法如下: |
|
|
寫入暫存器: |
|
|
從暫存器讀取: |
在任何指令的最後一個參數之後,可以加上以 “#” 開頭的註解。
以下程式碼是一個激勵檔案範例,它根據上述測試平台存取暫存器 RegExample_TB:
REM ************************************************************
REM Command formats:
REM GRS -> Global reset
REM GEN <value> -> Set global enable to <value>
REM PRS <procID> -> Reset process <procID> (0 .. F) REM PEN <procID> <value>
-> Set enable of process <procID> to
<value>
REM WCK <clk_ticks> -> Wait for <clk_ticks> clock cycles REM WRR <wrRegAddr> <value>
-> Write <value> to register <wrRegAddr> REM RDR <rdRegAddr> -> Read from register <rdRegAddr>
REM ************************************************************
WCK 0004 # wait for 4 clock cycles
GRS # global reset
GEN 1 # set global enable
WCK 0001 # wait for 1 clock tick
PRS 0 # reset process 0
PEN 0 1 # set enable of process 0
WCK 0002 # wait for 2 clock ticks
WRR 0004 0000000A # write 0xA to address 0x4
WCK 0002 # wait for 2 clock ticks
RDR 0004 # read from address 0x4
WCK FFFF
類型為 ImgIn 的影像通訊介面模擬是由提供進入自訂 operator 的資料序列資訊的激勵檔案所驅動。對於任何存在的 ImgIn 連接埠,測試平台都有一個 <PORTIDX>_StimuliFileName where <PORTIDX> 是對應影像輸入連接埠類型的名稱,後面接著連接埠編號。給定檔案中的每一行都必須遵循以下語法:
<Command> <Data> <EndOfLine> <EndOfFrame> <DataValid>
其中 <Command> 是一個三字母命令, <Data> 提供一個十六進位資料字,其餘三個參數對應至 image protocol 旗標。
下表描述可用的命令:
|
指令 |
描述 |
|---|---|
|
|
Data 命令。此命令提供將成為連接埠輸入的資料
|
|
|
等待命令。參數 |
|
|
設定 FID 輸入。參數 |
任何命令列皆可新增註解,前面加上 “#”。
以下程式碼是一個 stimuli 檔案範例,會觸發 3x2 影像的輸入:
FID 00000001 0 0 0 #Format: Cmd Data(hex) EndOfLine EndOfFrame DataValid
DAT 00000000 0 0 0
DAT 0000001a 0 0 1
DAT 0000001b 0 0 1
DAT 0000001c 0 0 1
DAT 00000000 1 0 1
WCK 00000004 0 0 0
DAT 0000002a 0 0 1
DAT 0000002b 0 0 1
DAT 0000002c 0 0 1
DAT 00000000 1 1 1
WCK 0000FFFF 0 0 0
類型為 ImgOut 由提供 FID 狀態序列資訊的 stimuli 檔案所驅動。對於任何現有的 ImgOut 連接埠,VA_Design_Emulator 實體具有一個通用
<PORTIDX>_StimuliFileName 其中
<PORTIDX> 是對應的影像輸出連接埠類型名稱,後面接著連接埠編號。語法與 ImgIn 介面的 stimuli 完全相同,只是沒有 DAT 命令可用。一個簡單的 stimuli 檔案可能如下所示:
WCK 00000010 0 0 0 #Format: Command Data(hex)
FID 00000001 0 0 0
WCK 0000FFFF 0 0 0
參數
<EndOfLine>,<EndOfFrame> 和
<DataValid> 實際上並無意義。
影像 ImgOut 產生的測試台中的介面模擬器會將接收到的資料寫入檔案。為此,測試台實體具有一個通用
<PORTIDX>_DumpFileName。在模擬期間,系統會建立一個給定名稱的檔案,並使用 DAT 和
WCK 命令將資料寫入,其格式完全對應至 ImgIn 介面模擬器的 stimuli 檔案格式。
當自訂運算子實作記憶體介面時,測試台會將記憶體模擬模組連接至對應的介面連接埠。自訂運算子不得依賴記憶體介面的特定時序(例如返回讀取資料的時間),因為這完全由 VisualApplets 控制,且可能會因平台甚至不同設計而異。
專用輸入訊號的模擬是針對每個訊號獨立進行的,由 stimuli 檔案驅動。其中提供了關於訊號狀態序列的資訊。stimuli 檔案可能包含多個在下方描述的命令。對於任何現有的輸出訊號連接埠,測試台實體具有一個通用
iSig_<NAME>_StimuliFileName 其中
<NAME> 是相關的連接埠名稱。
下表描述可用的命令:
|
指令 |
描述 |
|---|---|
|
|
Set signal. 此命令提供連接埠 |
|
|
Wait 命令。其語法為: |
|
|
從頭重新開始。命令解譯器將從 stimuli 檔案的第一行重新開始。此命令沒有任何參數。該命令將在同一個時脈周期執行檔案的第一個命令,從而能夠組裝無間隙的迴圈。 |
|
|
在目前狀態停止。命令解譯器將停止,並且目前的訊號狀態將保持不變,直到模擬結束。此命令沒有任何參數。 |
任何命令列皆可新增註解,前面加上 “#”。
以下程式碼是一個範例激勵檔案,它會使自訂運算子輸入訊號保持低電位 5 個時脈週期,並保持高電位 7 個時脈週期(與
iDesignClk):
SET 0 # deassert output
WCK 0004 # wait for 4 clock cycles
SET 1 # assert output
WCK 0006 # wait for 6 clock cycles
RST # restart from begin
透過寫入傾印檔案來監控專屬輸出訊號
oSig_<NAME>_DumpFileName 其中
<NAME> 是相關的連接埠名稱。該檔案由 SET
和 WCK 組成,這些指令完全對應於專屬輸入訊號的激勵檔案指令。
若要將自訂運算子完整整合至 VisualApplets,必須提供高階模擬元件。高階模擬元件需要編譯成具有預定義匯出 C 函數集的動態連結庫。您可以在 → 標籤頁下將此檔案新增至運算子規格中:

為了在 VisualApplets 內進行高階模擬,必須匯出以下函數,
int SimulateOPNAME (va_custom_op_sim_handle simHandle)
其中 OPNAME 是自訂運算子的名稱。
高階模擬必須符合以下要求:
-
Frame based simulation - 在每個影像輸入連接埠上,都可以查詢是否有一個或多個影格可用。如果啟動模擬所需的所有連接埠都能提供影格,則需要透過呼叫適當的函數來計算並發出相關的輸出影格。對於一維影像資料,資料串流會自動分割成影格,並像 2D 資料一樣進行模擬。
-
Bit accurate simulation – 結果影格的計算必須是位元準確的,即輸出資料必須與硬體實作所產生的資料完全相同。
-
Keeping consistency of flow – 當運算子輸入連接埠彼此同步時,必須相應地擷取輸入影像。當定義了多個輸出時,必須同時輸出影像。對於模擬函數而言,這意味著當向一個輸出鏈結輸出影格時,必須在模擬函數返回之前向所有其他輸出鏈結輸出影格。
由於運算子的行為通常取決於運算子參數集,因此可以透過以下介面查詢這些參數:
|
編號 |
功能 |
描述 |
|---|---|---|
|
1 |
|
取得運算子參數的值。 |
VisualApplets 提供了幾個函數,用於取得、產生和儲存自訂運算子的影像資料:
|
編號 |
功能 |
描述 |
|---|---|---|
|
1 |
|
取得在 ImgIn 連接埠上可用的影像。 |
|
2 |
|
輸出影像至 ImgOut 連接埠。 |
|
3 |
|
查詢 ImgIn 連接埠是否可以傳遞影像。 |
|
4 |
|
查詢 ImgOut 連接埠是否可以接收影像。 |
|
5 |
|
建立新影像。 |
|
6 |
|
刪除影像。 |
|
7 |
|
將影像儲存在運算子實例的本地儲存空間中,並提供一個名稱以便日後參照該影像。 |
|
8 |
|
查詢儲存在運算子實例中的影像數量。 |
|
9 |
|
依索引取得儲存的影像。 |
|
10 |
|
透過索引取得儲存的影像名稱。 |
|
11 |
|
透過名稱取得儲存的影像。 |
|
12 |
|
建立新的影像格式代handle,該handle會由與指定 port 相關聯的格式進行初始化。 |
|
13 |
|
建立作為指定格式副本的新影像格式。 |
|
14 |
|
刪除先前建立的影像格式 handle。 |
若要透過影像 handle 操作影像,可以使用以下函式:
|
編號 |
功能 |
描述 |
|---|---|---|
|
1 |
|
取得影像格式。 |
|
2 |
|
設定畫格的 Property(例如高度)。 |
|
3 |
|
取得畫格的 Property。 |
|
4 |
|
設定像素元件值 |
|
5 |
|
取得像素元件值 |
|
6 |
|
設定單行的大小。 |
|
7 |
|
取得單行的大小。 |
可以透過以下函式操作影像格式:
|
編號 |
功能 |
描述 |
|---|---|---|
|
1 |
|
設定影像格式 Property(例如最大寬度)。 |
|
2 |
|
取得影像格式 Property。 |
模擬函式可以使用以下函式向 VisualApplets 模擬系統注入狀態訊息(即錯誤訊息):
|
編號 |
功能 |
描述 |
|---|---|---|
|
1 |
|
建立狀態訊息。 |
|
2 |
|
設定狀態訊息的 Property(例如嚴重性)。 |
|
3 |
|
將狀態訊息提交至模擬引擎。 |
為了查詢資訊與設定參數,必須透過軟體介面交換資料。為了保持介面函式簡便同時提供型別安全的介面,實作了一種資料抽象化機制。每當需要通訊不同類型的資料時,就會使用稱為 va_data 的資料結構,其中包含對資料的參照以及有關底層資料類型的資訊。此資料結構由使用者建立,但透過下方列出的專用函式進行設定。下表顯示由此方法處理的資料類型:
|
Data Type |
描述 |
|---|---|
|
|
以 32-Bit 整數給定的 enum 項目 |
|
|
32-Bit 有號整數 |
|
|
32-Bit 無號整數 |
|
|
64位元帶符號整數 |
|
|
64位元無符號整數 |
|
|
雙精度浮點數 |
|
|
32位元帶符號整數陣列 |
|
|
32位元無符號整數陣列 |
|
|
64位元帶符號整數陣列 |
|
|
64位元無符號整數陣列 |
|
|
雙精度浮點數陣列 |
|
|
字串提供方式為 |
設定先前建立的 va_data 結構
(vaData) 用於透過以下函式設定資料通訊:
va_data* va_data_enum(va_data* vaData, int32_t *data)
va_data* va_data_int32(va_data* vaData, int32_t *data)
va_data* va_data_uint32(va_data* vaData, uint32_t *data)
va_data* va_data_int64(va_data* vaData, int64_t *data)
va_data* va_data_uint64(va_data* vaData, uint64_t *data)
va_data* va_data_double(va_data* vaData, double *data)
va_data* va_data_int32_array(va_data* vaData, int32_t *data, size_t elementCount)
va_data* va_data_uint32_array (va_data* vaData, uint32_t *data, size_t elementCount)
va_data* va_data_int64_array (va_data* vaData, int64_t *data, size_t elementCount)
va_data* va_data_uint64_array (va_data* vaData, uint64_t *data, size_t elementCount)
va_data* va_data_double_array (va_data* vaData, double *data, size_t elementCount)
va_data* va_data_string(va_data* vaData, char data*, size_t strSize)
va_data* va_data_const_string(va_data* vaData, const char **data)
對於字串,有兩種字串通訊選項:
-
透過以下方式提供字元陣列
va_data_string()。隨後,查詢到的字串資料將被複製 到該陣列中。 -
提供指標給
const char*。接著,當查詢型別為VA_STRING的資訊時,將傳回指向內部字串 表示形式的指標。當您使用 此方法時,請檢查傳回字串的生命週期。
範例程式碼:以下範例顯示了用於查詢影像寬度的程式碼。
uint32_t imgWidth;
va_data
va_imgWidth;
va_data_double(&va_imgWidth,&imgWidth);
vaSi_Image_GetProperty(imageHandle, "Width", &va_imgWidth);
在此之後,變數 imgWidth 將包含所要求的
資訊。
以下是對指定模擬介面函式的參數和傳回值的詳細說明。
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
參數名稱。 |
|
參數 3 |
用於查詢值的返回參數。 |
|
描述 |
返回具有給定名稱的參數的值。 |
|
傳回值 |
0:值為查詢到的資料 <0: Cannot query parameter |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
運算子連接埠名稱。 |
|
參數 3 |
影像代handle的返回參數。 |
|
描述 |
取得從給定連接埠進入運算子的影像,並傳回參考該影像的 handle。在從模擬函式返回之前,必須透過呼叫以下內容來儲存此影像 |
|
傳回值 |
0: OK <0 : Cannot get image |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
運算子連接埠名稱。 |
|
參數 3 |
影像 handle。 |
|
描述 |
將影像輸出至給定的連接埠。 |
|
傳回值 |
0:操作已成功完成 <0: Cannot output image |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
運算子輸入連接埠名稱。 |
|
描述 |
傳回具有給定名稱的連接埠是否有可用的輸入影像。 |
|
傳回值 |
true:影像可用 false:沒有可用的影像 |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
運算子輸出連接埠名稱。 |
|
描述 |
傳回具有給定名稱的輸出連接埠是否可以接收影像。 |
|
傳回值 |
true:輸出已準備好接收下一張影像 false:輸出尚未準備好接收影像 |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
新影像的影像格式。 |
|
參數 3 |
影像代handle的返回參數。 |
|
描述 |
根據參數 2 給定的格式建立空白影像。在從模擬函式返回之前,必須透過呼叫以下內容來儲存此影像
|
|
傳回值 |
0 : OK <0 : Could not create image |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
要刪除的影像之 handle。 |
|
描述 |
刪除由給定影像 handle 所參考的影像。 |
|
傳回值 |
0:操作已成功完成 <0: Error during deleting image |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
影像 handle。 |
|
參數 3 |
儲存影像時使用的名稱。稍後可以透過此名稱查詢該影像。 |
|
描述 |
將影像儲存在運算子模擬實例的本機儲存空間中。 |
|
傳回值 |
0:操作已成功完成 |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
影像計數的傳回參數。 |
|
描述 |
傳回儲存在運算子模擬執行個體中的影像數量。 |
|
傳回值 |
0: OK <0: Can’t query information. |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
已儲存影像陣列中的索引。 |
|
參數 3 |
影像代handle的返回參數。 |
|
描述 |
取得先前儲存的影像。該影像將從影像儲存區中移除。從模擬函式傳回之前,必須透過呼叫以下項目再次儲存該影像: |
|
傳回值 |
0 : OK <0 : Could not get image |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
已儲存影像陣列中的索引。 |
|
描述 |
傳回影像名稱的字串。 |
|
傳回值 |
Not |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
儲存影像時所使用的名稱。 |
|
參數 3 |
影像代handle的返回參數。 |
|
描述 |
取得先前以指定儲存名稱儲存的影像。該影像將從影像儲存區中移除。從模擬函式傳回之前,必須透過呼叫以下項目再次儲存該影像:
|
|
傳回值 |
0 : OK <0 : Could not get image |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
運算子連接埠名稱。 |
|
參數 3 |
格式代碼的傳回指標。 |
|
描述 |
建立新的影像格式物件並傳回對應的代碼。此格式由具有指定名稱的連接埠格式進行初始化。從模擬函式傳回之前,必須透過呼叫以下項目刪除此格式:
|
|
傳回值 |
0 : OK <0 : Could not create format |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
正在複製的格式代碼。 |
|
參數 3 |
格式代碼的傳回參數。 |
|
描述 |
建立新的影像格式物件並傳回對應的代碼。此格式由提供的格式進行初始化。從模擬函式傳回之前,必須透過呼叫以下項目刪除此格式:
|
|
傳回值 |
Not |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
提供給運算子模擬函式的模擬控制代碼。 |
|
參數 2 |
正在刪除的格式代碼。 |
|
描述 |
刪除由給定格式代碼所參考的影像格式物件。 |
|
傳回值 |
0: OK <0 : Could not delete format |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
影像 handle。 |
|
參數 2 |
先前建立的格式之代碼,將被設定為影像的格式。 |
|
描述 |
查詢由影像代碼所參考的影像格式。 |
|
傳回值 |
0:操作已成功完成 <0: Cannot query format |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
影像 handle。 |
|
參數 2 |
用於識別要設定之 Property 的字串。 |
|
參數 3 |
指向用於設定新 Property 的資料結構的指標。 |
|
描述 |
設定由影像代號(image handle)所參照之影像的 Property。透過此函式可設定以下 Property:
|
|
傳回值 |
0:Property 已成功設定 |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
影像 handle。 |
|
參數 2 |
用於識別要查詢之 Property 的列舉值。 |
|
參數 3 |
指向用於資料通訊的資料結構的指標。 |
|
描述 |
查詢由影像代號所參照之影像的 Property。可使用以下 Property:
|
|
傳回值 |
0:Property 已成功查詢 |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
影像 handle。 |
|
參數 2 |
行號。 |
|
參數 3 |
行長度。 |
|
描述 |
將參照行的長度設為個別值,此值可能與整體影像寬度不同(不得超過影像格式定義的最大影像寬度)。 |
|
傳回值 |
0:操作已成功完成 <0: Cannot set line length to the given value |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
影像 handle。 |
|
參數 2 |
行號。 |
|
參數 3 |
行長度的回傳參數。 |
|
描述 |
傳回參照行的長度。 |
|
傳回值 |
0: OK <0: Cannot query line length |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
影像 handle。 |
|
參數 2 |
影格內的位置。 |
|
參數 3 |
元件索引。 |
|
參數 4 |
像素元件值。 |
|
描述 |
將對應的 pixel component 設為給定的值。 |
|
傳回值 |
0:操作已成功完成 <0: Error setting the pixel component value |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
影像 handle。 |
|
參數 2 |
影格內的位置。 |
|
參數 3 |
元件索引。 |
|
參數 4 |
pixel component值的傳回參數 |
|
描述 |
傳回對應的 pixel component 值。 |
|
傳回值 |
0:操作已成功完成 <0: Error getting the pixel component value |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
Image format 控點。 |
|
參數 2 |
識別要設定之 Property 的 Enum 值。 |
|
參數 3 |
指向包含新 Property 的資料結構的指標。 |
|
描述 |
設定由控點所參照之 image format 的 Property。可以透過此函式設定下列 Property:
|
|
傳回值 |
0:Property 已成功設定
|
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
Image format 控點。 |
|
參數 2 |
用於識別要查詢之 Property 的列舉值。 |
|
參數 3 |
指向將被查詢之 Property 覆寫的資料結構指標。 |
|
描述 |
查詢由控點所參照之 image format 的 Property。可以查詢的 Property 與透過下列函式可設定的 Property 相同:
|
|
傳回值 |
0:Property 已成功查詢
|
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
Simulation 控點。 |
|
參數 2 |
所建立錯誤訊息的傳回參數。 |
|
描述 |
建立可提交至 simulation 引擎的狀態訊息。 |
|
傳回值 |
0 : OK <0: Can’t create message |
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
Simulation 控點。 |
|
參數 2 |
狀態訊息控點。 |
|
參數 3 |
要設定的 Property 名稱。 |
|
參數 4 |
新 Property 值 |
|
描述 |
修改狀態訊息 Property。可以透過此函式設定以下 Property:
|
|
功能 |
|
|---|---|
|
語法 |
|
|
參數 1 |
Simulation 控點。 |
|
參數 2 |
要提交的狀態訊息 Handle。 |
|
描述 |
已將狀態訊息提交給模擬引擎。 |
|
傳回值 |
0 : OK <0: Can’t submit message |
運算子的說明文件應以 HTML 檔案形式提供。如果可用,所有構成說明文件的檔案都必須在 → 標籤下指定:

指定的第一個檔案會被解譯為運算子說明文件的起點。此檔案的命名慣例為:
<NameOfCustomOperator>.htm.
請務必提供 CSS 檔案。同時也請確保提供所有相關的圖片檔案。
您可以使用 VisualApplets 安裝目錄中子目錄下的運算子範本 Examples/CustomLibrary/OperatorTemplate.
當您包裝了 HDL 程式碼以使其介面符合產生的黑盒子時,您需要進行最後幾個步驟來完成自訂運算子:
-
從您的實作中建立一個網表(netlist)。
![[提示]](../common/images/admon/tip.png)
設定 Add IO Buffer = NO建立網表時,請確保您的綜合工具不會自動新增 IO 緩衝區。如果您使用 XST 進行網表綜合,請設定
Add IO Buffer = NO否則,產生的 NGC 檔案會在 VisualApplets 建置流程中導致錯誤。
![[提示]](../common/images/admon/tip.png)
網表產生過程中的警告 產生網表時,可能會輸出關於自訂運算子介面未使用的 IO Port 的警告。未使用的 IO Port 是指根據您的運算子定義產生,但未與您的 IP 核心連接的所有連接埠。您可以忽略這些警告。
此行為的範例包括您在以下位置找到的所有自訂運算子範例
ExamplesVisualApplets 安裝目錄:\Examples\CustomLibrary -
如果需要,也請定義約束檔案(
*.ucf格式(如果您使用 Xilinx ISE),*.xdc如果您使用 Xilinx Vivado,則為格式)。 -
選用:如「定義自訂運算子的軟體介面」一節所述設定運算子的軟體介面。
-
選用:如「建立自訂運算子說明文件」一節所述建立運算子說明文件。
現在,您需要在 VisualApplets 中完成運算子定義。為此,請按照以下步驟操作。
必要步驟:
-
前往 分頁。

-
指定您產生的網list(netlist)檔案。
-
如果您定義了限制條件(constraints),請指定限制條件檔案。
-
指定支援的裝置:裝置名稱即為目標平台 FPGA 類型的名稱。請完全使用 VisualApplets 專案資訊方塊中提供的拼寫方式。若支援多個 FPGA 類型,請使用空格分隔名稱列表。

若設計使用了自訂運算子(custom operator),但目標平台上的 FPGA 不在此列表中,DRC 將回報該運算子不受目標平台支援的錯誤。
-
指定支援的 Xilinx Tool(s)。您可以同時勾選 ISE 和 Vivado。使用 ISE 產生的網list通常也與 Vivado 建構流程相容,但您應確認您的運算子實作是否如此。您需要定義支援給定網list的工具最低版本號。通常這會是您用來建立網list的版本。
若設計使用了自訂運算子,但建構設計時未使用指定的工具,DRC 將回報該運算子不受目標平台支援的錯誤。
![[提示]](../common/images/admon/tip.png)
定義多個 Core 您可以為同一個自訂運算子定義多個 Core。這允許使用自訂運算子的裝置與工具特定實作,以便針對不同的目標平台選擇適當的實作來建構 applet。
選用步驟:
-
選填,輸入運算子消耗的邏輯資源。只需輸入 Xilinx 工具在產生網list期間估算的數值即可。
-
在 分頁下,指定您的模擬函式庫路徑(自訂運算子的軟體介面)。
-
在 分頁下,指定圖示檔案的路徑。此檔案包含當您的自訂運算子顯示於 VisualApplets 時所使用的圖示。
-
在 分頁下,指定構成您的自訂運算子文件的所有檔案。請確保同時提供 CSS 檔案以及所有相關的圖片檔案。
-
如果您想要保護您的運算子設計:在左下角,啟用 選項。在開啟的對話方塊中:
-
確保保護模式 已啟用。
-
輸入您的密碼。
-
按一下 。

您隨時可以在稍後的時間點,透過自訂函式庫元素的關聯式選單來保護您的自訂運算子設計。
![[提示]](../common/images/admon/tip.png)
保護選項 啟用保護後,自訂運算子將變成一個 「黑盒(black box)」。保護自訂運算子設計有兩種方式:
-
透過密碼保護:自訂運算子設計隨後可以透過密碼開啟與編輯。沒有密碼的使用者將無法檢視自訂運算子的任何詳細資料(黑盒)。
-
不可逆保護:如果您選擇保護模式 One-Way,自訂運算子將永久成為黑盒,且無法再次開啟,即使您自己也無法開啟。
"One-Way" 保護是不可逆的:如果您選擇保護模式 One Way(而不是 Password),自訂函式庫元素將永遠無法再次開啟,即使您自己也無法開啟。如果您計劃在稍後的時間點增強該元素,請確保改選保護模式 。或者,您可以在啟用此保護模式之前,先將該元素複製一份(作為階層式方塊或未受保護的運算子)。
-
-
按一下 。
現在,您的新自訂運算子已準備好在設計中使用。
包含所有運算子的自訂函式庫會儲存為單一
<LibaryName>.val 或
<LibaryName>.vl 檔案中。
<LibaryName> 是自訂函式庫的名稱。
此檔案可以進行散布並直接應用於 VisualApplets 中。它只需要複製到 VisualApplets 設定中指定的「自訂函式庫」目錄即可( → → → )

-
將新的
<LibaryName>.val或<LibaryName>.vl檔案複製到 VisualApplets 安裝目錄中的 Custom Library 目錄。 -
在 VisualApplets GUI 中重新掃描自訂程式庫:在程式庫名稱上按一下滑鼠右鍵,然後從子選單中選取 。

在 VisualApplets 範例目錄中,您會找到一個名為
CustomLibrary.vl
的現成程式庫,其中包含所有範例 operator。
當您對自訂 operator 進行變更時,這些變更不會反映在您已經使用該自訂 operator 的設計中。因此,您需要更新設計中的自訂 operator 執行個體。
-
在 operator 上按一下滑鼠右鍵。
-
從子選單中選取 或 。

Custom Libraries 的更新機制與 User Libraries 完全相同。
在安裝目錄中,您會找到可用於定義自訂 operator 的自訂 operator 範本。
\Examples\CustomLibrary 若要使用自訂 operator 範本:
-
在您要建立新自訂 operator 的自訂程式庫上按一下滑鼠右鍵。
-
從子選單中,選擇 → 。

-
指定 operator 範本的路徑。
-
按一下 。
對話方塊隨即開啟:

-
為您的新自訂 operator 命名,然後依照 'Defining an Individual Custom Operator via GUI' 一節中的說明繼續操作。
自訂 operator 的定義是以 XML 格式儲存。可以從 operator 程式庫匯出相關的 XML 檔案,或者可以使用先前匯出的 XML 檔案來匯入 operator。
接下來,我們將說明所需的參數,其中參數名稱與具有相同名稱的 XML 標籤相關。諸如 ImgInInfo 將會轉譯為類似以下的 XML 條目:
<ImgInInfo> ImgInPortNames </ImgInInfo> 其中
ImgInPortNames 是該值,在此情況下為連接埠名稱序列。這些參數是以階層方式排列。在以下表格中,具有灰色背景的列會標示預期參數所在的階層位置。
簡單的參數值可屬於下列類型:
-
選項 (Choice):允許的值為
YES或NO -
字串 (String):不含空白字元的 ASCII 字串
-
Integer
-
浮點數
某些參數是由值所組成的結構,其中陣列或記錄可作為結構化元素。輸入陣列時,需使用以空白字元分隔的值清單,且值本身也可以是結構化的。輸入記錄時,則使用如下的格式,其中 RecordName 是記錄識別碼,
attrX 是記錄條目的識別碼,且
attrXValue 是這些值:
<RecordName attr1=”attr1Value” .. attrN=”attrNValue”/>
例如,提供一個名為 port 的記錄,其中包含用於名稱和寬度的條目:
<port name=”flag” width=”4”/>
XML 格式的根標籤為 Operator ,帶有一個屬性
name ,應在此處提供自訂運算子名稱:
<Operator name=”XYZ”> … </Operator>
![]() |
遵守 VHDL 命名慣例 |
|---|---|
|
在 VA GUI 中定義運算子名稱時,請確保符合 VHDL 命名慣例。 VHDL 的有效名稱定義如下: 「連接埠、信號、變數、實體名稱、架構主體或類似物件的有效名稱,由一個英文字母開頭,後接任意數量的字母或數字組成,且不含空格。有效名稱也稱為命名識別碼。VHDL 不區分大小寫。不過,名稱內可以使用底線,但不能以底線開頭或結尾。不允許使用兩個連續的底線。」 |
|
參數名稱 |
Type |
描述 |
|---|---|---|
|
|
String |
供應商名稱。 |
|
|
String |
運算子的版本號碼。此值可自由選定,供使用者進行版本識別。 |
|
|
字串陣列 |
運算子的核心網表清單。第一個字串必須是
|
|
|
String |
包含適用於運算子的高階模擬模型的軟體函式庫(動態連結函式庫)的檔案之引號括住名稱。 |
|
|
String |
包含運算子圖示的檔案之引號括住名稱。 |
|
|
字串陣列 |
包含說明內容(HTML + 圖片)的引號包圍檔案名稱清單。第一個檔案被視為主 HTML 檔案。 |
表 7. Operator/Info
|
參數名稱 |
Type |
描述 |
|---|---|---|
|
|
字串陣列 |
稍後定義的資訊結構名稱清單
( |
|
|
字串陣列 |
稍後定義的資訊結構名稱清單
( |
|
|
String |
字串,用於定義 ImgIn 連接埠的輸入彼此是同步還是非同步。此字串可以是 “Sync” 或 “Async”。 |
|
|
字串陣列 |
稍後定義的資訊結構名稱清單
( |
|
|
字串陣列 |
稍後定義的資訊結構名稱清單
( |
|
|
字串陣列 |
通用信號輸入的接腳名稱清單。 |
|
|
字串陣列 |
通用信號輸出的接腳名稱清單。 |
|
|
字串陣列 |
稍後定義的資訊結構名稱清單
( |
表 8. Operator/IO
|
參數名稱 |
Type |
描述 |
|---|---|---|
|
|
Integer |
operator 消耗的 FPGA LUT 元素數量 |
|
|
Integer |
operator 消耗的 FPGA 暫存器數量 |
|
|
Integer |
operator 消耗的 block RAM 元素數量 |
|
|
Integer |
operator 消耗的嵌入式乘法器數量 |
表 9. Operator/Properties
影像輸入連接埠規格是在設定檔中使用以下語法來完成:
<ImgIn name=”IMG_IN_IDENTIFIER”> Parameters </ImgIn>;
此處 IMG_IN_IDENTIFIER 是上述參數中提供的
其中一個影像輸入連接埠名稱 Operator/IO/ImgInInfo. 該
內容 Parameters 是用來指定影像介面的屬性
連接埠:
|
參數名稱 |
Type |
描述 |
|---|---|---|
|
|
Integer |
影像資料埠的寬度 |
|
|
Integer |
輸入資料的緩衝 FIFO 深度,該緩衝區至少須由 VA 核心提供。此值必須為 15 至 1023 之間的二的冪減 1。 |
|
|
記錄陣列 |
圖像格式記錄清單 |
表 10. Operator/ImgIn
影像格式記錄具有以下結構:
<ImgFormat name=”FORMAT” maxWidth=”X1” maxHeight=”Y1” alias=”NAME1”/>
項目 FORMAT 是一個字串值,用於表示透過下方討論的影像格式命名規則所編碼的影像格式。屬性
maxWidth 和 maxHeight 是選填的,用於固定影像大小的限制。如果未提供,使用者稍後可以在 VisualApplets 中自由選擇影像大小限制。屬性 alias
同樣是選填的;若存在,則定義該格式在 GUI 中顯示的名稱。
影像輸出連接埠規格是透過組態檔中的以下語法來完成:
<ImgOut name=”IMG_OUT_IDENTIFIER”> Parameters </ImgOut>;
此處 IMG_OUT_IDENTIFIER 是上方參數中提供的其中一個影像輸出連接埠名稱 Operator/IO/ImgOutInfo。
內容 Parameters 用於指定影像介面連接埠的 Property:
|
參數名稱 |
Type |
描述 |
|---|---|---|
|
|
Integer |
影像資料埠的寬度 |
|
|
Integer |
輸出資料的緩衝區 FIFO 深度,VA 核心至少需提供此深度。該值必須是介於 15 到 1023 之間的 2 的冪次方減 1。 |
|
|
記錄陣列 |
圖像格式記錄清單 |
表 11. Operator/ImgOut
影像格式採用以下命名規則進行編碼:
{BaseFormat}{BitsPerPixel}x{Parallelism}
選填的後綴可用於指定影像維度以及有號元件資料的通知:
{BaseFormat}{BitsPerPixel}x{Parallelism}x{Dimension}{Sign}
該維度的含義如下:
-
Dimension = 2– 二維影像表示該影像同時由行結尾 (end-of-line) 和影格結尾 (end-of-frame) 標記所建構。 -
Dimension = 1– 一維影像表示沒有任何影格結尾標記將傳入的行劃分為影格。
若未指定維度,則預設值為二。後綴
{Sign} 可以是 s 用於有號像素元件,或
u 用於無號數值,若未提供此類後綴,則預設值為 u
支援的 Color Format 有 rgb,
yuv, hsi, lab 和
xyz.
範例包括:
-
gray8x4 – 8 位元像素且 Parallelism 為 4 的灰階格式
-
rgb24x2 – 3x8 位元像素且 Parallelism 為 2 的 RGB Color Format
-
gray16x1 – 16 位元像素的灰階格式,資料字中僅包含單一像素
-
gray8x4x1 – 每像素 8 位元且 Parallelism 為 4 的一維灰階影像
-
gray16x1s – 具備帶號 16 位元組件的灰階影像,資料字中僅包含單一像素
暫存器輸入埠規格透過組態檔中的下列語法來完成:
<RegIn name=”REG_IN_IDENTIFIER”> Parameters </RegIn>;
此處 REG_IN_IDENTIFIER 是上述參數中提供的其中一個暫存器輸入埠名稱 Operator/IO/RegInInfo。
內容 Parameters 正在指定暫存器介面埠的 Property:
暫存器輸出埠規格透過組態檔中的下列語法來完成:
<RegOut name=”REG_OUT_IDENTIFIER”> Parameters </RegOut>;
此處 REG_OUT_IDENTIFIER 是上述參數中提供的其中一個暫存器輸出埠名稱 Operator/IO/RegOutInfo。
內容 Parameters 正在指定暫存器介面埠的 Property:
Memory 介面規格透過組態檔中具有下列語法的區段來完成:
<Mem name=”MEM_IDENTIFIER”> Parameters </MEM>
此處 MEM_IDENTIFIER 是在上述參數中提供的其中一個 Memory 埠名稱 Operator/IO/MemInfo. 該
內容 Parameters 正在指定 Memory 介面的 Property:
|
參數名稱 |
Type |
描述 |
|---|---|---|
|
|
Integer |
資料寬度 |
|
|
Integer |
位址寬度 |
|
|
Integer |
標記寫入存取的旗標寬度。此參數必須 >= 1。 |
|
|
Integer |
標記讀取存取的旗標寬度。此參數必須 >= 8。 |
|
|
Integer |
用於通訊可用寫入指令數量的埠寬度 |
|
|
Integer |
用於通訊可用讀取指令數量的埠寬度 |
|
|
String |
此參數用來發出 Memory 介面時脈與設計時脈之間關係的信號。可能的值如下:
|
表 14. Operator/Mem
IP 核心網list的規格是在設定檔中使用以下語法按區段進行的:
<Core name=”CORE_IDENTIFIER”> Parameters </Core>
此處 Core_IDENTIFIER 是在上述參數中提供的其中一個核心名稱 Operator/Cores。該內容
Parameters 用於指定 IP 核心的 Property:
|
參數名稱 |
Type |
描述 |
|---|---|---|
|
|
字串陣列 |
核心支援的 FPGA 裝置名稱清單(範例:
|
|
|
String |
網list的引號包圍的 UTF-8 編碼檔名。 |
|
|
String |
選用限制條件檔的引號包圍的 UTF-8 編碼檔名。 |
|
|
String |
可以使用給定網list的 ISE 工具流程的最低版本號(範例: |
|
|
String |
可以使用給定網list的 Vivado 工具流程的最低版本號(範例: |
表 15. Operator/Core








上一頁

