From e51e82d6a93d2d46ab11601769e736dd5029d70d Mon Sep 17 00:00:00 2001 From: Maciej Kurc Date: Fri, 28 Jan 2022 13:51:10 +0100 Subject: Added honoring OSCA output frequency tolerance during constraints generation Signed-off-by: Maciej Kurc --- nexus/pack.cc | 5 +++-- 1 file 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 div{id_DIVA, id_DIVB, id_DIVC, id_DIVD, id_DIVE, id_DIVF}; static const std::array output{id_CLKOP, id_CLKOS, id_CLKOS2, -- cgit v1.2.3