diff options
author | David Shah <dave@ds0.me> | 2019-09-23 19:46:31 +0100 |
---|---|---|
committer | David Shah <dave@ds0.me> | 2019-09-23 19:46:31 +0100 |
commit | 30e3c8469bce80e06ba09fca1aa9211927006d34 (patch) | |
tree | 9283ca76c9c96c244b0ef009bcdc265c1e401c78 /ice40 | |
parent | 395db49b214014c8f26119dc3e2f46b76d13480a (diff) | |
download | nextpnr-30e3c8469bce80e06ba09fca1aa9211927006d34.tar.gz nextpnr-30e3c8469bce80e06ba09fca1aa9211927006d34.tar.bz2 nextpnr-30e3c8469bce80e06ba09fca1aa9211927006d34.zip |
ice40: Add support for PLL DELAY_ADJUSTMENT_MODE
Fixes #336
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'ice40')
-rw-r--r-- | ice40/pack.cc | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/ice40/pack.cc b/ice40/pack.cc index f5649e64..a1eba411 100644 --- a/ice40/pack.cc +++ b/ice40/pack.cc @@ -1266,7 +1266,21 @@ static void pack_special(Context *ctx) log_error("Invalid PLL output selection '%s'\n", param.second.as_string().c_str()); packed->params[pos_map_name.at(param.first)] = pos_map_val.at(param.second.as_string()); } - + const std::map<IdString, IdString> delmodes = { + {ctx->id("DELAY_ADJUSTMENT_MODE_FEEDBACK"), ctx->id("DELAY_ADJMODE_FB")}, + {ctx->id("DELAY_ADJUSTMENT_MODE_RELATIVE"), ctx->id("DELAY_ADJMODE_REL")}, + }; + for (auto delmode : delmodes) { + if (ci->params.count(delmode.first)) { + std::string value = str_or_default(ci->params, delmode.first, ""); + if (value == "DYNAMIC") + packed->params[delmode.second] = 1; + else if (value == "FIXED") + packed->params[delmode.second] = 0; + else + log_error("Invalid PLL %s selection '%s'\n", delmode.first.c_str(ctx), value.c_str()); + } + } auto feedback_path = packed->params[ctx->id("FEEDBACK_PATH")].is_string ? packed->params[ctx->id("FEEDBACK_PATH")].as_string() : std::to_string(packed->params[ctx->id("FEEDBACK_PATH")].as_int64()); |