I re-made a IOP1(PMODA) for my zynq board(xc7z020clg484-1). and I can use the pod_io to read or write values, but when i tried it to generated PWM signal, the IO output nothing, and my servo didn’t work.
the address about iop1 is the same with pynq’s, and i straightly use the pmod_pwm lib to generate pwm, i think it’s not the wrong about the constraint, because i can get the 0/1 when i use pmod as io.
the file is what i use in the pynq system on my board: system719.tcl (158.1 KB) system719.bit (3.9 MB)
how can i figure it out?
ok, That’s the ipynb file I used. when i used it on my board, it failed to generate pwm.but it can work as the gpio input or output. servo_controller.ipynb (8.0 KB)
The problem is that the IOP can only be used for 1 purpose by default. The underlying structure has an IO switch which can determine whether to connect Pmod pins with I2C controllers, SPI controllers, GPIO, or PWM. In your notebook, you first used Pmod_PWM, which loads the PWM microblaze bin file; then you cannot directly load another bin file since the PWM bin will get overwritten. You can call reset() to reset the IOP first, or re-download the overlay before you write a new bin file, but in either case, you IOP will be loaded with a new bin hooking GPIO controllers with the Pmod pins.
sorry, maybe my description has problem. In my project, I just use the pwm bin only, and it cannot generate pwm. I use the gpio to test if my pin define is wrong. and the gpio output is right, so there’s no problem in pins define from my constraint. and there are no “IO = Pmod_IO(conrtoller.PMODA,0,“out”)” and “IO.write(1)” in my old project.