mirror of
https://github.com/YosysHQ/yosys
synced 2025-10-17 21:10:28 +00:00
Gowin. Reduce the range of flip-flop types.
UG303-1.0E_Arora Ⅴ Configurable Function Unit (CFU) User Guide.pdf specifies that the only flip-flop types supported in GW5 are DFFSE, DFFRE, DFFPE, and DFFCE. However, the bit streams generated by the vendor IDE also contain DFF flip-flops, which are probably the result of optimisation, so we leave them in the list of permitted items, but add a flag that will allow the generation of completely correct output files, acceptable for further P& R using vendor tools (they will not allow the use of flip-flops other than the four specified in the netlist). In the GW5 SemiDual Port BSRAM series, the primitive does not have RESETA and RESETB ports—they are replaced by the RESET port, so we separate the files for BSRAM generation, especially since in the future we may have to take into account other, as yet unexplored, differences in BSRAM. Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
This commit is contained in:
parent
9a12d92551
commit
02e40e8118
3 changed files with 422 additions and 6 deletions
|
@ -57,6 +57,9 @@ struct SynthGowinPass : public ScriptPass
|
|||
log(" -nodffe\n");
|
||||
log(" do not use flipflops with CE in output netlist\n");
|
||||
log("\n");
|
||||
log(" -strict-gw5a-dffs\n");
|
||||
log(" use only DFFSE/DFFRE/DFFPE/DFFCE flipflops for the GW5A family\n");
|
||||
log("\n");
|
||||
log(" -nobram\n");
|
||||
log(" do not use BRAM cells in output netlist\n");
|
||||
log("\n");
|
||||
|
@ -97,7 +100,7 @@ struct SynthGowinPass : public ScriptPass
|
|||
}
|
||||
|
||||
string top_opt, vout_file, json_file, family;
|
||||
bool retime, nobram, nolutram, flatten, nodffe, nowidelut, abc9, noiopads, noalu, no_rw_check;
|
||||
bool retime, nobram, nolutram, flatten, nodffe, strict_gw5a_dffs, nowidelut, abc9, noiopads, noalu, no_rw_check;
|
||||
|
||||
void clear_flags() override
|
||||
{
|
||||
|
@ -109,6 +112,7 @@ struct SynthGowinPass : public ScriptPass
|
|||
flatten = true;
|
||||
nobram = false;
|
||||
nodffe = false;
|
||||
strict_gw5a_dffs = false;
|
||||
nolutram = false;
|
||||
nowidelut = false;
|
||||
abc9 = true;
|
||||
|
@ -165,6 +169,10 @@ struct SynthGowinPass : public ScriptPass
|
|||
nodffe = true;
|
||||
continue;
|
||||
}
|
||||
if (args[argidx] == "-strict-gw5a-dffs") {
|
||||
strict_gw5a_dffs = true;
|
||||
continue;
|
||||
}
|
||||
if (args[argidx] == "-noflatten") {
|
||||
flatten = false;
|
||||
continue;
|
||||
|
@ -248,7 +256,7 @@ struct SynthGowinPass : public ScriptPass
|
|||
args += " -no-auto-distributed";
|
||||
}
|
||||
run("memory_libmap -lib +/gowin/lutrams.txt -lib +/gowin/brams.txt" + args, "(-no-auto-block if -nobram, -no-auto-distributed if -nolutram)");
|
||||
run("techmap -map +/gowin/lutrams_map.v -map +/gowin/brams_map.v");
|
||||
run(stringf("techmap -map +/gowin/lutrams_map.v -map +/gowin/brams_map%s.v", family == "gw5a" ? "_gw5a" : ""));
|
||||
}
|
||||
|
||||
if (check_label("map_ffram"))
|
||||
|
@ -276,10 +284,18 @@ struct SynthGowinPass : public ScriptPass
|
|||
if (check_label("map_ffs"))
|
||||
{
|
||||
run("opt_clean");
|
||||
if (nodffe)
|
||||
run("dfflegalize -cell $_DFF_?_ 0 -cell $_SDFF_?P?_ r -cell $_DFF_?P?_ r");
|
||||
else
|
||||
run("dfflegalize -cell $_DFF_?_ 0 -cell $_DFFE_?P_ 0 -cell $_SDFF_?P?_ r -cell $_SDFFE_?P?P_ r -cell $_DFF_?P?_ r -cell $_DFFE_?P?P_ r");
|
||||
if (family == "gw5a") {
|
||||
if (strict_gw5a_dffs) {
|
||||
run("dfflegalize -cell $_SDFFE_PP?P_ r -cell $_DFFE_PP?P_ r");
|
||||
} else {
|
||||
run("dfflegalize -cell $_DFF_?_ 0 -cell $_SDFFE_PP?P_ r -cell $_DFFE_PP?P_ r");
|
||||
}
|
||||
} else {
|
||||
if (nodffe)
|
||||
run("dfflegalize -cell $_DFF_?_ 0 -cell $_SDFF_?P?_ r -cell $_DFF_?P?_ r");
|
||||
else
|
||||
run("dfflegalize -cell $_DFF_?_ 0 -cell $_DFFE_?P_ 0 -cell $_SDFF_?P?_ r -cell $_SDFFE_?P?P_ r -cell $_DFF_?P?_ r -cell $_DFFE_?P?P_ r");
|
||||
}
|
||||
run("techmap -map +/gowin/cells_map.v");
|
||||
run("opt_expr -mux_undef");
|
||||
run("simplemap");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue