this is already going to be a *lot* of work, it would be good to tackle this as a team (everyone pick a file, perhaps coordinate on freenode #libreriscv) the constructor (__init__) does not need calling, it is a metaclass, it just needs to be added: class RecordTest(Elaboratable): wherever there is a def elaborate(....)
turns out that this has knock-on ramifications for the pipeline API. anything that's used in the incoming or outgoing data, that happens to be a module, *has* to be added as a submodule to its parent, otherwise warnings are thrown.
split out FPNumBase into FPNumBaseRecord which is not derived from Elaboratable, then passed that in as an argument to FPNumBase, FPNumIn/Out and others that needed some module work. Overflow - just made it no longer a module.