Add "dffinit -strinit high low"

On some platforms the string to initialize DFF might not be "high" and
"low", e.g. with Anlogic TD it's "SET" and "RESET".

Add a "-strinit" parameter for dffinit to allow specify the strings used
for high and low.

Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
This commit is contained in:
Icenowy Zheng 2018-12-18 15:37:43 +08:00
parent 847fd36077
commit fec8b3c81f
1 changed files with 16 additions and 2 deletions

View File

@ -43,6 +43,11 @@ struct DffinitPass : public Pass {
log(" initial value of 1 or 0. (multi-bit values are not supported in this\n");
log(" mode.)\n");
log("\n");
log(" -strinit <string for high> <string for low> \n");
log(" use string values in the command line to represent a single-bit\n");
log(" initial value of 1 or 0. (multi-bit values are not supported in this\n");
log(" mode.)\n");
log("\n");
}
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
{
@ -50,11 +55,20 @@ struct DffinitPass : public Pass {
dict<IdString, dict<IdString, IdString>> ff_types;
bool highlow_mode = false;
std::string high_string, low_string;
size_t argidx;
for (argidx = 1; argidx < args.size(); argidx++) {
if (args[argidx] == "-highlow") {
highlow_mode = true;
high_string = "high";
low_string = "low";
continue;
}
if (args[argidx] == "-strinit" && argidx+2 < args.size()) {
highlow_mode = true;
high_string = args[++argidx];
low_string = args[++argidx];
continue;
}
if (args[argidx] == "-ff" && argidx+3 < args.size()) {
@ -121,9 +135,9 @@ struct DffinitPass : public Pass {
log_error("Multi-bit init value for %s.%s.%s is incompatible with -highlow mode.\n",
log_id(module), log_id(cell), log_id(it.second));
if (value[0] == State::S1)
value = Const("high");
value = Const(high_string);
else
value = Const("low");
value = Const(low_string);
}
log("Setting %s.%s.%s (port=%s, net=%s) to %s.\n", log_id(module), log_id(cell), log_id(it.second),