在debug GT的時候,有時候需要讀出一些寄存器來分析。這篇文章介紹一種通過AXI4 Lite或者APB3接口從XSCT來讀Versla GT的寄存器的方法。
APB3是一個32-bit數據總線地址,但是AXI4-Lite是一個8-bit Byte總線。因此如果用AXI-lite,需要將如下的寄存器地址*4。
Example的步驟如下:
Create block design + Add bridge IP。
選擇10G base-KR作為模板,選擇AXI4 Lite選項生成GTY example。
IPI里Block design將CIPS的FPD和AXI Lite接口相連。
增加一個AXI smart connect從CIPS到APB接口。
Create wrapper,Block design如下框圖。
Note:如果是APB3,是4 Bytes地址,更適合通過VIO或者是Fabric 接口來訪問。
從Address editor可以看到地址是0xA4000000,比如對地址為0xC3C來說,對應AXI地址為0xA40000000 + (0xC3C *4) = 0xA40030F0.
Crate wrapper,實現完成,就可以export hardware
Tools Launch Vitis IDE, 用export的hardware,創建一個hello world的application。最后download到vck190之后,就可用tcl完成讀寄存器。下面提供兩個example來做一個demo:
Example 1:讀0xA40030F0之后的比如32個寄存器
procread_reg{number}{ setoutfile[open"output1.txt"w+] setstart0xA40030F0 puts$outfile[mrd-force$start$number] close$outfile }
Copy到xsct,執行完read_reg 32,就會在工程目錄下看到32個寄存器導出到output1.txt,起始地址和寄存器數可以修改.
同樣下面的example 2,是用來monitor KH,KL和GC。
Example 2: monitor KH, KL, and GC for Channel 0
procmonitor{}{ setoutfile[open"output2.txt"w+] #read0x0CBA*4=0x32E8;0x0C3C*4=40x30F0 #set0x0CBA[7]=1'b1 #0x0CBA[6:4]=3'b000 #0x0CBA[3:1]=3'b000 #0x0CBA[0]=1'b1 #0x0C3C[28:27]=2'b00 puts$outfile"###########read0x0CBAand0x0C3C###########" puts$outfile[mrd0xA40032E8] puts$outfile[mrd0xA40030F0] puts$outfile"###########write0x0CBAand0x0C3C###########" mwr-sizeb0xA40032E8{0x81}1 mwr0xA40030F0[expr[mrd-value0xA40030F0]&0xE7FFFFFF] puts$outfile"###########read0x0CBAand0x0C3C###########" puts$outfile[mrd0xA40032E8] puts$outfile[mrd0xA40030F0] #read0x08A4[7:0]*4=0x2290 #read0x08A5[23:16]*4=0x2294 #read0x08A6[23:16]*4=0x2298 puts$outfile"###########readKH,KL,GC###########" puts$outfile[mrd-sizeb0xA40022901] puts$outfile[mrd-sizeb0xA40022961] puts$outfile[mrd-sizeb0xA400229A1] close$outfile }
審核編輯:湯梓紅
-
寄存器
+關注
關注
31文章
5343瀏覽量
120365 -
接口
+關注
關注
33文章
8598瀏覽量
151157 -
總線
+關注
關注
10文章
2881瀏覽量
88085 -
AXI
+關注
關注
1文章
127瀏覽量
16631
發布評論請先 登錄
相關推薦
評論