def __init__(self, platform, sys_clk_freq): self.rst = CSR() self.clock_domains.cd_sys = ClockDomain() self.clock_domains.cd_sys4x = ClockDomain(reset_less=True) self.clock_domains.cd_sys4x_dqs = ClockDomain(reset_less=True) self.clock_domains.cd_clk200 = ClockDomain() self.clock_domains.cd_clk100 = ClockDomain() self.clock_domains.cd_eth = ClockDomain() # # # # Clk/Rst clk50 = platform.request("clk50") platform.add_period_constraint(clk50, 1e9 / 50e6) # Delay software reset by 10us to ensure write has been acked on PCIe. rst_delay = WaitTimer(int(10e-6 * sys_clk_freq)) self.submodules += rst_delay self.sync += If(self.rst.re, rst_delay.wait.eq(1)) # PLL self.submodules.pll = pll = S7PLL(speedgrade=-1) self.comb += pll.reset.eq(rst_delay.done) pll.register_clkin(clk50, 50e6) pll.create_clkout(self.cd_sys, sys_clk_freq) pll.create_clkout(self.cd_sys4x, 4 * sys_clk_freq) pll.create_clkout(self.cd_sys4x_dqs, 4 * sys_clk_freq, phase=90) pll.create_clkout(self.cd_clk200, 200e6) pll.create_clkout(self.cd_clk100, 100e6) pll.create_clkout(self.cd_eth, 50e6) self.submodules.idelayctrl = S7IDELAYCTRL(self.cd_clk200)
def __init__(self, platform, sys_clk_freq): self.clock_domains.cd_sys = ClockDomain() self.clock_domains.cd_sys4x = ClockDomain(reset_less=True) self.clock_domains.cd_idelay = ClockDomain() # # # self.submodules.pll = pll = S7PLL(speedgrade=-1) self.comb += pll.reset.eq(~platform.request("cpu_reset")) pll.register_clkin(platform.request("clk100"), 100e6) pll.create_clkout(self.cd_sys, sys_clk_freq) pll.create_clkout(self.cd_sys4x, 4 * sys_clk_freq) pll.create_clkout(self.cd_idelay, 200e6) self.submodules.idelayctrl = S7IDELAYCTRL(self.cd_idelay)
def __init__(self, platform, sys_clk_freq, iodelay_clk_freq): self.clock_domains.cd_sys = ClockDomain() self.clock_domains.cd_sys2x = ClockDomain(reset_less=True) self.clock_domains.cd_sys8x = ClockDomain(reset_less=True) self.clock_domains.cd_idelay = ClockDomain() # # # self.submodules.pll = pll = S7PLL(speedgrade=-1) pll.register_clkin(platform.request("clk100"), 100e6) pll.create_clkout(self.cd_sys, sys_clk_freq) pll.create_clkout(self.cd_sys2x, 2 * sys_clk_freq) pll.create_clkout(self.cd_sys8x, 8 * sys_clk_freq) pll.create_clkout(self.cd_idelay, iodelay_clk_freq) self.submodules.idelayctrl = S7IDELAYCTRL(self.cd_idelay)
def __init__(self, platform, sys_clk_freq): self.clock_domains.cd_sys = ClockDomain() self.clock_domains.cd_sys4x = ClockDomain(reset_less=True) self.clock_domains.cd_sys4x_dqs = ClockDomain(reset_less=True) self.clock_domains.cd_clk200 = ClockDomain() self.clock_domains.cd_eth = ClockDomain() # # # pll_clkin = Signal() self.specials += Instance("BUFG", i_I=platform.request("clk100"), o_O=pll_clkin) self.submodules.pll = pll = S7PLL(speedgrade=-1) self.comb += pll.reset.eq(~platform.request("cpu_reset")) pll.register_clkin(pll_clkin, 100e6) pll.create_clkout(self.cd_sys, sys_clk_freq) pll.create_clkout(self.cd_sys4x, 4 * sys_clk_freq) pll.create_clkout(self.cd_sys4x_dqs, 4 * sys_clk_freq, phase=90) pll.create_clkout(self.cd_clk200, 200e6) self.submodules.idelayctrl = S7IDELAYCTRL(self.cd_clk200)
def __init__(self, platform, f_sys, f_sample, add_rst=[]): ''' The `cursor UP` button resets the sys clock domain! add_rst = additional reset signals for sys_clk must be active high and will be synchronized with sys_clk ''' self.clock_domains.cd_sys = ClockDomain() self.clock_domains.cd_clk200 = ClockDomain() # # # # self.cd_sys.clk.attr.add('keep') self.submodules.pll = pll = S7MMCM(speedgrade=-1) pll.register_clkin(ClockSignal('sys'), 100e6) self.comb += [pll.reset.eq(ResetSignal('sys'))] pll.create_clkout(self.cd_clk200, 200e6) self.submodules.idelayctrl = S7IDELAYCTRL(self.cd_clk200) # ------------------------------------------ # OR together all RESET sources for cd_sys # ------------------------------------------ # Zynq PS reset signal (bitfile load) add_rst.append(ResetSignal("ps7")) rst_sum = Signal() self.sync += rst_sum.eq(reduce(or_, add_rst)) self.specials += AsyncResetSynchronizer(self.cd_sys, rst_sum) # !!! sys_clk is provided by FCLK_CLK0 from PS7 !!! self.comb += ClockSignal("sys").eq(ClockSignal("ps7")) # Flashy Led blinker for sample_clk bl = LedBlinker( f_sample / 8, Cat([platform.request('user_led', i) for i in range(8)])) self.submodules.sample_blink = ClockDomainsRenamer("sample")(bl)
def __init__(self, platform, sys_clk_freq): self.submodules.pll = pll = S7PLL(speedgrade=-1) self.comb += pll.reset.eq(~platform.request("cpu_reset")) pll.register_clkin(platform.request("clk100"), 100e6) self.clock_domains.cd_sys = ClockDomain() pll.create_clkout(self.cd_sys, sys_clk_freq) # Etherbone -------------------------------------------------------------------------------- self.clock_domains.cd_eth = ClockDomain() pll.create_clkout(self.cd_eth, 25e6) self.comb += platform.request("eth_ref_clk").eq(self.cd_eth.clk) # DDRPHY ----------------------------------------------------------------------------------- self.clock_domains.cd_sys4x = ClockDomain(reset_less=True) self.clock_domains.cd_sys4x_dqs = ClockDomain(reset_less=True) pll.create_clkout(self.cd_sys4x, 4 * sys_clk_freq) pll.create_clkout(self.cd_sys4x_dqs, 4 * sys_clk_freq, phase=90) self.clock_domains.cd_clk200 = ClockDomain() pll.create_clkout(self.cd_clk200, 200e6) self.submodules.idelayctrl = S7IDELAYCTRL(self.cd_clk200)