mirror of
https://github.com/enjoy-digital/litex.git
synced 2025-01-04 09:52:26 -05:00
8954041a93
Dynamically adjusting the phase of a feedback will cause it to unlock. The phase adjust ports are shared by all the outputs, so there is no technical way to prevent this. Allow the user to indicate that they will not adjust a clock when requesting an output by setting uses_dpa=False, and only consider those that the user has promised not to use.
130 lines
4.1 KiB
Python
130 lines
4.1 KiB
Python
#
|
|
# This file is part of LiteX.
|
|
#
|
|
# Copyright (c) 2020 Florent Kermarrec <florent@enjoy-digital.fr>
|
|
# SPDX-License-Identifier: BSD-2-Clause
|
|
|
|
import unittest
|
|
|
|
from migen import *
|
|
|
|
from litex.soc.cores.clock import *
|
|
|
|
|
|
class TestClock(unittest.TestCase):
|
|
# Xilinx / Spartan 6
|
|
def test_s6pll(self):
|
|
pll = S6PLL()
|
|
pll.register_clkin(Signal(), 100e6)
|
|
for i in range(pll.nclkouts_max):
|
|
pll.create_clkout(ClockDomain("clkout{}".format(i)), 200e6)
|
|
pll.compute_config()
|
|
|
|
def test_s6dcm(self):
|
|
dcm = S6DCM()
|
|
dcm.register_clkin(Signal(), 100e6)
|
|
for i in range(dcm.nclkouts_max):
|
|
dcm.create_clkout(ClockDomain("clkout{}".format(i)), 200e6)
|
|
dcm.compute_config()
|
|
|
|
# Xilinx / 7-Series
|
|
def test_s7pll(self):
|
|
pll = S7PLL()
|
|
pll.register_clkin(Signal(), 100e6)
|
|
for i in range(pll.nclkouts_max):
|
|
pll.create_clkout(ClockDomain("clkout{}".format(i)), 200e6)
|
|
pll.compute_config()
|
|
|
|
def test_s7mmcm(self):
|
|
mmcm = S7MMCM()
|
|
mmcm.register_clkin(Signal(), 100e6)
|
|
for i in range(mmcm.nclkouts_max):
|
|
mmcm.create_clkout(ClockDomain("clkout{}".format(i)), 200e6)
|
|
mmcm.compute_config()
|
|
|
|
# Xilinx / Ultrascale
|
|
def test_uspll(self):
|
|
pll = USPLL()
|
|
pll.register_clkin(Signal(), 100e6)
|
|
for i in range(pll.nclkouts_max):
|
|
pll.create_clkout(ClockDomain("clkout{}".format(i)), 200e6)
|
|
pll.compute_config()
|
|
|
|
def test_usmmcm(self):
|
|
mmcm = USMMCM()
|
|
mmcm.register_clkin(Signal(), 100e6)
|
|
for i in range(mmcm.nclkouts_max):
|
|
mmcm.create_clkout(ClockDomain("clkout{}".format(i)), 200e6)
|
|
mmcm.compute_config()
|
|
|
|
# Xilinx / Ultrascale Plus
|
|
def test_usppll(self):
|
|
pll = USPPLL()
|
|
pll.register_clkin(Signal(), 100e6)
|
|
for i in range(pll.nclkouts_max):
|
|
pll.create_clkout(ClockDomain("clkout{}".format(i)), 200e6)
|
|
pll.compute_config()
|
|
|
|
def test_uspmmcm(self):
|
|
mmcm = USPMMCM()
|
|
mmcm.register_clkin(Signal(), 100e6)
|
|
for i in range(mmcm.nclkouts_max):
|
|
mmcm.create_clkout(ClockDomain("clkout{}".format(i)), 200e6)
|
|
mmcm.compute_config()
|
|
|
|
# Intel / CycloneIV
|
|
def test_cycloneivpll(self):
|
|
pll = CycloneIVPLL()
|
|
pll.register_clkin(Signal(), 50e6)
|
|
for i in range(pll.nclkouts_max):
|
|
pll.create_clkout(ClockDomain("clkout{}".format(i)), 100e6)
|
|
pll.compute_config()
|
|
|
|
# Intel / 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()
|
|
|
|
# Intel / Cyclone10
|
|
def test_cyclone10pll(self):
|
|
pll = Cyclone10LPPLL()
|
|
pll.register_clkin(Signal(), 50e6)
|
|
for i in range(pll.nclkouts_max):
|
|
pll.create_clkout(ClockDomain("clkout{}".format(i)), 100e6)
|
|
pll.compute_config()
|
|
|
|
# Intel / Max10
|
|
def test_max10pll(self):
|
|
pll = Max10PLL()
|
|
pll.register_clkin(Signal(), 50e6)
|
|
for i in range(pll.nclkouts_max):
|
|
pll.create_clkout(ClockDomain("clkout{}".format(i)), 100e6)
|
|
pll.compute_config()
|
|
|
|
# Lattice / iCE40
|
|
def test_ice40pll(self):
|
|
pll = USMMCM()
|
|
pll.register_clkin(Signal(), 100e6)
|
|
for i in range(pll.nclkouts_max):
|
|
pll.create_clkout(ClockDomain("clkout{}".format(i)), 200e6)
|
|
pll.compute_config()
|
|
|
|
# Lattice / ECP5
|
|
def test_ecp5pll(self):
|
|
pll = ECP5PLL()
|
|
pll.register_clkin(Signal(), 100e6)
|
|
for i in range(pll.nclkouts_max):
|
|
pll.create_clkout(ClockDomain("clkout{}".format(i)), 200e6, uses_dpa=(i != 0))
|
|
pll.expose_dpa()
|
|
pll.compute_config()
|
|
|
|
# Lattice / NX
|
|
def test_nxpll(self):
|
|
pll = NXPLL()
|
|
pll.register_clkin(Signal(), 100e6)
|
|
for i in range(pll.nclkouts_max):
|
|
pll.create_clkout(ClockDomain("clkout{}".format(i)), 200e6)
|
|
pll.compute_config()
|