Difference between revisions of "How to get library containing nested module"
From Verific Design Automation FAQ
(Created page with "'''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...") |
|||
Line 22: | Line 22: | ||
VeriScope *upper_scope = nested_module_scope ? nested_module_scope->Upper(): 0 ; | VeriScope *upper_scope = nested_module_scope ? nested_module_scope->Upper(): 0 ; | ||
VerIdDef *containing_module_id = upper_scope ? upper_scope->GetContainingModule(): 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 | ||
+ | $ |
Revision as of 10:08, 19 April 2021
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 $