vivado的XVC报文解析

本文详细介绍了Xilinx Virtual Cable (XVC)协议,它允许通过网络进行远程调试和编程Xilinx FPGA。XVC分为v1.0和v2.0两个版本,提供不同级别的灵活性和速度。同时,文章深入讲解了JTAG的基础知识,包括其接口、时序图、状态机,以及JTAG的IR寄存器、Bypass寄存器、IDCODE寄存器和Boundary寄存器。通过实例和示波器波形展示了如何使用XVC的shift命令进行调试,并讨论了JTAG识别多个FPGA的情况以及Wireshark抓包分析。
摘要由CSDN通过智能技术生成

1. 基础知识

1.1 关于XVC

(1)Xilinx Virtual Cable (XVC) 是一种用于通过网络连接远程调试和编程Xilinx FPGA的协议。使用XVC协议,可以将FPGA的JTAG接口连接到一个网络端口上,然后通过TCP/IP协议在远程计算机上进行JTAG操作,从而实现对FPGA的调试和编程。

(2)Xilinx Virtual Cable (XVC)协议目前有两个版本,分别是XVC v1.0和XVC v2.0。XVC v1.0是早期版本的XVC协议,使用固定的JTAG时序和格式进行数据传输。它适用于通过网络连接到一个远程JTAG设备,但对于某些应用场景下,可能需要更高的传输速度和更灵活的配置选项。为了满足这些需求,Xilinx推出了XVC v2.0版本,它提供了更多的灵活性和可配置选项,支持更高的传输速率和更多的JTAG设备类型。XVC v2.0支持可配置的时序和数据格式,同时支持多路连接和流式数据传输。需要注意的是,XVC v2.0需要更高版本的Xilinx Vivado工具才能支持,因此在选择使用哪个版本的XVC协议时,需要根据具体的应用需求和工具版本进行选择。

1.2 关于JTAG

(1)JTAG(Joint Test Action Group)是一种用于在集成电路中进行调试和测试的标准接口。它可以访问芯片内部的寄存器,实现对芯片内部状态的控制和观测。

(2)根据不同的JTAG版本,支持的功能和性能也会有所不同。目前常见的JTAG版本有JTAG IEEE 1149.1、IEEE 1149.6、IEEE 1149.7等。其中,IEEE 1149.1是最基本的JTAG版本,支持单线调试,而IEEE 1149.6和IEEE 1149.7则是一些特殊应用场景下的改进版本,支持多线调试和高速调试。

(3)对于Xilinx FPGA,一般使用的是IEEE 1149.1版本的JTAG接口。使用XVC协议进行远程调试和编程时,需要将FPGA的JTAG接口连接到网络上,并使用XVC协议在远程计算机上进行JTAG操作。具体的JTAG版本和调试方式,需要根据具体的应用需求和硬件平台进行选择和配置。

(4)IEEE 1149.1是一种用于测试和调试集成电路的标准接口,也被称为JTAG(Joint Test Action Group)接口。它定义了一种包含4条线的串行接口,用于测试和调试芯片内部的逻辑电路,并支持在生产测试和维护阶段对芯片进行编程和调试。

1.3 JTAG的时序图

IEEE 1149.1标准接口由以下4条线组成:

Test Data Input (TDI):测试数据输入线,用于向芯片内部输入测试数据。
Test Data Output (TDO):测试数据输出线,用于从芯片内部输出测试结果。
Test Mode Select (TMS):测试模式选择线,用于控制测试模式的转换。
Test Clock (TCK):测试时钟线,用于控制测试时序和数据传输速率。
除了这些标准线之外,IEEE 1149.1标准还定义了一些辅助线,用于实现特殊的测试和调试功能,例如测试控制和状态寄存器(TAP控制和状态寄存器)。

通过使用IEEE 1149.1标准接口,可以实现对芯片内部逻辑电路的测试和调试,包括读取和写入寄存器、检查电路状态、检测电路故障等。此外,IEEE 1149.1标准还可以用于在生产测试和维护阶段对芯片进行编程和调试,以实现更高的生产效率和更好的维护性能。
在这里插入图片描述

1.4 JTAG的状态机

参考文档《7系列FPGA的配置》。
在这里插入图片描述

1.5 XVC的三种报文

参考文件:《xapp1251-xvc-zynq-petalinux.pdf》,可以在xilinx官网免费下载改文档。
XVC 协议内容简单,使用方便,其基本内容可总结为如下三条指令:

1) getinfo:

该指令用于获取XVC 服务的版本。当接收到“getinfo:”指令时,该服务将会返回如下的字符串:“ xvcServer_v1.0; ”, 其中,代表了该协议一次能移位发送的字节向量的最大长度。
在这里插入图片描述

2) shift:[num bits][tms vector][tdi vector]

该指令表示分别以字节向量TMS vector 和TDI vector 的形式发送num_bits 个二进制数据。其中,num_bits 是一个小端格式的整数,TMS vector和 TDI vector 代表所要发送的TMS 和TDI 的二进制数据。发送过程中,0 字节的0 比特位首先被发送出去,字节向量的长度会根据num_bits 的值向上补齐成最接近的字节数。该指令最终应该返回与TMS vector 向量同样长度的字节向量TDO vector,代表从JTAG 接口返回的所有的TDO。同样也是0字节的0 比特位首先被接收回来。
在这里插入图片描述

3) settck:[period in ns]

该指令表示将该协议通信的时钟周期设置为period 纳秒。period 同样是一个小端格式的整数值。使用该指令最终应该返回实际的周期值。
在这里插入图片描述

2. 调试过程

在单片机中建立TCP服务端,接收vivado发来的报文。本章节重点关注"shift:"命令。

2.1 shift命令的实际内容

(1)在实现网络通信之后,debug调试抓到vivado发来的shift命令。下图只是部分报文,并非全部。
在这里插入图片描述
(2)根据jtag协议,上述报文的对应的jtag理论波形,如下图所示。bit0先传

  • 第一条shift命令,如下图所示。可知主要用来搬运32位的数据。这里不知道这32位的数据表示什么意思。
    在这里插入图片描述
  • 第二条shift命令,移动132字节的数据

在这里插入图片描述

2.2 shift命令的实际示波器波形

(1)由下面的TMS和TDI波形,对比2.1中的理论波形,可以看到,是一致的。
在这里插入图片描述
(2)TDO引脚配置为输入,处于高阻状态或者上拉。由jtag从设备控制TDO引脚。
在这里插入图片描述

2.3 vivado识别设备的IDCODE的shift命令

(1)发送位长度为:0x0000042E的shift命令,可以得到国产FPGA的IDCODE:03691093
在这里插入图片描述

(2)发送位长度为0x2E的shift指令,也可以得到IDCODE。

73 68 69 66 74 3A 2E 00 00 00 FF 02 00 00 00 18 00 F0 0F 00 00 00

2.4 进口xlinxV7和国产V7的IDCODE

7系列的IDCODE有哪些
在这里插入图片描述
在这里插入图片描述

2.5 测试命令

这里的命令是使用wireshark抓包到的,仅是部分命令。
在这里插入图片描述

67 65 74 69 6E 66 6F 3A
73 65 74 74 63 6B 3A 64 00 00 00
73 68 69 66 74 3A 05 00 00 00 1F 00
73 68 69 66 74 3A 2B 00 00 00 5F 00 00 00 00 03 00 FE 01 00 00 00
73 68 69 66 74 3A 2E 04 00 00 FF 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值