iverilog/ivtest/vpi/range1.c

58 lines
1.4 KiB
C

/*
*/
# include <vpi_user.h>
# include <assert.h>
static int sn_calltf(char*user_data)
{
s_vpi_value value;
int left_value;
int right_value;
(void)user_data; /* Parameter is not used. */
/* Get the handle of an object that we know to be present. */
vpiHandle xor_hand = vpi_handle_by_name("xor_try.inp_xor",0);
/* The object is a vector, get the expressions for the left
and right range values. */
vpiHandle left_hand = vpi_handle(vpiLeftRange, xor_hand);
vpiHandle right_hand = vpi_handle(vpiRightRange, xor_hand);
assert(left_hand);
assert(right_hand);
/* Extract the values from the expressions. */
value.format = vpiIntVal;
vpi_get_value(left_hand, &value);
left_value = value.value.integer;
value.format = vpiIntVal;
vpi_get_value(right_hand, &value);
right_value = value.value.integer;
vpi_printf("Dimensions of xor_try.inp_xor: [%d:%d]\n", left_value, right_value);
return 0;
}
static void vpi_register(void)
{
s_vpi_systf_data tf_data;
tf_data.type = vpiSysTask;
tf_data.calltf = sn_calltf;
tf_data.compiletf = 0;
tf_data.sizetf = 0;
tf_data.tfname = "$sn";
tf_data.user_data = 0;
vpi_register_systf(&tf_data);
}
void (*vlog_startup_routines[])(void) = {
vpi_register,
0
};