Statically elaborate with different values of parameters
From Verific Design Automation FAQ
C++:
#include "VeriCopy.h" // Make class VeriMapForCopy available #include "Map.h" // Make class Map available #include "Message.h" // Make message handlers available #include "veri_file.h" // Make verilog reader available #include "VeriModule.h" // Definition of a VeriModule and VeriPrimitive #include "VeriLibrary.h" #include "Array.h" // Make class Array available #include "VeriId.h" // Definitions of all verilog identifier nodes #include "Strings.h" // Definition of class to manipulate copy, concatenate, create etc... #ifdef VERIFIC_NAMESPACE using namespace Verific ; #endif int main() { const char *file_name = "test.sv" ; if (!veri_file::Analyze(file_name, veri_file::SYSTEM_VERILOG)) return 1 ; // Get all the top level modules Array *all_top_modules = veri_file::GetTopModules("work") ; Map *param_map = new Map(STRING_HASH) ; // Apply set only module 'top1' (void) param_map->Insert("top1/p", "8") ; // Pass parameter map to set new value to parameter 'p' of module 'top1' only if (!veri_file::ElaborateMultipleTopStatic(all_top_modules, param_map)) { delete param_map ; return 1 ; } delete all_top_modules ; param_map->Reset() ; veri_file::PrettyPrint("test1_se_pp.v.golden.new", 0, 0) ; veri_file::ResetParser() ; if (!veri_file::Analyze(file_name, veri_file::SYSTEM_VERILOG)) return 1 ; // Get all the top level modules all_top_modules = veri_file::GetTopModules("work") ; // Apply to all top level modules (void) param_map->Insert("p", "18") ; // Pass parameter map to set new value to parameter 'p' of module 'top1' and 'top2' if (!veri_file::ElaborateMultipleTopStatic(all_top_modules, param_map)) { delete param_map ; return 1 ; } delete all_top_modules ; veri_file::PrettyPrint("test2_se_pp.v.golden.new", 0, 0) ; delete param_map ; return 0 ; }
input test.sv:
module top1 ; parameter p = 1 ; endmodule module top2 ; parameter p = 1 ; endmodule
output test1_se_pp.v.golden.new
module top1 /* mod = work.top1 */ ; parameter p = 1 ; endmodule module top2 /* mod = work.top2 */ ; parameter p = 1 ; endmodule module \top1(p=8) /* mod = work.top1(p=8) */ ; parameter p = 8 ; endmodule
output test2_se_pp.v.golden.new
module top1 /* mod = work.top1 */ ; parameter p = 1 ; endmodule module top2 /* mod = work.top2 */ ; parameter p = 1 ; endmodule module \top1(p=18) /* mod = work.top1(p=18) */ ; parameter p = 18 ; endmodule module \top2(p=18) /* mod = work.top2(p=18) */ ; parameter p = 18 ; endmodule