攝影師:Tima Miroshnichenko: https://www.pexels.com/zh-tw/photo/6755091/

IP-XACT 物件介紹:Abstraction Definition(抽象定義)

參考 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),例如是 requiresprovidesboth

以下是 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_awaddraddr_ocpu_addr 等,定義文件都只是在說明這些介面應該有哪些角色,例如:

ADDR
DATA
CLK
RESET
VALID
READY

然後每顆 IP 再自己宣告(也就是映射):

ADDR -> m_axi_awaddr
DATA -> m_axi_wdata
CLK  -> aclk

看吧!回歸定義,這才是溝通順利的本質,不然誰認得那些只有 designer 自己才知道的取名?明明 protocol 就已經定義好了,何不拿來用?

因此我之前在 IP-XACT Standard 簡介 中才會說,理解這交換格式還真是既痛苦又親切。

讓我知道你在想什麼!