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的联系吧。

JTAG 学习 -SVF格式的更多相关文章

  1. 编程&学习总结格式

    编程&学习总结格式 一.本周完成的作业: 题目1.A乘以B 题目内容描述:看我没骗你吧 -- 这是一道你可以在10秒内完成的题:给定两个绝对值不超过100的整数A和B,输出A乘以B的值. 1) ...

  2. Bootstrap学习--基本格式

    以下为Bootstrap的基本格式代码 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta ...

  3. MySQL 触发器学习-markdown->html 格式测试

    <!doctype html>触发器 figure:first-child { margin-top: -20px; } #write ol, #write ul { position: ...

  4. 零基础学习java------39---------json格式交互,Restful(不懂),静态资源映射,SSM整合(ssm整合思想,application.xml文件详解(声明式事务管理),)

    一. json格式交互(知道) 1 . 回顾ajax基本语法 $.ajax({ url:"", // 请求的后台路径 data:{"":"" ...

  5. Python学习之格式符

    %s    字符串 (采用str()的显示) %r    字符串 (采用repr()的显示) %c    单个字符 %b    二进制整数 %d    十进制整数 %i    十进制整数 %o    ...

  6. HttpRunner学习2--用例格式和简单使用

    前言 HttpRunner中,测试用例支持两种文件格式:YAML 和 JSON.两种格式的用例是完全等价的,对于相同的信息内容,使用 YAML /JSON 得到的测试结果和报告也是一致的. 本人环境: ...

  7. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程

    相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868.shtml http://www.gxu.edu.cn/college ...

  8. cJSON学习笔记

    1.JSON格式简述 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成.它基于JavaScript(Standa ...

  9. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程(缺heartbeat)

    SSL.TLS协议格式.HTTPS通信过程.RDP SSL通信过程   相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868 ...

随机推荐

  1. ubuntu下sublime中文无法输入的问题

    感谢- http://www.cnblogs.com/ningvsban/p/4346766.html

  2. Sql Server Analysis Service 转换为UnknownMember的正确设置 (转载)

    转载: http://www.cnblogs.com/OpenCoder/p/4754447.html#commentform 在SSAS中事实表数据被归类到为UnknownMember 的时候分为两 ...

  3. Python入门2

    字符串操作 字符串是语言中使用最多的,下面我们来看看python为字符串提供哪些方法: 1.upper().lower().title() 这3个方法都是返回一个新的字符串.重要性:** name = ...

  4. Stanford NLP学习笔记:7. 情感分析(Sentiment)

    1. 什么是情感分析(别名:观点提取,主题分析,情感挖掘...) 应用: 1)正面VS负面的影评(影片分类问题) 2)产品/品牌评价: Google产品搜索 3)twitter情感预测股票市场行情/消 ...

  5. c++ 一些随笔

    1. A region of source code where any use of the unqualified name (that is, as a plain identifier) re ...

  6. c++指针与引用问题

    本来是回答问题的,到这里做个笔记 *&L是指针的引用,实参是个指针.所以L是实参指针的别名,对别名L的修改,等于对实参的修改.*L是传值,你无法改变传过来的实参指针变量的值程序代码: #inc ...

  7. ThinkPHP3.2.3 跨域访问

    其他程序调用tp项目的action时需要进行跨域设置,在tp项目根目录下添加crossdomain.xml文件. 文件内容:  <?xml version="1.0"?> ...

  8. 第二周:If判断语句程序当中的作用简介

    1.If语句的作用: 在我们编写程序时经常会遇到内容判断的问题,比如判断内容的真假或者值的大小分别输出内容的问题 这时就会用到我们的If判断语句了,顾名思义,if在英文单词中意思为如果,在Java中他 ...

  9. Google Developing for Android 二 - Memory 最佳实践 // lightSky‘Blog

    Google Developing for Android 二 - Memory 最佳实践   |   分类于 Android最佳实践 原文:Developing for Android, II Th ...

  10. 黑马程序员_ Objective-c 面向对象笔记详解

    1)类,对象,方法 类 类名: 1) 类名的第一个字母必须是大写 2) 不能有下划线 3) 多个英文单词,用驼峰标识 类的声明和实现 类的声明 @interface 类名 : NSObject { @ ...