AXI-Lite總線及其自定義IP核使用分析總結(jié)
掃描二維碼
隨時隨地手機看文章
ZYNQ的優(yōu)勢在于通過高效的接口總線組成了ARM+FPGA的架構(gòu)。我認(rèn)為兩者是互為底層的,當(dāng)進行算法驗證時,ARM端現(xiàn)有的硬件控制器和庫函數(shù)可以很方便地連接外設(shè),而不像FPGA設(shè)計那樣完全寫出接口時序和控制狀態(tài)機。這樣ARM會被PL端抽象成“接口資源”;當(dāng)進行多任務(wù)處理時,各個PL端IP核又作為ARM的底層被調(diào)用,此時CPU僅作為“決策者”,為各個IP核分配任務(wù);當(dāng)實現(xiàn)復(fù)雜算法時,底層算法結(jié)構(gòu)規(guī)整可并行,數(shù)據(jù)量大,實時性要求高,而上層算法則完全相反,并且控制流程復(fù)雜,靈活性高。因此PL實現(xiàn)底層算法后將運算結(jié)果交給PS端軟件后續(xù)處理是非常高效的。
因此PS與PL端數(shù)據(jù)交互是至關(guān)重要的,在傳輸數(shù)據(jù)量小的控制 配置初始化等應(yīng)用場合下無疑會選擇簡單的AXI-Lite總線,以下對總線接口 自定義IP操作及使用注意事項加以說明。打開Vivado新建工程,選擇主菜單欄Tools選項下的Create and package new IP...
選擇創(chuàng)建新的AXI4外設(shè)可以自動生成總線接口邏輯
采用AXI-Lite總線的Slave模式,只有寄存器數(shù)量是可修改的。注意數(shù)據(jù)位寬固定32bit,計算機中數(shù)據(jù)以字節(jié)(8bit)為單位存儲,因此各個寄存器地址的偏移量為4.這一點在寫軟件時會有所體現(xiàn)。
選擇編輯IP,打開的工程由頂層Wrapper和AXI-Lite總線接口邏輯組成。關(guān)閉自動彈出的IP封裝向?qū)?,?dāng)添加好用戶自定義邏輯后再重新封裝,否則封裝的僅僅是軟件生成的接口邏輯。接口比較多,分為寫通道和通道,而每個通道基本邏輯又由地址通道和數(shù)據(jù)通道組成。除了以上四個通道外,寫通道包含應(yīng)答通道以返回CPU確認(rèn)信息。每個接口以S_AXI_開頭,之后AW代表地址寫,W代表數(shù)據(jù)寫,AR代表地址讀,R代表數(shù)據(jù)讀,B代表響應(yīng)。關(guān)于AXI總線的基本特性在之前的博文中已有闡述,無非就是READY和VLD信號的“握手”。因此這五個核心信號包括VALID DATA和READY。
從上述代碼可以看出,只有在寫地址通道和寫數(shù)據(jù)通道均握手成功時才能有效寫入寄存器。
根據(jù)參數(shù)聲明和寄存器選擇與寫操作邏輯可知,是根據(jù)地址[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信號就是我們需要送入自定義邏輯的控制信號了。
上面是讀操作核心邏輯,當(dāng)從機收到有效的讀操作地址且準(zhǔn)備好后,會將寄存器數(shù)據(jù)送回到主機。換句話說讀操作讀到的數(shù)據(jù)僅是單純寫入的控制數(shù)據(jù),并不是自定義邏輯的處理結(jié)果。所以讀操作要將489行開始的右側(cè)數(shù)據(jù)源更換成自定義邏輯處理后有效數(shù)據(jù)。如:reg_data_out <= user_module_dout;
內(nèi)部添加的自定義邏輯可以直接寫在該模塊內(nèi),也可以例化自定義模塊或IP核。最后封裝當(dāng)前工程得到支持AXI-Lite總線的自定義IP核。
打開需要例化剛才產(chǎn)生IP核的工程,選擇Project Setting -> IP -> Respository Manger添加IP核路徑或,在block design或 IP Catalog中調(diào)用。





