基于MxTNI JTAG库和SVF文件编程Xilinx PROM器件的详细分析与演示

基于MxTNI JTAG库和SVF文件编程Xilinx PROM器件的详细分析与演示,第1张

摘要:本应用笔记阐述了如何利用MxTNI™ JTAG库以及串行向量格式(SVF)文件来编程Xilinx® PROM器件。假定读者已经对JTAG和可编程逻辑器件有了一定认识。

介绍
Maxim微型网络接口(MxTNI)是Dallas Semiconductor (Maxim Integrated的全资子公司)开发的一个平台。它包含了一套小型却功能强大的芯片组以及Java®可编程虚拟机。芯片组具有处理、控制、器件级通信和网络互连的能力。为了和任何JTAG器件通信,TINIs400适配板在J21端具有4引脚JTAG输出。 这些引脚将直接连到JTAG器件上标准JTAG引脚TDI、TDO、TMS和TCK。

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

基于MxTNI JTAG库和SVF文件编程Xilinx PROM器件的详细分析与演示,图1. 所有JTAG *** 作都通过器件的测试访问端口进行控制 ,第2张

 

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

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

基于MxTNI JTAG库和SVF文件编程Xilinx PROM器件的详细分析与演示,图2:TDI和TDO信号的所有状态转换和行为都与TCK同步,第3张

 

图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器件编程。”

JTAG库简要说明
所开发的JTAG类库可帮助用户使用MxTNI与JTAG器件进行通信。一个可能的应用是:从遥远的位置对可编程逻辑进行动态和在系统更新。用户能够将TAP控制器初始化到初始状态、浏览16个状态、获得或设置TAP状态、产生时钟信号、发送命令和数据等等。以下为JTAG类方法的简要说明:
public jtag(): 加载jtag库。
public String getVersion(): 返回jtag类的版本。
public int runClock( int numTIcks ): 以numTIcks指定的数量运行时钟。
public byte iniTIalize(): 先将TMS置高达五个TCK时钟脉冲,然后TMS置低1个时钟并进入缺省状态Run-Test-Idle。
public byte setState( byte aState ): 将目标状态设置为aState指定的状态。
public byte getState(): 返回目标状态。
public byte scanState( byte state ): 将TAP控制器的状态机转换到参数state指定的状态。
public String displayState(byte state): 显示TAP控制器的状态。
public byte waitState( int msecs ): 进程延时一定毫秒数。
public byte getTDO(): 获得引脚TDO的当前状态。
public void setTDI(byte logic): 引脚TDI设定为指定的逻辑状态。
public byte getTDI(): 获得引脚TDI的当前状态。
public void setTMS(byte logic): s引脚TMS设定为指定的逻辑状态。
public byte getTMS(): 获得引脚TMS的当前状态。
public void setTCK(byte logic): 引脚TCK设定为指定的逻辑状态。
public byte getTCK(): 获得引脚TCK的当前状态。
public byte sendNrcv(byte[] data, int offset, int size, byte numberOfBits, boolean state, boolean update, byte extraHeaderClock, byte HeaderBitVal,byte extraTrailerClock, byte TrailerBitVal): 发送数据字节数组,并接收返回的字节数组。
public byte sendNrcv(int[] data, int offset, int size, byte numberOfBits, boolean state, boolean update,byte extraHeaderClock, byte HeaderBitVal,byte extraTrailerClock, byte TrailerBitVal): 发送数据整形数组,并接收返回的整形数组。

关于JTAG类的更多详细信息,请访问 。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2603298.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-09
下一篇 2022-08-09

发表评论

登录后才能评论

评论列表(0条)

保存