我們在AMD FPGA和SoC中創(chuàng)建的設計實現(xiàn)了復雜的功能,例如電機控制,圖像處理,機器學習或信號處理。
像任何行業(yè)幫助開發(fā)可編程邏輯應用程序一樣,我們使用標準接口來實現(xiàn)重用和簡化設計。在FPGA開發(fā)中最流行的接口是Arm可擴展接口(AXI),它為開發(fā)人員提供了一個完整的高性能,如果需要的話,還可以緩存相干存儲器映射總線。
AXI是為管理者(事務的發(fā)起者)和下屬(事務的響應者)之間的高速突發(fā)傳輸而設計的。AXI內存映射總線提供以下通道
?地址寫—待寫的地址數(shù)據(jù),保護模式
?寫通道-寫數(shù)據(jù)突發(fā)
?寫響應-完成數(shù)據(jù)爆發(fā)后的寫狀態(tài)
?Address Read -要讀取的地址,保護模式
?讀取通道-讀取數(shù)據(jù)突發(fā)
雖然AXI通常在一個管理者和多個下屬之間連接,但AXI是一個點對點協(xié)議。為了將單個經(jīng)理連接到多個下屬,我們需要使用實現(xiàn)交叉開關的AXI互連。
對于許多應用程序,使用了AXI的精簡版本,它提供了稱為AXI Lite的單節(jié)拍讀寫訪問。
當您第一次接觸FPGA設計時,使用AXI可能是一個挑戰(zhàn),并且我們通常使用處理器來配置AXI網(wǎng)絡上的外設。
然而,通過UART從外部到FPGA訪問AXI網(wǎng)絡的能力對于板啟動和使設備在最終開發(fā)中相互通信非常重要。
在Adiuvo,我們開發(fā)了一個簡單的協(xié)議,可以從SPI, I2C或UART接口,并將實現(xiàn)對AXI網(wǎng)絡的讀寫訪問。我們開發(fā)的IP提供了進行突發(fā)傳輸?shù)哪芰?,但是對于這個應用程序,我們將研究如何在每個方向上進行AXI Lite傳輸。
這種方法非常有用,因為您可以非常簡單地從外部訪問AXI網(wǎng)絡,并且在板啟動期間確定寄存器設置等,這對軟件可能很有用。它還可以在系統(tǒng)開發(fā)中實現(xiàn)從MCU到小型FPGA的簡單接口。
這個概念
其實現(xiàn)背后的概念是模塊化的,將通信接口與協(xié)議和AXI轉換分離開來。通過這種方式,可以根據(jù)具體情況使用不同的通信模塊。
在這種情況下,UART的通信接口將使用AXI流發(fā)送和接收信息。協(xié)議塊將AXI流字節(jié)轉換為AXI Lite命令,反之亦然。
然后,這個協(xié)議塊可以連接到AXI互連,從而可以訪問所有連接的AXI外圍設備。
該協(xié)議
為了能夠進行傳輸,我們需要有一個定義好的協(xié)議,該協(xié)議能夠將大量字節(jié)轉換為AXI讀或寫命令。
?寫操作碼- 1字節(jié),值0x09
?讀操作碼- 1字節(jié),值0x05
?地址- 4字節(jié)AXI交互的地址
?長度- 1字節(jié),對于AXI Lite實現(xiàn)總是1
?有效載荷-要寫的字或接收的數(shù)據(jù),為AXI Lite讀取或寫入提供4字節(jié)
?要創(chuàng)建此解決方案,我們需要創(chuàng)建兩個自定義IP塊AXIS UART和協(xié)議塊
The UART
AXIS UART的代碼如下-這個UART沒有協(xié)議,需要2個停止位。
而所需的包裹是
AXIS協(xié)議
實現(xiàn)AXI協(xié)議的代碼可以在下面看到——如果你像Adiuvo那樣生產(chǎn)它,AXI狀態(tài)機可以被寫進一個過程來簡化調用。
然后可以將這些模塊集成到新的Vivado項目中。
Vivado項目
對于這個Vivado項目,我將針對連接到其IO載波卡的MicroZed板,盡管這種方法可以與任何AMD SoC或FPGA一起使用。
我們還可以將上述UART和Protocol的文件添加到項目中。
一旦項目開放,我們需要將UART和協(xié)議塊添加到塊設計中。
還添加了AXI BRAM控制器和BRAM,最終的圖應該如下所示:
生成輸出產(chǎn)品,我們就可以用cocotb來模擬設計了。
COCOTB模擬
Cocotb允許我們使用Python模擬設計,如果您不確定如何設置Cocotb,請參閱我的博客
在cocotb中,我們需要一個python刺激文件和一個make文件,它可以拉入所有構建對象。
python刺激文件如下所示
當make文件看起來像-時,您需要將項目名稱的路徑更新到它們在系統(tǒng)中的位置
一旦模擬顯示通過并報告通過UART編寫的信息,我們就可以構建應用程序并在硬件上進行測試。
為了在硬件上構建它,我將處理器核心插入到塊設計中,以啟用PS時鐘和復位。
更新后的框圖如下所示
硬件測試
我們可以使用任何LOGIC LEVEL UART來測試設計,但是,我在辦公室里有幾個RPi PICO,它們可以制作出色的USB到UART轉換器,并使我能夠在PICO本身上編寫應用程序。
為此,我將Pico上UART 0上的TX和RX引腳連接到FPGA RX和TX引腳。記住也要連接接地,這樣它們就有一個共同的參考。
該應用程序是使用micro python在Pico上創(chuàng)建的
當運行我添加到調試設計中的System ILA時,我們可以清楚地看到協(xié)議塊對AXI塊RAM控制器執(zhí)行的讀寫操作
我們可以看到數(shù)據(jù)在anthony中被讀回
結論
我們可以使用一個簡單的接口,如UART / SPI/ I2C來提供對AXI網(wǎng)絡的訪問。當調試設計或使小型FPGA連接到小型MCU時,這可以帶來很大的好處。
本文編譯自hackster.io