Merge pull request #772 from whitequark/synth_lut

synth: add k-LUT mode
This commit is contained in:
Clifford Wolf 2019-01-02 15:44:57 +01:00 committed by GitHub
commit da1c8d8d3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 7 deletions

View File

@ -51,6 +51,9 @@ struct SynthPass : public ScriptPass
log(" -encfile <file>\n"); log(" -encfile <file>\n");
log(" passed to 'fsm_recode' via 'fsm'\n"); log(" passed to 'fsm_recode' via 'fsm'\n");
log("\n"); log("\n");
log(" -lut <k>\n");
log(" perform synthesis for a k-LUT architecture.\n");
log("\n");
log(" -nofsm\n"); log(" -nofsm\n");
log(" do not run FSM optimization\n"); log(" do not run FSM optimization\n");
log("\n"); log("\n");
@ -80,6 +83,7 @@ struct SynthPass : public ScriptPass
string top_module, fsm_opts, memory_opts; string top_module, fsm_opts, memory_opts;
bool autotop, flatten, noalumacc, nofsm, noabc, noshare; bool autotop, flatten, noalumacc, nofsm, noabc, noshare;
int lut;
void clear_flags() YS_OVERRIDE void clear_flags() YS_OVERRIDE
{ {
@ -89,6 +93,7 @@ struct SynthPass : public ScriptPass
autotop = false; autotop = false;
flatten = false; flatten = false;
lut = 0;
noalumacc = false; noalumacc = false;
nofsm = false; nofsm = false;
noabc = false; noabc = false;
@ -130,6 +135,10 @@ struct SynthPass : public ScriptPass
flatten = true; flatten = true;
continue; continue;
} }
if (args[argidx] == "-lut") {
lut = atoi(args[++argidx].c_str());
continue;
}
if (args[argidx] == "-nofsm") { if (args[argidx] == "-nofsm") {
nofsm = true; nofsm = true;
continue; continue;
@ -186,19 +195,23 @@ struct SynthPass : public ScriptPass
{ {
run("proc"); run("proc");
if (help_mode || flatten) if (help_mode || flatten)
run("flatten", "(if -flatten)"); run("flatten", " (if -flatten)");
run("opt_expr"); run("opt_expr");
run("opt_clean"); run("opt_clean");
run("check"); run("check");
run("opt"); run("opt");
run("wreduce"); run("wreduce");
if (help_mode)
run("techmap -map +/cmp2lut.v", " (if -lut)");
else
run(stringf("techmap -map +/cmp2lut.v -D LUT_WIDTH=%d", lut));
if (!noalumacc) if (!noalumacc)
run("alumacc"); run("alumacc", " (unless -noalumacc)");
if (!noshare) if (!noshare)
run("share"); run("share", " (unless -noshare)");
run("opt"); run("opt");
if (!nofsm) if (!nofsm)
run("fsm" + fsm_opts); run("fsm" + fsm_opts, " (unless -nofsm)");
run("opt -fast"); run("opt -fast");
run("memory -nomap" + memory_opts); run("memory -nomap" + memory_opts);
run("opt_clean"); run("opt_clean");
@ -210,12 +223,33 @@ struct SynthPass : public ScriptPass
run("memory_map"); run("memory_map");
run("opt -full"); run("opt -full");
run("techmap"); run("techmap");
if (help_mode)
{
run("techmap -map +/gate2lut.v", "(if -noabc and -lut)");
run("clean; opt_lut", " (if -noabc and -lut)");
}
else if (noabc && lut)
{
run(stringf("techmap -map +/gate2lut.v -D LUT_WIDTH=%d", lut));
run("clean; opt_lut");
}
run("opt -fast"); run("opt -fast");
if (!noabc) { if (!noabc) {
#ifdef YOSYS_ENABLE_ABC #ifdef YOSYS_ENABLE_ABC
run("abc -fast"); if (help_mode)
run("opt -fast"); {
run("abc -fast", " (unless -noabc, unless -lut)");
run("abc -fast -lut k", "(unless -noabc, if -lut)");
}
else
{
if (lut)
run(stringf("abc -fast -lut %d", lut));
else
run("abc -fast");
}
run("opt -fast", " (unless -noabc)");
#endif #endif
} }
} }

View File

@ -226,7 +226,7 @@ struct SynthIce40Pass : public ScriptPass
if (check_label("coarse")) if (check_label("coarse"))
{ {
run("synth -run coarse"); run("synth -lut 4 -run coarse");
} }
if (!nobram && check_label("bram", "(skip if -nobram)")) if (!nobram && check_label("bram", "(skip if -nobram)"))