/* * variable value change call back routine */ int var_prt_vclchg(p_vc_record vcp) { /* unsigned long long now, chgtim; */ int otyp, ltime, htime; handle net; char s1[1024], s2[1024], s3[1024]; /* current time */ ltime = tf_getlongsimtime(&htime); /* -- now = ((unsigned long long) ((unsigned long) htime)) << 32 | ((unsigned long long) ((unsigned long) ltime)); -* vc record time *- chgtim = ((unsigned long long) ((unsigned long) vcp->vc_hightime)) << 32 | ((unsigned long long) ((unsigned long) vcp->vc_lowtime)); -- */ /* net handle assigned to user data field */ net = (handle) vcp->user_data; otyp = acc_fetch_type(net); if (vcp->vc_reason != event_value_change) { /* these do not have value, i.e. get va8ue return NULL with error */ if (otyp == accPort || otyp == accPortBit || otyp == accTerminal) { sprintf(s1, "obj=%s", acc_fetch_type_str(otyp)); } else strcpy(s1, acc_fetch_value(net, "%b", NULL)); } switch (vcp->vc_reason) { case logic_value_change: sprintf(s2, "scalar=%u(%s)", (unsigned) vcp->out_value.logic_value, s1); break; case sregister_value_change: sprintf(s2, "sr-scalar=%u(%s)", (unsigned) vcp->out_value.logic_value, s1); break; case real_value_change: case realtime_value_change: sprintf(s2, "**error**"); break; case event_value_change: strcpy(s2, "**event**"); break; default: sprintf(s2, "vector=%s", s1); } /* -- io_printf("--> now %uL (chg time %uL): %s=%s\n", now, chgtim, -- */ if (otyp != accTerminal) strcpy(s3, acc_fetch_fullname(net)); else strcpy(s3, "**terminal**"); io_printf("--> now %d (chg time %d): %s=%s\n", ltime, vcp->vc_lowtime, s3, s2); return(0); }
/*------------------------------------------------------------------------------- --------------------------------------------------------------------------------*/ void handle_error(int loc) { handle hand; hand = acc_handle_tfarg(loc); io_printf("(%0d)Error:unkown value detected name(%s) value(%s)\n", tf_gettime(), acc_fetch_name(hand), acc_fetch_value(hand, "%h", 0)); tf_putp(0, 1);//indicates error }
/************************************************* lxt2_dump - dump symbol value ************************************************/ static void lxt2_dump( info_p info, int init ) { if( info->real ) { s_acc_value value; value.format = accRealVal; acc_fetch_value( info->object, "%%", &value ); lxt2_wr_emit_value_double( lxt.t, info->symbol, 0, value.value.real ); } else if( info->event ) { if( init ) { lxt2_wr_emit_value_bit_string( lxt.t, info->symbol, 0, "0" ); } else { lxt2_wr_emit_value_bit_string( lxt.t, info->symbol, 0, "1" ); info->updateNext = lxt.eventList; lxt.eventList = info; } } else { lxt2_wr_emit_value_bit_string( lxt.t, info->symbol, 0, acc_fetch_value( info->object, "%b", null ) ); #if DEBUG io_printf( "lxt2_dump: %s %s\n", info->name, acc_fetch_value( info->object, "%b", null ) ); #endif } }
/* * wire strength change value change call back routine */ int wire_prt_vclchg(p_vc_record vcp) { /* unsigned long long now, chgtim; */ int typ, ltime, htime; handle net; char s1[1024], s2[1024], s3[1024]; /* current time */ ltime = tf_getlongsimtime(&htime); /* --- now = ((unsigned long long) ((unsigned long) htime)) << 32 | ((unsigned long long) ((unsigned long) ltime)); -* vc record time *- chgtim = ((unsigned long long) ((unsigned long) vcp->vc_hightime)) << 32 | ((unsigned long long) ((unsigned long) vcp->vc_lowtime)); --- */ /* net handle assigned to user data field */ net = (handle) vcp->user_data; /* build strength value string */ sprintf(s1, "<%d, %d>=%d", (int) vcp->out_value.strengths_s.strength1, (int) vcp->out_value.strengths_s.strength2, (int) vcp->out_value.strengths_s.logic_value); /* also get value as internal strength %v string */ strcpy(s2, acc_fetch_value(net, "%v", NULL)); if (vcp->vc_reason != strength_value_change) { io_printf("*** ERROR: wire change reason %d - strength change expected\n", vcp->vc_reason); } /* --- io_printf("--> now %uL (chg time %uL): %s=%s(%s)\n", now, chgtim, -- */ /* terminals do not have names */ typ = acc_fetch_type(net); if (typ != accTerminal) strcpy(s3, acc_fetch_fullname(net)); else strcpy(s3, "**terminal**"); io_printf("--> now %d (chg time %d): %s=%s(%s)\n", ltime, vcp->vc_lowtime, s3, s2, s1); return(0); }