Open
Description
Would it make sense to have a way to capture simulation output in a python object, rather than having to use a vcd file and a separate reader program?
I'm building a physics simulator in nmigen and it would be super helpful when debugging to be able to plot a signal's trace (over eg 1000 timesteps) in matplotlib, within the same python session as the simulation.
Does this make sense as a workflow?
Is there already a way to do this?
Activity
whitequark commentedon Feb 28, 2020
Yes, it would make perfect sense as a workflow. Do you have any preferences regarding an exported API here?
mszep commentedon Feb 28, 2020
Thinking about the API, I'd have no preference -- whatever's most convenient on the nmigen side.
I guess for consistency we could have a context manager similar to
write_vcd
, so something likewhere
traces
would then contain the signal identifiers as keys, and perhaps a list of (timestamp, value) pairs as values?awygle commentedon Feb 28, 2020
I'd like us to make sure that this can be used incrementally - that is, run for N clock ticks and return the traces, do something with them, then run for M more clock ticks and return those traces. This ties into my dream of an interactive simulator.
Note that I don't think the context manager API is incompatible with the above, just making a use case known.
run_until
andstep
in place ofrun
should cover it.mszep commentedon Feb 29, 2020
Yes, that would be awesome! I was thinking of the possibility of making interactive simulations with ipywidgets, but if making it iterative will complicate the API or the implementation of the simple case, perhaps the simple case should take priority.
whitequark commentedon Feb 29, 2020
It wouldn't be hard to make it iterative; the VCD writer isn't, but only due to limitations of the VCD file format.
mszep commentedon Mar 7, 2020
FWIW, I ended up just passing a StringIO object to the
write_vcd
context manager and parsing the vcd text data into plottable form.Therefore, I think this issue can be deprioritized or closed altogether.
whitequark commentedon Mar 8, 2020
I think it would be an appropriate and highly useful feature to have: your workaround is... let's say suboptimal (no shade but it's pretty inefficient), and what @awygle wants here is also very reasonable.
sim: Add Observer
alanvgreen commentedon Aug 20, 2021
This looks like a typical application for an Observer. The Observer is registered with the simulator, which then notifies it of interesting events.
I made a draft PR as an RFC. I think this is general enough to:
Please send comments.
whitequark commentedon Feb 3, 2023
@alanvgreen #628 (comment)