mirror of https://github.com/YosysHQ/yosys.git
Merge pull request #3533 from YosysHQ/micko/liberty
Liberty file support using verific library
This commit is contained in:
commit
8d69220be7
5
Makefile
5
Makefile
|
@ -19,6 +19,7 @@ ENABLE_EDITLINE := 0
|
|||
ENABLE_GHDL := 0
|
||||
ENABLE_VERIFIC := 0
|
||||
ENABLE_VERIFIC_EDIF := 0
|
||||
ENABLE_VERIFIC_LIBERTY := 0
|
||||
DISABLE_VERIFIC_EXTENSIONS := 0
|
||||
DISABLE_VERIFIC_VHDL := 0
|
||||
ENABLE_COVER := 1
|
||||
|
@ -544,6 +545,10 @@ ifeq ($(ENABLE_VERIFIC_EDIF),1)
|
|||
VERIFIC_COMPONENTS += edif
|
||||
CXXFLAGS += -DVERIFIC_EDIF_SUPPORT
|
||||
endif
|
||||
ifeq ($(ENABLE_VERIFIC_LIBERTY),1)
|
||||
VERIFIC_COMPONENTS += synlib
|
||||
CXXFLAGS += -DVERIFIC_LIBERTY_SUPPORT
|
||||
endif
|
||||
ifneq ($(DISABLE_VERIFIC_EXTENSIONS),1)
|
||||
VERIFIC_COMPONENTS += extensions
|
||||
CXXFLAGS += -DYOSYSHQ_VERIFIC_EXTENSIONS
|
||||
|
|
|
@ -57,6 +57,11 @@ USING_YOSYS_NAMESPACE
|
|||
#include "edif_file.h"
|
||||
#endif
|
||||
|
||||
#ifdef VERIFIC_LIBERTY_SUPPORT
|
||||
#include "synlib_file.h"
|
||||
#include "SynlibGroup.h"
|
||||
#endif
|
||||
|
||||
#include "VerificStream.h"
|
||||
#include "FileSystem.h"
|
||||
|
||||
|
@ -2358,6 +2363,9 @@ void verific_import(Design *design, const std::map<std::string,std::string> &par
|
|||
#endif
|
||||
#ifdef VERIFIC_EDIF_SUPPORT
|
||||
edif_file::Reset();
|
||||
#endif
|
||||
#ifdef VERIFIC_LIBERTY_SUPPORT
|
||||
synlib_file::Reset();
|
||||
#endif
|
||||
Libset::Reset();
|
||||
Message::Reset();
|
||||
|
@ -2426,6 +2434,18 @@ struct VerificPass : public Pass {
|
|||
log("Load the specified EDIF files into Verific.\n");
|
||||
log("\n");
|
||||
log("\n");
|
||||
#endif
|
||||
#ifdef VERIFIC_LIBERTY_SUPPORT
|
||||
log(" verific {-liberty} <liberty-file>..\n");
|
||||
log("\n");
|
||||
log("Load the specified Liberty files into Verific.\n");
|
||||
log("Default library when -work is not present is one specified in liberty file.\n");
|
||||
log("To use from SystemVerilog or VHDL use -L to specify liberty library.");
|
||||
log("\n");
|
||||
log(" -lib\n");
|
||||
log(" only create empty blackbox modules\n");
|
||||
log("\n");
|
||||
log("\n");
|
||||
#endif
|
||||
log(" verific {-f|-F} [-vlog95|-vlog2k|-sv2005|-sv2009|\n");
|
||||
log(" -sv2012|-sv|-formal] <command-file>\n");
|
||||
|
@ -2535,7 +2555,7 @@ struct VerificPass : public Pass {
|
|||
log("\n");
|
||||
log(" -cells\n");
|
||||
log(" Import all cell definitions from Verific loaded libraries even if they are\n");
|
||||
log(" unused in design. Useful with \"-edif\" option.\n");
|
||||
log(" unused in design. Useful with \"-edif\" and \"-liberty\" option.\n");
|
||||
log("\n");
|
||||
log(" -chparam name value \n");
|
||||
log(" Elaborate the specified top modules (all modules when -all given) using\n");
|
||||
|
@ -2729,6 +2749,7 @@ struct VerificPass : public Pass {
|
|||
|
||||
int argidx = 1;
|
||||
std::string work = "work";
|
||||
bool is_work_set = false;
|
||||
veri_file::RegisterCallBackVerificStream(&verific_read_cb);
|
||||
|
||||
if (GetSize(args) > argidx && (args[argidx] == "-set-error" || args[argidx] == "-set-warning" ||
|
||||
|
@ -2813,6 +2834,7 @@ struct VerificPass : public Pass {
|
|||
{
|
||||
if (args[argidx] == "-work" && argidx+1 < GetSize(args)) {
|
||||
work = args[++argidx];
|
||||
is_work_set = true;
|
||||
continue;
|
||||
}
|
||||
if (args[argidx] == "-L" && argidx+1 < GetSize(args)) {
|
||||
|
@ -3001,6 +3023,42 @@ struct VerificPass : public Pass {
|
|||
}
|
||||
goto check_error;
|
||||
}
|
||||
#endif
|
||||
#ifdef VERIFIC_LIBERTY_SUPPORT
|
||||
if (GetSize(args) > argidx && args[argidx] == "-liberty") {
|
||||
bool flag_lib = false;
|
||||
for (argidx++; argidx < GetSize(args); argidx++) {
|
||||
if (args[argidx] == "-lib") {
|
||||
flag_lib = true;
|
||||
continue;
|
||||
}
|
||||
if (args[argidx].compare(0, 1, "-") == 0) {
|
||||
cmd_error(args, argidx, "unknown option");
|
||||
goto check_error;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
while (argidx < GetSize(args)) {
|
||||
std::string filename = frontent_rewrite(args, argidx, tmp_files);
|
||||
if (!synlib_file::Read(filename.c_str(), is_work_set ? work.c_str() : nullptr))
|
||||
log_cmd_error("Reading `%s' in LIBERTY mode failed.\n", filename.c_str());
|
||||
SynlibLibrary *lib = synlib_file::GetLastLibraryAnalyzed();
|
||||
if (lib && flag_lib) {
|
||||
MapIter mi ;
|
||||
Verific::Cell *c ;
|
||||
FOREACH_CELL_OF_LIBRARY(lib->GetLibrary(),mi,c) {
|
||||
MapIter ni ;
|
||||
Netlist *nl;
|
||||
FOREACH_NETLIST_OF_CELL(c, ni, nl) {
|
||||
if (nl)
|
||||
nl->MakeBlackBox();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
goto check_error;
|
||||
}
|
||||
#endif
|
||||
if (argidx < GetSize(args) && args[argidx] == "-pp")
|
||||
{
|
||||
|
@ -3293,6 +3351,9 @@ struct VerificPass : public Pass {
|
|||
#endif
|
||||
#ifdef VERIFIC_EDIF_SUPPORT
|
||||
edif_file::Reset();
|
||||
#endif
|
||||
#ifdef VERIFIC_LIBERTY_SUPPORT
|
||||
synlib_file::Reset();
|
||||
#endif
|
||||
Libset::Reset();
|
||||
Message::Reset();
|
||||
|
@ -3427,6 +3488,14 @@ struct ReadPass : public Pass {
|
|||
log("\n");
|
||||
log("\n");
|
||||
#endif
|
||||
log(" read {-liberty} <liberty-file>..\n");
|
||||
log("\n");
|
||||
log("Load the specified Liberty files.\n");
|
||||
log("\n");
|
||||
log(" -lib\n");
|
||||
log(" only create empty blackbox modules\n");
|
||||
log("\n");
|
||||
log("\n");
|
||||
log(" read {-f|-F} <command-file>\n");
|
||||
log("\n");
|
||||
log("Load and execute the specified command file. (Requires Verific.)\n");
|
||||
|
@ -3531,6 +3600,15 @@ struct ReadPass : public Pass {
|
|||
return;
|
||||
}
|
||||
#endif
|
||||
if (args[1] == "-liberty") {
|
||||
if (use_verific) {
|
||||
args[0] = "verific";
|
||||
} else {
|
||||
args[0] = "read_liberty";
|
||||
}
|
||||
Pass::call(design, args);
|
||||
return;
|
||||
}
|
||||
if (args[1] == "-f" || args[1] == "-F") {
|
||||
if (use_verific) {
|
||||
args[0] = "verific";
|
||||
|
|
Loading…
Reference in New Issue