Memprogram banyak FPGA menggunakan JTAG

9

Saya memiliki rantai JTAG yang menghubungkan 4 Spartan 6 FPGA yang saya program menggunakan ISE iMPACT. Perangkat lunak ini dapat memprogram subset ketat dari 4 FPGA secara berturut-turut, dan dalam urutan apa pun. Namun, ketika saya mencoba memprogram keempat FPGA, pin SELESAI dari FPGA terakhir tidak menjadi tinggi, dan pemrograman gagal.

Apa yang bisa menyebabkan perilaku aneh ini?

Catatan:

  1. Setelah memprogram tiga FPGA, bit INIT_B dari register status untuk FPGA keempat adalah 0, meskipun pin INIT_B tinggi. Tepat sebelum pemrograman FPGA ketiga, bit itu adalah 1. Ini menunjukkan FPGA keempat telah terkunci.
  2. Saat pemrograman dengan SelectMap, saya dapat memprogram keempat FPGA tanpa masalah.
  3. Ketika saya memprogram tiga FPGA menggunakan SelectMap, yang keempat masih tidak dapat diprogram menggunakan JTAG.
  4. Masing-masing dari empat pin yang dilakukan ditarik ke atas hingga 3V3 hingga 4.7K Ohm resistor, dan kemudian diikat bersama.

Hal yang saya coba :

  1. Memutuskan hubungan salah satu FPGA dari rantai memungkinkan 3 FPGA yang tersisa masih diprogram.

  2. Mengganti resistor pull-up 4.7K Ohm dari FPGA terakhir untuk resistor 330 Ohm tidak menyelesaikan masalah.

Randomblue
sumber
2
Apa yang Anda maksud dengan "FPGA terakhir"? Karena dalam Panduan Pengguna tertulis "The first device in a serial daisy chain is the last to be configured."Apakah maksud Anda terakhir di rantai atau terakhir yang akan dikonfigurasi (pertama di rantai)? Bisakah Anda memberikan skema?
embedded.kyle
2
Pernyataan pada hlm. 59 ini membuat saya berpikir sebaliknya,"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."
embedded.kyle
Setelah membiasakan diri dengan Panduan Pengguna (sudah sekitar 6 bulan sejak saya melakukan pekerjaan FPGA), saya agak bingung dengan terminologi Anda. Daisy Chain digunakan bersama dengan pemrograman serial. Dalam hal ini, DONEpin diikat bersama. Untuk JTAG, pemrograman banyak perangkat disebut Boundary-Scan Chain. Dalam Chapter 3: Boundary-Scan and JTAG Configuration, satu-satunya menyebutkan DONEpin adalah "If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."Jadi apakah DONEpin rendah satu-satunya masalah? Apakah programnya benar?
embedded.kyle
mari kita lanjutkan diskusi ini dalam obrolan
embedded.kyle
Saya pikir fakta bahwa Anda bisa mendapatkan 3 tetapi bukan 4 adalah petunjuk. Lihatlah Bab 4 dari Panduan JTAG Programmer tentang Merancang Sistem Boundary-Scan: xilinx.com/support/sw_manuals/2_1i/download/jtag.pdf
embedded.kyle

Jawaban:

6

The DONEpin di tidak digunakan selama pemrograman JTAG dan dapat diikat tinggi:

Jika JTAG adalah satu-satunya mode konfigurasi, maka PROGRAM_B, INIT_B, dan DONE dapat diikat Tinggi ke resistor 330Ω. (hal57)

Namun, jika pemrograman Serial digunakan, maka semua DONEpin harus diikat menjadi satu dan yang DriveDoneharus dinonaktifkan untuk semua perangkat kecuali yang pertama:

Penting untuk menghubungkan pin DONE untuk semua perangkat dalam rantai daisy serial. Gagal menghubungkan pin DONE dapat menyebabkan konfigurasi gagal. (hal135)

Semua perangkat kecuali yang pertama harus menonaktifkan driver pada pin DONE. (hal135)

Jika keduanya akan digunakan, ada dua opsi:

Atau, driver dapat dinonaktifkan untuk semua pin DONE dan resistor pull-up eksternal dapat ditambahkan untuk menarik sinyal High setelah semua perangkat melepaskannya. (hal135)

Untuk keperluan debugging, seringkali bermanfaat untuk memiliki cara melepaskan pin DONE individual dari sinyal DONE yang umum, sehingga perangkat dapat dikonfigurasikan secara individual melalui antarmuka serial atau JTAG. (hal135)

Dalam kasus Anda, saya pikir menghubungkan mereka dan mengikat mereka semua sambil menonaktifkan DONEpin adalah cara terbaik untuk pergi.

Semua nomor halaman merujuk pada Panduan Pengguna

tertanam.kyle
sumber
Hmmm ... Jika Anda terikat INIT_Btinggi dan INIT_Bbit dalam register status adalah 0, itu akan menunjukkan kegagalan perangkat keras kepada saya. Kecuali Anda dapat memprogram chip itu secara mandiri yang menurut saya Anda bisa. The DONEpin pergi tinggi-Z sementara pemrograman jadi saya tidak tahu apa status register tidak selama saat itu. Jika LSB register status FPGA sebelumnya adalah 1, maka itu menunjukkan kesalahan CRC pada perangkat tersebut yang dapat mencegah pemrograman perangkat berikutnya.
embedded.kyle
Masalah ditemukan (lihat solusi saya). Terima kasih untuk bantuannya.
Randomblue
3

Ternyata pelakunya adalah INIT_Bpin. Meskipun ditarik tinggi, karena beberapa FPGA pertama diprogram, INIT_Bpin secara bertahap ditarik lebih rendah dan lebih rendah karena internal pull-down.

Setelah tiga FPGA diprogram, INIT_Bpin ditarik cukup rendah untuk FPGA keempat untuk ditafsirkan INIT_Bsebagai logika rendah, sehingga mencegah FGPA keempat diprogram dengan JTAG.

Randomblue
sumber
Ω
Ternyata ada opsi bitgen untuk menentukan bahwa INIT_Bpin ditarik bukan ditarik setelah pemrograman.
Randomblue