3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-12 20:18:20 +00:00

synth: Introduce -inject for amending techmap

This commit is contained in:
Martin Povišer 2024-02-22 17:23:28 +01:00
parent d77b792156
commit ba07cba6ce

View file

@ -88,6 +88,10 @@ struct SynthPass : public ScriptPass {
log(" read/write collision\" (same result as setting the no_rw_check\n"); log(" read/write collision\" (same result as setting the no_rw_check\n");
log(" attribute on all memories).\n"); log(" attribute on all memories).\n");
log("\n"); log("\n");
log(" -inject filename\n");
log(" inject rules from the given file to complement the default\n");
log(" mapping library in the `techmap` step. this option can be\n");
log(" repeated.\n");
log("\n"); log("\n");
log("The following commands are executed by this synthesis command:\n"); log("The following commands are executed by this synthesis command:\n");
help_script(); help_script();
@ -96,8 +100,8 @@ struct SynthPass : public ScriptPass {
string top_module, fsm_opts, memory_opts, abc; string top_module, fsm_opts, memory_opts, abc;
bool autotop, flatten, noalumacc, nofsm, noabc, noshare, flowmap, booth; bool autotop, flatten, noalumacc, nofsm, noabc, noshare, flowmap, booth;
int lut; int lut;
std::vector<std::string> techmap_inject;
void clear_flags() override void clear_flags() override
{ {
@ -115,6 +119,7 @@ struct SynthPass : public ScriptPass {
flowmap = false; flowmap = false;
booth = false; booth = false;
abc = "abc"; abc = "abc";
techmap_inject.clear();
} }
void execute(std::vector<std::string> args, RTLIL::Design *design) override void execute(std::vector<std::string> args, RTLIL::Design *design) override
@ -192,6 +197,10 @@ struct SynthPass : public ScriptPass {
memory_opts += " -no-rw-check"; memory_opts += " -no-rw-check";
continue; continue;
} }
if (args[argidx] == "-inject" && argidx + 1 < args.size()) {
techmap_inject.push_back(args[++argidx]);
continue;
}
break; break;
} }
extra_args(args, argidx, design); extra_args(args, argidx, design);
@ -261,7 +270,17 @@ struct SynthPass : public ScriptPass {
run("opt -fast -full"); run("opt -fast -full");
run("memory_map"); run("memory_map");
run("opt -full"); run("opt -full");
run("techmap"); if (help_mode) {
run("techmap", " (unless -inject)");
run("techmap -map +/techmap.v -map <inject>", " (if -inject)");
} else {
std::string techmap_opts;
if (!techmap_inject.empty())
techmap_opts += " -map +/techmap.v";
for (auto fn : techmap_inject)
techmap_opts += stringf(" -map %s", fn.c_str());
run("techmap" + techmap_opts);
}
if (help_mode) { if (help_mode) {
run("techmap -map +/gate2lut.v", "(if -noabc and -lut)"); run("techmap -map +/gate2lut.v", "(if -noabc and -lut)");
run("clean; opt_lut", " (if -noabc and -lut)"); run("clean; opt_lut", " (if -noabc and -lut)");