跳轉到

AXI4-Lite 協定與歷史#

要讓 CPU 配置你的流水線單元——設定 opcode、讀取累加值——你需要一組 memory-mapped 暫存器,以及一個大家都認得的匯流排協定。今天的事實標準是 AXI4-Lite,它的背後是 ARM 用三十年打造的 AMBA 帝國。

AMBA 的譜系#

1996 年,ARM 發表 AMBA 1(Advanced Microcontroller Bus Architecture),包含 ASB 與 AHB 兩種匯流排。當時的背景是:ARM 把 CPU core 授權給各家晶片廠,每家廠商都要自己把 CPU 接上週邊——如果每家都發明自己的匯流排,IP 生態就無法累積。AMBA 的用意正是「把接合處標準化」,讓一顆 UART IP 在誰家的 SoC 都能插上就用。

2003 年,AMBA 3 推出 AXI(Advanced eXtensible Interface),這是一次徹底的重新設計:把共享匯流排改成點對點通道,把位址、讀資料、寫資料拆成獨立通道,讓它們可以同時進行(outstanding transactions、亂序完成)。AXI 生而為高性能互連:多核心、多 master、DDR 控制器與 cache 的時代需要它。

2010 年,AMBA 4 推出 AXI4,統一了 AXI3 的變體,並新增 AXI4-Stream(無位址的純資料流)。同年家族裡還有兩個精簡版:AXI4-Lite——無 burst、單筆傳輸的簡化版,專為低速暫存器存取而設計;AXI4-Stream——把第 9 章的 valid/ready 推到極致的資料流通道。

五通道#

AXI4-Lite 有五個通道,每一個都是獨立的 valid/ready 握手(第 9 章的協定在這裡全面復用):

通道 方向 內容
AW(寫位址) master → slave AWADDR、AWVALID、AWREADY
W(寫資料) master → slave WDATA、WVALID、WREADY
B(寫回應) slave → master BRESP、BVALID、BREADY
AR(讀位址) master → slave ARADDR、ARVALID、ARREADY
R(讀資料) slave → master RDATA、RRESP、RVALID、RREADY

一次寫入 = AW + W + B 三次握手;一次讀取 = AR + R 兩次。AXI4-Lite 不支援 burst,資料寬度固定 32 或 64 位,協定狀態機因此簡單到可以整章寫完——這正是它適合教學與小型 IP 的原因。

為什麼 AMBA 成為事實標準#

技術上 AXI 不見得處處最優(例如簡單場合裡 handshake 通道的冗餘),但它贏在制度。ARM 的商業模式是 IP 授權:幾百家公司買 ARM core,附帶的代價與好處就是進入 AMBA 生態。Cadence、Synopsys 賣的介面 IP、Xilinx 的 Zynq 與 Vivado IP integrator、開源世界的各家 SoC 專案,全都以 AXI 為接合面。當設計自動化工具、驗證 IP、除錯工具都假設你講 AXI,網路效應就鎖死了選擇。這是教科書級的標準競爭案例:技術優勢是入場券,生態鎖定才是王座。

AXI4-Lite 的定位#

在 AXI 家族裡,AXI4-Lite 是刻意做小的那一個:去掉了 burst(一次位址後連續傳多筆資料)、去掉了 QoS、cache 屬性等高性能訊號,資料寬度固定,傳輸必為單筆。這讓 slave 端的實作簡化到一個小 FSM 就能完成——非常適合 SoC 裡的週邊暫存器(UART 的設定、GPIO 的方向、中斷遮罩)。原則是:資料通路用 AXI4 或 AXI4-Stream 追求吞吐,控制通路用 AXI4-Lite 追求簡單。本書第 10 章的暫存器模組、第 11 章的 RISC-V 核心週邊,都走這條路。

下一節,我們用 Veryl 的 interface 把這五個通道正式定義出來。