Skip to content
Snippets Groups Projects
pano_logic_g2.py 2.73 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env python3
    
    # This file is Copyright (c) 2020 Florent Kermarrec <florent@enjoy-digital.fr>
    
    # License: BSD
    
    
    from migen import *
    
    from migen.genlib.resetsync import AsyncResetSynchronizer
    
    from litex_boards.platforms import pano_logic_g2
    
    from litex.soc.cores.clock import *
    from litex.soc.integration.soc_core import *
    
    from litex.soc.integration.builder import *
    
    from litex.soc.cores.led import LedChaser
    
    # CRG ----------------------------------------------------------------------------------------------
    
    class _CRG(Module):
        def __init__(self, platform, clk_freq):
            self.clock_domains.cd_sys    = ClockDomain()
    
            # Take Ethernet PHY out of reset to enable clk125 (25MHz otherwise).
            gmii_rst_n = platform.request("gmii_rst_n")
            self.comb += gmii_rst_n.eq(1)
    
    
            self.submodules.pll = pll = S6PLL(speedgrade=-2)
            pll.register_clkin(platform.request("clk125"), 125e6)
            pll.create_clkout(self.cd_sys, clk_freq)
    
    # BaseSoC ------------------------------------------------------------------------------------------
    
        def __init__(self, revision, sys_clk_freq=int(50e6), **kwargs):
            platform = pano_logic_g2.Platform(revision=revision)
    
    
            # SoCCore ----------------------------------------------------------------------------------
            SoCCore.__init__(self, platform, clk_freq=sys_clk_freq, **kwargs)
    
    
            # CRG --------------------------------------------------------------------------------------
            self.submodules.crg = _CRG(platform, sys_clk_freq)
    
            # Leds -------------------------------------------------------------------------------------
            self.submodules.leds = LedChaser(
                pads         = Cat(*[platform.request("user_led", i) for i in range(3)]),
                sys_clk_freq = sys_clk_freq)
            self.add_csr("leds")
    
    
    # Build --------------------------------------------------------------------------------------------
    
    def main():
        parser = argparse.ArgumentParser(description="LiteX SoC on Pano Logic G2")
    
        parser.add_argument("--build",    action="store_true", help="Build bitstream")
        parser.add_argument("--load",     action="store_true", help="Load bitstream")
        parser.add_argument("--revision", default="c",         help="Board revision c (default) or b")
    
        builder_args(parser)
        soc_core_args(parser)
        args = parser.parse_args()
    
    
        soc = BaseSoC(revision=args.revision, **soc_core_argdict(args))
    
        builder = Builder(soc, **builder_argdict(args))
        builder.build(run=args.build)
    
        if args.load:
            prog = soc.platform.create_programmer()
    
            prog.load_bitstream(os.path.join(builder.gateware_dir, soc.build_name + ".bit"))
    
    
    if __name__ == "__main__":
        main()