JTAG 学习 -SVF格式

yxr注:

主要zt,附上自己的心得如下:

 1)反观SVF文件,除了设置必要的条件之外(初始条件和TIR等四条命令),真正的运行命令就两条,SIR向JTAG TAP状态机的IR寄存器送命令,SDR往JTAG TAP状态机的DR寄存器送数据,在写入的时候,送入的数据有效,在读取的时候,送数据同时输出的数据有效。

这样的写法及计算麻烦,可读性也差。为了方便使用,SVF引入了TIR、HIR、TDR和HDR四条指令。

  TIR是在SIR前面添加数据,比如,操作器件是第二个,那么第一个器件的数据用TIR添加,下一条指令是添加第一个器件的bypass命令。

 TIR 6 TDI (3f) SMASK (3f) ;

 2)FREQUENCY 4E6 HZ;    (频率4x10的6次方)

RUNTEST IDLE 164000000E-6 SEC;     即164000000 x 10 的-6,即164秒,

TAP有16个状态,其中一个状态就是RUNTEST IDLE(问题是,此时是否一直有TCK???)

 3)

! ACT_TE_TAG Erase ...  表示开始

! ACT_TE_TAG Completed erase  表示结束

4)转贴  JTAG 详解  

blog.csdn.net/broadview2006/article/details/3951512

 --------------------------------------------------------------------------------------------------------------------------

http://www.chinabaike.com/2011/0203/282255.html

系统编程PROM可以进行单独编程,或者级连编程。链中的所有器件共享TCK和TMS信号。TINI的TDI信号接到边界扫描链中第一个器件的TDI输进端。第一个器件的TDO信号接到链中第二个器件的TDI输进上,如此连接下往。链中的最后一个器件的TDO输出接到TINI的TDO引脚上,见图1所示。


图1. 所有JTAG操纵都通过器件的测试访问端口进行控制

所有JTAG操纵都是由器件的测试访问端口(TAP)控制的。TAP包括四个信号:TMS、TDI、TDO和TCK。 这些信号通过TAP控制器,即16状态有限状态机与器件相互作用。JTAG的TMS信号控制状态间的转换。指令和数据由TDI引脚移进器件,并由TDO引脚移出。TDI和TDO信号的所有状态转换和行为都与TCK同步。见图2


图2.

所有JTAG操纵都是将数据移进或移出JTAG指令和数据寄存器。TAP控制器可对所有这些寄存器直接访问。有两类JTAG寄存器:指令寄存器(IR)和数据寄存器(DR)。访问IR通过移位-IR (Shift-IR)状态实现,而访问DR通过移位-DR (Shift-IR)状态实现。IR长度通常是大于2位的任意长度。除了由IEEE® Std. 1149.1定义的BYPASS指令为全1以外,生产约定义所有其它的指令位码。

在本应用笔记中,JAVA样例代码将解释说明串行向量格式(SVF)文件来进行编程。这里所用的SVF是描述高层IEEE 1149.1 (JTAG)总线操纵的语法规范。JTAG设备和软件提供商已经将SVF作为标准用于数据交换。SVF以紧凑和可移植的形式描述JTAG链操纵。SVF文件通过描述需要移进器件链的信息,记录JTAG操纵。通过Xilinx iMPACT (具体信息见下面)软件,将JTAG操纵记录在SVF文件中。SVF文件写成ASCII文本形式,因此可以在任何文本编辑器中人工读、修改和写。“很多第三方编程工具使用SVF文件作为输进,这样利用包含在SVF文件中的信息可以对JTAG链中的Xilinx器件编程。”

http://www.wtoutiao.com/a/2508547.html

SVF的全称是Serial Vector Format,是IEEE 1149.1的一部分。SVF主要用来控制JTAG收发数据。由于JTAG是串行的,所以收发是一起的。

使用SVF可以控制JTAG的发送端,而不用考虑JTAG TAP状态机的细节。

通过SVF,就可以控制JTAG来传输数据。

目前,Vivado 2015.1没有发布,所以SVF的操作只能通过iMPACT来实现。

 这一篇主要讲解SVF文件的生成。

iMPACT生成SVF的方法,其实类似于捕获操作。下面用读取FPGA的IDCODE来介绍如何生成SVF。

 首先,启动iMPACT,并点击Boundary Scan。

上一回,生成了一个用于读取FPGA IDCODE的SVF文件。今天,讲讲SVF语句。

SVF是控制JTAG的语句,类似于汇编语言,偏底层,控制JTAG具体的操作。

 在上次的123.svf文件中,开头一段是这样的

 TRST OFF;

 ENDIR IDLE;

 ENDDR IDLE;

 STATE RESET;

 STATE IDLE;

 FREQUENCY 1E6 HZ;

 这是设置JTAG初始状态。这里不细说了,几乎所有Xilinx iMPACT生成的SVF里都是一样的。

 然后是下列语句。

 TIR 0 ;

 HIR 0 ;

 TDR 0 ;

 HDR 0 ;

 TIR 0 ;

 HIR 0 ;

 HDR 0 ;

 TDR 0 ;

 Xilinx iMPACT工具生成的SVF都会把TIR、HIR、TDR和HDR这四个命令重复一遍,一共8条。其实,只要四条即可。

 具体的用处后面再讲。

 下面就是开始是正式的命令了。再一次,Xilinx iMPACT生成的svf中有大量重复。

 SIR 6 TDI (09) ;

 SDR 32 TDI (00000000) TDO (f3631093) ;

 第一行 SIR 6 TDI (09)

 这一句的意思是,往IR寄存器中输入6bit数据,数值是0x09;

 这就是读取IDCODE的指令,6是IR Length,0x09是命令。在第三篇中已经提到这部分内容。

 输入读取IDCODE的指令后,就是读取IDCODE。

 SDR 32 TDI (00000000) SMASK (ffffffff) TDO (f3631093) MASK (0fffffff) ;

 这一条命令是向DR寄存器发送32位数据,由于JTAG是串行的,所以这里输入的数据没有意义,只是为了串行移出DR寄存器中的32bit数据。

 SMASK中的全f代表输入的数据全部有效,不过这里由于输入没有意义,所以这个mask也没有意义。

 TDO后面是预计输出的值,这里是f3631093,意思是预计输出为这个数据,如果这个数据和真实数据不符,则会终止svf的运行。

 后面的MASK代表对TDO数据的有效性。之前已经提过,NEXYS-4上的Artix-7,ID是3631093,也就是说只有7个16进制数据。IDCODE寄存器是32位,多出4位数据是无关紧要的,所以这里的mask值为 0fffffff,表明低28位有效,高4位无效。

另外说明一下,如果没有重新声明,TDI的SMARK和TDO的MASK会一直被使用到下次修改。同样,TIR等命令也是如此。

随后的两条命令,是bypass模式。

 SIR 6 TDI (3f) ;

 SDR 1 TDI (00) SMASK (01) ;

 反观SVF文件,除了设置必要的条件之外(初始条件和TIR等四条命令),真正的运行命令就两条,SIR向JTAG TAP状态机的IR寄存器送命令,SDR往JTAG TAP状态机的DR寄存器送数据,在写入的时候,送入的数据有效,在读取的时候,送数据同时输出的数据有效。

 下面讨论一个问题,如果JTAG上不单单有一个器件,应该怎么写。

 比如,JTAG上有三个器件,简单讨论,都是Artix-7。那么IR Length都是6. 要操作的是中间一个。

 这样算的话,第一个器件和第三个器件的IR寄存器数据都是bypass命令 111111;中间一个器件的命令是001001。

 总共的数据是 111111001001111111,

 4个一组改写一下,11_1111_0010_0111_1111,

 写成16进制,是3f27f

 所以 SDR的命令是 SIR 18 TDI (3f27f) ;  (YXR注:应该是SDR 18 TDI (3f27f)吧)

 同理,bypass的数据寄存器位宽是1位,取这一位为0,所以数据总长度是34,预计输出是

 0x6c62126

 掩码为 1fffffe

 这样的写法及计算麻烦,可读性也差。为了方便使用,SVF引入了TIR、HIR、TDR和HDR四条指令。

 TIR是在SIR前面添加数据,比如,操作器件是第二个,那么第一个器件的数据用TIR添加,下一条指令是添加第一个器件的bypass命令。

 TIR 6 TDI (3f) SMASK (3f) ;

同理,TDR是在SDR前面添加数据。

TDR 1 TDI (00) SMASK (01) ;

HIR是在SIR后面添加数据,所以第三个器件的bypass命令如下。

HIR 6 TDI (3f) SMASK (3f) ;

HDR 1 TDI (00) SMASK (01) ;

 添加这四条命令之后,对第二个器件的操作命令就和只有一个器件时完全一样了,直接使用下面的命令即可

SIR 6 TDI (09) ;

SDR 32 TDI (00000000) TDO (f3631093) ;

再次修改之前,TIR等四条命令一直有效。(yxr注:一直有效是什么意思,是指一直对第二个器件操作吗?)

好了,基本的SVF命令已经介绍完毕。不过,除了IDCODE,还没有和FPGA联系起来。下一回,来看看与Xilinx FPGA的联系吧。

转载于:https://www.cnblogs.com/e-shannon/p/5919933.html

### 回答1: JTAG(Joint Test Action Group)调试是一种常见的硬件调试技术,可以帮助我们对FPGA(Field-Programmable Gate Array)进行调试和测试。PYNQ-Z1是一块基于Zynq-7000系列 SoC 的FPGA开发板,具有强大的运算性能和丰富的外设接口。在进行该板子的开发和调试时,JTAG调试技术也是不可或缺的。 首先,我们需要准备好JTAG调试工具,如Xilinx提供的Vivado软件。然后,将PYNQ-Z1与PC连接,并通过JTAG端口将PC和PYNQ-Z1进行连接。此时,我们可以在Vivado软件中识别PYNQ-Z1,并对其进行配置和调试。 在调试PYNQ-Z1时,我们可以通过JTAG实现以下功能: 1.下载程序到PYNQ-Z1 我们可以将实现的程序下载到PYNQ-Z1中进行测试。通过JTAG调试工具,我们可以将程序下载到PYNQ-Z1中,并在设备上执行测试。 2.查看硬件状态 通过JTAG调试工具,我们可以获取PYNQ-Z1的各种硬件状态,包括CPU寄存器值、内存状态、外设状态等。这些状态数据可以帮助我们排查硬件错误和优化程序性能。 3.调试硬件错误 JTAG调试技术可以帮助我们快速地定位硬件错误,并修改程序代码。通过JTAG调试工具,我们可以对PYNQ-Z1进行单步调试、断点调试、复位等操作,以定位和修复硬件错误。 总之,JTAG调试技术是一种强大的硬件调试技术,对于PYNQ-Z1的开发和调试具有重要意义。通过JTAG调试技术,我们可以快速地定位并修复硬件错误,提高开发效率和调试成功率。 ### 回答2: PYNQ-Z1是一款面向Zynq-7000系列SoC的开发板,用于FPGA开发和嵌入式系统设计。在FPGA设计完成后,通常需要进行硬件调试和验证,这时候就需要使用JTAG调试工具。在PYNQ-Z1上,使用JTAG调试可以通过USB接口和与开发板上的FTDI芯片连接实现。 要使用JTAG调试pynq-z1,首先需要一个JTAG调试工具和调试软件。常用的JTAG调试工具有Lauterbach Trace32等,常用的调试软件有Xilinx iMPACT、Xilinx Vivado等。然后需要将工具和调试软件与PYNQ-Z1连接,具体连接方式可参照PYNQ-Z1官方文档中的电路图。连接完成后,可以使用调试软件对FPGA进行各种调试,包括时序分析、波形查看、信号跟踪等。 需要注意的是,在使用JTAG调试时要注意调试时钟和FPGA的时钟同步问题,以避免时序问题和相关的调试问题。如果对调试不熟悉,建议先阅读相关的资料和文档,或请教经验丰富的工程师,并在操作之前备份好FPGA的原始数据以免操作失误导致数据丢失。 总之,通过JTAG调试可以有效地提高FPGA调试和验证的效率和准确性,是FPGA开发和嵌入式系统开发必不可少的工具之一。 ### 回答3: JTAG是一种用于嵌入式系统调试和编程的技术,它允许直接访问硬件,在PYNQ-Z1上,JTAG调试可以帮助开发者进行软件和硬件的调试和编程。 首先需要准备一些工具,如JTAG调试器和调试软件,具体可以使用Xilinx提供的Vivado软件。接着,需要设置PYNQ-Z1的开发板,确保板子上有JTAG端口,并且将调试器正确连接到板子上。 连好之后,我们就可以开始利用调试软件进行调试了。在Vivado软件中,首先要检查板子上的JTAG连接,然后设置debug模式,并选择需要调试的FPGA芯片。进入调试后,可以进行单步调试,监视板子的状态和寄存器信息,帮助我们定位和解决各种问题。 以上是JTAG调试PYNQ Z1的基本过程。需要注意的是,在调试过程中,如果芯片未被正确配置或烧录,可能会出现各种问题,因此在开始调试之前,务必进行一些基本的设置和检查,以确保调试的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值