JTAG kullanarak birden çok FPGA programlama


9

ISE iMPACT kullanarak programladığım 4 Spartan 6 FPGAs bağlayan bir JTAG zinciri var. Yazılım, başarılı bir şekilde ve herhangi bir sırayla 4 FPGA herhangi bir katı alt kümesini programlayabilirsiniz. Ancak, dört FPGA'nın tümünü programlamaya çalıştığımda , son FPGA'nın DONE pini yüksek olmaz ve programlama başarısız olur.

Bu garip davranışa ne sebep olabilir?

Notlar:

  1. FPGA'ların üçünü programladıktan sonra, INIT_B pin değeri yüksek olmasına rağmen, dördüncü FPGA için durum kaydının INIT_B biti 0 olur. Üçüncü FPGA'yı programlamadan hemen önce, bu bit 1 idi. Bu, dördüncü FPGA'nın kilitlendiğini gösterir.
  2. SelectMap ile programlama yaparken, dört FPGA'nın tümünü sorunsuz bir şekilde programlayabilirim.
  3. FPGA'ların üçünü SelectMap kullanarak programladığımda, dördüncüsü hala JTAG kullanılarak programlanamıyor.
  4. Yapılan dört pimin her biri, 4.7K Ohm dirençlerden 3V3'e kadar çekilir ve daha sonra birbirine bağlanır.

Denediğim şeyler :

  1. FPGA'lardan birinin zincirden ayrılması, kalan 3 FPGA'nın hala programlanmasına izin verir.

  2. Son FPGA'nın 4.7K Ohm pull-up direncinin 330 Ohm direnç ile değiştirilmesi sorunu çözmez.


2
"Son FPGA" ile ne demek istiyorsun? Çünkü Kullanım Kılavuzunda, "The first device in a serial daisy chain is the last to be configured."zincirde son mu yoksa yapılandırılacak sonda mı (zincirde ilk olarak) mı demek istersiniz? Bir şema sağlayabilir misiniz?
embedded.kyle

2
P59 ile ilgili bu ifade başka türlü düşünmemi sağlıyor,"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."
embedded.kyle

Kullanıcı Kılavuzunu (FPGA çalışması yaptığımdan bu yana yaklaşık 6 ay geçti) öğrendikten sonra, terminolojinizle biraz kafam karıştı. Daisy Chain, seri programlama ile birlikte kullanılır. Bu durumda, DONEpimler birbirine bağlanır. JTAG için, çoklu cihaz programlamaya Sınır Tarama Zinciri denir. Gelen Chapter 3: Boundary-Scan and JTAG Configurationyalnızca söz, DONEpim olan "If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."So olan DONEpim düşük tek sorun? Doğru programlanıyor mu?
embedded.kyle


Bence 3 alabilirsiniz ama 4 değil bir ipucu. Sınır Tarama Sistemlerinin Tasarımı ile ilgili JTAG Programcı Kılavuzunun 4. Bölümüne göz atın: xilinx.com/support/sw_manuals/2_1i/download/jtag.pdf
embedded.kyle

Yanıtlar:


6

DONEJTAG programlaması sırasında kullanılan ve yüksek bağlı olabilir değil pimi:

JTAG tek yapılandırma moduysa, PROGRAM_B, INIT_B ve DONE, 330Ω'luk bir dirence Yüksek olarak bağlanabilir. (P57)

Bununla birlikte, Seri programlama kullanılıyorsa, tüm DONEpimler birbirine bağlanmalı ve DriveDonebirincisi dışındaki tüm cihazlar için devre dışı bırakılmalıdır:

Seri papatya dizimindeki tüm cihazlar için DONE pinlerini bağlamak önemlidir. DONE pinlerinin bağlanmaması konfigürasyonun başarısız olmasına neden olabilir. (P135)

İlk cihaz dışındaki tüm aygıtlar, YAPILDI pininde sürücüyü devre dışı bırakmalıdır. (P135)

Her ikisi de kullanılacaksa, iki seçenek vardır:

Alternatif olarak, sürücü tüm DONE pimleri için devre dışı bırakılabilir ve tüm cihazlar serbest bırakıldıktan sonra Yüksek sinyali çekmek için harici bir çekme direnci eklenebilir. (P135)

Hata ayıklama amacıyla, aygıtların seri veya JTAG arabirimi üzerinden ayrı ayrı yapılandırılabilmesi için tek tek DONE pinlerini ortak DONE sinyalinden ayırmanın bir yoluna sahip olmak genellikle yararlıdır. (P135)

Sizin durumunuzda, DONEpimi devre dışı bırakırken onları bağlamak ve hepsini yüksek bağlamak bence en iyi yoldur.

Tüm sayfa numaraları Kullanıcı Kılavuzunu referans alır


Hmmm ... INIT_BYüksekte bağladıysanız INIT_Bve durum kaydındaki bit 0 ise, bu bana bir donanım arızasını gösterir. O çipi bağımsız olarak programlayamazsanız, yapabileceğinizi düşündüğümü düşünüyorum. DONEBen durum yazmacı o noktadan sırasında ne yaptığını bilmiyorum programlarken pim Yüksek Z gider. Önceki FPGA durum kaydedicisinin LSB'si 1 ise, bu aygıtta bir sonraki programlamayı engelleyebilecek bir CRC hatası olduğunu gösterir.
embedded.kyle

Sorun bulundu (benim çözümüme bakın). Yardımın için teşekkürler.
Randomblue

3

Suçlunun INIT_Bpim olduğu ortaya çıktı . İlk birkaç FPGA programlanırken, her ne kadar yüksek çekilse de, INIT_Bpim, dahili bir aşağı çekme nedeniyle yavaş yavaş aşağı ve aşağı çekildi.

Üç FPGA programlandıktan sonra, INIT_Bpim INIT_Bdördüncü FPGA'nın bir mantık olarak yorumlanması için yeterince aşağı çekildi, böylece dördüncü FGPA'nın JTAG ile programlanması önlendi.


Temel nedeni paylaştığınız için teşekkür ederiz. Bu soruyu tuhaf bir davranış olduğu için bir cevap için kontrol etmeye devam ettim. Sorunun çözümü neydi? 330'dan daha güçlü bir çekmeΩ?
embedded.kyle

INIT_BProgramlamadan sonra pimin aşağı çekilmek yerine yukarı çekileceğini belirtmek için bitgen seçenekleri olduğu ortaya çıkıyor .
Randomblue
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.