1. 程式人生 > >Zynq-PL中建立AXI Master介面IP及AXI4-Lite匯流排主從讀寫時序測試

Zynq-PL中建立AXI Master介面IP及AXI4-Lite匯流排主從讀寫時序測試

轉載:原文  http://www.eefocus.com/antaur/blog/17-08/423751_6cc0d.html

0. 引言

通過之前的學習,可以在PL端建立從機模式的AXI介面IP核。但是從機模式是被動接收資料,而不能主動的去獲取資料,因此計劃研究一下AXI Master介面的IP核的構建方法。

1. 利用嚮導建立AXI Lite Master測試用例

image001.png

image003.png

image005.png

image007.png

image009.png

在這一步,AXI型別為Lite型的,可選引數如下所示:

image011.png

在這裡,重點是Interface Mode,前面的實驗中採用的是預設配置Slave,即設計的IP介面為從機。本實驗中,要將其設定為Master。

下面的三個引數跟Sl**e模式下可配置的引數型別是相同的。具體的說明如下所示:

image013.png

Data Width:為資料匯流排的位寬,單位為bits

image015.png

Memory Size:只有在IP型別為AXI FULL Slave模式下才有效,目前不討論。

image017.png

Number of Registers:只有在IP介面型別為AXI Lite Slave模式下才有效,可以參看之前的實驗說明。

image019.png

至此,利用嚮導工具建立一個AXI Lite Master型別的IP介面配置完畢。

2. 原始碼分析

2.1 頂層原始碼解析

系統會自動生成一個該IP的工程,可以檢視生成的原始碼,並在此基礎上進行修改。

image021.png

從上圖可以看出,嚮導工具就生成了兩個模組。直接綜合後,檢視RTL級圖的操作入口如下所示:

image023.png

顯示結果如下:

image025.png

可以看出頂層模組只是做了簡單的直連封裝,內部沒有任何邏輯設計,檢視程式碼(附錄1)也是如此,唯一有用的操作配置了內層模組例項的引數。

具體配置測引數如下所示:

image027.png

可以看到配置了5個引數,其中:

C_M00_AXI_ADDR_WIDTH表示地址匯流排的位寬,這裡配置為32bits,由於涉及到匯流排的協議,建議不要動這個引數。

C_M00_AXI_DATA_WIDTH表示資料匯流排的位寬,這裡配置為32bits,同樣的原因,建議不要動這個引數。

其餘的三個引數是根據測試用例的使用者邏輯相關的,具體意義在底層模組的原始碼分析(附錄2)中會詳細解釋,這裡簡單說明一下:

C_M00_AXI_TARGET_SLAVE BASE_ADDR表示本IP作為主機欲訪問的從機記憶體的基地址。

C_M00_AXI_START_DATA_VALUE表示對從機暫存器進行寫入操作的測試資料

C_M00_AXI_TRANSACTIONS_NUM表示測試的次數

具體邏輯及各引數的意義見下文對底層模組的解析。

image029.png

2.2 底層原始碼解析

嚮導自動生成的示例程式中底層模組為AzIP_AXI_Master_Ex1_v1_0_M00_AXI,該模組並不是一個Master型的IO標準介面,而只是一個使用者測試用例的邏輯操作。而Master的Write和Read讀寫邏輯並沒有很完畢的封裝,需要仔細分析示例程式碼進行拆分。

具體的程式碼解析詳見後面附錄2的註釋說明,這裡給出的僅是本人對此分析得到的筆記。

  1. 測試業務邏輯

測試業務邏輯的本質如下圖所示,就是一個典型的記憶體讀寫操作的測試流程。

image032.gif

程式碼編寫時採用狀態機的方式。

image033.png

其中:

【地址操作分析】:

從機暫存器的初始地址有變數C_M00_AXI_TARGET_SLAVE_BASE_ADDR定義,在構建整合系統時,對應從機的記憶體對映必須於配置相同。

AXI總線上寫操作地址匯流排繫結如下,C_M00_AXI_TARGET_SLAVE_BASE_ADDR為基地址,而axi_awaddr定義地址偏移量。

image035.png

image037.png

段內地址偏移量初始化值為0,每次寫入成功後,地址偏移量+4,這是因為地址定義的單位是位元組Byte,而資料匯流排為32bits,即4個位元組,因此沒寫入32bits,會用掉從機4個地址的儲存空間。

image039.png

關於讀取操作指定暫存器的地址定義及處理過程是類似的。

【資料操作分析】:

寫操作使用的資料匯流排繫結到一個內部暫存器上。

image041.png 

初始化時,測試資料暫存器被設定為引數配置的數值,之後每次加1。

image043.png

image045.png

測試資料向從機寫入之後,內部備份儲存一份,存在暫存器expected_rdata中,程式碼如下:

image047.png

可以看到程式碼邏輯完全相同,但是整個程式碼架構真的不敢苟同。

資料比較段的程式碼如下:

image049.png

相應的邏輯應該是一旦有一次出錯,read_mismatch就置為1,如果下次對了,該狀態暫存器仍然保持資料為1,直到復位操作。

(2)AXI4-Lite匯流排介面定義

在進行AXI4-Lite匯流排讀寫時序操作時,首先要明確匯流排的讀寫操作介面。

檢視相關技術文件,這裡主要用到以下兩個技術文件:

  • ARM公司釋出的《ARM AMBA AXI Protocol v2.0 Specification》
  • Xilinx公司釋出的《Vivado Design Suite : AXI Reference Guide》UG1037(v3.0)2015

    image051.png

    可以看到,無論是AXI4匯流排還是精簡版的AXI4-Lite匯流排介面分成5大類,這5大類又分別****於Write操作核Read操作。

    Write操作

    1. 寫地址:主機-->從機
    2. 寫資料:主機-->從機
    3. 寫應答:從機-->主機

    Read操作

    1. 讀地址:主機-->從機
    2. 讀資料:從機-->主機

下面重點研究一下AXI4-Lite匯流排具體是如何定義的,它與AXI4匯流排協議有什麼不同?

首先看一下AXI4匯流排協議的官方定義:

image053.png

再看一下AXI4-Lite匯流排協議的官方定義:

image055.png

不支援突發(burst)傳輸模式,及burst length=1

資料匯流排寬度只能為32bit或則64bits

不支援獨家訪問(exclusive accesses)

image057.png

即AXI4-Lite不支援突發(burst)傳輸模式。

【說明】關於突發(burst)傳輸模式是否採用將在後面分析讀寫時序時重點討論。這裡先鋪墊一下。

image059.png

AXI4匯流排,由於讀寫通道是分離的,可以提供實時雙向的資料傳輸。

採用突發(burst)傳輸模式,可以在傳送1個地址之後,最多支援突發256words的資料。(Words??2位元組嗎??)

下面看一下AXI4-Lite匯流排協議的物理介面Port的定義:

image061.png

可以看出除了時鐘和復位訊號後,也是前文介紹的5類訊號通道。

但是作為一個簡化的匯流排協議,其物理介面應該比完整版的AXI4匯流排要少,具體精簡掉了哪些?詳見下表。

image063.png

學習完原理性的基礎知識之後,我們來看一下示例程式程式碼是否符合官方標準。

分析AXI Master示例IP原始碼的Port定義,程式碼即註釋說明如下所示:

【AXI4-Lite Write Address Channel】

image065.png

image067.png

image069.png

在示例程式中,AXI Master模組的M_AXI_AWPROT管腳始終輸出為:3’b000

【AXI4-Lite Write data Channel】

image071.png

其中埠M_AXI_ARPROT,參見【AXI4-Lite Write Address Channel】中的M_AXI_AWPROT

【AXI4-Lite Read Data Channel】

image071.png

image079.png

image075.png

在示例程式中,AXI Master模組由於資料匯流排位寬為32bit,因此M_AXI_WSTRB管腳始終輸出為:4’b1111

【AXI4-Lite Write response Channel】

image077.png

image079.png

image081.png

【AXI4-Lite Read Address Channel】

image083.png

其中埠M_AXI_ARPROT,參見【AXI4-Lite Write Address Channel】中的M_AXI_AWPROT

【AXI4-Lite Read Data Channel】

image083.png

其中埠M_AXI_RRESP,參見【AXI4-Lite Write response Channel】中的M_AXI_BRESP

image085.png

其中埠M_AXI_RRESP,參見【AXI4-Lite Write response Channel】中的M_AXI_BRESP

(3)AXI4-Lite匯流排讀寫時序分析1--寫入操作時序

研究匯流排協議的互動時序,必須依賴協議標準,但是能夠查到的官方協議標準均沒有對AXI4-Lite匯流排的讀寫時序進行獨立的時序設定。

Xilinx公司釋出的文件,引用的還是ARM公司釋出的文件,對於匯流排寫入時序邏輯示意圖如下:

image087.png

表示,主機需要先寫地址,然後寫入一系列資料,為什麼是四個暫時不確定,從機處理完畢後回覆一個應答響應。

ARM公司釋出的文件《ARM AMBA AXI Protocol v2.0 Specification》中沒有AXI4-Lits的寫入時序邏輯,只有Write brust的時序示意圖。如下所示

相關推薦

Zynq-PL建立AXI Master介面IPAXI4-Lite匯流排主從時序測試

轉載:原文  http://www.eefocus.com/antaur/blog/17-08/423751_6cc0d.html0. 引言通過之前的學習,可以在PL端建立從機模式的AXI介面IP核。但是從機模式是被動接收資料,而不能主動的去獲取資料,因此計劃研究一下AXI

解決:Android使用自帶sqlite開發時,apk建立的資料庫外部的程序是沒有許可權去/的,而且無法如何讀取指定目錄下的db檔案

SQLiteOpenHelper是Android框架為我們提供的一個非常好的資料庫開啟、升級與關閉的工具類。但是這個工具類會自動把db檔案建立到“ /data/data/com.*.*(package name)/” 目錄下,這麼做可能是與Android檔案系統的設計思路

Oracle建立scott使用者表結構初始化資料

文章目錄 1.部門表dept 2.僱員表emp 3.工資等級表salgrade 4.工資表bonus 由於安裝的是Oracle12c資料庫,沒有scott使用者。scott使用者中 dept、 emp、 salgrade、 b

AndroidWebview與原生介面互動二維碼掃描功能實現

最近專案中有一個新的需求,大致是這樣的:APP中通過WebView展示一個第三方的HTML5介面,使用者可以在HTML5介面中呼叫Android攝像頭進行二維碼掃描,並將掃描結果顯示在HTML5介面。這顯然涉及到了Android原生與WebView之前的傳值

OpenStack Neutron(3):建立instance分配floating IPneutron原理分析

現在可以通過Dashboard建立instance並且分配floating IP,從而我們可以通過外網隨意訪問建立的instance,例如ping或者SSH。需要注意的是在分配security group的時候,如果要使用Default 的security group,需要新

Hive建立和呼叫儲存過程自定義函式

前面的文章《在Hive中實現儲存過程–HQL/SQL》中介紹瞭如何使用HPL/SQL在Hive中實現儲存過程,執行類似Oracle PL/SQL的功能。 一般的業務場景是資料開發人員開發好一個儲存過程,然後週期性的呼叫,傳入不同的引數即可。 本文繼續介紹如何在Hive中利

lnmpcentos7配置mysql.5.7主從分離配

筆者參考的是這篇博文:http://blog.csdn.net/jiaoshenmo/article/details/51181773 在配置的過程成發現有些地方沒說清楚,繞過了幾個坑才配置完成的。 首先你玩的話肯定是在本地玩,流程沒問題你才到伺服器上配置。 我使用的映象

Redis Master-Slave 分離測試

1 master/slave server 啟動 利用預設redis.conf配置檔案啟動master server,埠6379 。 [7304] 29 Aug 09:57:26 - 0 clients connected (0 slaves), 673996 by

java使用檔案輸入流和檔案輸出流進行檔案的用例!

package com.cfkyit.io; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutp

Java建立一個text文字檔案,並對其進行操作

package test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.

android在apk獲取root許可權,並執行命令(改變檔案權限)

File device = new File(PropertiesHelper.getValue(Constants.SERIAL_PORT_DEVICE_FILE)); if (!device.canRead() || !device.canWrite())

USB介面ID卡讀卡器oem軟體/測試程式原始碼/VB原始碼

詳細程式碼如下(如有疑問可13826029618進行相關提問並解答) '廣州榮士電子,,定製13826029618 地址:--www.icmcu.com '讀卡函式宣告Private Declare Function idr_read Lib "OUR_IDR.dl

PL/SQL建立、呼叫儲存過程--oracle

在oracle10中寫好了儲存過程,程式碼如下:CREATE OR REPLACE Procedure Proc_Insert ( sName in varchar2, sAge in int, sE

idea建立maven依賴下的web工程(一)----使用者登入介面

如果你對idea中建立maven依賴下的web工程不是很瞭解,請參見上一篇部落格—-idea中建立maven依賴下的第一個web工程 各路大神對於idea的基本操作已經非常的熟悉了, 嗯,我還是一隻入門不久的小菜鳥, 對於maven依賴下的web工程的的詳

Android驗證輸入是否為漢字手機號,郵箱驗證,IP地址可用port號驗證

bili repl ips gettext content 驗證 arr mat 數據 1,驗證是否為漢字 // 驗證昵稱 private boolean verifyNickname() { String nickname = edt_use

如何在VMware系統的ubuntu16.04建立與win7系統的共享文件夾

alt hgfs vmware 結果 vmw 設置 too 得到 image 點擊虛擬機設置一次得到如圖所示 系統默認放在了 /mnt/hgfs文件夾 點擊虛擬機安裝vmware tools 解壓vmware tools壓縮包 運行sudo ./vmwar

VMWareCentOS7 設置固定IP且能夠訪問外網

tro 訪問 resolv ip地址分配 http 分配 外網 技術 .com 最近搭建kubernetes集群環境時遇到一個問題,CentOS7在重啟後IP發生變化導致集群中etcd服務無法啟動後集群環境變得不可用,針對這種情況,必須要對CentOS7設置固定I

虛擬機操作系統的克隆方法ip修改硬件地址修改

修改ip 查看 mage 右鍵 地址 9.png 硬件 點擊 blog 2.點擊右鍵->管理->克隆->下一步->虛擬機當前狀態->創建完整虛擬機->修改虛擬機名稱 位置 3.修改主機名 4.修改主機名與ip的

VS2017建立ASP.NET MVC 4.0項目

mvc4 .html his pathinfo gpo sem device sta 模板 新的項目需要運行在WIN2003上,又不想用ASPX了,只好用回ASP.NET MVC4.0了,可是在VS2017中已經沒有MVC4的模板了,網上下載的安裝了也沒有,只好把以前的MV

解決公司搬遷的網絡以及ip電話故障

vlan POE 實驗目標: <1>掌握軟件CRT的基本用法 <2>掌握Terminal monitpr <3>掌握將端口加入vlan的命令行代碼 <4>掌握poe供電電話的安裝與配置技術原理: <1>在CRT中使用telnet登錄