82 lines
1.8 KiB
C
82 lines
1.8 KiB
C
#include <assert.h>
|
|
#include "vpi_user.h"
|
|
|
|
static PLI_INT32
|
|
EndOfCompile(s_cb_data *data)
|
|
{
|
|
s_vpi_time timerec = { vpiSimTime, 0, 0, 0 };
|
|
s_vpi_value val;
|
|
|
|
vpiHandle b0_handle;
|
|
vpiHandle wr_handle;
|
|
vpiHandle in_handle;
|
|
|
|
(void)data; /* Parameter is not used. */
|
|
|
|
b0_handle = vpi_handle_by_name("test.B0", 0);
|
|
assert(b0_handle);
|
|
|
|
wr_handle = vpi_handle_by_name("test.WR", 0);
|
|
assert(wr_handle);
|
|
|
|
in_handle = vpi_handle_by_name("test.IN", 0);
|
|
assert(in_handle);
|
|
|
|
timerec.low = 500;
|
|
val.value.str = "01";
|
|
val.format = vpiBinStrVal;
|
|
vpi_put_value(in_handle, &val, &timerec, vpiInertialDelay);
|
|
|
|
val.value.str = "zz";
|
|
val.format = vpiBinStrVal;
|
|
vpi_put_value(b0_handle, &val, &timerec, vpiInertialDelay);
|
|
|
|
val.format = vpiIntVal;
|
|
|
|
val.value.integer = 0;
|
|
vpi_put_value(wr_handle, &val, &timerec, vpiInertialDelay);
|
|
|
|
timerec.low = 500;
|
|
val.value.integer = 0;
|
|
vpi_put_value(wr_handle, &val, &timerec, vpiInertialDelay);
|
|
|
|
val.value.integer = 1;
|
|
timerec.low = 1000;
|
|
vpi_put_value(wr_handle, &val, &timerec, vpiInertialDelay);
|
|
|
|
timerec.low = 1500;
|
|
vpi_put_value(wr_handle, &val, &timerec, vpiInertialDelay);
|
|
|
|
timerec.low = 2000;
|
|
val.value.integer = 0;
|
|
vpi_put_value(wr_handle, &val, &timerec, vpiInertialDelay);
|
|
|
|
timerec.low = 3000;
|
|
val.value.integer = 0;
|
|
vpi_put_value(wr_handle, &val, &timerec, vpiInertialDelay);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
static void
|
|
VPIRegister(void)
|
|
{
|
|
s_cb_data cb_data;
|
|
s_vpi_time timerec = { vpiSuppressTime, 0, 0, 0 };
|
|
|
|
cb_data.time = &timerec;
|
|
cb_data.value = 0;
|
|
cb_data.user_data = 0;
|
|
cb_data.obj = 0;
|
|
cb_data.reason = cbEndOfCompile;
|
|
cb_data.cb_rtn = EndOfCompile;
|
|
|
|
vpi_register_cb(&cb_data);
|
|
}
|
|
|
|
void (*vlog_startup_routines[])(void) = {
|
|
VPIRegister,
|
|
0
|
|
};
|