targets: sync with litex-boards

This commit is contained in:
Florent Kermarrec 2020-01-09 21:12:00 +01:00
parent aba8fc5c94
commit 8889821c54
2 changed files with 30 additions and 20 deletions

View File

@ -6,8 +6,9 @@
import argparse import argparse
from migen import * 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.soc_sdram import *
from litex.soc.integration.builder import * from litex.soc.integration.builder import *
@ -21,41 +22,50 @@ class _CRG(Module):
def __init__(self, platform): def __init__(self, platform):
self.clock_domains.cd_sys = ClockDomain() self.clock_domains.cd_sys = ClockDomain()
self.clock_domains.cd_sys_ps = ClockDomain() self.clock_domains.cd_sys_ps = ClockDomain()
self.clock_domains.cd_por = ClockDomain(reset_less=True)
# # # # # #
# Power on reset # Clk / Rst
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
clk50 = platform.request("clk50") 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 += \ self.specials += \
Instance("ALTPLL", Instance("ALTPLL",
p_BANDWIDTH_TYPE = "AUTO", p_BANDWIDTH_TYPE = "AUTO",
p_CLK0_DIVIDE_BY = 1, p_CLK0_DIVIDE_BY = 1,
p_CLK0_DUTY_CYCLE = 50, p_CLK0_DUTY_CYCLE = 50,
p_CLK0_MULTIPLY_BY = 1, 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_COMPENSATE_CLOCK = "CLK0",
p_INCLK0_INPUT_FREQUENCY = 20000, p_INCLK0_INPUT_FREQUENCY = 20000,
p_OPERATION_MODE = "ZERO_DELAY_BUFFER", p_OPERATION_MODE = "NORMAL",
i_INCLK = clk50, i_INCLK = clk50,
o_CLK = self.cd_sys_ps.clk, o_CLK = pll_clk_out,
i_ARESET = ~rst_n, i_ARESET = 0,
i_CLKENA = 0x3f, i_CLKENA = 0x3f,
i_EXTCLKENA = 0xf, i_EXTCLKENA = 0xf,
i_FBIN = 1, i_FBIN = 1,
i_PFDENA = 1, i_PFDENA = 1,
i_PLLENA = 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) self.comb += platform.request("sdram_clock").eq(self.cd_sys_ps.clk)
# BaseSoC ------------------------------------------------------------------------------------------ # BaseSoC ------------------------------------------------------------------------------------------

View File

@ -37,19 +37,19 @@ class _CRG(Module):
self.stop = Signal() self.stop = Signal()
# clk / rst # Clk / Rst
clk100 = platform.request("clk100") clk100 = platform.request("clk100")
rst_n = platform.request("rst_n") rst_n = platform.request("rst_n")
platform.add_period_constraint(clk100, 1e9/100e6) platform.add_period_constraint(clk100, 1e9/100e6)
# power on reset # Power on reset
por_count = Signal(16, reset=2**16-1) por_count = Signal(16, reset=2**16-1)
por_done = Signal() por_done = Signal()
self.comb += self.cd_por.clk.eq(ClockSignal()) self.comb += self.cd_por.clk.eq(ClockSignal())
self.comb += por_done.eq(por_count == 0) self.comb += por_done.eq(por_count == 0)
self.sync.por += If(~por_done, por_count.eq(por_count - 1)) self.sync.por += If(~por_done, por_count.eq(por_count - 1))
# pll # PLL
self.submodules.pll = pll = ECP5PLL() self.submodules.pll = pll = ECP5PLL()
pll.register_clkin(clk100, 100e6) pll.register_clkin(clk100, 100e6)
pll.create_clkout(self.cd_sys2x_i, 2*sys_clk_freq) pll.create_clkout(self.cd_sys2x_i, 2*sys_clk_freq)