Skip to content

ZCU208 tProcessor not executing programs – PMEM appears inaccessible (ZCU216 → ZCU208 port) #384

@AnnonymousDattatreya

Description

@AnnonymousDattatreya

Problem Summary

The tProcessor on ZCU208 never executes programs. The status register remains at 1 (running) indefinitely, regardless of what program is loaded. Even a single END instruction does not halt execution.

This issue occurs while porting an existing ZCU216 QICK design to ZCU208. The ZCU216 version functions correctly; the ZCU208 port does not.

Hardware

  • Board: ZCU208 (XCZU48DR)
  • Bitstream: zcu_208.bit (derived from ZCU216 QICK design)
  • PYNQ version: 3.0.1
  • QICK version: 0.2.380

Context: ZCU216 → ZCU208 Port

This design is a direct port of a working ZCU216 setup:

  • Same tProcessor IP
  • Same firmware structure
  • Same software flow

The expectation is functional equivalence, but on ZCU208 the tProcessor never fetches or executes instructions. This suggests a PMEM configuration or addressing mismatch specific to ZCU208, not a software logic error.

What I've Tried

  1. Writing to BRAM at 0xA0200000

    • Writes and reads back correctly
    • tProcessor does not execute from it
  2. DMA transfer with mem_mode=1

    • DMA completes successfully
    • Writes go to DMEM, not PMEM
  3. DMA transfer with mem_mode=0

    • DMA hangs / fails
  4. Native driver's configure()

    • tproc.configure(axi_bram_ctrl_0, axi_dma_tproc) runs
    • Programs still never execute
  5. Minimal END instruction test

    • Writing 0x3F000000_00000000 to word 0
    • tProcessor never halts

HWH Analysis Findings

The hardware wiring appears valid:

  • axi_bram_ctrl_0_bram.doutbaxis_tproc64x32_x8_0.pmem_do
  • axis_tproc64x32_x8_0.pmem_addrxlconcat_0axi_bram_ctrl_0_bram.addrb

However:

  • tProcessor parameter PMEM_N = 20

    • Expects 1M instructions (8 MB)
  • External BRAM provides:

    • 8192 words (64 KB)

This mismatch strongly suggests:

  • The tProcessor may still be configured to expect internal PMEM
  • Or PMEM address decoding is invalid on ZCU208

Test Code

from pynq import Overlay, MMIO

ol = Overlay("/path/to/zcu_208.bit")
tproc = ol.axis_tproc64x32_x8_0
bram = MMIO(0xA0200000, 65536)

# Write END instruction to BRAM word 0
bram.write(0, 0x00000000)  # Lower 32 bits
bram.write(4, 0x3F000000)  # Upper 32 bits (END opcode)

# Start tProcessor
tproc.write(0x04, 0)  # Stop
tproc.write(0x04, 1)  # Start

# Check status - always returns 1
print(tproc.read(0x04))  # Expected: 0 (stopped), Actual: 1 (running)

Questions

  1. Is the ZCU208 bitstream configured to use external BRAM for PMEM, or is the tProcessor still using internal PMEM?

  2. If PMEM is internal, how is it supposed to be loaded on ZCU208?

  3. Does ZCU208 require a different PMEM/DMA initialization sequence than ZCU216?

  4. Are there known ZCU208-specific firmware issues or constraints that affect tProcessor execution?

  5. Is PMEM_N=20 valid for this board, or does it need to be reduced to match external memory?

Environment Details

DMEM access: Working (single_read / single_write OK)
DMA to DMEM: Working (mem_mode=1)
BRAM writes: Working (persistent, readable)
tProcessor start: Starts but never stops

At this point, the behavior is consistent with the tProcessor never fetching valid instructions, despite correct register control and memory writes.

Any guidance on how PMEM is expected to be configured and loaded on ZCU208—especially when porting from ZCU216—would be very helpful.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions