Starting out as a documentation project with tiny steps and rather frequent updates, it's now moving towards:
- Getting real world (existing) designs to spin
- Augmenting the test benches with plenty of uncovered corner cases
- Not breaking stuff (unit tests for Jupyter notebooks, too)
Also, so far all has been 'virtual', i.e. running in the browser only. The next milestone is to get a complex CPU design running (still undecided which one it is going to be, but certainly one of the MaSoCist choices).
The hard part (which needed a lot of playing and revamping) is to support a rather large number of corner cases that have to do with conditional code:
if state == t_state.RESET:
a.next = 0xff
elif state == t_state.RUN:
a.next = c
a.next = 0xaa
This snippet is just supposed to assert a signal, decided upon a state condition, let aside the context for now (whether behind a flip flop or combinatorial logic)
In the silicon, this basically creates multiplexers. And it gets very interesting, when a case is omitted (like the 'else' clause), you might remember issues with combinatorial loops.
Hopefully with the recent release, I've gotten the corner cases right.
Here's where the testing comes in:
- Testing against a working reference
- Testing that the examples are correct
And this is where Python performs exceptional: it provides probably the most convenient ecosystem to test stuff. This is now also found in the [ Binder based virtual machine ].