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)
commitcce6b8687bd03f11d65cdd13730a3ac5e9eb34ef
tree95edf8f73f96bdc35d5be56b3c04610f5db68cae
parent6fd7cbad0d6c6da0b0327a68aed48ca3fc4b236b
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