AXI4從機總線分析驗證之讀取寄存器值


AXI4從機總線分析驗證之讀取寄存器值

1、實驗目的

 利用前面所學的AXI4總線協議的理論分析,驗證如何將一個PL的輸入信號通過AXI發送到PS端。大致思路就是取一個按鍵,信號接入自建的AXI4的IP中,取代AXI4中reg_data_out成為AXI4該寄存器從地址的讀取信號。然后通過PS發送到另外一個緩存寄存器,該寄存器再由PL端連接到外部電路。

2、實驗操作

(1)打包IP

在tools的create IP中就可以初始化一個AXI4的slave的總線IP,進入編輯界面后即可編輯文件。這里只需要對reg_data_out的賦值語句修改即可發送輸入的信號。

    assign slv_reg_rden = axi_arready & S_AXI_ARVALID & ~axi_rvalid;
    always @(*)
    begin
          // Address decoding for reading registers
          case ( axi_araddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] )
            2'h0   : reg_data_out <= slv_reg0;
            2'h1   : reg_data_out <= BTN; //slv_reg1;
            2'h2   : reg_data_out <= slv_reg2;
            2'h3   : reg_data_out <= slv_reg3;
            default : reg_data_out <= 0;
          endcase
    end

對應的頂層的IP口及調用口和子模塊的端口聲明則是純FPGA的知識,這里不做介紹。

這里有個問題就是打包第一次的IP不會加入自定義的端口,需要第二次打包。也不知道是哪個地方設置有問題。

(2)完善硬件

就是調用IP后使用自動連線和自動外延。LED和BTN需要自己引出。

(3)小問題

這里綜合時出現了一個缺少DCP的問題,好像是因為自建的IP沒有DDR的支持,具體原因可以去網上查找。解決方法就是reset_project指令輸到TCL控制台即可解決。

(4)輸出bitstream,輸出硬件文件xsa

在配置好端口后即可直接生成bit流。

(5)軟件設計

vitis創建工程后,使用xil_Out32和xil_In32就可以實現數據的讀取操作和寫入操作。這里最簡單的驗證方法就是把讀的數據寫入到對應的地方。

#include "xil_io.h"
#include "sleep.h"
#include "stdio.h"
#include "xparameters.h"
#define IP_BASE XPAR_MYIP_V1_0_0_BASEADDR
#define REG0_OFFSET 0
#define REG1_OFFSET 4
int main(){
    int BTN;
    while(1){
        BTN=Xil_In32(IP_BASE+REG1_OFFSET);

        Xil_Out32(IP_BASE+REG0_OFFSET,BTN);

    }
}

含有main函數的文件,代碼還是簡單的。

3、實驗結果

板級驗證說明設計是成功的。reg_data_out就是數據發送的緩存器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM