Difference between revisions of "How to get library containing nested module"

From Verific Design Automation FAQ
Jump to: navigation, search
(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 11: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
   $