JTAG를 사용하여 여러 FPGA 프로그래밍


9

ISE iMPACT를 사용하여 프로그래밍하는 Spartan 6 FPGA 4 개를 연결하는 JTAG 체인이 있습니다. 이 소프트웨어는 4 FPGA의 엄격한 서브셋을 순서에 상관없이 성공적으로 프로그래밍 할 수 있습니다. 그러나 4 개의 FPGA를 모두 프로그래밍하려고 하면 마지막 FPGA의 DONE 핀이 높아지지 않아 프로그래밍이 실패합니다.

이 이상한 행동을 일으키는 원인은 무엇입니까?

노트:

  1. 3 개의 FPGA를 프로그래밍 한 후, INIT_B 핀은 높지만 네 번째 FPGA에 대한 상태 레지스터의 INIT_B 비트는 0입니다. 세 번째 FPGA를 프로그래밍하기 직전에 그 비트는 1이었다. 이는 네 번째 FPGA가 잠 겼음을 암시한다.
  2. SelectMap으로 프로그래밍 할 때 아무 문제없이 4 개의 FPGA를 모두 프로그래밍 할 수 있습니다.
  3. SelectMap을 사용하여 3 개의 FPGA를 프로그래밍 할 때 4 번째 FPGA는 여전히 JTAG를 사용하여 프로그래밍 할 수 없습니다.
  4. 4 개의 완료된 핀 각각은 4.7K 옴 저항을 통해 3V3까지 풀업 된 다음 서로 연결됩니다.

내가 시도한 것 :

  1. 체인에서 FPGA 중 하나를 분리하면 나머지 3 개의 FPGA를 여전히 프로그래밍 할 수 있습니다.

  2. 330 Ohm 저항으로 마지막 FPGA의 4.7K 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

답변:


6

DONEJTAG 프로그래밍 동안 사용과 높은 연결 할 수 없습니다에 핀 :

JTAG가 유일한 구성 모드 인 경우 PROGRAM_B, INIT_B 및 DONE을 330Ω 저항에 High로 연결할 수 있습니다. (p57)

그러나 직렬 프로그래밍을 사용하는 경우 모든 DONE핀을 함께 묶고 DriveDone첫 번째 장치를 제외한 모든 장치에 대해 핀을 비활성화해야합니다.

직렬 데이지 체인의 모든 장치에 대해 DONE 핀을 연결하는 것이 중요합니다. DONE 핀을 연결하지 못하면 구성이 실패 할 수 있습니다. (p135)

첫 번째 장치를 제외한 모든 장치는 DONE 핀에서 드라이버를 비활성화해야합니다. (p135)

둘 다 사용하는 경우 두 가지 옵션이 있습니다.

또는 모든 DONE 핀에 대해 드라이버를 비활성화 할 수 있으며 모든 장치가 해제 한 후 신호를 High로 끌어 오기 위해 외부 풀업 저항을 추가 할 수 있습니다. (p135)

디버깅 목적으로 직렬 또는 JTAG 인터페이스를 통해 장치를 개별적으로 구성 할 수 있도록 공통 DONE 신호에서 개별 DONE 핀을 분리하는 방법이 도움이되는 경우가 종종 있습니다. (p135)

귀하의 경우, DONE핀 을 비활성화하는 동안 연결하고 모두 묶는 것이 가장 좋은 방법 이라고 생각합니다 .

모든 페이지 번호는 사용자 안내서를 참조합니다


흠 ... INIT_B높이 를 묶고 INIT_B상태 레지스터 의 비트가 0이면 하드웨어 고장을 나타냅니다. 당신이 할 수 있다고 생각하는 칩을 독립적으로 프로그래밍 할 수 없다면. DONE나는 상태 레지스터는 그 시점 동안 무엇을 알고하지 않도록 프로그래밍 동안 핀은 높은-Z 간다. 이전 FPGA 상태 레지스터의 LSB가 1 인 경우, 이는 해당 장치의 CRC 오류를 나타내며 다음 장치의 프로그래밍을 방해 할 수 있습니다.
embedded.kyle

문제가 발견되었습니다 (내 솔루션 참조). 도와 주셔서 감사합니다.
Randomblue

3

범인이 INIT_B핀 이라고 밝혀졌습니다 . 처음 몇 개의 FPGA가 프로그래밍됨에 따라 높은 수준으로 끌어 당겨졌지만 INIT_B내부 풀다운으로 인해 핀이 점차적으로 점점 낮아졌습니다.

3 개의 FPGA가 프로그래밍 된 후 INIT_B, 4 번째 FPGA가 INIT_B로직 로우 로 해석 할 수있을 정도로 핀을 낮게 끌어 당겨서 4 번째 FGPA가 JTAG로 프로그래밍되지 않도록한다.


Ω

INIT_B프로그래밍 후에 핀을 풀다운하지 않고 풀업 하도록 지정하는 bitgen 옵션이 있습니다.
Randomblue
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.