在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文章
5336浏览量
120260 -
接口
+关注
关注
33文章
8580浏览量
151046 -
总线
+关注
关注
10文章
2878浏览量
88056 -
AXI
+关注
关注
1文章
127浏览量
16625
发布评论请先 登录
相关推荐
评论