"-9L": (5e6, 256e6),
}[speedgrade]
self.clko_freq_range = {
- "-6" : (0, 472.5e6),
- "-7" : (0, 450e6),
- "-8" : (0, 402.5e6),
- "-8L": (0, 362e6),
- "-9L": (0, 265e6),
+ "-6" : (0e6, 472.5e6),
+ "-7" : (0e6, 450e6),
+ "-8" : (0e6, 402.5e6),
+ "-8L": (0e6, 362e6),
+ "-9L": (0e6, 265e6),
+ }[speedgrade]
+
+# Altera / CycloneV --------------------------------------------------------------------------------
+
+class CycloneVPLL(AlteraClocking):
+ nclkouts_max = 5
+ n_div_range = (1, 512+1)
+ m_div_range = (1, 512+1)
+ c_div_range = (1, 512+1)
+ clkin_pfd_freq_range = (5e6, 325e6) # FIXME: use
+ clkfin_pfd_freq_range = (50e6, 160e6) # FIXME: use
+ def __init__(self, speedgrade="-C6"):
+ self.logger = logging.getLogger("CycloneIVPLL")
+ self.logger.info("Creating CycloneIVPLL, {}.".format(colorer("speedgrade {}".format(speedgrade))))
+ AlteraClocking.__init__(self)
+ self.clkin_freq_range = {
+ "-C6" : (5e6, 670e6),
+ "-C7" : (5e6, 622e6),
+ "-I7" : (5e6, 622e6),
+ "-C8" : (5e6, 622e6),
+ "-A7" : (5e6, 500e6),
+ }[speedgrade]
+ self.vco_freq_range = {
+ "-C6" : (5e6, 1600e6),
+ "-C7" : (5e6, 1600e6),
+ "-I7" : (5e6, 1600e6),
+ "-C8" : (5e6, 1300e6),
+ "-A7" : (5e6, 1300e6),
+ }[speedgrade]
+ self.clko_freq_range = {
+ "-C6" : (0e6, 550e6),
+ "-C7" : (0e6, 550e6),
+ "-I7" : (0e6, 550e6),
+ "-C8" : (0e6, 460e6),
+ "-A7" : (0e6, 460e6),
}[speedgrade]
for i in range(pll.nclkouts_max):
pll.create_clkout(ClockDomain("clkout{}".format(i)), 100e6)
pll.compute_config()
+
+ # Altera / CycloneV
+ def test_cyclonevpll(self):
+ pll = CycloneVPLL()
+ pll.register_clkin(Signal(), 50e6)
+ for i in range(pll.nclkouts_max):
+ pll.create_clkout(ClockDomain("clkout{}".format(i)), 100e6)
+ pll.compute_config()