1. 程式人生 > >AXI-Lite總線及其自定義IP核使用分析總結

AXI-Lite總線及其自定義IP核使用分析總結

定義 ip核 create 自定義 valid 圖片 打開 pro man

  ZYNQ的優勢在於通過高效的接口總線組成了ARM+FPGA的架構。我認為兩者是互為底層的,當進行算法驗證時,ARM端現有的硬件控制器和庫函數可以很方便地連接外設,而不像FPGA設計那樣完全寫出接口時序和控制狀態機。這樣ARM會被PL端抽象成“接口資源”;當進行多任務處理時,各個PL端IP核又作為ARM的底層被調用,此時CPU僅作為“決策者”,為各個IP核分配任務;當實現復雜算法時,底層算法結構規整可並行,數據量大,實時性要求高,而上層算法則完全相反,並且控制流程復雜,靈活性高。因此PL實現底層算法後將運算結果交給PS端軟件後續處理是非常高效的。

  因此PS與PL端數據交互是至關重要的,在傳輸數據量小的控制 配置初始化等應用場合下無疑會選擇簡單的AXI-Lite總線,以下對總線接口 自定義IP操作及使用註意事項加以說明。打開Vivado新建工程,選擇主菜單欄Tools選項下的Create and package new IP...

技術分享圖片

  選擇創建新的AXI4外設可以自動生成總線接口邏輯

技術分享圖片

  采用AXI-Lite總線的Slave模式,只有寄存器數量是可修改的。註意數據位寬固定32bit,計算機中數據以字節(8bit)為單位存儲,因此各個寄存器地址的偏移量為4.這一點在寫軟件時會有所體現。

技術分享圖片

  選擇編輯IP,打開的工程由頂層Wrapper和AXI-Lite總線接口邏輯組成。關閉自動彈出的IP封裝向導,當添加好用戶自定義邏輯後再重新封裝,否則封裝的僅僅是軟件生成的接口邏輯。接口比較多,分為寫通道和通道,而每個通道基本邏輯又由地址通道和數據通道組成。除了以上四個通道外,寫通道包含應答通道以返回CPU確認信息。每個接口以S_AXI_開頭,之後AW代表地址寫,W代表數據寫,AR代表地址讀,R代表數據讀,B代表響應。

關於AXI總線的基本特性在之前的博文中已有闡述,無非就是READY和VLD信號的“握手”。因此這五個核心信號包括VALID DATA和READY。

技術分享圖片

  從上述代碼可以看出,只有在寫地址通道和寫數據通道均握手成功時才能有效寫入寄存器。

技術分享圖片

技術分享圖片

  根據參數聲明和寄存器選擇與寫操作邏輯可知,是根據地址[5:2]這四位來判斷寫入哪一個寄存器。如:

  地址0,即6‘b0000_00

  地址4,即6‘b0001_00

  地址8,即6‘b0010_00

  地址12,即6‘b0011_00

  因此[5:2]部分依次是0 1 2 3,從而驗證了之前地址偏移量是4的觀點。這裏的slv_regx信號就是我們需要送入自定義邏輯的控制信號了。

技術分享圖片

技術分享圖片

  上面是讀操作核心邏輯,當從機收到有效的讀操作地址且準備好後,會將寄存器數據送回到主機。換句話說讀操作讀到的數據僅是單純寫入的控制數據,並不是自定義邏輯的處理結果。所以讀操作要將489行開始的右側數據源更換成自定義邏輯處理後有效數據。如:reg_data_out <= user_module_dout;

技術分享圖片

  內部添加的自定義邏輯可以直接寫在該模塊內,也可以例化自定義模塊或IP核。最後封裝當前工程得到支持AXI-Lite總線的自定義IP核。

技術分享圖片

  打開需要例化剛才產生IP核的工程,選擇Project Setting -> IP -> Respository Manger添加IP核路徑或,在block design或 IP Catalog中調用。

AXI-Lite總線及其自定義IP核使用分析總結