build/lattice/icestorm/add_period_constraint: improve

- store period in ns.
- pass clocks to_build_pre_pack and do the convertion to MHz there.
- improve error message.
This commit is contained in:
Florent Kermarrec 2019-12-31 10:25:51 +01:00
parent 6b91e8827c
commit fe4eaf5860
1 changed files with 7 additions and 10 deletions

View File

@ -29,10 +29,10 @@ def _build_pcf(named_sc, named_pc):
# Timing Constraints (in pre_pack file) ------------------------------------------------------------
def _build_pre_pack(vns, freq_cstrs):
def _build_pre_pack(vns, clocks):
r = ""
for sig in freq_cstrs:
r += """ctx.addClock("{}", {})\n""".format(vns.get_name(sig), freq_cstrs[sig])
for clk, period in clocks.items():
r += """ctx.addClock("{}", {})\n""".format(vns.get_name(clk), 1e3/period)
return r
# Yosys/Nextpnr Helpers/Templates ------------------------------------------------------------------
@ -193,12 +193,9 @@ class LatticeIceStormToolchain:
return v_output.ns
def add_period_constraint(self, platform, clk, period):
clk_ns = 1e3/period
clk.attr.add("keep")
if clk in self.clocks:
if clk_ns != self.clocks[clk]:
raise ValueError(
"A period constraint already exists"
"(wanted: {:.2f}ns, got {:.2f}ns)".format(
clk_ns, self.clocks[clk]))
self.clocks[clk] = clk_ns
if period != self.clocks[clk]:
raise ValueError("Clock already constrained to {:.2f}ns, new constraint to {:.2f}ns"
.format(self.clocks[clk], period))
self.clocks[clk] = period