Guidance on using VDMA interrupt


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



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 ( 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 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/ 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/ 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/ in init(self, description, framecount)
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/ 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/ 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/ in get_controller(name)
157 if == name:
158 return con
–> 159 ret = _InterruptController(name)
160 _InterruptController._controllers.append(ret)
161 return ret

/usr/local/lib/python3.6/dist-packages/pynq/ 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