コード例 #1
0
def main():
    parser = argparse.ArgumentParser(
        description="LiteDRAM standalone core generator")
    builder_args(parser)
    parser.set_defaults(output_dir="build")
    parser.add_argument("config", help="YAML config file")
    parser.add_argument("--sim",
                        action='store_true',
                        help="Integrate SDRAMPHYModel in core for simulation")
    args = parser.parse_args()
    core_config = yaml.load(open(args.config).read(), Loader=yaml.Loader)

    # Convert YAML elements to Python/LiteX --------------------------------------------------------
    for k, v in core_config.items():
        replaces = {"False": False, "True": True, "None": None}
        for r in replaces.keys():
            if v == r:
                core_config[k] = replaces[r]
        if "clk_freq" in k:
            core_config[k] = float(core_config[k])
        if k == "sdram_module":
            core_config[k] = getattr(litedram_modules, core_config[k])
        if k == "sdram_phy":
            core_config[k] = getattr(litedram_phys, core_config[k])

    # Generate core --------------------------------------------------------------------------------
    if args.sim:
        platform = SimPlatform("", io=[])
    elif core_config["sdram_phy"] in [litedram_phys.ECP5DDRPHY]:
        platform = LatticePlatform(
            "LFE5UM5G-45F-8BG381C", io=[],
            toolchain="trellis")  # FIXME: allow other devices.
    elif core_config["sdram_phy"] in [
            litedram_phys.A7DDRPHY, litedram_phys.K7DDRPHY,
            litedram_phys.V7DDRPHY
    ]:
        platform = XilinxPlatform("", io=[], toolchain="vivado")
    elif core_config["sdram_phy"] in [
            litedram_phys.USDDRPHY, litedram_phys.USPDDRPHY
    ]:
        platform = XilinxPlatform("", io=[], toolchain="vivado")
    else:
        raise ValueError("Unsupported SDRAM PHY: {}".format(
            core_config["sdram_phy"]))

    builder_arguments = builder_argdict(args)
    builder_arguments["compile_gateware"] = False

    soc = LiteDRAMCore(platform, core_config, integrated_rom_size=0x6000)
    builder = Builder(soc, **builder_arguments)
    builder.build(build_name="litedram_core", regular_comb=False)

    if soc.cpu_type is not None:
        init_filename = "mem.init"
        os.system("mv {} {}".format(
            os.path.join(builder.gateware_dir, init_filename),
            os.path.join(builder.gateware_dir, "litedram_core.init"),
        ))
        replace_in_file(os.path.join(builder.gateware_dir, "litedram_core.v"),
                        init_filename, "litedram_core.init")
コード例 #2
0
def main():
    parser = argparse.ArgumentParser(
        description="LiteDRAM standalone core generator")
    parser.add_argument("config", help="YAML config file")
    args = parser.parse_args()
    core_config = yaml.load(open(args.config).read(), Loader=yaml.Loader)

    # Convert YAML elements to Python/LiteX --------------------------------------------------------
    for k, v in core_config.items():
        replaces = {"False": False, "True": True, "None": None}
        for r in replaces.keys():
            if v == r:
                core_config[k] = replaces[r]
        if "clk_freq" in k:
            core_config[k] = float(core_config[k])
        if k == "sdram_module":
            core_config[k] = getattr(litedram_modules, core_config[k])
        if k == "sdram_phy":
            core_config[k] = getattr(litedram_phys, core_config[k])

    # Generate core --------------------------------------------------------------------------------
    if core_config["sdram_phy"] in [litedram_phys.ECP5DDRPHY]:
        platform = LatticePlatform("", io=[], toolchain="diamond")
    elif core_config["sdram_phy"] in [
            litedram_phys.A7DDRPHY, litedram_phys.K7DDRPHY,
            litedram_phys.V7DDRPHY
    ]:
        platform = XilinxPlatform("", io=[], toolchain="vivado")
    else:
        raise ValueError("Unsupported SDRAM PHY: {}".format(
            core_config["sdram_phy"]))

    soc = LiteDRAMCore(platform,
                       core_config,
                       integrated_rom_size=0x6000,
                       integrated_sram_size=0x1000)
    builder = Builder(soc, output_dir="build", compile_gateware=False)
    vns = builder.build(build_name="litedram_core", regular_comb=False)

    # Prepare core (could be improved)
    def replace_in_file(filename, _from, _to):
        # Read in the file
        with open(filename, "r") as file:
            filedata = file.read()

        # Replace the target string
        filedata = filedata.replace(_from, _to)

        # Write the file out again
        with open(filename, 'w') as file:
            file.write(filedata)

    if soc.cpu_type is not None:
        init_filename = "mem.init"
        os.system(
            "mv build/gateware/{} build/gateware/litedram_core.init".format(
                init_filename))
        replace_in_file("build/gateware/litedram_core.v", init_filename,
                        "litedram_core.init")
コード例 #3
0
ファイル: generate.py プロジェクト: shenki/microwatt
def generate_one(t, mw_init):

    print("Generating target:", t)

    # Muck with directory path
    build_dir = make_new_dir(build_top_dir, t)
    t_dir = make_new_dir(gen_dir, t)

    # Grab config file
    cfile = os.path.join(gen_src_dir, t + ".yml")
    core_config = yaml.load(open(cfile).read(), Loader=yaml.Loader)

    ### TODO: Make most stuff below a function in litedram gen.py and
    ###       call it rather than duplicate it
    ###

    # Convert YAML elements to Python/LiteX
    for k, v in core_config.items():
        replaces = {"False": False, "True": True, "None": None}
        for r in replaces.keys():
            if v == r:
                core_config[k] = replaces[r]
        if "clk_freq" in k:
            core_config[k] = float(core_config[k])
        if k == "sdram_module":
            core_config[k] = getattr(litedram_modules, core_config[k])
        if k == "sdram_phy":
            core_config[k] = getattr(litedram_phys, core_config[k])

    # Override values for mw_init
    if mw_init:
        core_config["cpu"] = None
        core_config["csr_expose"] = True
        core_config["csr_align"] = 64

    # Generate core
    if core_config["sdram_phy"] in [litedram_phys.ECP5DDRPHY]:
        platform = LatticePlatform("LFE5UM5G-45F-8BG381C",
                                   io=[],
                                   toolchain="trellis")
    elif core_config["sdram_phy"] in [
            litedram_phys.A7DDRPHY, litedram_phys.K7DDRPHY,
            litedram_phys.V7DDRPHY
    ]:
        platform = XilinxPlatform("", io=[], toolchain="vivado")
    else:
        raise ValueError("Unsupported SDRAM PHY: {}".format(
            core_config["sdram_phy"]))

    soc = LiteDRAMCore(platform,
                       core_config,
                       integrated_rom_size=0x6000,
                       csr_data_width=32)

    # Build into build_dir
    builder = Builder(soc, output_dir=build_dir, compile_gateware=False)
    vns = builder.build(build_name="litedram_core", regular_comb=False)

    # Grab generated gatewar dir
    gw_dir = os.path.join(build_dir, "gateware")

    # Generate init-cpu.txt if any and generate init code if none
    cpu = core_config["cpu"]
    if mw_init:
        src_wrap_file = os.path.join(gen_src_dir, "wrapper-mw-init.vhdl")
        src_init_file = build_init_code(build_dir)
    else:
        write_to_file(os.path.join(t_dir, "init-cpu.txt"), cpu)
        src_wrap_file = os.path.join(gen_src_dir, "wrapper-self-init.vhdl")
        src_init_file = os.path.join(gw_dir, "mem.init")

    # Copy generated files to target dir, amend them if necessary
    core_file = os.path.join(gw_dir, "litedram_core.v")
    dst_init_file = os.path.join(t_dir, "litedram_core.init")
    dst_wrap_file = os.path.join(t_dir, "litedram-wrapper.vhdl")
    replace_in_file(core_file, "mem.init", "litedram_core.init")
    shutil.copy(core_file, t_dir)
    shutil.copyfile(src_init_file, dst_init_file)
    shutil.copyfile(src_wrap_file, dst_wrap_file)
コード例 #4
0
def generate_one(t):

    print("Generating target:", t)

    # Is it a simulation ?
    is_sim = t is "sim"

    # Muck with directory path
    build_dir = make_new_dir(build_top_dir, t)
    t_dir = make_new_dir(gen_dir, t)

    # Grab config file
    cfile = os.path.join(gen_src_dir, t + ".yml")
    core_config = yaml.load(open(cfile).read(), Loader=yaml.Loader)

    ### TODO: Make most stuff below a function in litedram gen.py and
    ###       call it rather than duplicate it
    ###

    # Convert YAML elements to Python/LiteX
    for k, v in core_config.items():
        replaces = {"False": False, "True": True, "None": None}
        for r in replaces.keys():
            if v == r:
                core_config[k] = replaces[r]
        if "clk_freq" in k:
            core_config[k] = float(core_config[k])
        if k == "sdram_module":
            core_config[k] = getattr(litedram_modules, core_config[k])
        if k == "sdram_phy":
            core_config[k] = getattr(litedram_phys, core_config[k])

    # Generate core
    if is_sim:
        platform = SimPlatform("", io=[])
    elif core_config["sdram_phy"] in [litedram_phys.ECP5DDRPHY]:
        platform = LatticePlatform("LFE5UM5G-45F-8BG381C",
                                   io=[],
                                   toolchain="trellis")
    elif core_config["sdram_phy"] in [
            litedram_phys.A7DDRPHY, litedram_phys.K7DDRPHY,
            litedram_phys.V7DDRPHY
    ]:
        platform = XilinxPlatform("", io=[], toolchain="vivado")
    else:
        raise ValueError("Unsupported SDRAM PHY: {}".format(
            core_config["sdram_phy"]))

    soc = LiteDRAMCore(platform,
                       core_config,
                       is_sim=is_sim,
                       integrated_rom_size=0x6000)

    # Build into build_dir
    builder = Builder(soc, output_dir=build_dir, compile_gateware=False)
    vns = builder.build(build_name="litedram_core", regular_comb=False)

    # Grab generated gatewar dir
    gw_dir = os.path.join(build_dir, "gateware")

    # Generate init code
    src_init_file = build_init_code(build_dir, is_sim)
    src_initram_file = os.path.join(gen_src_dir, "dram-init-mem.vhdl")

    # Copy generated files to target dir, amend them if necessary
    initfile_name = "litedram_core.init"
    core_file = os.path.join(gw_dir, "litedram_core.v")
    dst_init_file = os.path.join(t_dir, initfile_name)
    dst_initram_file = os.path.join(t_dir, "litedram-initmem.vhdl")
    shutil.copyfile(src_init_file, dst_init_file)
    shutil.copyfile(src_initram_file, dst_initram_file)
    if is_sim:
        initfile_path = os.path.join("litedram", "generated", "sim",
                                     initfile_name)
        replace_in_file(dst_initram_file, initfile_name, initfile_path)
    shutil.copy(core_file, t_dir)