diff options
author | Pepijn de Vos <pepijndevos@gmail.com> | 2019-11-08 17:15:12 +0100 |
---|---|---|
committer | Pepijn de Vos <pepijndevos@gmail.com> | 2019-11-08 17:15:12 +0100 |
commit | 5dd1e5e51e65d1efdd2f84c10a2b751e3228b982 (patch) | |
tree | 05cdf97d035fcafc75e72c2a7fd8d0aac6b6b2d7 /generic/cells.cc | |
parent | 7c362f292c0807b1e781922c79af94fd8b82477c (diff) | |
download | nextpnr-5dd1e5e51e65d1efdd2f84c10a2b751e3228b982.tar.gz nextpnr-5dd1e5e51e65d1efdd2f84c10a2b751e3228b982.tar.bz2 nextpnr-5dd1e5e51e65d1efdd2f84c10a2b751e3228b982.zip |
return FF_USED, formatting, correct INIT
Diffstat (limited to 'generic/cells.cc')
-rw-r--r-- | generic/cells.cc | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/generic/cells.cc b/generic/cells.cc index 3b754406..2b555f62 100644 --- a/generic/cells.cc +++ b/generic/cells.cc @@ -42,8 +42,9 @@ std::unique_ptr<CellInfo> create_generic_cell(Context *ctx, IdString type, std:: } new_cell->type = type; if (type == ctx->id("GENERIC_SLICE")) { - new_cell->params[ctx->id("K")] = std::to_string(ctx->args.K); + new_cell->params[ctx->id("K")] = ctx->args.K; new_cell->params[ctx->id("INIT")] = 0; + new_cell->params[ctx->id("FF_USED")] = 0; for (int i = 0; i < ctx->args.K; i++) add_port(ctx, new_cell.get(), "I[" + std::to_string(i) + "]", PORT_IN); @@ -80,16 +81,25 @@ void lut_to_lc(const Context *ctx, CellInfo *lut, CellInfo *lc, bool no_dff) } if (no_dff) { + lc->params[ctx->id("FF_USED")] = 0; replace_port(lut, ctx->id("Q"), lc, ctx->id("F")); } } void dff_to_lc(const Context *ctx, CellInfo *dff, CellInfo *lc, bool pass_thru_lut) { + lc->params[ctx->id("FF_USED")] = 1; replace_port(dff, ctx->id("CLK"), lc, ctx->id("CLK")); if (pass_thru_lut) { - lc->params[ctx->id("INIT")] = 0xAAAA; + // Fill LUT with alternating 10 + const int init_size = 1 << lc->params[ctx->id("K")].as_int64(); + std::string init; + init.reserve(init_size); + for(int i = 0; i < init_size; i+=2) + init.append("10"); + lc->params[ctx->id("INIT")] = Property::from_string(init); + replace_port(dff, ctx->id("D"), lc, ctx->id("I[0]")); } |