from operator import or_
from migen import (Signal, FSM, If, Display, Finish, NextValue, NextState,
- Cat, Record, ClockSignal, wrap, ResetInserter)
+ Cat, Record, ClockSignal, wrap, ResetInserter,
+ ClockDomain, ResetSignal)
from litex.build.generic_platform import Pins, Subsignal
from litex.build.sim import SimPlatform
from litedram.common import PHYPadsCombiner, PhySettings
from litedram.phy.dfi import Interface as DFIInterface
from litex.soc.cores.spi import SPIMaster
+from litex.soc.cores.bitbang import SPIMaster as SPIMasterBitbang
from litex.soc.cores.pwm import PWM
#from litex.soc.cores.bitbang import I2CMaster
from litex.soc.cores import uart
self.bus.add_slave(name=name, slave=sram_wb, region=ics_region)
# CRG -----------------------------------------------------------------
- self.submodules.crg = CRG(platform.request("sys_clk"),
+ # power-on-reset still based on PLL, leave sys_rst HI until
+ # PLL stabilises
+ pll_clk = self.cpu.pllclk_o # PLL into cpu
+ self.submodules.crg = CRG(pll_clk,
platform.request("sys_rst"))
if hasattr(self.cpu, "clk_sel"):
# PLL/Clock Select
clksel_i = platform.request("sys_clksel_i")
- pll18_o = platform.request("sys_pll_18_o")
- pll_lck_o = platform.request("sys_pll_lck_o")
+ pll_test_o = platform.request("sys_pll_testout_o")
+ pll_vco_o = platform.request("sys_pll_vco_o")
self.comb += self.cpu.clk_sel.eq(clksel_i) # allow clock src select
- self.comb += pll18_o.eq(self.cpu.pll_18_o) # "test feed" from PLL
- self.comb += pll_lck_o.eq(self.cpu.pll_lck_o) # PLL lock flag
+ self.comb += pll_test_o.eq(self.cpu.pll_test_o) # "test" from PLL
+ self.comb += pll_vco_o.eq(self.cpu.pll_vco_o) # PLL lock flag
+ cd_cpu = ClockDomain()
+ cd_pll = ClockDomain("pll", reset_less=True)
+ self.clock_domains.cd_pll = cd_pll
+ sys_clk = platform.request("sys_pllclk") # incoming clock
+ self.comb += self.cpu.pll_24_i.eq(sys_clk)
+ self.comb += self.cd_pll.clk.eq(self.cpu.pllclk_o) # PLL into cpu
+ #self.comb += self.cd_cpu.rst.eq(ResetSignal())
+ #self.comb += self.cpu.cpu_clk.eq(cd_cpu.clk)
#ram_init = []
# SPI Master
print ("cpupadkeys", self.cpu.cpupads.keys())
- if hasattr(self.cpu.cpupads, 'mspi0'):
- sd_clk_freq = 8e6
+ if 'mspi0' in self.cpu.cpupads:
pads = self.cpu.cpupads['mspi0']
- spimaster = SPIMaster(pads, 8, self.sys_clk_freq, sd_clk_freq)
- spimaster.add_clk_divider()
+ if False: # XXX needs to be greater than 1-bit wide, use bitbang
+ sd_clk_freq = 8e6
+ spimaster = SPIMaster(pads, 4, self.sys_clk_freq, sd_clk_freq)
+ spimaster.add_clk_divider()
+ else:
+ spimaster = SPIMasterBitbang(pads)
setattr(self.submodules, 'spimaster', spimaster)
self.add_csr('spimaster')
- if hasattr(self.cpu.cpupads, 'mspi1'):
+ if 'mspi1' in self.cpu.cpupads:
# SPI SDCard (1 wide)
spi_clk_freq = 400e3
pads = self.cpu.cpupads['mspi1']
- spisdcard = SPIMaster(pads, 8, self.sys_clk_freq, spi_clk_freq)
+ spisdcard = SPIMaster(pads, 2, self.sys_clk_freq, spi_clk_freq)
spisdcard.add_clk_divider()
setattr(self.submodules, 'spisdcard', spisdcard)
self.add_csr('spisdcard')