diff options
author | Marcelina KoĆcielnicka <mwk@0x04.net> | 2020-07-24 17:01:26 +0200 |
---|---|---|
committer | Marcelina KoĆcielnicka <mwk@0x04.net> | 2020-07-30 20:22:03 +0200 |
commit | 4a05cad7f8a6ee57292e5360eb06305e13fc308b (patch) | |
tree | 4db43827dc141b4f916f3fd20d595b63da9d1ffc /kernel | |
parent | af6623ebb86e796dfe4c122f03890e0788399af0 (diff) | |
download | yosys-4a05cad7f8a6ee57292e5360eb06305e13fc308b.tar.gz yosys-4a05cad7f8a6ee57292e5360eb06305e13fc308b.tar.bz2 yosys-4a05cad7f8a6ee57292e5360eb06305e13fc308b.zip |
async2sync: Support all FF types.
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/ff.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/kernel/ff.h b/kernel/ff.h index 8dc83eb49..0aecbaa2a 100644 --- a/kernel/ff.h +++ b/kernel/ff.h @@ -323,6 +323,52 @@ struct FfData { return res; } + void unmap_ce(Module *module) { + if (!has_en) + return; + log_assert(has_clk); + if (has_srst && ce_over_srst) + unmap_srst(module); + + if (!is_fine) { + if (pol_en) + sig_d = module->Mux(NEW_ID, sig_q, sig_d, sig_en); + else + sig_d = module->Mux(NEW_ID, sig_d, sig_q, sig_en); + } else { + if (pol_en) + sig_d = module->MuxGate(NEW_ID, sig_q, sig_d, sig_en); + else + sig_d = module->MuxGate(NEW_ID, sig_d, sig_q, sig_en); + } + has_en = false; + } + + void unmap_srst(Module *module) { + if (!has_srst) + return; + if (has_en && !ce_over_srst) + unmap_ce(module); + + if (!is_fine) { + if (pol_srst) + sig_d = module->Mux(NEW_ID, sig_d, val_srst, sig_srst); + else + sig_d = module->Mux(NEW_ID, val_srst, sig_d, sig_srst); + } else { + if (pol_srst) + sig_d = module->MuxGate(NEW_ID, sig_d, val_srst[0], sig_srst); + else + sig_d = module->MuxGate(NEW_ID, val_srst[0], sig_d, sig_srst); + } + has_srst = false; + } + + void unmap_ce_srst(Module *module) { + unmap_ce(module); + unmap_srst(module); + } + Cell *emit(Module *module, IdString name) { if (!width) return nullptr; |