XC7Z020-2CLG400C Troubleshooting Guide (Xilinx Zynq-7000)

Having issues with the XC7Z020-2CLG400C? As a senior hardware engineer with over 15 years of experience bringing up complex systems, I've seen my share of frustrating bugs. The Xilinx Zynq-7000 series, while incredibly powerful, has its own set of common pitfalls. This guide is designed to get you past the most frequent problems hardware engineers encounter, providing proven, step-by-step fixes based on datasheet recommendations and extensive field experience.

XC7Z020-2CLG400C Zynq-7000 electronic component

XC7Z020-2CLG400C Quick Reference

Before diving into troubleshooting, it's essential to have the core specifications at your fingertips. The XC7Z020-2CLG400C is a System-on-Chip (SoC) that integrates a dual-core ARM Cortex-A9 based Processing System (PS) with Xilinx 28nm Programmable Logic (PL). This unique architecture allows for software-driven control and hardware-accelerated performance, making it ideal for applications like embedded vision, industrial automation, software-defined radio (SDR), and advanced driver-assistance systems (ADAS). The tight integration presents unique debug challenges, as issues can originate in the power delivery, clocking, software, or hardware fabric.

Parameter Value
Product Category System on Chip (SoC)
Processing System (PS) Dual-core ARM Cortex-A9 MPCore™
Programmable Logic (PL) Cells 85K
Package CLG400 (400-pin Chip Scale Package, Lidless)
Speed Grade -2 (Mid-performance grade)
Operating Temperature 0°C to 85°C (Commercial Grade, Junction)
Core Voltage (VCCINT) 1.0V nominal

Problem #1: Boot Failure and JTAG Inaccessibility

Symptom: This is the classic "first board bring-up" nightmare. The board receives power, LEDs may or may not light up, but the system is unresponsive. The Zynq device does not boot from the selected media (QSPI, NAND, SD Card), and attempting to connect via JTAG in Vivado or Vitis results in an error like "No devices detected" or "JTAG chain break."

Root Cause: This issue almost always points to fundamental hardware requirements not being met. The Zynq SoC is a complex device with strict power-up, clocking, and configuration requirements. The most common culprits are:
1. Incorrect Power Sequencing: The Zynq-7000 datasheet (DS187/DS190) specifies a required power-on sequence. VCCINT, VCCPINT, and VCCAUX must ramp before the VCCO rails. Failure to adhere to this can put the device into an unknown state and prevent the internal power-on-reset (POR) circuit from functioning correctly.
2. Incorrect Boot Mode Strapping: The boot source is selected by the voltage levels on specific MIO (Multiplexed I/O) pins sampled during the boot ROM execution. If these pins have incorrect or floating pull-up/pull-down resistors, the device will attempt to boot from the wrong source or default to a secure fallback mode, appearing dead.
3. Clocking Issues: The Processing System requires a stable input clock (PS_CLK). If this clock is missing, has excessive jitter, or is at the wrong frequency, the processor will not start.
4. JTAG Signal Integrity: The JTAG interface is sensitive to noise and incorrect termination. Long, unterminated traces or a noisy ground can prevent the JTAG debugger from communicating with the device.

Fix: Approach this systematically. Do not assume anything.
1. Verify All Power Rails: Use a high-quality oscilloscope to probe every single power rail for the Zynq device (VCCINT, VCCAUX, VCCPINT, VCCO_DDR, VCCO_MIO, etc.). Check not only the final DC voltage but also the ramp time and ripple under load. Compare these measurements directly against the specifications in the datasheet. A rail that is slightly out of spec or noisy can cause intermittent and maddening failures.
2. Validate Power-On Reset (POR): The PS_POR_B pin must be held low until all power rails are stable, then transition cleanly high. A noisy or slow-rising reset signal can be a problem. Verify this signal with an oscilloscope.
3. Confirm Boot Mode Pins: Consult the Zynq-7000 Technical Reference Manual (UG585), specifically the "Boot and Configuration" chapter. Identify the MIO pins used for boot mode selection (typically MIO[8:2]). Measure the voltage on each of these pins *during the power-on sequence*. Ensure they match the required levels for your intended boot mode (e.g., SD Card, QSPI, JTAG). A common mistake is having pull resistors that are too weak or strong, resulting in an incorrect logic level.
4. Check the PS_CLK: Probe the main input clock pin. Verify its frequency (e.g., 33.333 MHz is common), stability, and signal integrity. The clock must be clean and meet the jitter specifications.
5. Debug the JTAG Chain: If power, reset, and clock are good, focus on JTAG. First, simplify the chain. Disconnect other devices if possible. In Vivado Hardware Manager, try reducing the JTAG clock (TCK) frequency to its lowest setting (e.g., 125 kHz). This can overcome signal integrity issues. Verify that TCK and TMS have pull-up resistors and TDI has a pull-down resistor as recommended in Xilinx user guides (UG470).

Problem #2: DDR3 Memory Interface Instability

Symptom: The system boots successfully, perhaps even loading an operating system like Linux, but it is unstable. You experience random kernel panics, application crashes, or data corruption. Running a memory test (e.g., memtester in Linux or a bare-metal test) reveals failures, but often not at the same address every time.

Root Cause: The DDR3 interface on the Zynq-7000 is a high-speed parallel bus that is extremely sensitive to physical implementation details. Over 90% of DDR issues trace back to hardware layout or incorrect configuration.
1. PCB Layout Violations: This is the number one cause. The data (DQ), data strobe (DQS), address, control, and clock lines must be meticulously routed. Issues include mismatched trace lengths (skew), impedance discontinuities, excessive vias, and crosstalk from neighboring signals.
2. Power Delivery Network (PDN) Weakness: The DDR memory and the Zynq's memory controller are power-hungry, especially during high-throughput operations. A poorly designed PDN can lead to voltage droops (transient dips in the supply voltage) that corrupt data. The VREF signal, which provides the switching threshold reference, is particularly sensitive to noise.
3. Incorrect Timing Configuration: The Zynq Processing System IP core in Vivado has a complex configuration wizard for the DDR controller. The settings for memory timings (CAS latency, tRCD, tRP, etc.) must precisely match the specifications of the DDR3 chip used on your board.

Fix: Debugging DDR is a process of elimination.
1. Start with Software Verification: Before blaming the hardware, exhaust software checks. Use the Vitis/SDK to create a simple "Hello World" bare-metal application. If that works, move to the standalone Memory Test application template. This test runs directly on the hardware without an OS, providing a clean environment to test the memory interface. If this fails, the problem is almost certainly hardware or Vivado configuration.
2. Scrutinize Vivado DDR Configuration: Re-open your Vivado project. Go into the Zynq Processing System 7 block configuration. Navigate to the DDR Configuration section. Do not trust the default settings. Get the datasheet for the exact DDR3 memory chip on your PCB. Manually verify every timing parameter, speed grade, and voltage setting. Xilinx often provides presets for common memory parts; see if yours is listed.
3. Hardware Analysis (The Hard Part): If software checks out, you must analyze the physical hardware. This is difficult without the right equipment.
- Signal Integrity: Using a high-bandwidth oscilloscope with active probes, perform "read" and "write" operations and look at the eye diagram on the DQS and DQ signals. This is the definitive test of signal integrity. Look for a wide, open eye. A closed eye indicates significant timing or noise issues.
- Power Integrity: Probe the DDR power rail (VDDR) and the Zynq's memory controller rails right at the BGA balls (using breakout vias if available). Run a memory-intensive task and look for voltage droops. Also, check the VREF pin; it should be a very clean DC voltage at exactly half of VDDR.
- Layout Review: If you have the board layout files, compare your routing against the strict guidelines in the Zynq-7000 TRM (UG585) and the PCB Design Guide (UG933). Check trace length matching reports from your layout tool. This is often a post-mortem analysis to fix in the next board revision.

Problem #3: AXI Interconnect Deadlocks and Performance Issues

Symptom: Your basic system is running, but your custom logic in the PL is not working as expected. Accessing a register in your custom IP from the ARM processor causes the system to hang. Alternatively, data transfers between the PS and PL are extremely slow or return corrupted data.

Root Cause: This class of problems stems from the interface between the software world (PS) and the hardware world (PL), which is bridged by the AXI protocol.
1. AXI Protocol Violation: Your custom VHDL or Verilog code for an AXI peripheral does not correctly implement the AXI4-Lite, AXI4-Stream, or AXI4 (full) protocol. A common error is mishandling the `valid`/`ready` handshake, causing a transaction to stall forever.
2. Clock Domain Crossing (CDC): The PS and PL often run on different, asynchronous clocks. Passing signals between these domains without proper synchronization is a recipe for disaster, leading to metastability and unpredictable behavior.
3. Incorrect Address Mapping: In the Vivado Address Editor, the memory-mapped address range assigned to your custom IP does not match the address the software is trying to access.
4. Reset Issues: The reset signal for your custom IP is not being handled correctly, leaving it in a perpetual reset state.

Fix: This requires in-system, on-hardware debugging.
1. Instrument Your Design: This is non-negotiable. Use the Vivado Logic Analyzer to instantiate an Integrated Logic Analyzer (ILA) core in your design. Connect the ILA to all the signals on the problematic AXI interface: `awaddr`, `awvalid`, `awready`, `wdata`, `wvalid`, `wready`, `bresp`, `bvalid`, `bready`, and the corresponding read channel signals.
2. Capture the Failure: Run your system and trigger the failing condition. The ILA will capture the AXI bus transactions leading up to the hang. Analyze the waveform. You will likely see a handshake failure, for example, the master asserts `AWVALID` and `WVALID`, but the slave never asserts `AWREADY` or `WREADY`, causing a deadlock.
3. Use AXI Protocol Checkers: To automate the detection of issues, instantiate an AXI Protocol Checker IP core from the Xilinx IP catalog onto your AXI bus. This block monitors transactions in real-time and will assert an error flag if it detects a protocol violation. You can connect this error flag to the ILA trigger.
4. Verify Clocking and Resets: In your block design, ensure you are using the `proc_sys_reset` IP to generate resets that are synchronous to your AXI clock domains. For crossing between clock domains, use a proper AXI Clock Converter or an AXI Stream Data FIFO, which are designed to handle CDC safely.
5. Double-Check the Address Editor: In the Vivado block design window, click the "Address Editor" tab. Verify that your custom IP has been assigned a master base address and a range. Ensure this address matches the pointer or base address macro used in your C/C++ driver code. A mismatch will cause the processor to access invalid memory, leading to a prefetch abort or other exception.

Comprehensive Debug Checklist

When a Zynq-based system fails, a structured approach is critical. Work from the fundamental physics up to the application layer. The following table provides a checklist to guide your debug process.

Step Check Item Expected Result If Failed
1 Power Rails (VCCINT, VCCAUX, VCCOs, etc.) Stable, correct voltage levels with minimal ripple, meeting datasheet ramp times. Review power supply schematic, regulator datasheets, and PCB layout. Check for shorts or overloaded components.
2 Power-On Reset (PS_POR_B) Held low until power is stable, then a clean low-to-high transition. Check reset supervisor IC, capacitor timing, and any manual reset buttons.
3 Input Clock (PS_CLK) Stable, correct frequency (e.g., 33.333 MHz), clean sine or square wave. Check oscillator circuit, crystal, loading capacitors, and PCB trace integrity.
4 Boot Mode Pins (MIO[8:2]) Correct voltage levels at power-on corresponding to the desired boot mode in TRM (UG585). Verify pull-up/pull-down resistor values and connections. Check for solder bridges.
5 JTAG Chain Detection Vivado Hardware Manager detects the Zynq device. Lower JTAG clock speed. Check JTAG signal integrity, termination resistors, and physical connections.
6 DDR3 VREF Voltage A stable DC voltage at exactly VDDQ/2. Check the resistor divider circuit providing VREF. Add decoupling capacitors if noisy.
7 PL DONE Signal Goes high after the PL is successfully configured with a bitstream. Verify bitstream is valid. Check configuration mode pins (MIO). Check for power issues specific to PL VCCINT/VCCO banks.
8 UART Output (FSBL) First Stage Bootloader (FSBL) prints boot status messages to the console. Check UART connections (TX/RX swapped?), baud rate settings, and that the FSBL was correctly included in BOOT.BIN.

Remember that debugging is an iterative process. If a check fails, fix the issue and then start the entire checklist over again, as your fix may have affected another part of the system. For more complex issues involving custom logic, the Vivado Logic Analyzer (ILA) is your most powerful tool. Don't be afraid to use it liberally to gain visibility into the internal state of the FPGA fabric. If you are working with a variety of Zynq-based projects, it's beneficial to Browse Zynq-7000 Series to understand the capabilities and differences between parts like the Z-7010, Z-7020, and Z-7030, as they have different resource counts and package options that may influence your design choices and debug strategy.

Sourcing Genuine XC7Z020-2CLG40


Alan Carter

Alan Carter

Senior Hardware Engineer & Component Specialist

Alan has over 15 years of expertise in embedded systems design, FPGA architecture, and global semiconductor supply chains. He specializes in component cross-referencing, lifecycle management, and helping OEMs navigate supply shortages.