From 8889821c54050e9d97492f9029007da236aee333 Mon Sep 17 00:00:00 2001 From: Florent Kermarrec Date: Thu, 9 Jan 2020 21:12:00 +0100 Subject: [PATCH] targets: sync with litex-boards --- litex/boards/targets/de0nano.py | 44 ++++++++++++++++++------------ litex/boards/targets/versa_ecp5.py | 6 ++-- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/litex/boards/targets/de0nano.py b/litex/boards/targets/de0nano.py index f05fdf43f..553a2f2ab 100755 --- a/litex/boards/targets/de0nano.py +++ b/litex/boards/targets/de0nano.py @@ -6,8 +6,9 @@ import argparse from migen import * +from migen.genlib.resetsync import AsyncResetSynchronizer -from litex.boards.platforms import de0nano +from litex_boards.platforms import de0nano from litex.soc.integration.soc_sdram import * from litex.soc.integration.builder import * @@ -21,41 +22,50 @@ class _CRG(Module): def __init__(self, platform): self.clock_domains.cd_sys = ClockDomain() self.clock_domains.cd_sys_ps = ClockDomain() - self.clock_domains.cd_por = ClockDomain(reset_less=True) # # # - # Power on reset - rst_n = Signal() - self.sync.por += rst_n.eq(1) - self.comb += [ - self.cd_por.clk.eq(self.cd_sys.clk), - self.cd_sys.rst.eq(~rst_n), - self.cd_sys_ps.rst.eq(~rst_n) - ] - - # Sys Clk / SDRAM Clk + # Clk / Rst clk50 = platform.request("clk50") - self.comb += self.cd_sys.clk.eq(clk50) + platform.add_period_constraint(clk50, 1e9/50e6) + + # PLL + pll_locked = Signal() + pll_clk_out = Signal(6) self.specials += \ Instance("ALTPLL", p_BANDWIDTH_TYPE = "AUTO", p_CLK0_DIVIDE_BY = 1, p_CLK0_DUTY_CYCLE = 50, p_CLK0_MULTIPLY_BY = 1, - p_CLK0_PHASE_SHIFT = "-3000", + p_CLK0_PHASE_SHIFT = "0", + p_CLK1_DIVIDE_BY = 1, + p_CLK1_DUTY_CYCLE = 50, + p_CLK1_MULTIPLY_BY = 1, + p_CLK1_PHASE_SHIFT = "-10000", p_COMPENSATE_CLOCK = "CLK0", p_INCLK0_INPUT_FREQUENCY = 20000, - p_OPERATION_MODE = "ZERO_DELAY_BUFFER", + p_OPERATION_MODE = "NORMAL", i_INCLK = clk50, - o_CLK = self.cd_sys_ps.clk, - i_ARESET = ~rst_n, + o_CLK = pll_clk_out, + i_ARESET = 0, i_CLKENA = 0x3f, i_EXTCLKENA = 0xf, i_FBIN = 1, i_PFDENA = 1, i_PLLENA = 1, + o_LOCKED = pll_locked, ) + self.comb += [ + self.cd_sys.clk.eq(pll_clk_out[0]), + self.cd_sys_ps.clk.eq(pll_clk_out[1]), + ] + self.specials += [ + AsyncResetSynchronizer(self.cd_sys, ~pll_locked), + AsyncResetSynchronizer(self.cd_sys_ps, ~pll_locked) + ] + + # SDRAM clock self.comb += platform.request("sdram_clock").eq(self.cd_sys_ps.clk) # BaseSoC ------------------------------------------------------------------------------------------ diff --git a/litex/boards/targets/versa_ecp5.py b/litex/boards/targets/versa_ecp5.py index ceee2f442..87125712a 100755 --- a/litex/boards/targets/versa_ecp5.py +++ b/litex/boards/targets/versa_ecp5.py @@ -37,19 +37,19 @@ class _CRG(Module): self.stop = Signal() - # clk / rst + # Clk / Rst clk100 = platform.request("clk100") rst_n = platform.request("rst_n") platform.add_period_constraint(clk100, 1e9/100e6) - # power on reset + # Power on reset por_count = Signal(16, reset=2**16-1) por_done = Signal() self.comb += self.cd_por.clk.eq(ClockSignal()) self.comb += por_done.eq(por_count == 0) self.sync.por += If(~por_done, por_count.eq(por_count - 1)) - # pll + # PLL self.submodules.pll = pll = ECP5PLL() pll.register_clkin(clk100, 100e6) pll.create_clkout(self.cd_sys2x_i, 2*sys_clk_freq)