aboutsummaryrefslogtreecommitdiffstats
path: root/passes/abc/blifparse.cc
diff options
context:
space:
mode:
Diffstat (limited to 'passes/abc/blifparse.cc')
-rw-r--r--passes/abc/blifparse.cc28
1 files changed, 27 insertions, 1 deletions
diff --git a/passes/abc/blifparse.cc b/passes/abc/blifparse.cc
index 825d5eab6..a630405c6 100644
--- a/passes/abc/blifparse.cc
+++ b/passes/abc/blifparse.cc
@@ -44,7 +44,7 @@ static bool read_next_line(char *buffer, int &line_count, FILE *f)
}
}
-RTLIL::Design *abc_parse_blif(FILE *f)
+RTLIL::Design *abc_parse_blif(FILE *f, std::string dff_name)
{
RTLIL::Design *design = new RTLIL::Design;
RTLIL::Module *module = new RTLIL::Module;
@@ -101,6 +101,32 @@ RTLIL::Design *abc_parse_blif(FILE *f)
continue;
}
+ if (!strcmp(cmd, ".latch"))
+ {
+ char *d = strtok(NULL, " \t\r\n");
+ char *q = strtok(NULL, " \t\r\n");
+
+ if (module->wires.count(RTLIL::escape_id(d)) == 0) {
+ RTLIL::Wire *wire = new RTLIL::Wire;
+ wire->name = RTLIL::escape_id(d);
+ module->add(wire);
+ }
+
+ if (module->wires.count(RTLIL::escape_id(q)) == 0) {
+ RTLIL::Wire *wire = new RTLIL::Wire;
+ wire->name = RTLIL::escape_id(q);
+ module->add(wire);
+ }
+
+ RTLIL::Cell *cell = new RTLIL::Cell;
+ cell->name = NEW_ID;
+ cell->type = dff_name;
+ cell->connections["\\D"] = module->wires.at(RTLIL::escape_id(d));
+ cell->connections["\\Q"] = module->wires.at(RTLIL::escape_id(q));
+ module->add(cell);
+ continue;
+ }
+
if (!strcmp(cmd, ".gate"))
{
RTLIL::Cell *cell = new RTLIL::Cell;