曾經(jīng)有人在 Reddit 上問,應(yīng)該如何學(xué)習(xí) AXI 協(xié)議?
ZiPCUP(學(xué)習(xí)網(wǎng)站鏈接)上的大佬針對此問題總結(jié)了自己的學(xué)習(xí)路線,尤其針對一些網(wǎng)上的學(xué)習(xí)資料,針對性的提出了一些批評性的建議,下面開始大佬講解AXI學(xué)習(xí)路線(大佬的評判語言比較過激,我已緩和處理)~
分割線
以下總結(jié)了我的基本答案。
首先,不要從 Xilinx 的示例設(shè)計(jì)開始。雖然歷程很不錯(cuò),對不起,但他們的例子非常糟糕。甚至他們的AXI Stream master 設(shè)計(jì)極其糟糕。遺憾的是,他們既沒有修復(fù)這些設(shè)計(jì),也沒有更新他們的培訓(xùn)材料。
圖 1,學(xué)習(xí) AXI 的基本路線圖
很多人建議最好從學(xué)習(xí)握手開始,而大多數(shù) AXI 流協(xié)議就是這樣:握手。這一點(diǎn)我非常同意。因此,我建議任何人從學(xué)習(xí) AXI 的握手規(guī)則開始。正如那篇文章(AXI 握手規(guī)則:http://zipcpu.com/blog/2021/08/28/axi-rules.html)解釋的,AXI 流協(xié)議只不過是簡單的握手,可以(大部分)忽略 TID、TSTRB、TKEEP 和 TDEST 信號(hào)。并且還可以在那篇文章了解 Xilinx 是如何弄亂他們的示例:AXI Stream master,并且將了解修復(fù)它是多么容易。
一旦了解了AXI 握手,我建議學(xué)習(xí)有關(guān) skidbuffers的知識(shí)(其他文章將會(huì)解釋)。沒有它們,在不違反 AXI 規(guī)范的情況下,你的設(shè)計(jì)吞吐量永遠(yuǎn)不會(huì)超過 50%。
我要去的下一個(gè)地方是:研究 AXI-lite。它讓Xilinx(和其他未命名的公司)頭疼不已,并構(gòu)成了他們示例設(shè)計(jì)中許多錯(cuò)誤的背景。建議查看這篇文章,描述如何修復(fù) Xilinx 的(糟糕的)AXI-lite VHDL 示例(http://zipcpu.com/blog/2021/05/22/vhdlaxil.html)。
對于可能需要完整 AXI 規(guī)范的事情,可以找到可行的示例開源或供應(yīng)商設(shè)計(jì)。(DMA、 MM2S、 S2MM、 虛擬FIFO、 視頻幀緩存讀取、 視頻幀緩存寫入等)(https://github.com/ZipCPU/wb2axip/tree/master/rtl)。
如果有興趣超越 AXI-lite,那么是時(shí)候了解AXI尋址,以及各種 FIX、WRAP 和 INCR 尋址模式以及 AxSIZE 字段如何影響它們。這個(gè)很重要。Xilinx甚至沒有嘗試在他們的示例中做到這一點(diǎn),而且我看到很多 ASIC 設(shè)計(jì)甚至把這個(gè)尋址搞砸了。在開始構(gòu)建第一個(gè)完整 AXI slave之前,需要了解這一點(diǎn)。事實(shí)上,我已經(jīng)在我自己的許多設(shè)計(jì)中使用了在那篇文章中構(gòu)建和介紹的下一個(gè) AXI 地址模塊(https://github.com/ZipCPU/wb2axip/blob/master/rtl/axi_addr.v)。
一旦了解了尋址,或者至少在將其簡化到足以使用之后,下一步就是構(gòu)建一個(gè)功能齊全的 AXI slave。
通過在 AXI-Lite slave上編寫 AXI slave,您將獲得什么?不多。與通過構(gòu)建 AXI-Lite slave已經(jīng)獲得的性能相比,構(gòu)建 AXI(完整)slave并沒有太多的性能提升——至少,對于大多數(shù)用途來說沒有太大的提升。會(huì)看到什么性能差異?好吧,在良好的 AXI 到 AXI-lite 橋接之后,可能會(huì)發(fā)現(xiàn)自己在每個(gè)事務(wù)中損失了大約 2 個(gè)時(shí)鐘的延遲。在 AXI 到 AXI-lite 橋接不良之后?在這種情況下,可能會(huì)在每個(gè)事務(wù)中損失 4-8 個(gè)時(shí)鐘的吞吐量。當(dāng)然,你總是可以切換回更好的橋 恢復(fù)這個(gè)損失的吞吐量——所以從 AXI-lite 從機(jī)切換到 AXI(完整)從機(jī)并沒有太多好處。
然而,對于 AXI master,情況就不同了。不過,我同樣建議從AXI-Lite master開始。從技術(shù)上講,這樣的master應(yīng)該能夠與 AXI master一樣快。實(shí)際上,可悲的是,許多設(shè)計(jì)削弱了他們的 AXI-lite 實(shí)現(xiàn)。(你好,Xilinx?)
對 AXI master的全面討論變得困難。我還沒有(還)想出如何簡化材料來寫一篇關(guān)于如何構(gòu)建通用 AXI master器的帖子,這已經(jīng)夠難了——通常來說,尋址就是那么難。
在這些AXI master示例中,有兩個(gè)值得一提,因?yàn)槲乙呀?jīng)寫過關(guān)于它們的文章。第一個(gè)討論如何使用 AXI-Lite 協(xié)議為 ZipCPU 構(gòu)建內(nèi)存控制器(http://zipcpu.com/zipcpu/2021/04/17/axilops.html),而第二個(gè)討論將內(nèi)存控制器升級到 AXI(完整)所需的修改(http://zipcpu.com/zipcpu/2021/09/30/axiops.html)。第二篇文章介紹了AXI 獨(dú)占訪問協(xié)議(AxLOCK 和 EXOKAY),然后介紹了如何構(gòu)建使用它的master——盡管我只真正了解這種協(xié)議的 CPU 用例。它還討論了 AxADDR 和 AxSIZE 之間的一些具有挑戰(zhàn)性的交互。
如果真的要深入研究 AXI 協(xié)議,那么了解如何測量 AXI 性能就會(huì)變得很重要。
以上將為您提供大部分內(nèi)容。但是,它也會(huì)留下關(guān)于 AxCACHE、AxPROT 和 AxQOS 的用途,或者何時(shí)應(yīng)該使用 AxID 字段的問題。實(shí)際上,可能還會(huì)對 AxSIZE 感到疑惑,以及為什么它是協(xié)議的重要組成部分。對于這些的討論,讓我指出我自己在一段時(shí)間前的一個(gè) reddit 問題:AXI 太復(fù)雜了嗎(https://www.reddit.com/r/FPGA/comments/egkrce/is_axi_too_complicated/)?
正式驗(yàn)證 AXI
不久前,有人問我是否有可能編寫一門關(guān)于如何驗(yàn)證 AXI 組件的課程。當(dāng)時(shí),我為這樣一門課程勾勒出以下大綱——一個(gè)主要與上述大部分進(jìn)展相匹配的大綱。
該課程將從對形式方法的快速回顧開始:什么是斷言和假設(shè),以及與歸納相關(guān)的一些獨(dú)特挑戰(zhàn)。
圖 2,可能構(gòu)成正式驗(yàn)證 AXI 組件課程的課程
AXI 設(shè)計(jì)練習(xí)
在學(xué)習(xí)任何新主題時(shí),在學(xué)習(xí)過程中鍛煉新知識(shí)很重要。因此,這里有一個(gè)列表,其中包含一系列難度越來越大的練習(xí),在學(xué)習(xí) AXI 時(shí)可能會(huì)發(fā)現(xiàn)這些練習(xí)很有價(jià)值。
圖 4,練習(xí)練習(xí),用于學(xué)習(xí) AXI
構(gòu)建并驗(yàn)證 AXI Stream 組件。
其他示例包括流處理網(wǎng)絡(luò)數(shù)據(jù)包——例如可以識(shí)別、加密或解密 UDP 數(shù)據(jù)包的流組件。
構(gòu)建和驗(yàn)證 AXI-lite 總線
一個(gè)更復(fù)雜的 AXI-lite 總線主控器,當(dāng)然也是一個(gè)更感興趣的主控器,可能是向CPU 指令獲取單元添加一個(gè)小型 FIFO。
然而,我對這些練習(xí)的最大問題是它們到最后變得相當(dāng)具有挑戰(zhàn)性。我不確定我將如何將 DMA 的驗(yàn)證融入僅幾天的 AXI 形式驗(yàn)證課程中——尤其是因?yàn)槲一藥字軙r(shí)間來驗(yàn)證我自己的 DMA。所以……我會(huì)繼續(xù)睜大眼睛尋找更好(更簡單)的例子來使用和使用。在那之前,這仍然是一個(gè)非常好的練習(xí)列表,任何學(xué)生都可以使用它來學(xué)習(xí)他或她自己的基本 AXI 概念。
結(jié)論
我不確定我是否在網(wǎng)上看到過很多好的 AXI 培訓(xùn)材料。到目前為止,我所看到的大部分都是Xilinx的材料——這些材料會(huì)讓你從一個(gè)"破損的設(shè)計(jì)"開始并修改它。此外,討論如何正式驗(yàn)證 AXI 設(shè)計(jì)的材料并不多。
同時(shí),我提供了上面學(xué)習(xí) AXI 的路線圖。并非每個(gè)人都需要上述所有課程或練習(xí)。但是,上面概述的課程和練習(xí)應(yīng)該足夠徹底,任何人都可以完全學(xué)習(xí)該主題。
總結(jié)
上面文章是摘自ZipCPU上大佬的博客(http://zipcpu.com/blog/2022/05/07/learning-axi.html)因?yàn)檎恼缕诳谡Z化所以一些翻譯不太準(zhǔn)確,強(qiáng)烈建議自己去看下原文,下面總結(jié)一下主要內(nèi)容:
AXI學(xué)習(xí)路線,從握手協(xié)議開始,然后學(xué)習(xí)Skid Buffer;
學(xué)習(xí)設(shè)計(jì)AXI-LITE SLAVE,不要從xilinx官方歷程開始,學(xué)會(huì)自己設(shè)計(jì);
學(xué)習(xí)AXI尋址方式以及AXI SLAVE設(shè)計(jì);
學(xué)會(huì)驗(yàn)證自己設(shè)計(jì)的AXI模型;
跟著練習(xí)題學(xué)習(xí)A***括FIFO的使用及驗(yàn)證;
最后,這篇文章是總結(jié)性文章,所以有些寫的很亂,建議閱讀原文,里面有大約幾十個(gè)鏈接,包括之前大佬寫的關(guān)于AXI的文章和資源。
編輯:黃飛
?
評論
查看更多