aboutsummaryrefslogtreecommitdiffstats
path: root/frontends
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2018-03-08 13:26:33 +0100
committerClifford Wolf <clifford@clifford.at>2018-03-08 13:26:33 +0100
commita15208f3012a20ad493850a7072fa501b917a67f (patch)
tree08c98c3fd7d10133de63893d1f8322637fb2d65c /frontends
parent8b604004dae31f7f3120685dd05d16a4bace904a (diff)
downloadyosys-a15208f3012a20ad493850a7072fa501b917a67f.tar.gz
yosys-a15208f3012a20ad493850a7072fa501b917a67f.tar.bz2
yosys-a15208f3012a20ad493850a7072fa501b917a67f.zip
Use Verific hier_tree component for elaboration
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'frontends')
-rw-r--r--frontends/verific/verific.cc54
1 files changed, 54 insertions, 0 deletions
diff --git a/frontends/verific/verific.cc b/frontends/verific/verific.cc
index 0db57d598..7b5dac309 100644
--- a/frontends/verific/verific.cc
+++ b/frontends/verific/verific.cc
@@ -42,6 +42,7 @@ USING_YOSYS_NAMESPACE
#include "veri_file.h"
#include "vhdl_file.h"
+#include "hier_tree.h"
#include "VeriModule.h"
#include "VeriWrite.h"
#include "VhdlUnits.h"
@@ -1789,6 +1790,7 @@ struct VerificPass : public Pass {
if (mode_all)
{
+#if 0
log("Running veri_file::ElaborateAll().\n");
if (!veri_file::ElaborateAll())
log_cmd_error("Elaboration of Verilog modules failed.\n");
@@ -1823,12 +1825,31 @@ struct VerificPass : public Pass {
cell->GetFirstNetlist()->SetPresentDesign();
}
}
+#else
+ log("Running hier_tree::ElaborateAll().\n");
+
+ VhdlLibrary *vhdl_lib = vhdl_file::GetLibrary("work", 1);
+ VeriLibrary *veri_lib = veri_file::GetLibrary("work", 1);
+
+ Array veri_libs, vhdl_libs;
+ if (vhdl_lib) vhdl_libs.InsertLast(vhdl_lib);
+ if (veri_lib) veri_libs.InsertLast(veri_lib);
+
+ Array *netlists = hier_tree::ElaborateAll(&veri_libs, &vhdl_libs);
+ Netlist *nl;
+ int i;
+
+ FOREACH_ARRAY_ITEM(netlists, i, nl)
+ nl_todo.insert(nl);
+ delete netlists;
+#endif
}
else
{
if (argidx == GetSize(args))
log_cmd_error("No top module specified.\n");
+#if 0
for (; argidx < GetSize(args); argidx++) {
if (veri_file::GetModule(args[argidx].c_str())) {
log("Running veri_file::Elaborate(\"%s\").\n", args[argidx].c_str());
@@ -1842,6 +1863,39 @@ struct VerificPass : public Pass {
nl_todo.insert(Netlist::PresentDesign());
}
}
+#else
+ Array veri_modules, vhdl_units;
+ for (; argidx < GetSize(args); argidx++)
+ {
+ const char *name = args[argidx].c_str();
+
+ VeriModule *veri_module = veri_file::GetModule(name);
+ if (veri_module) {
+ log("Adding Verilog module '%s' to elaboration queue.\n", name);
+ veri_modules.InsertLast(veri_module);
+ continue;
+ }
+
+ VhdlLibrary *vhdl_lib = vhdl_file::GetLibrary("work", 1);
+ VhdlDesignUnit *vhdl_unit = vhdl_lib->GetPrimUnit(name);
+ if (vhdl_unit) {
+ log("Adding VHDL unit '%s' to elaboration queue.\n", name);
+ vhdl_units.InsertLast(vhdl_unit);
+ continue;
+ }
+
+ log_error("Can't find module/unit '%s'.\n", name);
+ }
+
+ log("Running hier_tree::Elaborate().\n");
+ Array *netlists = hier_tree::Elaborate(&veri_modules, &vhdl_units);
+ Netlist *nl;
+ int i;
+
+ FOREACH_ARRAY_ITEM(netlists, i, nl)
+ nl_todo.insert(nl);
+ delete netlists;
+#endif
}
if (flatten) {