以下文章來(lái)源于AdriftCoreFPGA芯研社,作者CNL中子
前言
在 SoC、FPGA IP、外設(shè)控制器等系統(tǒng)中,配置通路(Configuration Bus) 幾乎無(wú)處不在——寄存器讀寫(xiě)、狀態(tài)回讀、DMA 觸發(fā)、控制接口、模塊初始化這些都離不開(kāi)一條穩(wěn)定可靠的配置總線。
在實(shí)際設(shè)計(jì)中,工程師往往需要在 APB、AHB、AXI-Lite 之間做權(quán)衡與選擇。
然而,這三種協(xié)議各有優(yōu)點(diǎn),也各自帶著不容忽視的工程痛點(diǎn)。
雖然配置通路本身屬于低速域,看起來(lái)不復(fù)雜,但真正落地到幾十個(gè)外設(shè)、跨時(shí)鐘域、壓 timing、做slice、處理讀寫(xiě)語(yǔ)義一致性時(shí),往往會(huì)暴露出各種棘手問(wèn)題。
本文將基于實(shí)際工程經(jīng)驗(yàn),討論 APB / AHB / AXI-Lite 在真實(shí)項(xiàng)目中的常見(jiàn)痛點(diǎn)和使用場(chǎng)景。如果你有不同的觀點(diǎn)、踩過(guò)更深刻的坑,或有更好的架構(gòu)方法,歡迎在評(píng)論區(qū)一起交流。
APB
APB 可以說(shuō)是最簡(jiǎn)單的一類(lèi)總線協(xié)議,在眾多 IC 設(shè)計(jì)和 FPGA 項(xiàng)目中都被大量使用。它無(wú)流水、無(wú)突發(fā),控制信號(hào)少、時(shí)序關(guān)系簡(jiǎn)單,在所有常見(jiàn)總線中資源占用理論上最小。其優(yōu)點(diǎn)是簡(jiǎn)單、穩(wěn)定、易集成;缺點(diǎn)同樣明顯:帶寬與性能有限。
在大多數(shù)配置場(chǎng)景中,只是寫(xiě)寄存器、回讀狀態(tài),對(duì)性能需求并不高,因此 APB 能在各類(lèi) SoC 中存活超過(guò) 20 年也就不足為奇。
然而,APB 的簡(jiǎn)單只在系統(tǒng)規(guī)劃良好的前提下成立。當(dāng)初期沒(méi)有做好 APB slave地址空間的規(guī)劃,例如一個(gè) master 需要連接幾十路 slave 時(shí),復(fù)雜度就會(huì)急劇上升。


時(shí)序收斂難度陡增
APB 信號(hào)數(shù)量雖然不多,但組合邏輯比例很大。當(dāng)你把幾十路 PSEL、讀寫(xiě)分配、多路選擇器等全部堆在一個(gè)大型crossbar中,綜合之后會(huì)出現(xiàn)典型問(wèn)題:
? 長(zhǎng)組合路徑鏈條過(guò)多
? 分布式邏輯跨區(qū)域布局
? 極高的 Fanout
? 全局走線拉得非常長(zhǎng)
最終結(jié)果很容易是:時(shí)序全面崩壞。
APB 極不適合做slice/pipeline
在 SoC 中通過(guò)切關(guān)鍵路徑插一拍,是傳統(tǒng)且有效的時(shí)序優(yōu)化手段。但 APB 具有一些獨(dú)特缺陷,使得 pipeline 十分困難:
? APB 沒(méi)有完整的握手機(jī)制
? 時(shí)序依賴固定的兩拍協(xié)議 + 半同步行為
? 讀寫(xiě)共享通路,不像 AXI 那樣天然分離
? 寫(xiě)路徑可能只有一條,而 pready / prdata 卻可能來(lái)自幾十路,從而難以統(tǒng)一處理
在這種情況下,隨意插入一拍非常容易破壞協(xié)議timing diagram,例如:
? PSEL / PENABLE 的時(shí)序關(guān)系被打亂
? PREADY 反饋延遲不一致
? PRDATA 返回周期無(wú)法與手冊(cè)周期要求匹配
即便你強(qiáng)行做成了slice,它也不會(huì)像 AXI-Stream 那樣形成一致、標(biāo)準(zhǔn)的pipeline結(jié)構(gòu)。由于讀寫(xiě)通路不分離、通道數(shù)不對(duì)稱(chēng)、反饋路徑復(fù)雜,實(shí)現(xiàn)最終往往會(huì)變成一坨難以維護(hù)的“屎山”。
更糟糕的是,當(dāng)系統(tǒng)已經(jīng)發(fā)展到幾十路slave,這時(shí)候想再做分區(qū)規(guī)劃、把 slave 進(jìn)一步級(jí)聯(lián)或分層,往往已經(jīng)為時(shí)已晚。此階段想要重構(gòu) APB 配置通路意味著:
需要重新推導(dǎo)、重新規(guī)劃整個(gè)路徑,工作量巨大。
AXI-Lite
AXI-Lite 是 AXI 協(xié)議的精簡(jiǎn)版本,主要用于配置類(lèi)訪問(wèn)。其請(qǐng)求、數(shù)據(jù)與響應(yīng)完全分離,包含五個(gè)獨(dú)立通道:AR、AW、W、R、B。
與完整 AXI 不同,AXI-Lite 不支持 burst,也沒(méi)有 ID,因此僅支持單次訪問(wèn)。然而,它允許:
? AR 通道連續(xù)握手(連續(xù)發(fā)起讀請(qǐng)求)
? AW/W 通道連續(xù)握手(連續(xù)發(fā)起寫(xiě)請(qǐng)求)
? 讀寫(xiě)并行執(zhí)行(讀寫(xiě)通道完全獨(dú)立)
因此在 Xilinx IP、Intel IP 等主流平臺(tái)中,AXI-Lite 是默認(rèn)的配置通路方案。


多子系統(tǒng)下的順序不可控問(wèn)題
在 多個(gè) Slave 并存的系統(tǒng)中,AXI-Lite 的并行讀寫(xiě)機(jī)制可能會(huì)讓順序處理變得異常棘手。
例如,你依次發(fā)起了兩次讀訪問(wèn):
1. Read SLAVE_A 2. Read SLAVE_B
AXI-Lite 不保證返回順序與發(fā)出順序一致。
由于讀通道是完全獨(dú)立且可并發(fā)的,SLAVE_B 的響應(yīng)可能比 SLAVE_A 更早返回。
在多 SLAVE 情況下,讀寫(xiě)之間不存在全局順序,你以為“先發(fā)起的 READ 會(huì)先回來(lái)”,但協(xié)議并不這么保證。
因此,如果系統(tǒng)邏輯需要順序語(yǔ)義(例如狀態(tài)機(jī)嚴(yán)格依賴先后順序),就需要額外的順序控制手段,例如:
? Ordering FIFO(請(qǐng)求順序緩存)
? tag(人為添加事務(wù) ID)
? 狀態(tài)同步機(jī)制
? 或者直接給每個(gè)子系統(tǒng)分配獨(dú)立的控制端口
這些都是額外的工程成本。
在特殊場(chǎng)景中,如果連續(xù)訪問(wèn)的是同一個(gè) slave,內(nèi)部順序通常不會(huì)被打亂,但跨 slave 就必須顯式處理。
硬件資源與結(jié)構(gòu)復(fù)雜度更高
由于 AXI-Lite 的五通道是分離的,并且允許連續(xù)發(fā)起請(qǐng)求,因此需要一定的 outstanding 能力(哪怕只有 1 層),也導(dǎo)致:
? 接線較 APB 明顯復(fù)雜
? 資源成本更高
? crossbar、仲裁、通道同步邏輯更重
換句話說(shuō),AXI-Lite 在靈活性和并行性上優(yōu)于 APB,解決了APB難以做slice/pipeline的痛點(diǎn),但其工程成本和硬件復(fù)雜度也隨之提高。
AHB-Lite
AHB-Lite 是 AMBA AHB 協(xié)議的精簡(jiǎn)版本,主要用于中等帶寬的外設(shè)訪問(wèn)與配置類(lèi)場(chǎng)景。
相比完整AHB,AHB-Lite 去掉了多主機(jī)仲裁(single master) ,但保留了 AHB 的關(guān)鍵特性:
流水化、單周期地址階段 + 數(shù)據(jù)階段解耦、支持 burst、支持 back-pressure。
在 AHB-Lite 中,每一次訪問(wèn)由兩部分組成:
? 地址階段(Address Phase) :由 HADDR、HTRANS、HWRITE 等信號(hào)描述
? 數(shù)據(jù)階段(Data Phase) :由 HRDATA、HWDATA、HREADY、HRESP 等信號(hào)描述
兩個(gè)階段是 嚴(yán)格對(duì)齊但可流水化 的,也就是說(shuō):
? 當(dāng)前周期發(fā)送地址
? 下一個(gè)周期就可以發(fā)送下一次地址
? 數(shù)據(jù)返回與否由 slave 的 HREADY 控制
這種結(jié)構(gòu)比 APB 靈活,也比 AXI 簡(jiǎn)單。


但是,AHB-Lite 也存在一些現(xiàn)實(shí)痛點(diǎn)。
HREADY 同時(shí)影響控制與數(shù)據(jù)階段
AHB 最讓工程師頭疼的地方在于 HREADY 信號(hào)承擔(dān)了兩重語(yǔ)義:
? 表示“本拍的數(shù)據(jù)是否有效”
? 表示“下一拍的地址/控制階段是否可以推進(jìn)”
這會(huì)帶來(lái)典型的工程不優(yōu)雅行為:上一個(gè)數(shù)據(jù)階段的 ready 會(huì)影響當(dāng)前地址/控制階段。
例如,在寫(xiě) SLAVE_A 的數(shù)據(jù)的下一拍,如果要訪問(wèn) SLAVE_B,HREADY 已經(jīng)切換到 SLAVE_B 上,而 SLAVE_A 的數(shù)據(jù)階段可能還未完成。
因此在設(shè)計(jì) slave 時(shí),通常需要處理兩個(gè) ready 信號(hào):
? 總線側(cè)的 HREADY(輸入 ready),用于控制數(shù)據(jù)傳輸
? Slave 輸出的 HREADY,用于表明數(shù)據(jù)已經(jīng)被接收
主流 FPGA 支持不足
在 FPGA 工程中,AHB 還存在另一個(gè)痛點(diǎn):生態(tài)與工具支持有限。
? 主流 FPGA 的生態(tài)幾乎都是 AXI 為主
? AHB 不像 APB 那樣簡(jiǎn)單,也缺少官方 interconnect IP
? Vivado/Quartus 等工具對(duì) AHB 的參考設(shè)計(jì)和自動(dòng)生成支持非常有限
? 很少有工程師愿意在 FPGA 中自己實(shí)現(xiàn)一套 AHB 互聯(lián)
因此,盡管 AHB 有其優(yōu)勢(shì),實(shí)際使用時(shí)需要付出更多工程成本。
AHB 的工程實(shí)用性
盡管存在這些痛點(diǎn),但在 特定規(guī)模的配置總線場(chǎng)景 下,AHB-Lite 仍然非常實(shí)用:
? 它解決了 APB 難以做 pipeline 的問(wèn)題
? 它避免了 AXI-Lite 需要手動(dòng)管理順序語(yǔ)義的麻煩
? 同時(shí),AHB-Lite 的復(fù)雜度介于 APB 和 AXI-Lite 之間,既不太弱,也不過(guò)于臃腫
因此,對(duì)于中等規(guī)模的配置通路,AHB-Lite 往往是工程上最折中的選擇。
寫(xiě)在最后
在實(shí)際 SoC、FPGA IP 與外設(shè)控制器設(shè)計(jì)中,配置總線的選擇往往是權(quán)衡穩(wěn)定性、性能與工程成本的折中。
| 總線類(lèi)型 | 優(yōu)點(diǎn) | 缺點(diǎn) | 工程適用場(chǎng)景 |
|---|---|---|---|
| APB | 簡(jiǎn)單、易集成、資源占用低 | 讀寫(xiě)共享通路、不易 pipeline、時(shí)序閉合難 | 小規(guī)模配置總線、低速寄存器訪問(wèn) |
| AXI-Lite | 讀寫(xiě)通道獨(dú)立、支持并行、可連續(xù)請(qǐng)求 | 順序不可控、通道多、硬件成本高 | 高并發(fā)配置需求、需要多 master/多 slave 支持 |
| AHB-Lite | 地址/數(shù)據(jù)階段解耦、可流水化、支持 back-pressure | HREADY 雙重語(yǔ)義復(fù)雜、FPGA 工具生態(tài)弱 | 中等規(guī)模配置總線、需要 pipeline 且順序重要 |
從工程實(shí)踐來(lái)看:
APB 適合簡(jiǎn)單、低速配置場(chǎng)景,資源占用最小,但在系統(tǒng)規(guī)模擴(kuò)大、跨時(shí)鐘域或多 slave 情況下容易遇到時(shí)序收斂和 slice/pipeline 難題。
AXI-Lite 靈活性高,讀寫(xiě)通道獨(dú)立且可并行,但需要手動(dòng)管理順序語(yǔ)義,硬件復(fù)雜度和接線成本高。
AHB-Lite 在中等規(guī)模配置總線中最為折中:它既解決了 APB 難以 pipeline 的痛點(diǎn),也規(guī)避了 AXI-Lite 的順序管理麻煩,同時(shí)硬件復(fù)雜度適中,但需要處理 HREADY 雙重語(yǔ)義,并且在 FPGA 中缺乏工具支持。
-
FPGA
+關(guān)注
關(guān)注
1660文章
22406瀏覽量
636073 -
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
129940 -
總線協(xié)議
+關(guān)注
關(guān)注
0文章
168瀏覽量
15614
原文標(biāo)題:FPGA雜談:APB、AHB-Lite、AXI-Lite的選型與痛點(diǎn)
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Zynq中AXI4-Lite和AXI-Stream功能介紹
一文詳解AHB-Lite協(xié)議
RDMA簡(jiǎn)介8之AXI 總線協(xié)議分析1
有沒(méi)有一種標(biāo)準(zhǔn)的方式到達(dá)PL AXI-Lite總線?
請(qǐng)問(wèn)S_AXI端口是否遵循AXI_Lite協(xié)議?
AMBA AHB總線與APB總線資料合集
AHB-lite總線如何處理獨(dú)占訪問(wèn)
在Arm AMBA協(xié)議集中AHB-lite可否使用
ARM CoreLink AXI4至AHB Lite XHB-400橋接技術(shù)參考手冊(cè)
PrimeCell基礎(chǔ)設(shè)施AMBA 2 AHB至AMBA 3 AXI橋(BP136)技術(shù)概述
PrimeCell高性能矩陣(PL301)技術(shù)概述
AMBA總線AHB、APB、AXI性能對(duì)比分析及AHB詳解
AXI總線協(xié)議:AHB、APB、AXI對(duì)比分析
自定義AXI-Lite接口的IP及源碼分析
APB、AHB-Lite、AXI-Lite總線協(xié)議的對(duì)比分析
評(píng)論