How to get library containing nested module
From Verific Design Automation FAQ
Q: How do I get the library that contains the module nested inside another module?
Take the following example:
1 module top (output o, input i1, i2, i3); 2 logic t; 3 4 bot b (t, i1, i2); 5 6 module bot (output o, input i1, i2); 7 assign o = i1 ^ i2; 8 endmodule 9 10 assign o = t && i3; 11 endmodule
Calling GetLibrary() on module "bot" returns NULL because a module nested inside another one is not attached to any library. To get the module ("top") containing the nested module ("bot"):
// Get the scope of nested module VeriScope *nested_module_scope = nested_module_ptr->GetScope(); // Get the containing module VeriScope *upper_scope = nested_module_scope ? nested_module_scope->Upper(): 0 ; VerIdDef *containing_module_id = upper_scope ? upper_scope->GetContainingModule(): 0 ;
Sample code how to find nested modules:
1 #include <iostream> 2 #include "veri_file.h" 3 #include "VeriModule.h" 4 #include "VeriId.h" 5 6 #ifdef VERIFIC_NAMESPACE 7 using namespace Verific ; 8 #endif 9 10 int main(int argc, char **argv) 11 { 12 if (!veri_file::Analyze("test.v", veri_file::SYSTEM_VERILOG_2012)) return 1 ; 13 VeriModule *mod = veri_file::GetModule("top") ; 14 if (!mod) return 2 ; 15 Array *moduleitems = mod->GetModuleItems() ; 16 unsigned i ; 17 VeriModuleItem *item ; 18 FOREACH_ARRAY_ITEM(moduleitems, i, item) { 19 if (item->IsModule()) { 20 VeriModule *nestedmodule = static_cast<VeriModule *>(item) ; 21 std::cout << ">> Found nested module: " << nestedmodule->Name() << "\n" ; 22 } 23 } 24 return 0 ; 25 }
Run:
$ test-linux -- Analyzing Verilog file 'test.v' (VERI-1482) >> Found nested module: bot $