Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

efinix: fix reset #616

Merged
merged 2 commits into from
Nov 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions litex_boards/platforms/efinix_t8f81_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@

class Platform(EfinixPlatform):
default_clk_name = "clk33"
default_clk_freq = 33.333e6
default_clk_period = 1e9/33.333e6

def __init__(self, toolchain="efinity"):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@ def rgmii_ethernet_qse_ios(con, n=""):

class Platform(EfinixPlatform):
default_clk_name = "clk25"
default_clk_freq = 25e6
default_clk_period = 1e9/50e6

def __init__(self, toolchain="efinity"):
Expand Down
1 change: 1 addition & 0 deletions litex_boards/platforms/efinix_trion_t120_bga576_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ def usb_pmod_io(pmod):

class Platform(EfinixPlatform):
default_clk_name = "clk40"
default_clk_freq = 40e6
default_clk_period = 1e9/40e6

def __init__(self, toolchain="efinity"):
Expand Down
1 change: 1 addition & 0 deletions litex_boards/platforms/efinix_trion_t20_bga256_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@

class Platform(EfinixPlatform):
default_clk_name = "clk50"
default_clk_freq = 50e6
default_clk_period = 1e9/50e6

def __init__(self, toolchain="efinity"):
Expand Down
1 change: 1 addition & 0 deletions litex_boards/platforms/efinix_trion_t20_mipi_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@

class Platform(EfinixPlatform):
default_clk_name = "clk50"
default_clk_freq = 50e6
default_clk_period = 1e9/50e6

def __init__(self, toolchain="efinity"):
Expand Down
1 change: 1 addition & 0 deletions litex_boards/platforms/efinix_xyloni_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@

class Platform(EfinixPlatform):
default_clk_name = "clk33"
default_clk_freq = 33.333e6
default_clk_period = 1e9/33.333e6

def __init__(self, toolchain="efinity"):
Expand Down
1 change: 1 addition & 0 deletions litex_boards/platforms/jungle_electronics_fireant.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@

class Platform(EfinixPlatform):
default_clk_name = "clk33"
default_clk_freq = 33.33e6
default_clk_period = 1e9/33.33e6

def __init__(self, toolchain="efinity"):
Expand Down
14 changes: 12 additions & 2 deletions litex_boards/targets/efinix_t8f81_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from migen.genlib.resetsync import AsyncResetSynchronizer

from litex.gen import *
from litex.gen.genlib.misc import WaitTimer

from litex_boards.platforms import efinix_t8f81_dev_kit

Expand All @@ -28,16 +29,25 @@ class _CRG(LiteXModule):
def __init__(self, platform, sys_clk_freq):
self.rst = Signal()
self.cd_sys = ClockDomain()
self.cd_rst = ClockDomain(reset_less=True)

# # #

clk33 = platform.request("clk33")
rst_n = platform.request("user_btn", 0)

self.comb += self.cd_rst.clk.eq(clk33)

# A pulse is necessary to do a reset.
self.rst_pulse = Signal()
self.reset_timer = reset_timer = ClockDomainsRenamer("rst")(WaitTimer(25e-6*platform.default_clk_freq))
self.comb += self.rst_pulse.eq(self.rst ^ reset_timer.done)
self.comb += reset_timer.wait.eq(self.rst)

# PLL.
self.pll = pll = TRIONPLL(platform)
self.comb += pll.reset.eq(~rst_n | self.rst)
pll.register_clkin(clk33, 33.333e6)
self.comb += pll.reset.eq(~rst_n | self.rst_pulse)
pll.register_clkin(clk33, platform.default_clk_freq)
pll.create_clkout(self.cd_sys, sys_clk_freq, with_reset=True)

# BaseSoC ------------------------------------------------------------------------------------------
Expand Down
16 changes: 13 additions & 3 deletions litex_boards/targets/efinix_ti375_c529_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from migen.genlib.resetsync import AsyncResetSynchronizer

from litex.gen import *
from litex.gen.genlib.misc import WaitTimer

from litex.build.io import DDROutput, SDROutput, SDRTristate
from litex.build.generic_platform import Subsignal, Pins, Misc, IOStandard
Expand Down Expand Up @@ -39,22 +40,31 @@

class _CRG(LiteXModule):
def __init__(self, platform, sys_clk_freq, cpu_clk_freq):
#self.rst = Signal()
self.rst = Signal()
self.cd_sys = ClockDomain()
self.cd_usb = ClockDomain()
self.cd_video = ClockDomain()
self.cd_cpu = ClockDomain()
self.cd_rst = ClockDomain(reset_less=True)

# # #

# Clk/Rst.
clk100 = platform.request("clk100")
rst_n = platform.request("user_btn", 0)

self.comb += self.cd_rst.clk.eq(clk100)

# A pulse is necessary to do a reset.
self.rst_pulse = Signal()
self.reset_timer = reset_timer = ClockDomainsRenamer("rst")(WaitTimer(25e-6*platform.default_clk_freq))
self.comb += self.rst_pulse.eq(self.rst ^ reset_timer.done)
self.comb += reset_timer.wait.eq(self.rst)

# PLL.
self.pll = pll = TITANIUMPLL(platform)
self.comb += pll.reset.eq(~rst_n)
pll.register_clkin(clk100, 100e6)
self.comb += pll.reset.eq(~rst_n | self.rst_pulse)
pll.register_clkin(clk100, platform.default_clk_freq)
# You can use CLKOUT0 only for clocks with a maximum frequency of 4x
# (integer) of the reference clock. If all your system clocks do not fall within
# this range, you should dedicate one unused clock for CLKOUT0.
Expand Down
14 changes: 12 additions & 2 deletions litex_boards/targets/efinix_titanium_ti60_f225_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from migen.genlib.resetsync import AsyncResetSynchronizer

from litex.gen import *
from litex.gen.genlib.misc import WaitTimer

from litex_boards.platforms import efinix_titanium_ti60_f225_dev_kit

Expand All @@ -31,16 +32,25 @@ def __init__(self, platform, sys_clk_freq):
self.cd_sys = ClockDomain()
self.cd_sys2x = ClockDomain()
self.cd_sys2x_ps = ClockDomain()
self.cd_rst = ClockDomain(reset_less=True)

# # #

clk25 = platform.request("clk25")
rst_n = platform.request("user_btn", 0)

self.comb += self.cd_rst.clk.eq(clk25)

# A pulse is necessary to do a reset.
self.rst_pulse = Signal()
self.reset_timer = reset_timer = ClockDomainsRenamer("rst")(WaitTimer(25e-6*platform.default_clk_freq))
self.comb += self.rst_pulse.eq(self.rst ^ reset_timer.done)
self.comb += reset_timer.wait.eq(self.rst)

# PLL
self.pll = pll = TITANIUMPLL(platform)
self.comb += pll.reset.eq(~rst_n | self.rst)
pll.register_clkin(clk25, 25e6)
self.comb += pll.reset.eq(~rst_n | self.rst_pulse)
pll.register_clkin(clk25, platform.default_clk_freq)
# You can use CLKOUT0 only for clocks with a maximum frequency of 4x
# (integer) of the reference clock. If all your system clocks do not fall within
# this range, you should dedicate one unused clock for CLKOUT0.
Expand Down
16 changes: 12 additions & 4 deletions litex_boards/targets/efinix_trion_t120_bga576_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from migen.genlib.resetsync import AsyncResetSynchronizer

from litex.gen import *
from litex.gen.genlib.misc import WaitTimer

from litex_boards.platforms import efinix_trion_t120_bga576_dev_kit

Expand All @@ -29,20 +30,27 @@

class _CRG(LiteXModule):
def __init__(self, platform, sys_clk_freq):
#self.rst = Signal()
self.rst = Signal()
self.cd_sys = ClockDomain()
self.cd_rst = ClockDomain(reset_less=True)

# # #

clk40 = platform.request("clk40")
rst_n = platform.request("user_btn", 0)

self.comb += self.cd_rst.clk.eq(clk40)

# A pulse is necessary to do a reset.
self.rst_pulse = Signal()
self.reset_timer = reset_timer = ClockDomainsRenamer("rst")(WaitTimer(25e-6*platform.default_clk_freq))
self.comb += self.rst_pulse.eq(self.rst ^ reset_timer.done)
self.comb += reset_timer.wait.eq(self.rst)

# PLL
self.pll = pll = TRIONPLL(platform)
#self.comb += pll.reset.eq(~rst_n | self.rst)
self.comb += pll.reset.eq(~rst_n)
pll.register_clkin(clk40, 40e6)
self.comb += pll.reset.eq(~rst_n | self.rst_pulse)
pll.register_clkin(clk40, platform.default_clk_freq)
pll.create_clkout(self.cd_sys, sys_clk_freq, with_reset=True, name="axi_clk")

# BaseSoC ------------------------------------------------------------------------------------------
Expand Down
9 changes: 6 additions & 3 deletions litex_boards/targets/efinix_trion_t20_bga256_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,23 +35,26 @@ def __init__(self, platform, sys_clk_freq):
self.rst = Signal()
self.cd_sys = ClockDomain()
self.cd_sys_ps = ClockDomain()
self.cd_rst = ClockDomain(reset_less=True)

# # #

# Clk/Rst.
clk50 = platform.request("clk50")
rst_n = platform.request("user_btn", 0)

self.comb += self.cd_rst.clk.eq(clk50)

# A pulse is necessary to do a reset.
self.rst_pulse = Signal()
reset_timer = WaitTimer(25e-6*sys_clk_freq)
self.reset_timer = reset_timer = ClockDomainsRenamer("rst")(WaitTimer(25e-6*platform.default_clk_freq))
self.comb += self.rst_pulse.eq(self.rst ^ reset_timer.done)
self.comb += reset_timer.wait.eq(self.rst)

# PLL.
self.pll = pll = TRIONPLL(platform)
self.comb += pll.reset.eq(~rst_n | self.rst_pulse)
pll.register_clkin(clk50, 50e6)
pll.register_clkin(clk50, platform.default_clk_freq)
pll.create_clkout(self.cd_sys, sys_clk_freq, with_reset=True)
pll.create_clkout(self.cd_sys_ps, sys_clk_freq, phase=180)

Expand All @@ -69,7 +72,7 @@ def __init__(self, sys_clk_freq=100e6, with_spi_flash=False, with_led_chaser=Tru

# SDR SDRAM --------------------------------------------------------------------------------
if not self.integrated_main_ram_size and sys_clk_freq <= 50e6 :
self.specials += ClkOutput(ClockSignal(self.cd_sys_ps), platform.request("sdram_clock"))
self.specials += ClkOutput(ClockSignal("sys_ps"), platform.request("sdram_clock"))

self.sdrphy = GENSDRPHY(platform.request("sdram"), sys_clk_freq)
self.add_sdram("sdram",
Expand Down
14 changes: 12 additions & 2 deletions litex_boards/targets/efinix_trion_t20_mipi_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from migen.genlib.resetsync import AsyncResetSynchronizer

from litex.gen import *
from litex.gen.genlib.misc import WaitTimer

from litex_boards.platforms import efinix_trion_t20_mipi_dev_kit

Expand All @@ -26,16 +27,25 @@ class _CRG(LiteXModule):
def __init__(self, platform, sys_clk_freq):
self.rst = Signal()
self.cd_sys = ClockDomain()
self.cd_rst = ClockDomain(reset_less=True)

# # #

clk50 = platform.request("clk50")
rst_n = platform.request("user_btn", 0)

self.comb += self.cd_rst.clk.eq(clk50)

# A pulse is necessary to do a reset.
self.rst_pulse = Signal()
self.reset_timer = reset_timer = ClockDomainsRenamer("rst")(WaitTimer(25e-6*platform.default_clk_freq))
self.comb += self.rst_pulse.eq(self.rst ^ reset_timer.done)
self.comb += reset_timer.wait.eq(self.rst)

# PLL
self.pll = pll = TRIONPLL(platform)
self.comb += pll.reset.eq(~rst_n | self.rst)
pll.register_clkin(clk50, 50e6)
self.comb += pll.reset.eq(~rst_n | self.rst_pulse)
pll.register_clkin(clk50, platform.default_clk_freq)
pll.create_clkout(self.cd_sys, sys_clk_freq, with_reset=True)

# BaseSoC ------------------------------------------------------------------------------------------
Expand Down
14 changes: 12 additions & 2 deletions litex_boards/targets/efinix_xyloni_dev_kit.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from migen.genlib.resetsync import AsyncResetSynchronizer

from litex.gen import *
from litex.gen.genlib.misc import WaitTimer

from litex_boards.platforms import efinix_xyloni_dev_kit

Expand All @@ -27,16 +28,25 @@ class _CRG(LiteXModule):
def __init__(self, platform, sys_clk_freq):
self.rst = Signal()
self.cd_sys = ClockDomain()
self.cd_rst = ClockDomain(reset_less=True)

# # #

clk33 = platform.request("clk33")
rst_n = platform.request("user_btn", 0)

self.comb += self.cd_rst.clk.eq(clk33)

# A pulse is necessary to do a reset.
self.rst_pulse = Signal()
self.reset_timer = reset_timer = ClockDomainsRenamer("rst")(WaitTimer(25e-6*platform.default_clk_freq))
self.comb += self.rst_pulse.eq(self.rst ^ reset_timer.done)
self.comb += reset_timer.wait.eq(self.rst)

# PLL.
self.pll = pll = TRIONPLL(platform)
self.comb += pll.reset.eq(~rst_n | self.rst)
pll.register_clkin(clk33, 33.333e6)
self.comb += pll.reset.eq(~rst_n | self.rst_pulse)
pll.register_clkin(clk33, platform.default_clk_freq)
pll.create_clkout(self.cd_sys, sys_clk_freq, with_reset=True)

# BaseSoC ------------------------------------------------------------------------------------------
Expand Down
14 changes: 12 additions & 2 deletions litex_boards/targets/jungle_electronics_fireant.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from migen.genlib.resetsync import AsyncResetSynchronizer

from litex.gen import *
from litex.gen.genlib.misc import WaitTimer

from litex_boards.platforms import jungle_electronics_fireant

Expand All @@ -31,16 +32,25 @@ class _CRG(LiteXModule):
def __init__(self, platform, sys_clk_freq):
self.rst = Signal()
self.cd_sys = ClockDomain()
self.cd_rst = ClockDomain(reset_less=True)

# # #

clk33 = platform.request("clk33")
rst_n = platform.request("user_btn", 0)

self.comb += self.cd_rst.clk.eq(clk33)

# A pulse is necessary to do a reset.
self.rst_pulse = Signal()
self.reset_timer = reset_timer = ClockDomainsRenamer("rst")(WaitTimer(25e-6*platform.default_clk_freq))
self.comb += self.rst_pulse.eq(self.rst ^ reset_timer.done)
self.comb += reset_timer.wait.eq(self.rst)

# PLL.
self.pll = pll = TRIONPLL(platform)
self.comb += pll.reset.eq(~rst_n | self.rst)
pll.register_clkin(clk33, 33.333e6)
self.comb += pll.reset.eq(~rst_n | self.rst_pulse)
pll.register_clkin(clk33, platform.default_clk_freq)
pll.create_clkout(self.cd_sys, sys_clk_freq, with_reset=True)

# Default peripherals
Expand Down