使用 JTAG 编程多个 FPGA

电器工程 FPGA 标记 斯巴达人
2022-01-19 11:12:57

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

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

笔记:

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

我尝试过的事情

  1. 从链中断开其中一个 FPGA 允许剩余的 3 个 FPGA 仍然被编程。

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

2个回答

在 JTAG 编程期间未使用的DONE引脚可拉高:

如果 JTAG 是唯一的配置模式,那么 PROGRAM_B、INIT_B 和 DONE 可以连接到一个 330Ω 电阻的高电平。(第 57 页)

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

连接串行菊花链中所有设备的 DONE 引脚很重要。未能连接 DONE 引脚会导致配置失败。(第 135 页)

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

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

或者,可以禁用所有 DONE 引脚的驱动器,并且可以添加一个外部上拉电阻以在所有设备释放信号后将信号拉高。(第 135 页)

出于调试目的,将单个 DONE 引脚与公共 DONE 信号断开连接的方法通常很有帮助,以便可以通过串行或 JTAG 接口单独配置设备。(第 135 页)

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

所有页码参考用户指南

原来罪魁祸首是INIT_B别针。虽然被拉高,但随着前几个 FPGA 的编程,INIT_B由于内部下拉,引脚逐渐被拉低。

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