build.plat: align pipeline with Fragment.prepare().
authorwhitequark <whitequark@whitequark.org>
Sat, 1 Feb 2020 03:24:26 +0000 (03:24 +0000)
committerwhitequark <whitequark@whitequark.org>
Sat, 1 Feb 2020 03:26:04 +0000 (03:26 +0000)
commitd634aa9237f26edb2698126f3eec76fd469d1386
tree95edf8f73f96bdc35d5be56b3c04610f5db68cae
parenta61c1834ea6d26b6761ac6ccb1c0db8f01e2b94b
build.plat: align pipeline with Fragment.prepare().

Since commit 7257c20a, platform code calls create_missing_domains()
before _propagate_domains_up() (as a part of prepare() call). Since
commit a7be3b48, without a platform, create_missing_domains() is
calle after _propagate_domains_up(); because of that, it adds
the missing domain to the fragment. When platform code then calls
prepare() again, this causes an assertion failure.

The true intent behind the platform code being written this way is
that it *overrides* a part of prepare()'s mechanism. Because it was
not changed when prepare() was modified in 7257c20a, the override,
which happened to work by coincidence, stopped working. This is
now fixed by inlining the relevant parts of Fragment.prepare() into
Platform.prepare().

This is not a great solution, but given the amount of breakage this
causes (no platform-using code works), it is acceptable for now.

Fixes #307.
nmigen/build/plat.py
nmigen/hdl/ir.py