在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文章
5608瀏覽量
129968 -
接口
+關注
關注
33文章
9520瀏覽量
157021 -
總線
+關注
關注
10文章
3040瀏覽量
91660 -
AXI
+關注
關注
1文章
145瀏覽量
17937
發布評論請先 登錄
如何用XSCT通過APB接口來讀GT的寄存器
評論