- PYNQ version & Board name & Tool Version
PYNQ Version: 3.0.1, Board Name: Xilinix Ultrascale+ ZCU 111 Development Board, Tool Version: Vivado 2020.2 - Full details of the error message you see, or a detailed description of the problem you experience.
Erorr Message in PYNQ :
RuntimeError Traceback (most recent call last)
Input In [11], in <cell line: 250>()
248 init_rd_plot()
249 init_det_plot()
→ 250 init_rd_range_slice_plot(v_0_bin)
251 init_rd_vel_slice_plot(r_bin)
252 update_plot()
Input In [11], in init_rd_range_slice_plot(v_bin)
146 global line, fig_rd_slice, line_cfar_ca, line_cfar_os
147 fig_rd_slice, ax_rd_slice = plt.subplots(figsize=(15, 8))
→ 148 rd_map = generate_range_doppler()
149 range_slice = rd_map[:, v_bin]
150 ax_rd_slice.set_xlabel(‘Range (m)’) # Set x-axis label
Input In [11], in generate_range_doppler()
78 def generate_range_doppler():
79 #start_time = time.time()
80 for doppler_bin in range(NUM_SEQS):
—> 81 read_buffer[doppler_bin*NUM_SYMBOLS : (doppler_bin+1)*NUM_SYMBOLS] = get_range_profile()
82 matrix = np.reshape(read_buffer, (NUM_SEQS, NUM_SYMBOLS)).T
84 if debug_doppler:
Input In [11], in get_range_profile()
54 dma_corr.recvchannel.start()
55 dma_corr.recvchannel.transfer(output_buffer)
—> 56 dma_corr.recvchannel.wait()
57 return output_buffer
File /usr/local/share/pynq-venv/lib/python3.10/site-packages/pynq/lib/dma.py:169, in _SDMAChannel.wait(self)
167 “”“Wait for the transfer to complete”“”
168 if not self.running:
→ 169 raise RuntimeError(“DMA channel not started”)
170 while True:
171 error = self._mmio.read(self._offset + 4)
RuntimeError: DMA channel not started
I have observed that my DMA is not able to acces the PL DDR memory because of the address mismatch. And i’m not sure how to solve this issue.
The address that im allocating in the address editor has an offset of 0x05 making the address 0x05_0000_0000 but while generating a buffer it is generating at a diifferent region i.e 0x77d6e000. So this address mismatch is causing the ddr to raise runtime error.
Do you have an solution for this.
output_buffer = allocate((NUM_SYMBOLS,), dtype=np.uint64, target=radar.ddr4_0)
print(hex(output_buffer.physical_address))
output: 0x77d62000