soc/cores/clock/iCE40PLL: add SB_PLL40_PAD support.

This commit is contained in:
Florent Kermarrec 2020-03-09 19:03:05 +01:00
parent 38d7f8a6e6
commit 2a91deadcb
1 changed files with 8 additions and 3 deletions

View File

@ -416,7 +416,9 @@ class iCE40PLL(Module):
clko_freq_range = ( 16e6, 275e9)
vco_freq_range = (533e6, 1066e6)
def __init__(self):
def __init__(self, primitive="SB_PLL40_CORE"):
assert primitive in ["SB_PLL40_CORE", "SB_PLL40_PAD"]
self.primitive = primitive
self.reset = Signal()
self.locked = Signal()
self.clkin_freq = None
@ -486,15 +488,18 @@ class iCE40PLL(Module):
p_FEEDBACK_PATH = "SIMPLE",
p_FILTER_RANGE = filter_range,
i_RESETB = ~self.reset,
i_REFERENCECLK = self.clkin,
o_LOCK = self.locked,
)
if self.primitive == "SB_PLL40_CORE":
self.params.update(i_REFERENCECLK=self.clkin)
if self.primitive == "SB_PLL40_PAD":
self.params.update(i_PACKAGEPIN=self.clkin)
for n, (clk, f, p, m) in sorted(self.clkouts.items()):
self.params["p_DIVR"] = config["divr"]
self.params["p_DIVF"] = config["divf"]
self.params["p_DIVQ"] = config["divq"]
self.params["o_PLLOUTGLOBAL"] = clk
self.specials += Instance("SB_PLL40_CORE", **self.params)
self.specials += Instance(self.primitive, **self.params)
# Lattice / ECP5 -----------------------------------------------------------------------------------