Guidance on using VDMA interrupt

Hi,

I am working on a ISP design (Zynq Ultrascale+ SoC) .
I have multiple VDMA in my design in PL and I have connected their interrupt to Zynq PS
pl_ps_irq port. I am getting errors.

I am new to PYNQ and hope someone from the community can guide me on how to handle VDMA interrupts in PYNQ

Thanks

@bsi

It’s not clear from your message what kind of errors you’re getting, from either Vivado synthesis, implementation, or IPI validation.
As a guide, you’d add those ports to the block design individually (Create interface port in IPI) and tag them as interrupt type (xilinx.com:signal:interrupt_rtl). Then inside the block design, you’d concatenate them using xil_concat IP and the output goes to the Zynq PS pl_ps_irq port.

Thanks,
-Pat

Hi,
Thanks for your reply. I am not facing any issue with generating bit file generation.
It is when i start using pynq framework and accessing vdma, i get following error

ValueError Traceback (most recent call last)
in ()
2 dft = overlay.dft_subsyst.custom_dft
3 #vdma_csi2 = overlay.csi2_raw_subsyst.axi_vdma_0
----> 4 vdma_h0 = overlay.vdma_h0
5 vdma_h1 = overlay.vdma_h1
6 intc = overlay.axi_intc

/usr/local/lib/python3.6/dist-packages/pynq/overlay.py in getattr(self, key)
325 “”"
326 if self.is_loaded():
→ 327 return getattr(self._ip_map, key)
328 else:
329 raise RuntimeError(“Overlay not currently loaded”)

/usr/local/lib/python3.6/dist-packages/pynq/overlay.py in getattr(self, key)
583 elif key in self._description[‘ip’]:
584 ipdescription = self._description[‘ip’][key]
→ 585 driver = ipdescription’driver’
586 setattr(self, key, driver)
587 return driver

/usr/local/lib/python3.6/dist-packages/pynq/lib/video/dma.py in init(self, description, framecount)
590
591 “”"
→ 592 super().init(description)
593 self.framecount = framecount
594 self.readchannel = AxiVDMA.S2MMChannel(self, self.s2mm_introut)

/usr/local/lib/python3.6/dist-packages/pynq/overlay.py in init(self, description)
515 self._gpio = {}
516 for interrupt, details in self._interrupts.items():
→ 517 setattr(self, interrupt, Interrupt(details[‘fullpath’]))
518 for gpio, entry in self._gpio.items():
519 gpio_number = GPIO.get_gpio_pin(entry[‘index’])

/usr/local/lib/python3.6/dist-packages/pynq/interrupt.py in init(self, pinname)
96 self.number = PL.interrupt_pins[pinname][‘index’]
97 self.parent = weakref.ref(
—> 98 _InterruptController.get_controller(parentname))
99 self.event = asyncio.Event()
100 self.waiting = False

/usr/local/lib/python3.6/dist-packages/pynq/interrupt.py in get_controller(name)
157 if con.name == name:
158 return con
→ 159 ret = _InterruptController(name)
160 _InterruptController._controllers.append(ret)
161 return ret

/usr/local/lib/python3.6/dist-packages/pynq/interrupt.py in init(self, name)
189 if uiodev is None:
190 raise ValueError('Could not find UIO device for interrupt pin ’
→ 191 ‘for IRQ number {}’.format(number))
192 self.parent = UioController(uiodev)
193 self.number = 0

ValueError: Could not find UIO device for interrupt pin for IRQ number 0