improvements to nmigen and yosys are needed, including CXXSim (bug #364), a
new backend for yosys that allows a 20 to 100x performance increase
in simulation speed.
also needed is a way for yosys (or nmigen) to optimise out constants and unused signals... *without* requiring that the entire design be flattened.
currently, coriolis2 has had to be significantly modified to cope with dangling (unused) connections. the design is too big to flatten so it is not appropriate to call yosys flatten.
in a large OO design, module parameters can be Const or unused. when the design RTL is flattened this is not a problem.
however without flattening yosys will *not* pass the Const parameter into the module and perform constant optimisation *in the module*, and it will *not* likewise remove unused outgoing signals *from* that module that are not externally connected to its parent.
when such non-optimised non-flattened designs are passed to coriolis2 it causes problems because of dangling (unconnected) signals.
two potential ways in which this can be fixed: in yosys, or on nmigen.
see bug #458 some augmentations are needed to Value and UserValue in order to support alternative behaviour but keeping the standard nmigen API.
cxxsim being used in gate-level simulation, some strange segfaulting
going on, being sorted out by whitequark. example: