Board: Pynq-Z1
Image: v3.0.1
We are working on bringing a pynq system up to see if this is something worth pursuing and have a few questions -
- On an AXI transaction, for the
BRESP
field we had designed in logic that if a transaction is invalid (for instance, writing to an invalid register), theBRESP
field would send back an error code. As best as we can tell, this is not handled by the python side, crashes and requires a reboot. Holding theBRESP
field at ‘OKAY’ (b’00) ‘works’ (in a sense - it doesn’t crash). Is it possible to set these bits to other values? Following is the message that occurs when the crash occurs:
8<--- cut here ---
Unhandled fault: external abort on non-linefetch (0x1818) at 0xb6707000
pgd = d8b72a69
[b6707000] *pgd=0a375831, *pte=43c00743, *ppte=43c00c33
While not vital in this, we would like to use the HDL in other designs (it’s fine if the response is ignored, but the crashes are problematic).
-
I have noticed that if the pynq-z1 board is booted, and left idle it will randomly hang (no response via Jupyter or via terminal); maybe once or twice a day. No firmware images are loaded or programs running, outside the default pynq image. Found one unresolved thread related, is this a known/expected issue or a known way to mitigate it?
-
After loading an image -
Help on Overlay in module pynq.overlay:
<pynq.overlay.Overlay object>
Default documentation for overlay bitstream.bit. The following
attributes are available on this overlay:
IP Blocks
----------
GPIO : pynq.lib.axigpio.AxiGPIO
mymodule : pynq.overlay.DefaultIP
processing_system7_0 : pynq.overlay.DefaultIP
Hierarchies
-----------
mymodule : pynq.overlay.DefaultHierarchy
Interrupts
----------
None
GPIO Outputs
------------
None
Memories
------------
PSDDR : Memory
In the above, you can see that the created module (mymodule) exists both as an IP block and a Hierarchy. If I just use the ‘standard’ method of mymod = ol.mymodule
, that returns the Hierarchy block, not the IP block. There may be a way to direct which type should be returned that we can’t find.
3.a) The hierarchy is mentioned with an example at Overlay Tutorial — Python productivity for Zynq (Pynq) but is tough to follow - the example is more about the DMA. Are there any other guides/explanations on what a hierarchy is that are recommended. The example seems to be doing the same thing (writing to a memory address), but it’s unclear to us what the difference between an ip block and a hierarchy fundamentally is.
3.b) One method for forcing the IP block to return was:
ol._ip_map._description['hierarchies'].pop('mymodule')
But as pointed out, is a hack (and is accessing in ways that couldn’t have been intended). Our experience is that it generally works, not quite reliably; is there a recommended way to get around this? Or, is it better to tie the DocumentedHierarchy to usable functions with the checkhierarchy
method (copied from v3.0.0 of the documentation):
@staticmethod
def checkhierarchy(description):
if 'multiply_dma' in description['ip'] \
and 'multiply' in description['ip']:
return True
return False
Thanks in advance for your time.