lib.cdc: avoid interior clock domains in ResetSynchronizer.
authorwhitequark <cz@m-labs.hk>
Fri, 28 Jun 2019 07:34:10 +0000 (07:34 +0000)
committerwhitequark <cz@m-labs.hk>
Fri, 28 Jun 2019 07:34:10 +0000 (07:34 +0000)
commit0336c38770d1fba5b9c81ad42211b0c390dbefc4
tree3130c2f1bcc4b58d144aa5ec2a7e5fdd9bf425f6
parent9b2dc53b855302e0620666d0e44bb8ef694d6009
lib.cdc: avoid interior clock domains in ResetSynchronizer.

Such clock domains will "leak" into the enclosing scope, which is
generally undesirable. Also, this is instructive for a platform
overriding the behavior, since it provides guidance on how to
correctly instantiate platform-specific flops.

I've considered also doing this for MultiReg(), but it is very
challenging in presence of non-reset-less CDC FFs, since Yosys'
$dffsr primitive has separate set and clear inputs, and reshuffling
the reset value for those results in quite a bit of additional logic.

(That said, it might have to be done anyway, precisely because
letting Yosys generate this additional logic might prove too much
for the toolchain to cope with, and again, platform-independent
code should provide guidance to platform-specific code.)
nmigen/lib/cdc.py