-
Notifications
You must be signed in to change notification settings - Fork 120
Description
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
-
Writing to BRAM at
0xA0200000- Writes and reads back correctly
- tProcessor does not execute from it
-
DMA transfer with
mem_mode=1- DMA completes successfully
- Writes go to DMEM, not PMEM
-
DMA transfer with
mem_mode=0- DMA hangs / fails
-
Native driver's
configure()tproc.configure(axi_bram_ctrl_0, axi_dma_tproc)runs- Programs still never execute
-
Minimal END instruction test
- Writing
0x3F000000_00000000to word 0 - tProcessor never halts
- Writing
HWH Analysis Findings
The hardware wiring appears valid:
axi_bram_ctrl_0_bram.doutb→axis_tproc64x32_x8_0.pmem_doaxis_tproc64x32_x8_0.pmem_addr→xlconcat_0→axi_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
-
Is the ZCU208 bitstream configured to use external BRAM for PMEM, or is the tProcessor still using internal PMEM?
-
If PMEM is internal, how is it supposed to be loaded on ZCU208?
-
Does ZCU208 require a different PMEM/DMA initialization sequence than ZCU216?
-
Are there known ZCU208-specific firmware issues or constraints that affect tProcessor execution?
-
Is
PMEM_N=20valid 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.