mirror of https://github.com/YosysHQ/yosys.git
Add "synth_ice40 -dsp"
Signed-off-by: Clifford Wolf <clifford@clifford.at>
This commit is contained in:
parent
246391200e
commit
218e9051bb
|
@ -159,8 +159,8 @@ void create_ice40_dsp(ice40_dsp_pm &pm)
|
||||||
cell->setPort("\\ADDSUBBOT", State::S0);
|
cell->setPort("\\ADDSUBBOT", State::S0);
|
||||||
}
|
}
|
||||||
|
|
||||||
cell->setPort("\\ORTSTOP", State::S0);
|
cell->setPort("\\ORSTTOP", State::S0);
|
||||||
cell->setPort("\\ORTSBOT", State::S0);
|
cell->setPort("\\ORSTBOT", State::S0);
|
||||||
|
|
||||||
cell->setPort("\\OHOLDTOP", State::S0);
|
cell->setPort("\\OHOLDTOP", State::S0);
|
||||||
cell->setPort("\\OHOLDBOT", State::S0);
|
cell->setPort("\\OHOLDBOT", State::S0);
|
||||||
|
@ -181,8 +181,8 @@ void create_ice40_dsp(ice40_dsp_pm &pm)
|
||||||
|
|
||||||
cell->setParam("\\TOP_8x8_MULT_REG", pm.st.ffY ? State::S1 : State::S0);
|
cell->setParam("\\TOP_8x8_MULT_REG", pm.st.ffY ? State::S1 : State::S0);
|
||||||
cell->setParam("\\BOT_8x8_MULT_REG", pm.st.ffY ? State::S1 : State::S0);
|
cell->setParam("\\BOT_8x8_MULT_REG", pm.st.ffY ? State::S1 : State::S0);
|
||||||
cell->setParam("\\PIPELINE_16X16_MULT_REG1", pm.st.ffY ? State::S1 : State::S0);
|
cell->setParam("\\PIPELINE_16x16_MULT_REG1", pm.st.ffY ? State::S1 : State::S0);
|
||||||
cell->setParam("\\PIPELINE_16X16_MULT_REG2", State::S0);
|
cell->setParam("\\PIPELINE_16x16_MULT_REG2", State::S0);
|
||||||
|
|
||||||
cell->setParam("\\TOPOUTPUT_SELECT", Const(pm.st.ffS ? 1 : 3, 2));
|
cell->setParam("\\TOPOUTPUT_SELECT", Const(pm.st.ffS ? 1 : 3, 2));
|
||||||
cell->setParam("\\TOPADDSUB_LOWERINPUT", Const(2, 2));
|
cell->setParam("\\TOPADDSUB_LOWERINPUT", Const(2, 2));
|
||||||
|
|
|
@ -79,6 +79,9 @@ struct SynthIce40Pass : public ScriptPass
|
||||||
log(" -nobram\n");
|
log(" -nobram\n");
|
||||||
log(" do not use SB_RAM40_4K* cells in output netlist\n");
|
log(" do not use SB_RAM40_4K* cells in output netlist\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
|
log(" -dsp\n");
|
||||||
|
log(" use iCE40 UltraPlus DSP cells for large arithmetic\n");
|
||||||
|
log("\n");
|
||||||
log(" -noabc\n");
|
log(" -noabc\n");
|
||||||
log(" use built-in Yosys LUT techmapping instead of abc\n");
|
log(" use built-in Yosys LUT techmapping instead of abc\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
|
@ -96,7 +99,7 @@ struct SynthIce40Pass : public ScriptPass
|
||||||
}
|
}
|
||||||
|
|
||||||
string top_opt, blif_file, edif_file, json_file;
|
string top_opt, blif_file, edif_file, json_file;
|
||||||
bool nocarry, nodffe, nobram, 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;
|
||||||
|
|
||||||
void clear_flags() YS_OVERRIDE
|
void clear_flags() YS_OVERRIDE
|
||||||
|
@ -109,6 +112,7 @@ struct SynthIce40Pass : public ScriptPass
|
||||||
nodffe = false;
|
nodffe = false;
|
||||||
min_ce_use = -1;
|
min_ce_use = -1;
|
||||||
nobram = false;
|
nobram = false;
|
||||||
|
dsp = false;
|
||||||
flatten = true;
|
flatten = true;
|
||||||
retime = false;
|
retime = false;
|
||||||
relut = false;
|
relut = false;
|
||||||
|
@ -181,6 +185,10 @@ struct SynthIce40Pass : public ScriptPass
|
||||||
nobram = true;
|
nobram = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (args[argidx] == "-dsp") {
|
||||||
|
dsp = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (args[argidx] == "-noabc") {
|
if (args[argidx] == "-noabc") {
|
||||||
noabc = true;
|
noabc = true;
|
||||||
continue;
|
continue;
|
||||||
|
@ -214,11 +222,11 @@ struct SynthIce40Pass : public ScriptPass
|
||||||
{
|
{
|
||||||
run("read_verilog -lib +/ice40/cells_sim.v");
|
run("read_verilog -lib +/ice40/cells_sim.v");
|
||||||
run(stringf("hierarchy -check %s", help_mode ? "-top <top>" : top_opt.c_str()));
|
run(stringf("hierarchy -check %s", help_mode ? "-top <top>" : top_opt.c_str()));
|
||||||
|
run("proc");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flatten && check_label("flatten", "(unless -noflatten)"))
|
if (flatten && check_label("flatten", "(unless -noflatten)"))
|
||||||
{
|
{
|
||||||
run("proc");
|
|
||||||
run("flatten");
|
run("flatten");
|
||||||
run("tribuf -logic");
|
run("tribuf -logic");
|
||||||
run("deminout");
|
run("deminout");
|
||||||
|
@ -226,7 +234,23 @@ struct SynthIce40Pass : public ScriptPass
|
||||||
|
|
||||||
if (check_label("coarse"))
|
if (check_label("coarse"))
|
||||||
{
|
{
|
||||||
run("synth -lut 4 -run coarse");
|
run("opt_expr");
|
||||||
|
run("opt_clean");
|
||||||
|
run("check");
|
||||||
|
run("opt");
|
||||||
|
run("wreduce");
|
||||||
|
run("share");
|
||||||
|
run("techmap -map +/cmp2lut.v -D LUT_WIDTH=4");
|
||||||
|
run("opt_expr");
|
||||||
|
run("opt_clean");
|
||||||
|
if (help_mode || dsp)
|
||||||
|
run("ice40_dsp", "(if -dsp)");
|
||||||
|
run("alumacc");
|
||||||
|
run("opt");
|
||||||
|
run("fsm");
|
||||||
|
run("opt -fast");
|
||||||
|
run("memory -nomap");
|
||||||
|
run("opt_clean");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!nobram && check_label("bram", "(skip if -nobram)"))
|
if (!nobram && check_label("bram", "(skip if -nobram)"))
|
||||||
|
|
Loading…
Reference in New Issue