JTAG库和SVF文件编程Xilinx汇总Word文档下载推荐.docx
- 文档编号:8529650
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:26
- 大小:34.99KB
JTAG库和SVF文件编程Xilinx汇总Word文档下载推荐.docx
《JTAG库和SVF文件编程Xilinx汇总Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《JTAG库和SVF文件编程Xilinx汇总Word文档下载推荐.docx(26页珍藏版)》请在冰点文库上搜索。
TDI和TDO信号的所有状态转换和行为都与TCK同步。
见图2。
图2.
所有JTAG操作都是将数据移入或移出JTAG指令和数据寄存器。
TAP控制器可对所有这些寄存器直接访问。
有两类JTAG寄存器:
指令寄存器(IR)和数据寄存器(DR)。
访问IR通过移位-IR(Shift-IR)状态实现,而访问DR通过移位-DR(Shift-IR)状态实现。
IR长度通常是大于2位的任意长度。
除了由IEEEStd.1149.1定义的BYPASS指令为全1以外,生产商定义所有其它的指令位码。
在本应用笔记中,JAVA样例代码将解释说明串行向量格式(SVF)文件来进行编程。
这里所用的SVF是描述高层IEEE1149.1(JTAG)总线操作的语法规范。
JTAG设备和软件提供商已经将SVF作为标准用于数据交换。
SVF以紧凑和可移植的形式描述JTAG链操作。
SVF文件通过描述需要移入器件链的信息,记录JTAG操作。
通过XilinxiMPACT(详细信息见下面)软件,将JTAG操作记录在SVF文件中。
SVF文件写成ASCII文本形式,因此可以在任何文本编辑器中人工读、修改和写。
“许多第三方编程工具使用SVF文件作为输入,这样利用包含在SVF文件中的信息可以对JTAG链中的Xilinx器件编程。
”
JTAG库简要说明
所开发的JTAG类库可帮助用户使用TINI与JTAG器件进行通信。
一个可能的应用是:
从遥远的位置对可编程逻辑进行动态和在系统更新。
用户能够将TAP控制器初始化到初始状态、浏览16个状态、获得或设置TAP状态、产生时钟信号、发送命令和数据等等。
以下为JTAG类方法的简要说明:
∙publicjtag():
加载jtag库。
∙publicStringgetVersion():
返回jtag类的版本。
∙publicintrunClock(intnumticks):
以numticks指定的数量运行时钟。
∙publicbyteinitialize():
先将TMS置高达五个TCK时钟脉冲,然后TMS置低1个时钟并进入缺省状态Run-Test-Idle。
∙publicbytesetState(byteaState):
将目标状态设置为aState指定的状态。
∙publicbytegetState():
返回目标状态。
∙publicbytescanState(bytestate):
将TAP控制器的状态机转换到参数state指定的状态。
∙publicStringdisplayState(bytestate):
显示TAP控制器的状态。
∙publicbytewaitState(intmsecs):
进程延时一定毫秒数。
∙publicbytegetTDO():
获得引脚TDO的当前状态。
∙publicvoidsetTDI(bytelogic):
引脚TDI设定为指定的逻辑状态。
∙publicbytegetTDI():
获得引脚TDI的当前状态。
∙publicvoidsetTMS(bytelogic):
引脚TMS设定为指定的逻辑状态。
∙publicbytegetTMS():
获得引脚TMS的当前状态。
∙publicvoidsetTCK(bytelogic):
引脚TCK设定为指定的逻辑状态。
∙publicbytegetTCK():
获得引脚TCK的当前状态。
∙publicbytesendNrcv(byte[]data,intoffset,intsize,bytenumberOfBits,booleanstate,booleanupdate,byteextraHeaderClock,byteHeaderBitVal,byteextraTrailerClock,byteTrailerBitVal):
发送数据字节数组,并接收返回的字节数组。
∙publicbytesendNrcv(int[]data,intoffset,intsize,bytenumberOfBits,booleanstate,booleanupdate,byteextraHeaderClock,byteHeaderBitVal,byteextraTrailerClock,byteTrailerBitVal):
发送数据整形数组,并接收返回的整形数组。
关于JTAG类的更多详细信息,请访问
硬件和软件需求
以下为所需要的硬件和软件:
∙TINI400评估板,并配置有TINIOS1.12或更高版本(见http:
//www.maxim-
∙JTAG器件(可编程逻辑)。
∙器件链中JTAG器件模型的SVF文件。
关于SVF文件的更多信息,请查阅
∙TINIJTAG库。
关于JTAG类的更多信息请访问
编程步骤
第1步:
将TINI板的4个JTAG引脚与JTAG器件的4个JTAG引脚相连。
第2步:
遵循SVF文件的命令并使用JTAG库编写JAVA应用程序,来对JTAG器件进行编程,编译后加载到TINI。
(附录A:
一个样例Idcode.svf文件,实现从单独的XC18V02Xilinx器件读取IDCODE。
)(附录B:
样例AppJtag.java程序,将SVF文件作为输入并产生JTAG信号来读取IDCODE。
该样例程序是用来处理单独器件的(对于级连器件的详细信息见附录C)。
)
(附录C:
展示了由已有的SVF文件编程级连器件的步骤。
第3步:
运行JAVA程序。
可执行AppJtag.tini将加载到TINI板。
在TINI提示符下录入“javaAppJtag.tiniIdcode.svf”来运行程序。
程序将产生JTAG信号与JTAG器件进行通信。
注意:
1/生成的编程JTAG器件SVF文件应该与器件链中设计的确切模型一致。
2/所有操作码,例如编程JTAG器件的READ、WRITE、ERASE及其它命令等,都是由生产商定义的。
SVF文件应该包含用户需要的所有操作码。
示例
以下示例说明了如何利用JTAG库从XilinxJTAG器件XC18V02中读取Idcode。
完整的样例代码,请查阅附录B。
1/生成器件模型的SVF文件:
使用XilinxWEBSTART来生成SVF文件。
∙执行iMPACT并选择单选按钮“PrepareConfigurationFiles”选项,然后点击next。
选择单选按钮“BoundaryScanfile”并点击next。
选择“SVFFile”然后点击finish。
∙在对话框中录入SVF文件名,例如example,并点击OK。
∙选择要加载的name_of_mcs_file.mcs文件,并从列表中选择PROM器件(XC18V02_vq44)。
∙XC18V02已加到模型中。
∙点击我们要编程的XC18V02器件型号。
器件将为高亮显示。
∙点击鼠标右键,并选择编程选项。
勾选“GetIdcode”。
∙在模型外点击鼠标以取消高亮显示器件,右击并选择option以关闭SVF。
这时就生成了模型的SVF文件。
2/读取SVF文件并使用JTAG库来编程XC18V02器件。
∙以下为SVF文件的部分样例代码:
//CreatedusingXilinxiMPACTSoftware[ISEWebPACK-5.1i]
TRSTOFF;
ENDIRIDLE;
ENDDRIDLE;
STATERESETIDLE;
TIR0;
HIR0;
TDR0;
HDR0;
//Validatingchain...
SIR8TDI(ff)SMASK(ff);
HIR5TDI(1f)SMASK(1f);
HDR1TDI(00)SMASK(01);
//Loadingdevicewith'
idcode'
instruction.
SIR8TDI(fe)SMASK(ff);
SDR32TDI(00000000)SMASK(ffffffff)TDO(05025093)MASK(ffffffff);
conld'
SIR8TDI(f0);
RUNTEST110000TCK;
∙遵循SVF命令并使用库向XC18V02发送命令。
∙SVF规范提供了四个全局填充指令:
头指令寄存器(HIR)、尾部指令寄存器(TIR)、头数据寄存器(HDR)和尾部数据寄存器(TDR)。
这些全局命令规定了移位操作的开始和结尾处要填充的位数,从而解决旁路器件问题,并为SVF文件压缩提供了一种简单的方法。
一旦指定,这些位会出现在SIR或者SDR命令的每一组比特位的前面或者后面。
∙以下两个示例说明如何把SVF命令解释为JTAG库命令。
示例1:
带有全局填充指令的SVF语法结构
a/SVFfilecommands:
//CheckforRead/WriteProtect.
SIR8TDI(ff)TDO(01)MASK(ff);
SIR8TDI(fe);
SDR32TDI(00000000)TDO(05025093);
SIR8TDI(ff)TDO(01);
b/SampleJAVAprogramusingJTAGlibrary:
importjava.io.*;
importm.*;
importm.*
publicstaticvoidmain(String[]args)
{
myJtag=newjtag();
intSIZE=0x1000;
byte[]byteArray=newbyte[SIZE];
byteHeaderInstBitVal=(byte)0x00;
byteTrailerInstBitVal=(byte)0x00;
byteHeaderDataBitVal=(byte)0x00;
byteTrailerDataBitVal=(byte)0x00;
//STATERESETIDLE;
myJtag.initialize();
//ThisJTAGlibrarymethodwillinitialize
//XC18V02TAPcontrollerandstayat
//Run-Test/Idle
//TIR0;
byteTIR=(byte)0x00;
//HIR5TDI(1f)SMASK(1f);
byteHIR=(byte)0x05;
HeaderInstBitVal=(byte)0x01;
//HDR1TDI(00)SMASK(01);
byteHDR=(byte)0x01;
HeaderDataBitVal=(byte)0x00;
//TDR0
byteTDR=(byte)0x00;
//SIR8TDI(fe)SMASK(ff);
byteArray[0]=(byte)0xfe;
myJtag.sendNrcv(byteArray,0,1,(byte)8,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
//SDR32TDI(00000000)SMASK(ffffffff)TDO(05025093)MASK
//(ffffffff);
byteArray[0]=(byte)0x00;
byteArray[1]=(byte)0x00;
byteArray[2]=(byte)0x00;
byteArray[3]=(byte)0x00;
myJtag.sendNrcv(byteArray,0,4,(byte)8,false,false,(byte)HDR,
(byte)HeaderDataBitVal,(byte)TDR,(byte)TrailerDataBitVal);
//SIR8TDI(f0);
byteArray[0]=(byte)0xf0;
//RUNTEST110000TCK;
myJtag.waitState(100);
//Dependonoperationfrequency,usercan
//calculatehowmanymilisecondstowait.
}
示例2:
无全局填充指令的SVF语法结构
SIR13TDI(1fff)SMASK(1fff);
SDR2TDI(00)SMASK(03);
SIR13TDI(1fff)TDO(0021)MASK(1c63);
//Loadingdeviceswith'
ispen'
or'
bypass'
SIR13TDI(1d1f);
SDR7TDI(68)SMASK(7f);
//Loadingdevicewith'
faddr'
SIR13TDI(1d7f);
SDR17TDI(000002)SMASK(01ffff);
RUNTEST1TCK;
ferase'
SIR13TDI(1d9f);
RUNTEST100000TCK;
//Loadingdevicewitha'
SDR17TDI(000002);
serase'
SIR13TDI(015f);
RUNTEST37000TCK;
SIR13TDI(1e1f);
fdata0'
SIR13TDI(1dbf);
int[]intArray=newint[SIZE];
//XC18V02TAPcontrollerandstayat
//Run-Test/Idle
//HIR0;
byteHIR=(byte)0x00;
//HDR0;
byteHDR=(byte)0x00;
//SIR13TDI(1fff)SMASK(1fff);
intArray[0]=(int)(0x1fff&
0x1fff);
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
//SDR2TDI(00)SMASK(03);
intArray[0]=(int)(0x00&
0x03);
myJtag.sendNrcv(intArray,0,1,(byte)2,false,false,(byte)HDR,
//SIR13TDI(1fff)TDO(0021)MASK(1c63);
intArray[0]=(byte)0x1fff;
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
//SIR13TDI(1d1f);
intArray[0]=(byte)0x1d1f;
//SDR7TDI(68)SMASK(7f);
intArray[0]=(int)(0x68&
0x7f);
myJtag.sendNrcv(intArray,0,1,(byte)7,false,false,(byte)HDR,
//SIR13TDI(1d7f);
intArray[0]=(byte)0x1d7f;
//SDR17TDI(000002)SMASK(01ffff);
intA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JTAG SVF 文件 编程 Xilinx 汇总