การเขียนโปรแกรม FPGA หลายรายการโดยใช้ JTAG


9

ฉันมี JTAG chain ที่เชื่อมต่อ FPGA Spartan 6 FPGA จำนวน 4 ตัวที่ฉันตั้งโปรแกรมโดยใช้ ISE iMPACT ซอฟต์แวร์สามารถตั้งโปรแกรมชุดย่อย FPGA ที่เข้มงวดจำนวน 4 ชุดในแถวได้ตามลำดับและในลำดับใดก็ได้ อย่างไรก็ตามเมื่อฉันพยายามตั้งโปรแกรมFPGA ทั้งสี่ขา DONE ของ FPGA ล่าสุดไม่สูงและการเขียนโปรแกรมล้มเหลว

สิ่งที่อาจทำให้เกิดพฤติกรรมที่แปลกประหลาดนี้?

หมายเหตุ:

  1. หลังจากเขียนโปรแกรม FPGA สามตัวบิต INIT_B ของการลงทะเบียนสถานะสำหรับ FPGA ที่สี่คือ 0 แม้ว่าขา INIT_B จะสูง ก่อนที่จะตั้งโปรแกรม FPGA ตัวที่สามบิตนั้นคือ 1 นี่เป็นการแนะนำ FPGA ตัวที่สี่ที่ล็อคไว้
  2. เมื่อตั้งโปรแกรมด้วย SelectMap ฉันสามารถตั้งโปรแกรม FPGA ทั้งสี่ตัวได้โดยไม่มีปัญหา
  3. เมื่อฉันตั้งโปรแกรม FPGA สามรายการโดยใช้ SelectMap รายการที่สี่ยังคงไม่สามารถตั้งโปรแกรมได้โดยใช้ JTAG
  4. หมุดสี่ตัวที่ทำเสร็จแล้วแต่ละตัวจะถูกดึงขึ้นไปถึง 3V3 ผ่านตัวต้านทาน 4.7K โอห์มแล้วจึงรวมเข้าด้วยกัน

สิ่งที่ฉันได้ลอง :

  1. การยกเลิกการเชื่อมต่อ FPGA ตัวใดตัวหนึ่งจากสายโซ่จะทำให้สามารถตั้งโปรแกรม FPGA ที่เหลืออีก 3 ตัวได้

  2. การสลับตัวต้านทานแบบเลื่อนขึ้น 4.7K Ohm ของ FPGA ล่าสุดสำหรับตัวต้านทาน 330 Ohm ไม่ได้ช่วยแก้ปัญหา


2
คุณหมายถึงอะไรโดย "last 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

หลังจากทำความคุ้นเคยกับคู่มือผู้ใช้ (เป็นเวลาประมาณ 6 เดือนตั้งแต่ฉันทำงาน FPGA) ฉันรู้สึกสับสนเล็กน้อยกับคำศัพท์ Daisy Chain ใช้ร่วมกับการเขียนโปรแกรมแบบอนุกรม ในกรณีนี้DONEหมุดถูกผูกเข้าด้วยกัน สำหรับ JTAG การเขียนโปรแกรมอุปกรณ์หลายรายการเรียกว่า Boundary-Scan Chain ใน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 เป็นเบาะแส ลองดูบทที่ 4 ของคู่มือโปรแกรมเมอร์ JTAG เกี่ยวกับการออกแบบระบบสแกนขอบเขต: xilinx.com/support/sw_manuals/2_1i/download/jtag.pdf
embedded.kyle

คำตอบ:


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ขาไปสูง-Z ในขณะที่การเขียนโปรแกรมดังนั้นผมจึงไม่ทราบว่าสิ่งที่ลงทะเบียนสถานะไม่ในช่วงจุดนั้น หาก LSB ของการลงทะเบียนสถานะ FPGA ก่อนหน้านี้เป็น 1 แสดงว่ามีข้อผิดพลาด CRC ในอุปกรณ์นั้นซึ่งอาจป้องกันการเขียนโปรแกรมต่อไป
embedded.kyle

พบปัญหา (ดูที่โซลูชันของฉัน) ขอขอบคุณสำหรับความช่วยเหลือของคุณ.
Randomblue

3

มันกลับกลายเป็นว่าผู้ร้ายเป็นINIT_Bเข็ม แม้ว่าจะดึงให้สูง แต่ FPGAs สองสามตัวแรกถูกตั้งค่าไว้INIT_Bหมุดก็จะถูกดึงต่ำลงเรื่อย ๆ เนื่องจากการดึงลงภายใน

หลังจากตั้งโปรแกรม FPGA สามตัวINIT_Bหมุดถูกดึงต่ำพอสำหรับ FPGA สี่เพื่อตีความINIT_Bว่าเป็นตรรกะต่ำดังนั้นป้องกัน FGPA ตัวที่สี่ที่จะโปรแกรมด้วย JTAG


ขอบคุณที่แบ่งปันสาเหตุที่แท้จริง ฉันคอยตรวจสอบคำถามนี้เพื่อหาคำตอบเพราะมันเป็นพฤติกรรมแปลก ๆ วิธีแก้ไขปัญหาคืออะไร แรงดึงที่มากกว่า 330Ω?
embedded.kyle

ปรากฎว่ามีตัวเลือก bitgen เพื่อระบุว่าINIT_Bจะดึงหมุดขึ้นแทนที่จะดึงลงหลังจากการตั้งโปรแกรม
Randomblue
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.