Difference between revisions of "How to get library containing nested module"
From Verific Design Automation FAQ
| Line 40: | Line 40: | ||
14 if (!mod) return 2 ; | 14 if (!mod) return 2 ; | ||
15 Array *moduleitems = mod->GetModuleItems() ; | 15 Array *moduleitems = mod->GetModuleItems() ; | ||
| − | 16 unsigned | + | 16 unsigned i ; |
17 VeriModuleItem *item ; | 17 VeriModuleItem *item ; | ||
18 FOREACH_ARRAY_ITEM(moduleitems, i, item) { | 18 FOREACH_ARRAY_ITEM(moduleitems, i, item) { | ||
Latest revision as of 10:52, 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 $