iverilog/ivtest/vpi/pr2966059.c

54 lines
1.3 KiB
C
Raw Normal View History

#include "vpi_user.h"
#ifdef IVERILOG_V0_8
static PLI_INT32 number_compiletf(char *x)
#else
static PLI_INT32 number_compiletf(PLI_BYTE8 *x)
#endif
{
vpiHandle callh = vpi_handle(vpiSysTfCall, 0);
vpiHandle argv = vpi_iterate(vpiArgument, callh);
vpiHandle arg;
char *name;
s_vpi_value var;
(void)x; /* Parameter is not used. */
if (argv == 0) {
vpi_printf("ERROR: missing required numeric argument.\n"),
vpi_control(vpiFinish, 1);
return 0;
}
arg = vpi_scan(argv);
/* Check to see what vpi_get_value does during compiletf. */
name = vpi_get_str(vpiName, arg);
vpi_printf("vpi_get_value (%s):\n", name ? name : "<N/A>");
var.format = vpiObjTypeVal;
vpi_get_value(arg, &var);
vpi_printf(" format = %d\n", (int) var.format);
var.format = vpiDecStrVal;
vpi_get_value(arg, &var);
vpi_printf(" value = %s\n", var.value.str);
vpi_free_object(argv);
return 0;
}
static void local_register(void)
{
s_vpi_systf_data tf_data;
tf_data.type = vpiSysTask;
tf_data.tfname = "$check_number";
tf_data.calltf = 0;
tf_data.compiletf = number_compiletf;
tf_data.sizetf = 0;
tf_data.user_data = 0;
vpi_register_systf(&tf_data);
}
void (*vlog_startup_routines[]) (void) = {
local_register, 0};