I just upgraded my ZCU111 from PYNQv2.7 to PYNQv3.0.1 and @baileyji and I are having issues getting an RTL driver to bind correctly. I am using a bitstream compiled with Vivado 2022.1.
In my overlay I have an RTL block axis2mm
inside a hierarchy capture
.
In PYNQ2.7 the axis2mm
RTL block shows up as an IP inside the hierarchy along with some HLS IP:
>> ol.capture.description['ip'].keys()
>> dict_keys(['filter_iq_0', 'filter_iq_1', 'axis2mm', 'filter_phase_0', 'filter_phase_1'])
The axis2mm
IP is automatically bound to pynq.DefaultIP
and we use the read write methods for MMIO.
In PYNQ3.0.1 it’s not showing up in ol.capture.description['ip']
it’s now in ['hierarchies']
>> ol.capture.description['hierarchies']
>> dict_keys(['axis2mm', 'switchboard'])
Note switchboard
is an intended sub-hierarchy and inside switchboard is an HLS IP which PYNQ correctly detects. The core issue appears to be ol.capture.description['hierarchies']['axis2mm']
has no IP.
>>ol.capture.description['hierarchies']['axis2mm']
>>{'ip': {},
'memories': {},
'hierarchies': {},
'interrupts': {},
'gpio': {},
'fullpath': 'capture/axis2mm',
'device': <pynq.pl_server.embedded_device.EmbeddedDevice at 0xffffb46a9d50>,
'driver': <function pynq.overlay.DocumentHierarchy(description)>,
'overlay': <pynq.overlay.Overlay at 0xffff987727a0>}
Is there a workaround or new way to bind a driver to an RTL IP in PYNQ3?
1 Like
stf
November 10, 2022, 7:36am
2
Hi Jenny,
Can you try running the following command on your ZCU111 and seeing if it helps your problem?
python3 -m pip install pynqmetadata --upgrade
After upgrading you might need to restart the board, or run the following in a jupyter notebook to clear any cached metadata:
from pynq import PL
PL.reset()
All the best,
Shane
Hi Shane,
Thanks for your response. I tried your command and it looks like pynqmetadata
is already up to date.
root@pynq:/# python3 -m pip install pynqmetadata --upgrade
Requirement already satisfied: pynqmetadata in /usr/local/share/pynq-venv/lib/python3.10/site-packages (0.3.1)
Requirement already satisfied: pydantic in /usr/local/share/pynq-venv/lib/python3.10/site-packages (from pynqmetadata) (1.9.1)
Requirement already satisfied: jsonschema>=3.2.0 in /usr/local/share/pynq-venv/lib/python3.10/site-packages (from pynqmetadata) (4.9.0)
Requirement already satisfied: attrs>=17.4.0 in /usr/lib/python3/dist-packages (from jsonschema>=3.2.0->pynqmetadata) (21.2.0)
Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /usr/local/share/pynq-venv/lib/python3.10/site-packages (from jsonschema>=3.2.0->pynqmetadata) (0.18.1)
Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/share/pynq-venv/lib/python3.10/site-packages (from pydantic->pynqmetadata) (4.3.0)
Power cycled the board just in case and no dice. I’m still seeing the RTL block as a hierarchy with no IP.
stf
November 11, 2022, 9:32am
4
Hiya Jenny,
Thanks for trying this. Would you mind sending me your HWH file so that I can take a look, either on here or DM’ing it to me?
No sure it will help but, would you mind also trying uninstalling and reinstalling pynqmetadata
on your ZCU111 from within a Jupyter terminal (or a root ssh terminal where you have sourced /etc/profile.d/pynq_venv.sh
)?
All the best,
Shane
Sure,
I’ve included my ZCU111 bitstream and hwh. No luck on uninstalling and reinstalling pynqmetadata
. Thanks for taking a look!
-Jenny
test.zip (6.1 MB)
1 Like
Thank you @stf for solving this! In case anyone has issues this worked for me:
In a jupyter notebook terminal run:
python3 -m pip uninstall pynqmetadata
python3 -m pip cache purge
python3 -m pip install pynqmetadata
Then either reboot the board or run:
from pynq import PL
PL.reset()
Now I see the RTL IP showing up as an IP inside the hierarchy as expected.
3 Likes