Difference between revisions of "How to ignore parameters/generics in elaboration"

From Verific Design Automation FAQ
Jump to: navigation, search
Line 15: Line 15:
 
  <nowiki>
 
  <nowiki>
 
     veri_file::AnalyzeMultipleFiles(veri_files, veri_file::SYSTEM_VERILOG, "work", veri_file::MFCU);
 
     veri_file::AnalyzeMultipleFiles(veri_files, veri_file::SYSTEM_VERILOG, "work", veri_file::MFCU);
 +
 
     /*** Go through library "work" in the parsetree,
 
     /*** Go through library "work" in the parsetree,
 
         find all parameters,
 
         find all parameters,
Line 22: Line 23:
 
     VeriModule *module ;
 
     VeriModule *module ;
 
     VeriLibrary *work_lib = veri_file::GetLibrary("work", 1);
 
     VeriLibrary *work_lib = veri_file::GetLibrary("work", 1);
 +
 
     FOREACH_VERILOG_MODULE_IN_LIBRARY (work_lib, mi, module) { // do this for each module
 
     FOREACH_VERILOG_MODULE_IN_LIBRARY (work_lib, mi, module) { // do this for each module
 
         if (!module) continue;
 
         if (!module) continue;
Line 32: Line 34:
 
             veri_file::SetIgnoreParameter(work_lib->GetName(), module->Name(), param_id->Name());
 
             veri_file::SetIgnoreParameter(work_lib->GetName(), module->Name(), param_id->Name());
 
         }
 
         }
     }  
+
     }
 +
   
 
     if (!veri_file::Elaborate("top", "work", 0)) {
 
     if (!veri_file::Elaborate("top", "work", 0)) {
 
         return 1 ;
 
         return 1 ;
 
     }
 
     }
 
</nowiki>
 
</nowiki>

Revision as of 16:10, 24 August 2018

Q:Is there a way to tell the elaborator to ignore certain parameters/generics so that the unit/module is not uniquified?

Specific parameters/generics of specific modules/units can be ignored during elaboration. Related APIs are:

   vhdl_file::GetIgnoreGeneric()
   vhdl_file::SetIgnoreGeneric()
   vhdl_file::RemoveAllIgnoreGeneric()
   veri_file::GetIgnoreParameter()
   veri_file::SetIgnoreParameter()
   veri_file::RemoveAllIgnoreParameter()

Below is an example as how to ignore all parameters in a library:

    veri_file::AnalyzeMultipleFiles(veri_files, veri_file::SYSTEM_VERILOG, "work", veri_file::MFCU);

    /*** Go through library "work" in the parsetree,
         find all parameters,
         and set "ignored" on all of them.
         Or you can select the paremeters to ignore ***/
    MapIter mi;
    VeriModule *module ;
    VeriLibrary *work_lib = veri_file::GetLibrary("work", 1);

    FOREACH_VERILOG_MODULE_IN_LIBRARY (work_lib, mi, module) { // do this for each module
        if (!module) continue;
        Array *parameters = module->GetParameters(); // collect all parameters
        if (!parameters) continue;
        unsigned i;
        VeriIdDef *param_id;
        FOREACH_ARRAY_ITEM(parameters, i, param_id) { // do this for each parameter of the module
            if (!param_id) continue;
            veri_file::SetIgnoreParameter(work_lib->GetName(), module->Name(), param_id->Name());
        }
    }
    
    if (!veri_file::Elaborate("top", "work", 0)) {
        return 1 ;
    }