{
int minlen, maxlen;
int keep_before, keep_after;
- bool zinit, init, params, ffe;
+ bool zinit, init, params, ffe, init_msb_first;
dict<IdString, pair<IdString, IdString>> ffcells;
ShregmapTech *tech;
init = false;
params = false;
ffe = false;
+ init_msb_first = false;
tech = nullptr;
}
};
initval.push_back(State::S0);
remove_init.insert(bit);
}
+ if (opts.init_msb_first)
+ std::reverse(initval.begin(), initval.end());
first_cell->setParam("\\INIT", initval);
}
log("\n");
log(" -init\n");
log(" map initialized registers to the shift reg, add an INIT parameter to\n");
- log(" generated cells with the initialization value. (first bit to shift out\n");
+ log(" generated cells with the initialization value. (First bit to shift out\n");
log(" in LSB position)\n");
log("\n");
+ log(" -init_msb_first\n");
+ log(" same as -init, but INIT parameter to have first bit to shift out\n");
+ log(" in MSB position.\n");
+ log("\n");
log(" -tech greenpak4\n");
log(" map to greenpak4 shift registers.\n");
log("\n");
opts.init = true;
continue;
}
+ if (args[argidx] == "-init_msb_first") {
+ opts.init = true;
+ opts.init_msb_first = true;
+ continue;
+ }
if (args[argidx] == "-params") {
opts.params = true;
continue;
log(" dff2dffe\n");
log(" opt -full\n");
log(" techmap -map +/techmap.v -map +/xilinx/arith_map.v\n");
- log(" shregmap -init -params -enpol any_or_none\n");
+ log(" shregmap -init_msb_first -params -enpol any_or_none\n");
log(" opt -fast\n");
log("\n");
log(" map_luts:\n");
Pass::call(design, "dff2dffe");
Pass::call(design, "opt -full");
Pass::call(design, "techmap -map +/techmap.v -map +/xilinx/arith_map.v");
- Pass::call(design, "shregmap -init -params -enpol any_or_none");
+ Pass::call(design, "shregmap -init_msb_first -params -enpol any_or_none");
Pass::call(design, "opt -fast");
}