I ran into a problem on the JTAG boundary scan and after hours of googling and probing with my oscilloscope, I finally came across a solution.

Firstly I should say that if you are having a JTAG problem with this board, make sure that your DIP switch settings are right. There are two DIP switches (SW11 and SW4) that should be set correctly for your particular JTAG setup. If you are using a USB cable plugged into the slot labelled “JTAG” on the faceplate of the ZC706, you should use the settings 00000 for SW11 and 01 for SW4. If you are using a Platform USB programmer connected to J3, you need to use 00000 for SW11 and 10 for SW4.

So I was going through the getting started guide until it came to downloading and running the BIST, when I get this error:

C:\zc706_bist\ready_for_download>xmd -tcl download_bit.tcl system.bit
Xilinx Microprocessor Debugger (XMD) Engine
Xilinx EDK 14.5 Build EDK_P.58f
Copyright (c) 1995-2012 Xilinx, Inc.  All rights reserved.
Executing user script : download_bit.tcl
Error:No devices detected while scanning the JTAG chain
Error Executing User Script : download_bit.tcl
Error :: ERROR: Connection to Board Failed

Failed to Scan JTAG Chain
Unknown Error

C:\zc706_bist\ready_for_download>xmd -tcl download_elf.tcl bist_app.elf
Xilinx Microprocessor Debugger (XMD) Engine
Xilinx EDK 14.5 Build EDK_P.58f
Copyright (c) 1995-2012 Xilinx, Inc.  All rights reserved.
Executing user script : download_elf.tcl
Error:No devices detected while scanning the JTAG chain
Error Executing User Script : download_elf.tcl
Error :: ERROR: Failed to Scan JTAG Chain
Unknown Error

So I try doing a boundary scan from iMPACT and that fails too. I get this error message:

"*********************************************"
"Downloading Bitstream onto the target board"
"*********************************************"
impact -batch etc/download.cmd
Release 14.5 - iMPACT P.58f (nt64)
Copyright (c) 1995-2012 Xilinx, Inc.  All rights reserved.
Preference Table
Name                 Setting
StartupClock         Auto_Correction
AutoSignature        False
KeepSVF              False
ConcurrentMode       False
UseHighz             False
ConfigOnFailure      Stop
UserLevel            Novice
MessageLevel         Detailed
svfUseTime           false
SpiByteSwap          Auto_Correction
AutoInfer            false
SvfPlayDisplayComments false
INFO:iMPACT - Connecting to TCF agent...
INFO:iMPACT - Digilent Plugin: Plugin Version: 2.4.4
INFO:iMPACT - Digilent Plugin: found 1 device(s).
INFO:iMPACT - Digilent Plugin: opening device: "JtagSmt2", SN:210251841232
INFO:iMPACT - Digilent Plugin: User Name: JtagSmt2
INFO:iMPACT - Digilent Plugin: Product Name: Digilent JTAG-SMT2
INFO:iMPACT - Digilent Plugin: Serial Number: 210251841232
INFO:iMPACT - Digilent Plugin: Product ID: 31000154
INFO:iMPACT - Digilent Plugin: Firmware Version: 0105
INFO:iMPACT - Digilent Plugin: JTAG Port Number: 0
INFO:iMPACT - Digilent Plugin: JTAG Clock Frequency: 10000000 Hz
Identifying chain contents...'0': : Manufacturer's ID = Xilinx xc7z045, Version : 2
INFO:iMPACT:1777 -
Reading C:/Xilinx/14.5/ISE_DS/ISE/zynq/data/xc7z045.bsd...
----------------------------------------------------------------------
----------------------------------------------------------------------
'1': : Manufacturer's ID = Unknown
INFO:iMPACT - Using CseAdapterBSDevice
INFO:iMPACT:501 - '1': Added Device xc7z045 successfully.
----------------------------------------------------------------------
----------------------------------------------------------------------
'2': : Manufacturer's ID = Unknown
INFO:iMPACT:501 - '1': Added Device UNKNOWN successfully.
----------------------------------------------------------------------
----------------------------------------------------------------------
'3': : Manufacturer's ID = Unknown
INFO:iMPACT:501 - '1': Added Device UNKNOWN successfully.
----------------------------------------------------------------------
----------------------------------------------------------------------
'4': : Manufacturer's ID = Unknown
INFO:iMPACT:501 - '1': Added Device UNKNOWN successfully.
----------------------------------------------------------------------
----------------------------------------------------------------------
.
.
.
.
----------------------------------------------------------------------
----------------------------------------------------------------------
'28': : Manufacturer's ID = Unknown
INFO:iMPACT:501 - '1': Added Device UNKNOWN successfully.
----------------------------------------------------------------------
----------------------------------------------------------------------
'29': : Manufacturer's ID = Unknown
INFO:iMPACT:501 - '1': Added Device UNKNOWN successfully.
----------------------------------------------------------------------
----------------------------------------------------------------------
'30': : Manufacturer's ID = Unknown
INFO:iMPACT:501 - '1': Added Device UNKNOWN successfully.
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
Elapsed time =      4 sec.
Elapsed time =      0 sec.
INFO:iMPACT:501 - '1': Added Device UNKNOWN successfully.
INFO:iMPACT - iMPACT quit the Identify Chain because it detects there are
at least 30 'UNKNOWN' type devices on the chain.
Please check the hardware settings and retry!
ERROR:iMPACT:589 - No devices on chain, can't assign file
make: *** [download] Error 1
Done!

When you google this type of error message, you find a lot of unresolved forum posts, I guess because it must happen for many kinds of reasons like a broken JTAG chain, wrong jumper/DIP switch configurations, bad cables, there was even a guy saying that he traced it down to noise on a power supply. Anyway, so I got out my oscilloscope and traced through the JTAG chain and it seemed completely fine, everything looking like it was supposed to. I checked all my jumpers and DIP switches, everything seemed fine (except jumper J53 which was not in the “default” position, according to the user guide, but in the photo
you find in the getting started guide, it would seem that the user guide is wrong).

Eventually I started trying everything I could, I tried all the SW11 configurations, I tried my Platform USB II programmer, and then I tried using the reset buttons – and that’s when I got it to work! So I had to press the POR (Power on Reset) pushbutton after I powered up the board in order to get the JTAG boundary scan to work. So the problem would seem to be that the Zynq isn’t being reset correctly by the reset circuitry on power-up. Maybe this is a problem with my board, or maybe it’s a problem with all the ZC706 boards. I’ll look into a bit later – for now, I’m just glad that I got the BIST running and all is working fine.

So if you’re having JTAG problems with the ZC706, try pressing the POR pushbutton just after powering up the board. Let me know if you have this problem with your board.

Jeff is passionate about FPGAs, SoCs and high-performance computing, and has been writing the FPGA Developer blog since 2008. As the owner of Opsero, he leads a small team of FPGA all-stars providing start-ups and tech companies with FPGA design capability that they can call on when needed.

Facebook Twitter LinkedIn