參考 IEEE 1685-2022 IP-XACT standard 第 5.3 節
閱讀本篇介紹之前,請先確保已經理解 Bus Definition 文件描述。
簡介與核心目的
抽象定義文件旨在描述匯流排介面的表示方式,用於描述匯流排介面(bus interface)的表示屬性,包括此類匯流排介面可能擁有的 ports 的細節以及適用於這些 ports 的約束。
關鍵屬性
Abstraction definition 的核心是定義一組邏輯埠(logical ports),這些 ports 定義了所引用匯流排類型的表示方式。這些 logical ports 描述了元件在不同抽象層次下的介面長相:
- 邏輯名稱(logical name):這是給定邏輯埠的名稱。在元件描述中,設計者必須將這個邏輯名稱對映到元件實體上的實體埠(physical port)名稱。
- Port Style:logical port 主要分為兩大類
- Wire Ports:承載邏輯資訊或邏輯資訊陣列。這些通常用於暫存器傳輸層(RTL)描述,處理二進位值。線路埠具有方向(如 in、out 或 inout)。
- Transactional Ports:承載以較高抽象層次表示的資訊,通常用於事務級建模(TLM)。事務埠定義了其主動性(initiative),例如是
requires、provides或both。
以下是 abstraction definition 文件中的關鍵元素與屬性整理:
!!請注意以上僅列出常用屬性,不包含所有欄位,詳細資訊請參閱官方標準文件!!
| 元素名稱 | 說明與作用 |
|---|---|
| busType | 指定此抽象定義所描述的匯流排定義,此參照必須是強制性的 |
| extends | 指定此定義是否為另一個抽象定義的延伸。用於建立兼容的抽象定義族系 |
| ports | 包含所有構成此介面表示的 logical ports 清單 |
| parameters | 描述用於配置此匯流排定義的任何參數 |
每個 <port> 元素都描述了一個 logical ports,用於映射到元件的 physical port。
| 元素名稱 | 說明與作用 |
|---|---|
| logicalName | 賦予邏輯埠一個唯一的名稱。此名稱稍後將在元件描述中用於對映到實體埠 |
| match | 若為 true,則連接中的埠必須在連接的兩端都存在且被對映 |
| wire | 如果埠傳輸的是邏輯值或邏輯值陣列,則使用此元素(通常用於 RTL 級別) |
| transactional | 如果埠傳輸的是高抽象層次的資訊,則使用此元素(通常用於 TLM 級別) |
與 Bus Definition 的區別
在 IP-XACT 中,一個完整的功能介面描述被拆分儲存於兩個層次的文件中,以實現靈活性和重用性:
| 文件類型 | 描述重點 | 範例 |
|---|---|---|
| Bus Definition | 類型屬性:高階、通用的連接規則和功能 | 是否可定址(isAddressable) 最大 master 數量 |
| Abstraction Definition | 表示屬性:低階、針對特定設計抽象層次的具體訊號實現細節 | 邏輯埠的名稱、方向、位元寬度 |
每個 abstraction definition 都必須包含一個強制性的 busType 元素,該元素用於明確指定此抽象定義是描述哪一個特定的匯流排定義。一個單一的 bus definition 可以被多個 abstraction definition 所關聯。例如,一個匯流排(例如 AMBA APB)可以有多個 abstraction definition,例如 RTL 級別和 TLM 級別。
Bus definition 就像描述了一輛汽車需要有四個輪子、一個引擎、能載四個人(高階規格),那 abstraction definition 則定義了這輛車具體的設計圖:它說明了引擎必須是 V8 還是 V6,輪胎是 17 吋還是 19 吋,以及每個元件如何通過電線或資料線(即 logical ports)連接起來,以便 EDA 工具可以將它製造出來或進行模擬。
不同的抽象定義(如 RTL 或 TLM)就像是同一輛車的製造設計圖和行為模擬模型。
擴展與兼容性
IP-XACT 支援抽象定義的延伸(Extending abstraction definitions)。
- 抽象定義可以使用
extends元素指定它是否是從另一個抽象定義延伸而來。 - 如果一組抽象定義彼此間存在延伸關係,則它們被認為是兼容的。這允許創建兼容且可互連的匯流排定義族系。
- 限制修改:延伸後的抽象定義(extending abstraction definition)可以添加新埠,或者將舊定義中某些埠標記為 illegal 以禁用其使用,但不能更改已定義埠的某些核心屬性(例如邏輯名稱 logicalName、方向或主動性)。
後記
當初我被英文搞混,一直以為重點在於「抽象化」。後來實際上看過內容物後,確定這個文件內容是在定義某個 bus 或是 interface 在特定抽象層級下的介面語意。也就是說這個「抽象」並不是相對於 bus definition,而是說定義的是介面規格的層級。
花了一下子才搞懂,想說 bus definition 明明資訊上模糊很多,好像比較適合取名叫「抽象」哈哈。
但到這裡就是軟體工程的概念開始發威了!
當 abstraction definition 很像是在定義 interface contract,也就是說在這個文件,使用者完全不會看到 RTL 層級的命名。不管你叫 m_axi_awaddr、addr_o、cpu_addr 等,定義文件都只是在說明這些介面應該有哪些角色,例如:
ADDR
DATA
CLK
RESET
VALID
READY
然後每顆 IP 再自己宣告(也就是映射):
ADDR -> m_axi_awaddr
DATA -> m_axi_wdata
CLK -> aclk
看吧!回歸定義,這才是溝通順利的本質,不然誰認得那些只有 designer 自己才知道的取名?明明 protocol 就已經定義好了,何不拿來用?
因此我之前在 IP-XACT Standard 簡介 中才會說,理解這交換格式還真是既痛苦又親切。




