0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用MxTNI JTAG库和SVF文件编程Xilinx PROM器件

星星科技指导员 来源:ADI 作者:ADI 2023-06-16 17:33 次阅读

本应用笔记阐述了如何利用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所示。

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

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

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

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

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): 发送数据整形数组,并接收返回的整形数组。

硬件和软件需求

以下为所需要的硬件和软件:

  • TINI400评估板,并配置有MxTNI OS 1.12或更高版本。
  • JTAG器件(可编程逻辑)。
  • 器件链中JTAG器件模型的SVF文件。

编程步骤

第1步: 将MxTNI板的4个JTAG引脚与JTAG器件的4个JTAG引脚相连。

第2步: 遵循SVF文件的命令并使用JTAG库编写JAVA应用程序,来对JTAG器件进行编程,编译后加载到MxTNI。

(附录A: 一个样例Idcode.svf文件,实现从单独的XC18V02 Xilinx器件读取IDCODE。)

(附录B: 样例AppJtag.java程序,将SVF文件作为输入并产生JTAG信号来读取IDCODE。该样例程序是用来处理单独器件的(对于级连器件的详细信息见附录C)。)

(附录C: 展示了由已有的SVF文件编程级连器件的步骤。)

第3步: 运行JAVA程序。可执行AppJtag.tini将加载到MxTNI板。在MxTNI提示符下录入“java AppJtag.tini Idcode.svf”来运行程序。程序将产生JTAG信号与JTAG器件进行通信。注意:

  1. 生成的编程JTAG器件SVF文件应该与器件链中设计的确切模型一致。
  2. 所有操作码,例如编程JTAG器件的READ、WRITE、ERASE及其它命令等,都是由生产商定义的。SVF文件应该包含用户需要的所有操作码。

示例

以下示例说明了如何利用JTAG库从Xilinx JTAG器件XC18V02中读取Idcode。完整的样例代码,请查阅附录B。

  1. 生成器件模型的SVF文件:

    使用Xilinx WEB START来生成SVF文件。

    • 执行iMPACT并选择单选按钮“Prepare Configuration Files”选项,然后点击next。选择单选按钮“Boundary Scan file”并点击next。选择“SVF File”然后点击finish。
    • 在对话框中录入SVF文件名,例如example,并点击OK。
    • 选择要加载的name_of_mcs_file.mcs文件,并从列表中选择PROM器件(XC18V02_vq44)。
    • XC18V02已加到模型中。
    • 点击我们要编程的XC18V02器件型号。器件将为高亮显示。
    • 点击鼠标右键,并选择编程选项。勾选“Get Idcode”。
    • 在模型外点击鼠标以取消高亮显示器件,右击并选择option以关闭SVF。这时就生成了模型的SVF文件。
  2. 读取SVF文件并使用JTAG库来编程XC18V02器件。

    • 以下为SVF文件的部分样例代码:
    // Created using Xilinx iMPACT Software [ISE WebPACK - 5.1i]
    TRST OFF;
    ENDIR IDLE;
    ENDDR IDLE;
    STATE RESET IDLE;
    TIR 0 ;
    HIR 0 ;
    TDR 0 ;
    HDR 0 ;
    // Validating chain...
    TIR 0 ;
    HIR 0 ;
    TDR 0 ;
    HDR 0 ;
    SIR 8 TDI (ff) SMASK (ff) ;
    TIR 0 ;
    HIR 5 TDI (1f) SMASK (1f) ;
    HDR 1 TDI (00) SMASK (01) ;
    TDR 0 ;
    //Loading device with 'idcode' instruction.
    SIR 8 TDI (fe) SMASK (ff) ;
    SDR 32 TDI (00000000) SMASK (ffffffff) TDO (05025093) MASK (ffffffff) ;
    //Loading device with 'conld' instruction.
    SIR 8 TDI (f0) ;
    RUNTEST 110000 TCK;
    
    • 遵循SVF命令并使用库向XC18V02发送命令。
    • SVF规范提供了四个全局填充指令:头指令寄存器(HIR)、尾部指令寄存器(TIR)、头数据寄存器(HDR)和尾部数据寄存器(TDR)。这些全局命令规定了移位操作的开始和结尾处要填充的位数,从而解决旁路器件问题,并为SVF文件压缩提供了一种简单的方法。一旦指定,这些位会出现在SIR或者SDR命令的每一组比特位的前面或者后面。
    • 以下两个示例说明如何把SVF命令解释为JTAG库命令。

示例1: 带有全局填充指令的SVF语法结构

a/ SVF file commands:
STATE RESET IDLE;
TIR 0 ;
HIR 5 TDI (1f) SMASK (1f) ;
HDR 1 TDI (00) SMASK (01) ;
TDR 0 ;
//Loading device with 'idcode' instruction.
SIR 8 TDI (fe) SMASK (ff) ;
SDR 32 TDI (00000000) SMASK (ffffffff) TDO (05025093) MASK (ffffffff) ;
//Loading device with 'conld' instruction.
SIR 8 TDI (f0) ;
RUNTEST 110000 TCK;
//Check for Read/Write Protect.
SIR 8 TDI (ff) TDO (01) MASK (ff) ;
//Loading device with 'idcode' instruction.
SIR 8 TDI (fe) ;
SDR 32 TDI (00000000) TDO (05025093) ;
//Loading device with 'conld' instruction.
SIR 8 TDI (f0) ;
RUNTEST 110000 TCK;
//Check for Read/Write Protect.
SIR 8 TDI (ff) TDO (01) ;
TIR 0 ;
HIR 0 ;
TDR 0 ;
HDR 0 ;
b/ Sample JAVA program using JTAG library:
import java.io.*;
import javax.comm.*;
import com.dalsemi.comm.*
public static void main(String[] args)
{
myJtag = new jtag();
int SIZE = 0x1000;
byte[] byteArray = new byte[SIZE];
byte HeaderInstBitVal = (byte)0x00;
byte TrailerInstBitVal = (byte)0x00;
byte HeaderDataBitVal= (byte)0x00;
byte TrailerDataBitVal= (byte)0x00;
// STATE RESET IDLE;
myJtag.initialize();//This JTAG library method will initialize
		  // XC18V02 TAP controller and stay at
		  // Run-Test/Idle
// TIR 0 ;
byte TIR = (byte)0x00;
// HIR 5 TDI (1f) SMASK (1f) ;
byte HIR = (byte)0x05;
HeaderInstBitVal = (byte)0x01;
// HDR 1 TDI (00) SMASK (01) ;
byte HDR = (byte)0x01;
HeaderDataBitVal = (byte)0x00;
// TDR 0
byte TDR = (byte)0x00;
// SIR 8 TDI (fe) SMASK (ff) ;
byteArray[0] = (byte)0xfe;
myJtag.sendNrcv(byteArray,0,1,(byte)8,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
// SDR 32 TDI (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);
// SIR 8 TDI (f0) ;
byteArray[0] = (byte)0xf0;
myJtag.sendNrcv(byteArray,0,1,(byte)8,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
// RUNTEST 110000 TCK;
myJtag.waitState(100); // Depend on operation frequency, user can
			 // calculate how many miliseconds to wait.
}

示例2: 无全局填充指令的SVF语法结构

a/ SVF file commands:
STATE RESET IDLE;
TIR 0 ;
HIR 0 ;
TDR 0 ;
HDR 0 ;
SIR 13 TDI (1fff) SMASK (1fff) ;
SDR 2 TDI (00) SMASK (03) ;
SIR 13 TDI (1fff) TDO (0021) MASK (1c63) ;
// Loading devices with 'ispen' or 'bypass'  instruction.
SIR 13 TDI (1d1f) ;
SDR 7 TDI (68) SMASK (7f) ;
// Loading device with 'faddr' instruction.
SIR 13 TDI (1d7f) ;
SDR 17 TDI (000002) SMASK (01ffff) ;
RUNTEST 1 TCK;
// Loading device with 'ferase' instruction.
SIR 13 TDI (1d9f) ;
RUNTEST 100000 TCK;
// Loading device with a 'faddr' instruction.
SIR 13 TDI (1d7f) ;
SDR 17 TDI (000002) ;
RUNTEST 1 TCK;
// Loading device with 'serase' instruction.
SIR 13 TDI (015f) ;
RUNTEST 37000 TCK;
// Loading devices with 'conld' or 'bypass' instruction.
SIR 13 TDI (1e1f) ;
RUNTEST 110000 TCK;
// Loading devices with 'ispen' or 'bypass'  instruction.
SIR 13 TDI (1d1f) ;
SDR 7 TDI (68) SMASK (7f) ;
// Loading device with a 'fdata0' instruction.
SIR 13 TDI (1dbf) ;
b/ Sample JAVA program using JTAG library:
import java.io.*;
import javax.comm.*;
import com.dalsemi.comm.*
public static void main(String[] args)
{
myJtag = new jtag();
int SIZE = 0x1000;
int[] intArray = new int[SIZE];
byte HeaderInstBitVal = (byte)0x00;
byte TrailerInstBitVal = (byte)0x00;
byte HeaderDataBitVal= (byte)0x00;
byte TrailerDataBitVal= (byte)0x00;
// STATE RESET IDLE;
myJtag.initialize();//This JTAG library method will initialize
	  // XC18V02 TAP controller and stay at
	  // Run-Test/Idle
// TIR 0 ;
byte TIR = (byte)0x00;
// HIR 0 ;
byte HIR = (byte)0x00;
// HDR 0 ;
byte HDR = (byte)0x00;
// TDR 0
byte TDR = (byte)0x00;
// SIR 13 TDI (1fff) SMASK (1fff) ;
intArray[0] = (int)(0x1fff&0x1fff);
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
// SDR 2 TDI (00) SMASK (03) ;
intArray[0] = (int)(0x00&0x03);
myJtag.sendNrcv(intArray,0,1,(byte)2,false,false,(byte)HDR,
(byte)HeaderDataBitVal,(byte)TDR,(byte)TrailerDataBitVal);
// SIR 13 TDI (1fff) TDO (0021) MASK (1c63) ;
intArray[0] = (byte)0x1fff;
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
// SIR 13 TDI (1d1f) ;
intArray[0] = (byte)0x1d1f;
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
// SDR 7 TDI (68) SMASK (7f) ;
intArray[0] = (int)(0x68&0x7f);
myJtag.sendNrcv(intArray,0,1,(byte)7,false,false,(byte)HDR,
(byte)HeaderDataBitVal,(byte)TDR,(byte)TrailerDataBitVal);
// SIR 13 TDI (1d7f) ;
intArray[0] = (byte)0x1d7f;
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
// SDR 17 TDI (000002) SMASK (01ffff) ;
intArray[0] = (int)(0x0002 & 0xffff);
TDR = (byte)0x01;
myJtag.sendNrcv(intArray,0,1,(byte)16,false,false,(byte)HDR,
(byte)HeaderDataBitVal,(byte)TDR,(byte)TrailerDataBitVal);
// RUNTEST 1 TCK;
myJtag.waitState(1);
// SIR 13 TDI (1d9f) ;
intArray[0] = (byte)0x1d9f;
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
// RUNTEST 100000 TCK;
myJtag.waitState(1000);
// SIR 13 TDI (1d7f) ;
intArray[0] = (byte)0x1d7f;
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
// SDR 17 TDI (000002) ;
intArray[0] = (int)(0x0002 & 0xffff);
TDR = (byte)0x01;
myJtag.sendNrcv(intArray,0,1,(byte)16,false,false,(byte)HDR,
(byte)HeaderDataBitVal,(byte)TDR,(byte)TrailerDataBitVal);
// RUNTEST 1 TCK;
myJtag.waitState(1);
// SIR 13 TDI (015f) ;
intArray[0] = (byte)0x015f;
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
// RUNTEST 37000 TCK;
myJtag.waitState(100);
// SIR 13 TDI (1e1f) ;
intArray[0] = (byte)0x1e1f;
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
// RUNTEST 110000 TCK;
myJtag.waitState(110);
// SIR 13 TDI (1d1f) ;
intArray[0] = (byte)0x1d1f;
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
// SDR 7 TDI (68) SMASK (7f) ;
intArray[0] = (int)(0x68 & 0x7f);
TDR = (byte)0x00;
myJtag.sendNrcv(intArray,0,1,(byte)7,false,false,(byte)HDR,
(byte)HeaderDataBitVal,(byte)TDR,(byte)TrailerDataBitVal);
// SIR 13 TDI (1dbf) ;
intArray[0] = (byte)0x1dbf;
myJtag.sendNrcv(intArray,0,1,(byte)13,true,false,(byte)HIR,
(byte)HeaderInstBitVal,(byte)TIR,(byte)TrailerInstBitVal);
}

结论

由提供的SVF文件来编程Xilinx PROM器件是非常简单的。但是,如果用户能够正确分析SVF文件并理解如何确定对器件链中哪个器件进行编程,会更有好处。知道了这些信息,编程者能够更加高效地使用JTAG库。软件小组要对遥远位置的Xilinx JTAG器件进行编程,已有实际应用。利用开发包中的嵌入式JTAG编程软件,并以mcs文件作为输入文件,这是很容易做到的。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    447

    文章

    47795

    浏览量

    409149
  • 接口
    +关注

    关注

    33

    文章

    7640

    浏览量

    148496
  • 虚拟机
    +关注

    关注

    1

    文章

    855

    浏览量

    27378
收藏 人收藏

    评论

    相关推荐

    Xilinx文件的编译

    在FPGA开发过程中需要利用Modelsim对设计进行仿真,在不同阶段需要用到不同的文件,这里把Xinlinx文件的编译过程说一下。常用
    发表于 02-27 15:16

    Xilinx FPGA的JTAG配置方式和PROM配置方式的问题

    大家好,最近刚接触FPGA不久 现在手上有一块xilinx SP3E开发板,简单的设计了一个流水灯的程序 通过JTAG下载方式 直接下到FPGA里 板子可以运行 因为想实现断电后重启板子自动
    发表于 10-11 11:16

    使用Impact创建.svf文件时出现问题

    我试图使用Impact / Project Navigator(版本O.40d)生成用于JTAG测试的.svf文件,所有生成的文件都是0kb!这是一个工作设计,我可以生成.bit&am
    发表于 03-18 13:36

    Spartan 3E怎么通过JTAG进行SPI编程

    我有一个基于Spartan 3e的嵌入式设计,我需要能够更新PROM。我可以做到的唯一方法是通过JTAG端口。影响不是在现场缺少Xinlinx编程电缆的选择,也是因为它需要的空间。我有一个简单
    发表于 05-27 14:01

    Spartan3A SVF配置

    对于除Spartan3A之外的多个设备,我已成功创建了一个SVF文件,以使用第三方边界扫描工具配置设备。我用Acculogic。所以我使用的过程是:1.影响:将位文件加载到Jtag链中
    发表于 06-19 11:20

    如何使用JTAG从微控制器重新编程FPGA的ISF?

    SVF文件编程和验证FPGA(在ISF内存中),但是当我使用自定义代码(JTAG驱动程序)从微处理器播放SVF
    发表于 08-05 07:18

    如何使用Xilinx工具及连接到JTAG的ft2232芯片的定制电路板?

    :// www.gadgetfactory.net/gf/project/butterfly_main/,它使用ft2232芯片进行jtag通信。我目前能够使用urjtag加载svf文件,但我正试图找到一种
    发表于 08-15 10:18

    在SP605上编程SPI Flash收到设备ID错误

    我无法在SP605板上编程SPI Flash器件。我遵循了XAPP951并从FPGA位文件中创建了一个SPI PROM文件。我已经将
    发表于 09-06 09:21

    怎么直接从CPU编程外部SPI PROM

    数据后,CPU(为了更新PROM软件)将主控总线(假设FPGA没有)并将对PROM进行编程:1)这个序列看起来是否合理?2)我可以将.msc格式文件用于该用途吗?还是其他任何
    发表于 03-09 09:18

    如何使得程序员可以编程正确的Xilinx器件配置存储器

    我正在设计一个系统,其中有许多模块,每个模块都带有一个Spartan 6 FPGA,所有JTAG接口都连接到一个中央板,后者还有其他JTAG编程器件。围绕所有的JTAG链并不实用(例
    发表于 06-09 13:53

    XAPP058 -利用嵌入式微控制器实现Xilinx系统编程

    Xilinx 高性能 CPLD、FPGA 和配置 PROM 系列具备在系统可编程性、可靠的引脚锁定以及JTAG 边界扫描测试功能。此强大的功能组合允许设计人员在进行重大更改时,仍能保留
    发表于 01-17 17:37 42次下载
    XAPP058 -<b class='flag-5'>利用</b>嵌入式微控制器实现<b class='flag-5'>Xilinx</b>系统<b class='flag-5'>编程</b>

    XAPP503-针对Xilinx器件SVF和XSVF文件格式

    as they apply to Xilinx devices. Some familiarity with IEEE STD 1149.1 (JTAG) isassumed. For information on using Serial Vector Format
    发表于 02-17 15:26 53次下载
    XAPP503-针对<b class='flag-5'>Xilinx</b><b class='flag-5'>器件</b>的<b class='flag-5'>SVF</b>和XSVF<b class='flag-5'>文件</b>格式

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

    本应用笔记阐述了如何利用MxTNIJTAG库以及串行向量格式(SVF)文件编程
    发表于 11-16 19:51 7614次阅读

    digilent JTAG-HS3编程电线 介绍

     JTAG-HS3是Digilent高性价比的高速Xilinx FPGA编程解决方案系列产品中的最新一款。在JTAG-HS1产品成功的基础上,JTA
    的头像 发表于 11-13 17:12 5083次阅读
    digilent <b class='flag-5'>JTAG</b>-HS3<b class='flag-5'>编程</b>电线 介绍

    digilent JTAG-HS2编程电线 介绍

    JTAG-HS2编程电线是一款专为Xilinx FPGA所设计的高速编程解决方案。该电线完全兼容所有Xilinx工具,能被iMPACT™,C
    的头像 发表于 11-13 17:13 4790次阅读
    digilent <b class='flag-5'>JTAG</b>-HS2<b class='flag-5'>编程</b>电线 介绍