Lập trình nhiều FPGA bằng JTAG


9

Tôi có một chuỗi JTAG kết nối 4 Spartan 6 FPGA mà tôi lập trình bằng ISE iMPACT. Phần mềm có thể lập trình thành công bất kỳ tập hợp con nghiêm ngặt nào của 4 FPGA liên tiếp và theo bất kỳ thứ tự nào. Tuy nhiên, khi tôi cố gắng lập trình cả bốn GPU, chân DONE của FPGA cuối không tăng cao và việc lập trình thất bại.

Điều gì có thể gây ra hành vi kỳ lạ này?

Ghi chú:

  1. Sau khi lập trình ba trong số các GPU, bit INIT_B của thanh ghi trạng thái cho FPGA thứ tư là 0, mặc dù chân INIT_B cao. Ngay trước khi lập trình FPGA thứ ba, bit đó là 1. Điều này cho thấy rằng FPGA thứ tư đã bị khóa.
  2. Khi lập trình với SelectMap, tôi có thể lập trình cả bốn FPGA mà không gặp vấn đề gì.
  3. Khi tôi lập trình ba trong số các GPU sử dụng Chọn Bản đồ, cái thứ tư vẫn không thể được lập trình bằng JTAG.
  4. Mỗi trong số bốn chân được thực hiện được kéo lên đến 3V3 qua điện trở 4,7K Ohm, sau đó gắn lại với nhau.

Những điều tôi đã thử :

  1. Việc ngắt kết nối một trong các FPGA khỏi chuỗi cho phép 3 FPGA còn lại vẫn được lập trình.

  2. Hoán đổi điện trở kéo lên 4,7K Ohm của đồ họa cuối cùng cho điện trở 330 Ohm không giải quyết được vấn đề.


2
Bạn có ý nghĩa gì bởi "FPGA cuối"? Bởi vì trong Hướng dẫn sử dụng có ghi "The first device in a serial daisy chain is the last to be configured."Bạn có nghĩa là cuối cùng trong chuỗi hoặc cuối cùng được định cấu hình (đầu tiên trong chuỗi)? Bạn có thể cung cấp một sơ đồ?
embedded.kyle

2
Tuyên bố này trên p59 khiến tôi nghĩ khác,"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."
embedded.kyle

Sau khi làm quen với Hướng dẫn sử dụng (đã được khoảng 6 tháng kể từ khi tôi thực hiện công việc đồ họa), tôi hơi bối rối bởi thuật ngữ của bạn. Daisy Chain được sử dụng cùng với lập trình nối tiếp. Trong trường hợp đó, các DONEchân được gắn với nhau. Đối với JTAG, lập trình nhiều thiết bị được gọi là Chuỗi ranh giới quét. Trong Chapter 3: Boundary-Scan and JTAG Configuration, đề cập duy nhất của DONEpin là "If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."Vì vậy, DONEpin thấp là vấn đề duy nhất? Liệu nó có đúng chương trình không?
embedded.kyle


Tôi nghĩ rằng thực tế là bạn có thể nhận được 3 nhưng không phải 4 là một đầu mối. Kiểm tra Chương 4 của JTAG Programmer Hướng dẫn về Thiết kế Boundary Scan-Systems: xilinx.com/support/sw_manuals/2_1i/download/jtag.pdf
embedded.kyle

Câu trả lời:


6

Các DONEpin trong không được sử dụng trong lập trình JTAG và có thể được gắn cao:

Nếu JTAG là chế độ cấu hình duy nhất, thì PROGRAM_B, INIT_B và DONE có thể được gắn Cao với điện trở 330Ω. (tr57)

Tuy nhiên, nếu lập trình nối tiếp được sử dụng, thì tất cả các DONEchân phải được gắn với nhau và DriveDonenên tắt tất cả các thiết bị ngoại trừ đầu tiên:

Điều quan trọng là kết nối các chân DONE cho tất cả các thiết bị trong chuỗi daisy nối tiếp. Không kết nối các chân DONE có thể khiến cấu hình không thành công. (tr135)

Tất cả các thiết bị ngoại trừ thiết bị đầu tiên sẽ vô hiệu hóa trình điều khiển trên chân DONE. (tr135)

Nếu cả hai được sử dụng, có hai tùy chọn:

Ngoài ra, trình điều khiển có thể được tắt cho tất cả các chân DONE và có thể thêm một điện trở kéo lên bên ngoài để kéo tín hiệu Cao sau khi tất cả các thiết bị đã giải phóng nó. (tr135)

Đối với mục đích gỡ lỗi, thường rất hữu ích khi có cách ngắt kết nối các chân DONE riêng lẻ khỏi tín hiệu DONE chung, để các thiết bị có thể được cấu hình riêng lẻ thông qua giao diện nối tiếp hoặc JTAG. (tr135)

Trong trường hợp của bạn, tôi nghĩ rằng việc kết nối chúng và buộc tất cả chúng cao trong khi vô hiệu hóa DONEpin là cách tốt nhất để đi.

Tất cả số trang tham khảo Hướng dẫn sử dụng


Hmmm ... Nếu bạn buộc INIT_Bcao và INIT_Bbit trong thanh ghi trạng thái là 0, điều đó sẽ chỉ ra lỗi phần cứng đối với tôi. Trừ khi bạn có thể lập trình chip đó một cách độc lập mà tôi nghĩ bạn nói bạn có thể. Các DONEpin đi cao-Z trong khi lập trình vì vậy tôi không biết những gì đăng ký hộ làm trong thời điểm đó. Nếu LSB của trình đăng ký trạng thái trước đó là 1, thì điều đó cho thấy lỗi CRC trong thiết bị đó có thể ngăn lập trình tiếp theo.
embedded.kyle

Vấn đề được tìm thấy (xem giải pháp của tôi). Cảm ơn sự giúp đỡ của bạn.
Randomblue

3

Hóa ra thủ phạm là INIT_Bpin. Mặc dù được kéo lên cao, vì một vài GPU đầu tiên được lập trình, INIT_Bchân này dần dần bị kéo xuống thấp hơn vì kéo xuống bên trong.

Sau khi ba GPU được lập trình, INIT_Bchân được kéo đủ thấp để FPGA thứ tư hiểu INIT_Blà logic thấp, do đó ngăn FGPA thứ tư được lập trình với JTAG.


Ω

Hóa ra có các tùy chọn bitgen để xác định rằng INIT_Bpin được kéo lên thay vì kéo xuống sau khi lập trình.
Randomblue
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.