使用JTAG编程多个FPGA


9

我有一个JTAG链,可连接使用ISE iMPACT编程的4个Spartan 6 FPGA。该软件可以成功地以任何顺序连续编程4个FPGA的任何严格子集。但是,当我尝试对所有四个 FPGA 进行编程时,最后一个FPGA的DONE引脚不会变高,并且编程失败。

是什么导致这种奇怪的行为?

笔记:

  1. 对三个FPGA进行编程后,尽管INIT_B引脚为高电平,第四个FPGA的状态寄存器的INIT_B位为0。在对第三个FPGA进行编程之前,该位为1。这表明第四个FPGA已锁定。
  2. 使用SelectMap进行编程时,我可以毫无问题地对所有四个FPGA进行编程。
  3. 当我使用SelectMap对三个FPGA进行编程时,仍然不能使用JTAG对第四个FPGA进行编程。
  4. 四个完成的引脚中的每一个都通过4.7K欧姆电阻上拉至3V3,然后绑在一起。

我尝试过的事情

  1. 从链中断开一个FPGA的连接,可以对其余3个FPGA进行编程。

  2. 将最后一个FPGA的4.7K Ohm上拉电阻换成330 Ohm电阻并不能解决问题。


2
“最后的FPGA”是什么意思?因为在《用户指南》中说的"The first device in a serial daisy chain is the last to be configured."是您是指链中的最后一个还是要配置的最后一个(链中的第一个)?您能提供示意图吗?
Embedded.kyle

2
关于p59的陈述使我想不定,"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."
Embedded.kyle

在熟悉了《用户指南》(距我完成FPGA工作大约6个月)之后,我对您的术语感到有些困惑。菊花链与串行编程结合使用。在这种情况下,DONE销钉会绑在一起。对于JTAG,多设备编程称为边界扫描链。在Chapter 3: Boundary-Scan and JTAG Configuration中,只提了的DONE管脚"If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."所以是DONE引脚为低电平,唯一的问题?它编程正确吗?
Embedded.kyle


我认为您可以得到3而不是4的事实是一个提示。查阅《 JTAG程序员设计边界扫描系统指南》的第4章:xilinx.com/support/sw_manuals/2_1i/download/jtag.pdf
Embedded.kyle

Answers:


6

DONE引脚在JTAG编程期间不使用,可以拉高:

如果JTAG是唯一的配置模式,则可以将PROGRAM_B,INIT_B和DONE高电平连接到330Ω电阻。(p57)

但是,如果使用串行编程,则所有DONE引脚都应绑在一起,并且DriveDone除第一个引脚外,所有设备的引脚都应禁用:

对于串行菊花链中的所有设备,都必须连接DONE引脚。未连接DONE引脚会导致配置失败。(p135)

除第一个设备外,所有设备均应禁用DONE引脚上的驱动程序。(p135)

如果两者都使用,则有两个选择:

或者,可以禁用所有DONE引脚的驱动器,并可以在所有器件释放信号后添加外部上拉电阻以将信号拉高。(p135)

出于调试目的,通常有一种将各个DONE引脚与公共DONE信号断开的方法,这对您很有帮助,以便可以通过串行或JTAG接口分别配置设备。(p135)

在您的情况下,我认为连接它们并在禁用DONE引脚的情况下将它们全部绑紧是最好的方法。

所有页码均参考《用户指南》


嗯...如果您拉INIT_B高电平,并且INIT_B状态寄存器中的位为0,则表明我有硬件故障。除非您可以独立编程该芯片,否则我认为您可以。DONE编程时该引脚变为高阻态,因此我不知道状态寄存器在此期间的功能。如果前一个FPGA状态寄存器的LSB为1,则表明该设备中的CRC错误,这可能会阻止下一个的编程。
Embedded.kyle

发现问题(请参阅我的解决方案)。感谢您的帮助。
Randomblue

3

原来,罪魁祸首是INIT_B大头针。尽管被拉高,但由于对前几个FPGA进行了编程,该INIT_B引脚由于内部下拉而逐渐被拉低。

在对三个FPGA进行编程之后,该INIT_B引脚被拉低至足以使第四个FPGA解释INIT_B为逻辑低电平,从而阻止了对第四个FGPA进行JTAG编程。


Ω

事实证明,有位元选项可以指定INIT_B在编程后将引脚上拉而不是下拉。
Randomblue
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.