aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2022-01-28 19:19:33 +0000
committerGitHub <noreply@github.com>2022-01-28 19:19:33 +0000
commite069b3bc6ab4d504e84ef62086d2bb9e5144717b (patch)
tree73341b364324f477c9113cb930cd94d0618b837d
parent1301feb4ad607d5bc7341a1d7059c75077b0e8e9 (diff)
parente51e82d6a93d2d46ab11601769e736dd5029d70d (diff)
downloadnextpnr-e069b3bc6ab4d504e84ef62086d2bb9e5144717b.tar.gz
nextpnr-e069b3bc6ab4d504e84ef62086d2bb9e5144717b.tar.bz2
nextpnr-e069b3bc6ab4d504e84ef62086d2bb9e5144717b.zip
Merge pull request #900 from antmicro/nexus-osc-tolerance
Honor nexus OSCA frequency tolerance
-rw-r--r--nexus/pack.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/nexus/pack.cc b/nexus/pack.cc
index e89dc9c0..41f9d806 100644
--- a/nexus/pack.cc
+++ b/nexus/pack.cc
@@ -1987,8 +1987,9 @@ struct NexusPacker
copy_constraint(ci, id_CLKI, id_CLKO, 1);
} else if (ci->type == id_OSC_CORE) {
int div = int_or_default(ci->params, ctx->id("HF_CLK_DIV"), 128);
- set_period(ci, id_HFCLKOUT, delay_t((1.0e6 / 450) * (div + 1)));
- set_period(ci, id_LFCLKOUT, delay_t((1.0e3 / 10)));
+ const float tol = 1.15f; // OSCA has +/-15% frequency tolerance, assume the worst case.
+ set_period(ci, id_HFCLKOUT, delay_t(tol * (1.0e6 / 450) * (div + 1)));
+ set_period(ci, id_LFCLKOUT, delay_t(tol * (1.0e3 / 10)));
} else if (ci->type == id_PLL_CORE) {
static const std::array<IdString, 6> div{id_DIVA, id_DIVB, id_DIVC, id_DIVD, id_DIVE, id_DIVF};
static const std::array<IdString, 6> output{id_CLKOP, id_CLKOS, id_CLKOS2,