mirror of https://github.com/YosysHQ/yosys.git
Add "-device" argument to synth_ice40
This commit is contained in:
parent
671cca59a9
commit
6f3e5297db
|
@ -28,9 +28,11 @@ $(eval $(call add_share_file,share/ice40,techlibs/ice40/cells_sim.v))
|
||||||
$(eval $(call add_share_file,share/ice40,techlibs/ice40/latches_map.v))
|
$(eval $(call add_share_file,share/ice40,techlibs/ice40/latches_map.v))
|
||||||
$(eval $(call add_share_file,share/ice40,techlibs/ice40/brams.txt))
|
$(eval $(call add_share_file,share/ice40,techlibs/ice40/brams.txt))
|
||||||
$(eval $(call add_share_file,share/ice40,techlibs/ice40/brams_map.v))
|
$(eval $(call add_share_file,share/ice40,techlibs/ice40/brams_map.v))
|
||||||
$(eval $(call add_share_file,share/ice40,techlibs/ice40/abc.box))
|
|
||||||
$(eval $(call add_share_file,share/ice40,techlibs/ice40/abc.v))
|
$(eval $(call add_share_file,share/ice40,techlibs/ice40/abc.v))
|
||||||
$(eval $(call add_share_file,share/ice40,techlibs/ice40/abc.lut))
|
$(eval $(call add_share_file,share/ice40,techlibs/ice40/hx8k.box))
|
||||||
|
$(eval $(call add_share_file,share/ice40,techlibs/ice40/hx8k.lut))
|
||||||
|
$(eval $(call add_share_file,share/ice40,techlibs/ice40/up5k.box))
|
||||||
|
$(eval $(call add_share_file,share/ice40,techlibs/ice40/up5k.lut))
|
||||||
|
|
||||||
$(eval $(call add_gen_share_file,share/ice40,techlibs/ice40/brams_init1.vh))
|
$(eval $(call add_gen_share_file,share/ice40,techlibs/ice40/brams_init1.vh))
|
||||||
$(eval $(call add_gen_share_file,share/ice40,techlibs/ice40/brams_init2.vh))
|
$(eval $(call add_gen_share_file,share/ice40,techlibs/ice40/brams_init2.vh))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# From https://github.com/cliffordwolf/icestorm/blob/81c33a3/icefuzz/timings_hx8k.txt
|
# From https://github.com/cliffordwolf/icestorm/blob/be0bca0/icefuzz/timings_hx8k.txt
|
||||||
|
|
||||||
# NB: Inputs/Outputs must be ordered alphabetically
|
# NB: Inputs/Outputs must be ordered alphabetically
|
||||||
|
|
||||||
|
@ -10,4 +10,4 @@ SB_CARRY 1 1 3 1
|
||||||
# Inputs: I0 I1 I2 I3
|
# Inputs: I0 I1 I2 I3
|
||||||
# Outputs: O
|
# Outputs: O
|
||||||
SB_LUT4 2 1 4 1
|
SB_LUT4 2 1 4 1
|
||||||
316 379 400 449
|
449 400 379 316
|
|
@ -1,4 +1,4 @@
|
||||||
# From https://github.com/cliffordwolf/icestorm/blob/81c33a3/icefuzz/timings_hx8k.txt
|
# From https://github.com/cliffordwolf/icestorm/blob/be0bca0/icefuzz/timings_hx8k.txt
|
||||||
# I3 I2 I1 I0
|
# I3 I2 I1 I0
|
||||||
1 1 316
|
1 1 316
|
||||||
2 1 316 379
|
2 1 316 379
|
|
@ -37,6 +37,10 @@ struct SynthIce40Pass : public ScriptPass
|
||||||
log("\n");
|
log("\n");
|
||||||
log("This command runs synthesis for iCE40 FPGAs.\n");
|
log("This command runs synthesis for iCE40 FPGAs.\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
|
log(" -device < hx1k | lp384 | lp1k | lp8k | hx8k | u4k | up5k >\n");
|
||||||
|
log(" optimise the synthesis netlist for the specified device.\n");
|
||||||
|
log(" HX1K is the default target if no device argument specified.\n");
|
||||||
|
log("\n");
|
||||||
log(" -top <module>\n");
|
log(" -top <module>\n");
|
||||||
log(" use the specified module as top module\n");
|
log(" use the specified module as top module\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
|
@ -102,7 +106,7 @@ struct SynthIce40Pass : public ScriptPass
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
string top_opt, blif_file, edif_file, json_file, abc;
|
string top_opt, blif_file, edif_file, json_file, abc, device_opt;
|
||||||
bool nocarry, nodffe, nobram, dsp, flatten, retime, relut, noabc, abc2, vpr;
|
bool nocarry, nodffe, nobram, dsp, flatten, retime, relut, noabc, abc2, vpr;
|
||||||
int min_ce_use;
|
int min_ce_use;
|
||||||
|
|
||||||
|
@ -124,6 +128,7 @@ struct SynthIce40Pass : public ScriptPass
|
||||||
abc2 = false;
|
abc2 = false;
|
||||||
vpr = false;
|
vpr = false;
|
||||||
abc = "abc";
|
abc = "abc";
|
||||||
|
device_opt = "hx1k";
|
||||||
}
|
}
|
||||||
|
|
||||||
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
|
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
|
||||||
|
@ -210,12 +215,18 @@ struct SynthIce40Pass : public ScriptPass
|
||||||
abc = "abc9";
|
abc = "abc9";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (args[argidx] == "-device" && argidx+1 < args.size()) {
|
||||||
|
device_opt = args[++argidx];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
extra_args(args, argidx, design);
|
extra_args(args, argidx, design);
|
||||||
|
|
||||||
if (!design->full_selection())
|
if (!design->full_selection())
|
||||||
log_cmd_error("This command only operates on fully selected designs!\n");
|
log_cmd_error("This command only operates on fully selected designs!\n");
|
||||||
|
if (device_opt != "hx1k" && device_opt !="lp384" && device_opt != "lp1k" && device_opt !="lp8k" && device_opt !="hx8k" && device_opt != "u4k" && device_opt != "up5k")
|
||||||
|
log_cmd_error("Invalid or no family specified: '%s'\n", device_opt.c_str());
|
||||||
|
|
||||||
log_header(design, "Executing SYNTH_ICE40 pass.\n");
|
log_header(design, "Executing SYNTH_ICE40 pass.\n");
|
||||||
log_push();
|
log_push();
|
||||||
|
@ -319,7 +330,7 @@ struct SynthIce40Pass : public ScriptPass
|
||||||
if (abc == "abc9") {
|
if (abc == "abc9") {
|
||||||
run("read_verilog +/ice40/abc.v");
|
run("read_verilog +/ice40/abc.v");
|
||||||
run("techmap -map +/techmap.v A:abc_box_id");
|
run("techmap -map +/techmap.v A:abc_box_id");
|
||||||
run(abc + " -dress -lut +/ice40/abc.lut -box +/ice40/abc.box", "(skip if -noabc)");
|
run(abc + stringf(" -dress -lut +/ice40/%s.lut -box +/ice40/%s.box", device_opt.c_str(), device_opt.c_str()), "(skip if -noabc)");
|
||||||
run("blackbox A:abc_box_id");
|
run("blackbox A:abc_box_id");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue