targets: sync with litex-boards
This commit is contained in:
parent
aba8fc5c94
commit
8889821c54
|
@ -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 ------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue