89 lines
2.0 KiB
C
89 lines
2.0 KiB
C
|
|
# include <vpi_user.h>
|
||
|
|
# include <stdlib.h>
|
||
|
|
# include <string.h>
|
||
|
|
# include <assert.h>
|
||
|
|
|
||
|
|
#ifdef IVERILOG_V0_8
|
||
|
|
static PLI_INT32 listparams_compiletf(char*name)
|
||
|
|
#else
|
||
|
|
static PLI_INT32 listparams_compiletf(PLI_BYTE8*name)
|
||
|
|
#endif
|
||
|
|
{
|
||
|
|
(void)name; /* Parameter is not used. */
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
static void param_by_name(vpiHandle scope, const char*key)
|
||
|
|
{
|
||
|
|
vpiHandle iter = vpi_iterate(vpiParameter, scope);
|
||
|
|
vpiHandle item;
|
||
|
|
|
||
|
|
while ( (item = vpi_scan(iter)) ) {
|
||
|
|
|
||
|
|
s_vpi_value value;
|
||
|
|
|
||
|
|
if (strcmp(key, vpi_get_str(vpiName,item)) != 0)
|
||
|
|
continue;
|
||
|
|
|
||
|
|
vpi_printf("%8s: ", vpi_get_str(vpiName, item));
|
||
|
|
|
||
|
|
switch (vpi_get(vpiConstType, item)) {
|
||
|
|
case vpiStringConst:
|
||
|
|
value.format = vpiStringVal;
|
||
|
|
vpi_get_value(item, &value);
|
||
|
|
vpi_printf("%s", value.value.str);
|
||
|
|
break;
|
||
|
|
case vpiBinaryConst:
|
||
|
|
value.format = vpiBinStrVal;
|
||
|
|
vpi_get_value(item, &value);
|
||
|
|
vpi_printf("%s", value.value.str);
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
vpi_printf("\n");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#ifdef IVERILOG_V0_8
|
||
|
|
static PLI_INT32 listparams_calltf(char*name)
|
||
|
|
#else
|
||
|
|
static PLI_INT32 listparams_calltf(PLI_BYTE8*name)
|
||
|
|
#endif
|
||
|
|
{
|
||
|
|
vpiHandle sys = vpi_handle(vpiSysTfCall,0);
|
||
|
|
vpiHandle scope= vpi_handle(vpiScope, sys);
|
||
|
|
vpiHandle argv = vpi_iterate(vpiArgument, sys);
|
||
|
|
vpiHandle item;
|
||
|
|
|
||
|
|
(void)name; /* Parameter is not used. */
|
||
|
|
|
||
|
|
while ( (item = vpi_scan(argv)) ) {
|
||
|
|
s_vpi_value value;
|
||
|
|
value.format = vpiStringVal;
|
||
|
|
vpi_get_value(item, &value);
|
||
|
|
param_by_name(scope, value.value.str);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
static void listparams_register(void)
|
||
|
|
{
|
||
|
|
s_vpi_systf_data tf_data;
|
||
|
|
|
||
|
|
tf_data.type = vpiSysTask;
|
||
|
|
tf_data.tfname = "$listparams";
|
||
|
|
tf_data.calltf = listparams_calltf;
|
||
|
|
tf_data.compiletf = listparams_compiletf;
|
||
|
|
tf_data.sizetf = 0;
|
||
|
|
tf_data.user_data = "$listparams";
|
||
|
|
vpi_register_systf(&tf_data);
|
||
|
|
}
|
||
|
|
|
||
|
|
void (*vlog_startup_routines[])(void) = {
|
||
|
|
listparams_register,
|
||
|
|
0
|
||
|
|
};
|