Browse Source

xspice api update

pre-master-46
h_vogt 16 years ago
parent
commit
1fe8cbbf26
  1. 5
      .cvsignore
  2. 49
      ChangeLog
  3. 4
      src/include/cmproto.h
  4. 4
      src/include/dllitf.h
  5. 8
      src/xspice/cm/cm.c
  6. 11
      src/xspice/cm/cmevt.c
  7. 182
      src/xspice/examples/nco/cfunc.mod
  8. 93
      src/xspice/examples/real_delay/cfunc.mod
  9. 152
      src/xspice/examples/real_to_v/cfunc.mod
  10. 6
      src/xspice/icm/analog/d_dt/cfunc.mod
  11. 4
      src/xspice/icm/analog/hyst/cfunc.mod
  12. 7
      src/xspice/icm/analog/int/cfunc.mod
  13. 18
      src/xspice/icm/analog/oneshot/cfunc.mod
  14. 71
      src/xspice/icm/analog/s_xfer/cfunc.mod
  15. 2
      src/xspice/icm/analog/sine/cfunc.mod
  16. 8
      src/xspice/icm/analog/slew/cfunc.mod
  17. 10
      src/xspice/icm/analog/square/cfunc.mod
  18. 8
      src/xspice/icm/analog/triangle/cfunc.mod
  19. 6
      src/xspice/icm/digital/adc_bridge/cfunc.mod
  20. 2
      src/xspice/icm/digital/d_and/cfunc.mod
  21. 2
      src/xspice/icm/digital/d_buffer/cfunc.mod
  22. 11
      src/xspice/icm/digital/d_dff/cfunc.mod
  23. 10
      src/xspice/icm/digital/d_dlatch/cfunc.mod
  24. 6
      src/xspice/icm/digital/d_fdiv/cfunc.mod
  25. 2
      src/xspice/icm/digital/d_inverter/cfunc.mod
  26. 8
      src/xspice/icm/digital/d_jkff/cfunc.mod
  27. 2
      src/xspice/icm/digital/d_nand/cfunc.mod
  28. 2
      src/xspice/icm/digital/d_nor/cfunc.mod
  29. 1
      src/xspice/icm/digital/d_open_c/cfunc.mod
  30. 1
      src/xspice/icm/digital/d_open_e/cfunc.mod
  31. 2
      src/xspice/icm/digital/d_or/cfunc.mod
  32. 8
      src/xspice/icm/digital/d_osc/cfunc.mod
  33. 8
      src/xspice/icm/digital/d_ram/cfunc.mod
  34. 4
      src/xspice/icm/digital/d_source/cfunc.mod
  35. 8
      src/xspice/icm/digital/d_srff/cfunc.mod
  36. 12
      src/xspice/icm/digital/d_srlatch/cfunc.mod
  37. 8
      src/xspice/icm/digital/d_state/cfunc.mod
  38. 8
      src/xspice/icm/digital/d_tff/cfunc.mod
  39. 2
      src/xspice/icm/digital/d_xnor/cfunc.mod
  40. 2
      src/xspice/icm/digital/d_xor/cfunc.mod
  41. 6
      src/xspice/icm/digital/dac_bridge/cfunc.mod
  42. 8
      src/xspice/icm/dlmain.c
  43. 3
      src/xspice/icm/xtradev/capacitor/cfunc.mod
  44. 4
      src/xspice/icm/xtradev/core/cfunc.mod
  45. 3
      src/xspice/icm/xtradev/inductor/cfunc.mod
  46. 18
      src/xspice/icm/xtradev/lcouple/cfunc.mod
  47. 2
      src/xspice/icm/xtraevt/real_delay/cfunc.mod
  48. 4
      src/xspice/icm/xtraevt/real_to_v/cfunc.mod

5
.cvsignore

@ -20,3 +20,8 @@ Makefile
depcomp depcomp
ylwrap ylwrap
*.tar.gz *.tar.gz
autogen-new.log
make.log
distrib
visualc
vs-dll

49
ChangeLog

@ -1,3 +1,52 @@
2010-05-26 Holger Vogt
* xspice api update: cmcm_analog_alloc() and cm_event_alloc()
ng-spice-rework/src/include/cmproto.h
ng-spice-rework/src/include/dllitf.h
ng-spice-rework/src/xspice/cm/cm.c
ng-spice-rework/src/xspice/cm/cmevt.c
ng-spice-rework/src/xspice/examples/nco/cfunc.mod
.../src/xspice/examples/real_delay/cfunc.mod
.../src/xspice/examples/real_to_v/cfunc.mod
.../src/xspice/icm/analog/d_dt/cfunc.mod
.../src/xspice/icm/analog/hyst/cfunc.mod
.../src/xspice/icm/analog/int/cfunc.mod
.../src/xspice/icm/analog/oneshot/cfunc.mod
.../src/xspice/icm/analog/s_xfer/cfunc.mod
.../src/xspice/icm/analog/sine/cfunc.mod
.../src/xspice/icm/analog/slew/cfunc.mod
.../src/xspice/icm/analog/square/cfunc.mod
.../src/xspice/icm/analog/triangle/cfunc.mod
.../src/xspice/icm/digital/adc_bridge/cfunc.mod
.../src/xspice/icm/digital/d_and/cfunc.mod
.../src/xspice/icm/digital/d_buffer/cfunc.mod
.../src/xspice/icm/digital/d_dff/cfunc.mod
.../src/xspice/icm/digital/d_dlatch/cfunc.mod
.../src/xspice/icm/digital/d_fdiv/cfunc.mod
.../src/xspice/icm/digital/d_inverter/cfunc.mod
.../src/xspice/icm/digital/d_jkff/cfunc.mod
.../src/xspice/icm/digital/d_nand/cfunc.mod
.../src/xspice/icm/digital/d_nor/cfunc.mod
.../src/xspice/icm/digital/d_open_c/cfunc.mod
.../src/xspice/icm/digital/d_open_e/cfunc.mod
.../src/xspice/icm/digital/d_or/cfunc.mod
.../src/xspice/icm/digital/d_osc/cfunc.mod
.../src/xspice/icm/digital/d_ram/cfunc.mod
.../src/xspice/icm/digital/d_source/cfunc.mod
.../src/xspice/icm/digital/d_srff/cfunc.mod
.../src/xspice/icm/digital/d_srlatch/cfunc.mod
.../src/xspice/icm/digital/d_state/cfunc.mod
.../src/xspice/icm/digital/d_tff/cfunc.mod
.../src/xspice/icm/digital/d_xnor/cfunc.mod
.../src/xspice/icm/digital/d_xor/cfunc.mod
.../src/xspice/icm/digital/dac_bridge/cfunc.mod
ng-spice-rework/src/xspice/icm/dlmain.c
.../src/xspice/icm/xtradev/capacitor/cfunc.mod
.../src/xspice/icm/xtradev/core/cfunc.mod
.../src/xspice/icm/xtradev/inductor/cfunc.mod
.../src/xspice/icm/xtradev/lcouple/cfunc.mod
.../src/xspice/icm/xtraevt/real_delay/cfunc.mod
.../src/xspice/icm/xtraevt/real_to_v/cfunc.mod
2010-05-22 Holger Vogt 2010-05-22 Holger Vogt
* inpfindl.c: bugfix 3004317 allow level value number given by scientific * inpfindl.c: bugfix 3004317 allow level value number given by scientific
notation notation

4
src/include/cmproto.h

@ -67,7 +67,7 @@ double cm_smooth_pwl(double x_input, double *x, double *y, int size,
double input_domain, double *dout_din); double input_domain, double *dout_din);
double cm_analog_ramp_factor(void); double cm_analog_ramp_factor(void);
void *cm_analog_alloc(int tag, int bytes);
void cm_analog_alloc(int tag, int bytes);
void *cm_analog_get_ptr(int tag, int timepoint); void *cm_analog_get_ptr(int tag, int timepoint);
int cm_analog_integrate(double integrand, double *integral, double *partial); int cm_analog_integrate(double integrand, double *integral, double *partial);
int cm_analog_converge(double *state); int cm_analog_converge(double *state);
@ -76,7 +76,7 @@ int cm_analog_set_perm_bkpt(double time);
void cm_analog_not_converged(void); void cm_analog_not_converged(void);
void cm_analog_auto_partial(void); void cm_analog_auto_partial(void);
void *cm_event_alloc(int tag, int bytes);
void cm_event_alloc(int tag, int bytes);
void *cm_event_get_ptr(int tag, int timepoint); void *cm_event_get_ptr(int tag, int timepoint);
int cm_event_queue(double time); int cm_event_queue(double time);

4
src/include/dllitf.h

@ -44,7 +44,7 @@ struct coreInfo_t {
double *, double *)); double *, double *));
double ((*dllitf_cm_smooth_pwl)(double, double *, double *, int, double, double *)); double ((*dllitf_cm_smooth_pwl)(double, double *, double *, int, double, double *));
double ((*dllitf_cm_analog_ramp_factor)(void)); double ((*dllitf_cm_analog_ramp_factor)(void));
void * ((*dllitf_cm_analog_alloc)(int, int));
void ((*dllitf_cm_analog_alloc)(int, int));
void * ((*dllitf_cm_analog_get_ptr)(int, int)); void * ((*dllitf_cm_analog_get_ptr)(int, int));
int ((*dllitf_cm_analog_integrate)(double, double *, double *)); int ((*dllitf_cm_analog_integrate)(double, double *, double *));
int ((*dllitf_cm_analog_converge)(double *)); int ((*dllitf_cm_analog_converge)(double *));
@ -52,7 +52,7 @@ struct coreInfo_t {
int ((*dllitf_cm_analog_set_perm_bkpt)(double)); int ((*dllitf_cm_analog_set_perm_bkpt)(double));
void ((*dllitf_cm_analog_not_converged)(void)); void ((*dllitf_cm_analog_not_converged)(void));
void ((*dllitf_cm_analog_auto_partial)(void)); void ((*dllitf_cm_analog_auto_partial)(void));
void * ((*dllitf_cm_event_alloc)(int, int));
void ((*dllitf_cm_event_alloc)(int, int));
void * ((*dllitf_cm_event_get_ptr)(int, int)); void * ((*dllitf_cm_event_get_ptr)(int, int));
int ((*dllitf_cm_event_queue)(double)); int ((*dllitf_cm_event_queue)(double));
char * ((*dllitf_cm_message_get_errmsg)(void)); char * ((*dllitf_cm_message_get_errmsg)(void));

8
src/xspice/cm/cm.c

@ -76,7 +76,7 @@ of the state storage area can be found by cm_analog_get_ptr().
*/ */
void *cm_analog_alloc(
void cm_analog_alloc(
int tag, /* The user-specified tag for this block of memory */ int tag, /* The user-specified tag for this block of memory */
int bytes) /* The number of bytes to allocate */ int bytes) /* The number of bytes to allocate */
{ {
@ -97,7 +97,7 @@ void *cm_analog_alloc(
for(i = 0; i < here->num_state; i++) { for(i = 0; i < here->num_state; i++) {
if(tag == here->state[i].tag) { if(tag == here->state[i].tag) {
g_mif_info.errmsg = "ERROR - cm_analog_alloc() - Tag already used in previous call\n"; g_mif_info.errmsg = "ERROR - cm_analog_alloc() - Tag already used in previous call\n";
return(NULL);
return;
} }
} }
@ -132,10 +132,6 @@ void *cm_analog_alloc(
ckt->CKTstates[i] = (double *) REALLOC(ckt->CKTstates[i], ckt->CKTstates[i] = (double *) REALLOC(ckt->CKTstates[i],
ckt->CKTnumStates * sizeof(double)); ckt->CKTnumStates * sizeof(double));
} }
/* Return pointer to the allocated space in state 0 */
return( (void *) (ckt->CKTstates[0] + (ckt->CKTnumStates - doubles_needed)));
} }

11
src/xspice/cm/cmevt.c

@ -61,7 +61,7 @@ timesteps.
*/ */
void *cm_event_alloc(
void cm_event_alloc(
int tag, /* The user-specified tag for the memory block */ int tag, /* The user-specified tag for the memory block */
int bytes) /* The number of bytes to be allocated */ int bytes) /* The number of bytes to be allocated */
{ {
@ -90,7 +90,7 @@ void *cm_event_alloc(
if(here->initialized) { if(here->initialized) {
g_mif_info.errmsg = g_mif_info.errmsg =
"ERROR - cm_event_alloc() - Cannot alloc when not initialization pass\n"; "ERROR - cm_event_alloc() - Cannot alloc when not initialization pass\n";
return(NULL);
return;
} }
@ -108,7 +108,7 @@ void *cm_event_alloc(
if(desc->tag == tag) { if(desc->tag == tag) {
g_mif_info.errmsg = g_mif_info.errmsg =
"ERROR - cm_event_alloc() - Duplicate tag\n"; "ERROR - cm_event_alloc() - Duplicate tag\n";
return(NULL);
return;
} }
desc_ptr = &(desc->next); desc_ptr = &(desc->next);
desc = *desc_ptr; desc = *desc_ptr;
@ -139,11 +139,6 @@ void *cm_event_alloc(
state_data->total_size[inst_index]); state_data->total_size[inst_index]);
state->step = g_mif_info.circuit.evt_step; state->step = g_mif_info.circuit.evt_step;
/* Return allocated memory */
ptr = ((char *)state->block) + desc->offset;
return(ptr);
} }

182
src/xspice/examples/nco/cfunc.mod

@ -1,90 +1,92 @@
/* $Id$ */
void *malloc(unsigned);
#define OUT_STATE 0
#define NXT_TIME 1
#define NUM_NOTES 128
/* A numerically controlled oscillator. Output frequencies */
/* are determined according to the MIDI note number at input */
void ucm_nco (ARGS)
{
double *freq;
int *output_state;
double *next_time;
int i;
int index;
int scale_factor;
double half_period;
if(INIT) {
/* Setup storage for the toggled output state */
output_state = (int *) cm_event_alloc(OUT_STATE, sizeof(int));
next_time = (double *) cm_event_alloc(NXT_TIME, sizeof(double));
/* Allocate storage for frequencies */
STATIC_VAR(freq) = malloc(NUM_NOTES * sizeof(double));
freq = STATIC_VAR(freq);
/* Initialize the frequency array */
for(i = 0; i < NUM_NOTES; i++) {
if(i == 0)
freq[0] = 8.17578 * PARAM(mult_factor);
else
freq[i] = freq[i-1] * 1.059463094;
}
}
else {
/* Get old output state */
output_state = (int *) cm_event_get_ptr(OUT_STATE, 0);
next_time = (double *) cm_event_get_ptr(NXT_TIME, 0);
}
/* Convert the input bits to an integer */
index = 0;
scale_factor = 64;
for(i = 0; i < 7; i++) {
if(INPUT_STATE(in[i]) == ONE)
index += scale_factor;
scale_factor /= 2;
}
/* Look up the frequency and compute half its period */
freq = STATIC_VAR(freq);
half_period = 1.0 / freq[index];
/* Queue up events and output the new state */
if(TIME == 0.0) {
*next_time = half_period;
cm_event_queue(*next_time);
OUTPUT_STATE(out) = *output_state;
}
else {
if(TIME == *next_time) {
*next_time = TIME + half_period;
cm_event_queue(*next_time);
*output_state = 1 - *output_state;
OUTPUT_STATE(out) = *output_state;
OUTPUT_DELAY(out) = PARAM(delay);
}
else
OUTPUT_CHANGED(out) = FALSE;
}
}
/* $Id$ */
void *malloc(unsigned);
#define OUT_STATE 0
#define NXT_TIME 1
#define NUM_NOTES 128
/* A numerically controlled oscillator. Output frequencies */
/* are determined according to the MIDI note number at input */
void ucm_nco (ARGS)
{
double *freq;
int *output_state;
double *next_time;
int i;
int index;
int scale_factor;
double half_period;
if(INIT) {
/* Setup storage for the toggled output state */
cm_event_alloc(OUT_STATE, sizeof(int));
cm_event_alloc(NXT_TIME, sizeof(double));
output_state = (int *) cm_event_get_ptr(OUT_STATE, 0);
next_time = (double *) cm_event_get_ptr(NXT_TIME, 0);
/* Allocate storage for frequencies */
STATIC_VAR(freq) = malloc(NUM_NOTES * sizeof(double));
freq = STATIC_VAR(freq);
/* Initialize the frequency array */
for(i = 0; i < NUM_NOTES; i++) {
if(i == 0)
freq[0] = 8.17578 * PARAM(mult_factor);
else
freq[i] = freq[i-1] * 1.059463094;
}
}
else {
/* Get old output state */
output_state = (int *) cm_event_get_ptr(OUT_STATE, 0);
next_time = (double *) cm_event_get_ptr(NXT_TIME, 0);
}
/* Convert the input bits to an integer */
index = 0;
scale_factor = 64;
for(i = 0; i < 7; i++) {
if(INPUT_STATE(in[i]) == ONE)
index += scale_factor;
scale_factor /= 2;
}
/* Look up the frequency and compute half its period */
freq = STATIC_VAR(freq);
half_period = 1.0 / freq[index];
/* Queue up events and output the new state */
if(TIME == 0.0) {
*next_time = half_period;
cm_event_queue(*next_time);
OUTPUT_STATE(out) = *output_state;
}
else {
if(TIME == *next_time) {
*next_time = TIME + half_period;
cm_event_queue(*next_time);
*output_state = 1 - *output_state;
OUTPUT_STATE(out) = *output_state;
OUTPUT_DELAY(out) = PARAM(delay);
}
else
OUTPUT_CHANGED(out) = FALSE;
}
}

93
src/xspice/examples/real_delay/cfunc.mod

@ -1,46 +1,47 @@
/* $Id$ */
#define CLK_STATE 0
void ucm_real_delay (ARGS)
{
double *in;
double *out;
Digital_State_t *state;
Digital_State_t *old_state;
if(INIT) {
state = (void *) cm_event_alloc(CLK_STATE, sizeof(Digital_State_t));
old_state = state;
*state = INPUT_STATE(clk);
}
else {
state = (void *) cm_event_get_ptr(CLK_STATE, 0);
old_state = (void *) cm_event_get_ptr(CLK_STATE, 1);
}
if(ANALYSIS != TRANSIENT)
OUTPUT_CHANGED(out) = FALSE;
else {
*state = INPUT_STATE(clk);
if(*state == *old_state)
OUTPUT_CHANGED(out) = FALSE;
else if(*state != ONE)
OUTPUT_CHANGED(out) = FALSE;
else {
in = INPUT(in);
out = OUTPUT(out);
*out = *in;
OUTPUT_DELAY(out) = PARAM(delay);
}
}
}
/* $Id$ */
#define CLK_STATE 0
void ucm_real_delay (ARGS)
{
double *in;
double *out;
Digital_State_t *state;
Digital_State_t *old_state;
if(INIT) {
cm_event_alloc(CLK_STATE, sizeof(Digital_State_t));
state = (void *) cm_event_get_ptr(CLK_STATE, 0);
old_state = state;
*state = INPUT_STATE(clk);
}
else {
state = (void *) cm_event_get_ptr(CLK_STATE, 0);
old_state = (void *) cm_event_get_ptr(CLK_STATE, 1);
}
if(ANALYSIS != TRANSIENT)
OUTPUT_CHANGED(out) = FALSE;
else {
*state = INPUT_STATE(clk);
if(*state == *old_state)
OUTPUT_CHANGED(out) = FALSE;
else if(*state != ONE)
OUTPUT_CHANGED(out) = FALSE;
else {
in = INPUT(in);
out = OUTPUT(out);
*out = *in;
OUTPUT_DELAY(out) = PARAM(delay);
}
}
}

152
src/xspice/examples/real_to_v/cfunc.mod

@ -1,75 +1,77 @@
/* $Id$ */
#define TS 0
#define VS 1
void ucm_real_to_v (ARGS)
{
double *t, *v;
double *in;
double out;
in = INPUT(in);
if(INIT) {
t = (void *) cm_event_alloc(TS, 2 * sizeof(double));
v = (void *) cm_event_alloc(VS, 2 * sizeof(double));
t[0] = -2.0;
t[1] = -1.0;
v[0] = *in;
v[1] = *in;
}
else {
t = (void *) cm_event_get_ptr(TS, 0);
v = (void *) cm_event_get_ptr(VS, 0);
}
switch(CALL_TYPE) {
case ANALOG:
if(TIME == 0.0) {
OUTPUT(out) = *in;
v[0] = *in;
v[1] = *in;
}
else {
if(TIME <= t[0])
OUTPUT(out) = v[0];
else if(TIME >= t[1])
OUTPUT(out) = v[1];
else {
OUTPUT(out) = v[0] + (v[1] - v[0]) *
(TIME - t[0]) / (t[1] - t[0]);
}
}
break;
case EVENT:
if(TIME == 0.0)
return;
if(TIME >= t[1]) {
v[0] = v[1];
v[1] = *in;
t[0] = TIME;
t[1] = TIME + PARAM(transition_time);
}
else {
v[0] = v[0] + (v[1] - v[0]) *
(TIME - t[0]) / (t[1] - t[0]);
v[1] = *in;
t[0] = TIME;
t[1] = TIME + PARAM(transition_time);
}
break;
}
}
/* $Id$ */
#define TS 0
#define VS 1
void ucm_real_to_v (ARGS)
{
double *t, *v;
double *in;
double out;
in = INPUT(in);
if(INIT) {
cm_event_alloc(TS, 2 * sizeof(double));
cm_event_alloc(VS, 2 * sizeof(double));
t = (void *) cm_event_get_ptr(TS, 0);
v = (void *) cm_event_get_ptr(VS, 0);
t[0] = -2.0;
t[1] = -1.0;
v[0] = *in;
v[1] = *in;
}
else {
t = (void *) cm_event_get_ptr(TS, 0);
v = (void *) cm_event_get_ptr(VS, 0);
}
switch(CALL_TYPE) {
case ANALOG:
if(TIME == 0.0) {
OUTPUT(out) = *in;
v[0] = *in;
v[1] = *in;
}
else {
if(TIME <= t[0])
OUTPUT(out) = v[0];
else if(TIME >= t[1])
OUTPUT(out) = v[1];
else {
OUTPUT(out) = v[0] + (v[1] - v[0]) *
(TIME - t[0]) / (t[1] - t[0]);
}
}
break;
case EVENT:
if(TIME == 0.0)
return;
if(TIME >= t[1]) {
v[0] = v[1];
v[1] = *in;
t[0] = TIME;
t[1] = TIME + PARAM(transition_time);
}
else {
v[0] = v[0] + (v[1] - v[0]) *
(TIME - t[0]) / (t[1] - t[0]);
v[1] = *in;
t[0] = TIME;
t[1] = TIME + PARAM(transition_time);
}
break;
}
}

6
src/xspice/icm/analog/d_dt/cfunc.mod

@ -171,17 +171,15 @@ void cm_d_dt(ARGS)
/* Also, calculate roughly where the current output */ /* Also, calculate roughly where the current output */
/* will be and use this value to define current state. */ /* will be and use this value to define current state. */
in = cm_analog_alloc(TRUE,sizeof(double));
in_old = cm_analog_get_ptr(TRUE,1);
cm_analog_alloc(TRUE,sizeof(double));
} }
else { /* Allocation not necessary...retrieve previous values */
/* retrieve previous values */
in = cm_analog_get_ptr(TRUE,0); /* Set out pointer to current in = cm_analog_get_ptr(TRUE,0); /* Set out pointer to current
time storage */ time storage */
in_old = cm_analog_get_ptr(TRUE,1); /* Set old-output-state pointer in_old = cm_analog_get_ptr(TRUE,1); /* Set old-output-state pointer
to previous time storage */ to previous time storage */
}
if ( 0.0 == TIME ) { /*** Test to see if this is the first ***/ if ( 0.0 == TIME ) { /*** Test to see if this is the first ***/

4
src/xspice/icm/analog/hyst/cfunc.mod

@ -244,7 +244,9 @@ void cm_hyst(ARGS) /* structure holding parms,
/* Also, calculate roughly where the current output */ /* Also, calculate roughly where the current output */
/* will be and use this value to define current state. */ /* will be and use this value to define current state. */
hyst_state = cm_analog_alloc(TRUE,sizeof(Boolean_t));
cm_analog_alloc(TRUE,sizeof(Boolean_t));
hyst_state = cm_analog_get_ptr(TRUE,0);
old_hyst_state = cm_analog_get_ptr(TRUE,1); old_hyst_state = cm_analog_get_ptr(TRUE,1);
if (in < x_rise_zero + input_domain) { /* Set state to X_RISING */ if (in < x_rise_zero + input_domain) { /* Set state to X_RISING */

7
src/xspice/icm/analog/int/cfunc.mod

@ -163,14 +163,13 @@ void cm_int(ARGS) /* structure holding parms,
if (INIT==1) { /* First pass...allocate storage for previous value. */ if (INIT==1) { /* First pass...allocate storage for previous value. */
in = cm_analog_alloc(INT1,sizeof(double));
out = cm_analog_alloc(INT2,sizeof(double));
cm_analog_alloc(INT1,sizeof(double));
cm_analog_alloc(INT2,sizeof(double));
} }
else { /* Allocation not necessary...retrieve previous value */
/* retrieve previous value */
in = cm_analog_get_ptr(INT1,0); /* Set out pointer to input storage location */ in = cm_analog_get_ptr(INT1,0); /* Set out pointer to input storage location */
out = cm_analog_get_ptr(INT2,0); /* Set out pointer to output storage location */ out = cm_analog_get_ptr(INT2,0); /* Set out pointer to output storage location */
}
/*** Read input value for current time, and calculate pseudo-input ***/ /*** Read input value for current time, and calculate pseudo-input ***/

18
src/xspice/icm/analog/oneshot/cfunc.mod

@ -226,15 +226,15 @@ void cm_oneshot(ARGS) /* structure holding parms,
if(INIT == 1){ /* first time through, allocate memory */ if(INIT == 1){ /* first time through, allocate memory */
t1 = cm_analog_alloc(T1,sizeof(double));
t2 = cm_analog_alloc(T2,sizeof(double));
t3 = cm_analog_alloc(T3,sizeof(double));
t4 = cm_analog_alloc(T4,sizeof(double));
set = cm_analog_alloc(SET,sizeof(int));
state = cm_analog_alloc(STATE,sizeof(int));
clock = cm_analog_alloc(CLOCK,sizeof(double));
locked = cm_analog_alloc(LOCKED,sizeof(int));
output_old = cm_analog_alloc(OUTPUT_OLD,sizeof(double));
cm_analog_alloc(T1,sizeof(double));
cm_analog_alloc(T2,sizeof(double));
cm_analog_alloc(T3,sizeof(double));
cm_analog_alloc(T4,sizeof(double));
cm_analog_alloc(SET,sizeof(int));
cm_analog_alloc(STATE,sizeof(int));
cm_analog_alloc(CLOCK,sizeof(double));
cm_analog_alloc(LOCKED,sizeof(int));
cm_analog_alloc(OUTPUT_OLD,sizeof(double));
} }

71
src/xspice/icm/analog/s_xfer/cfunc.mod

@ -281,66 +281,47 @@ void cm_s_xfer(ARGS) /* structure holding parms, inputs, outputs, etc. */
/* We have to allocate memory and use cm_analog_alloc, because the ITP variables /* We have to allocate memory and use cm_analog_alloc, because the ITP variables
are not functional */ are not functional */
integrator = (double **) calloc(den_size,sizeof(double *));
old_integrator = (double **) calloc(den_size,sizeof(double *));
for (i=0; i<den_size; i++) {
integrator[i] = cm_analog_alloc(i,sizeof(double));
old_integrator[i] = cm_analog_get_ptr(i,0);
}
integrator = (double **) calloc(den_size, sizeof(double *));
old_integrator = (double **) calloc(den_size, sizeof(double *));
/* Allocate storage for coefficient values */ /* Allocate storage for coefficient values */
den_coefficient = (double **) calloc(den_size,sizeof(double *));
old_den_coefficient = (double **) calloc(den_size,sizeof(double *));
num_coefficient = (double **) calloc(num_size,sizeof(double *));
old_num_coefficient = (double **) calloc(num_size,sizeof(double *));
den_coefficient = (double **) calloc(den_size,sizeof(double *));
old_den_coefficient = (double **) calloc(den_size,sizeof(double *));
for(i=den_size;i<(2*den_size);i++){
old_den_coefficient[i-den_size] = den_coefficient[i-den_size] =
cm_analog_alloc(i,sizeof(double));
}
num_coefficient = (double **) calloc(num_size,sizeof(double *));
old_num_coefficient = (double **) calloc(num_size,sizeof(double *));
for(i=2*den_size;i<(2*den_size + num_size);i++){
old_num_coefficient[i-2*den_size] = num_coefficient[i-2*den_size] =
cm_analog_alloc(i,sizeof(double));
}
out = cm_analog_alloc(2*den_size+num_size,sizeof(double));
in = cm_analog_alloc(2*den_size+num_size+1,sizeof(double));
for (i=0; i < (2*den_size + num_size + 3); i++)
cm_analog_alloc(i,sizeof(double));
/* ITP_VAR_SIZE(den) = den_size; */ /* ITP_VAR_SIZE(den) = den_size; */
gain = cm_analog_alloc(2*den_size+num_size+2,sizeof(double));
/* gain = (double *) calloc(1,sizeof(double));
ITP_VAR(total_gain) = gain;
ITP_VAR_SIZE(total_gain) = 1.0; */
/* gain = (double *) calloc(1,sizeof(double));
ITP_VAR(total_gain) = gain;
ITP_VAR_SIZE(total_gain) = 1.0; */
// Retrieve pointers // Retrieve pointers
for (i=0; i<den_size; i++) {
integrator[i] = cm_analog_get_ptr(i,0);
for (i=0; i<den_size; i++) {
integrator[i] = cm_analog_get_ptr(i,0);
old_integrator[i] = cm_analog_get_ptr(i,0); old_integrator[i] = cm_analog_get_ptr(i,0);
} }
out = cm_analog_get_ptr(2*den_size+num_size,0);
in = cm_analog_get_ptr(2*den_size+num_size+1,0);
for(i=den_size;i<2*den_size;i++){
den_coefficient[i-den_size] = cm_analog_get_ptr(i,0);
old_den_coefficient[i-den_size] = cm_analog_get_ptr(i,0);
}
for(i=den_size;i<2*den_size;i++) {
den_coefficient[i-den_size] = cm_analog_get_ptr(i,0);
old_den_coefficient[i-den_size] = cm_analog_get_ptr(i,0);
}
for(i=2*den_size;i<2*den_size+num_size;i++){
num_coefficient[i-2*den_size] = cm_analog_get_ptr(i,0);
old_num_coefficient[i-2*den_size] = cm_analog_get_ptr(i,0);
}
for(i=2*den_size;i<2*den_size+num_size;i++) {
num_coefficient[i-2*den_size] = cm_analog_get_ptr(i,0);
old_num_coefficient[i-2*den_size] = cm_analog_get_ptr(i,0);
}
gain = cm_analog_get_ptr(2*den_size+num_size+2,0);
out = cm_analog_get_ptr(2*den_size+num_size, 0);
in = cm_analog_get_ptr(2*den_size+num_size+1, 0);
gain = cm_analog_get_ptr(2*den_size+num_size+2,0);
}else { /* Allocation was not necessary...retrieve previous values */ }else { /* Allocation was not necessary...retrieve previous values */

2
src/xspice/icm/analog/sine/cfunc.mod

@ -160,7 +160,7 @@ void cm_sine(ARGS) /* structure holding parms,
if(INIT == 1){ if(INIT == 1){
phase = cm_analog_alloc(INT1,sizeof(double));
cm_analog_alloc(INT1,sizeof(double));
} }
if(ANALYSIS == MIF_DC){ if(ANALYSIS == MIF_DC){

8
src/xspice/icm/analog/slew/cfunc.mod

@ -147,10 +147,10 @@ void cm_slew(ARGS)
/* First pass...allocate storage for previous state. */ /* First pass...allocate storage for previous state. */
ins = cm_analog_alloc(INT1,sizeof(double));
outs = cm_analog_alloc(INT4,sizeof(double));
out_old = cm_analog_alloc(INT2,sizeof(double));
in_old = cm_analog_alloc(INT3,sizeof(double));
cm_analog_alloc(INT1,sizeof(double));
cm_analog_alloc(INT4,sizeof(double));
cm_analog_alloc(INT2,sizeof(double));
cm_analog_alloc(INT3,sizeof(double));
} }

10
src/xspice/icm/analog/square/cfunc.mod

@ -200,11 +200,11 @@ void cm_square(ARGS) /* structure holding parms,
/* First time throught allocate memory */ /* First time throught allocate memory */
if(INIT==1){ if(INIT==1){
phase = cm_analog_alloc(INT1,sizeof(double));
t1 = cm_analog_alloc(T1,sizeof(double));
t2 = cm_analog_alloc(T2,sizeof(double));
t3 = cm_analog_alloc(T3,sizeof(double));
t4 = cm_analog_alloc(T4,sizeof(double));
cm_analog_alloc(INT1,sizeof(double));
cm_analog_alloc(T1,sizeof(double));
cm_analog_alloc(T2,sizeof(double));
cm_analog_alloc(T3,sizeof(double));
cm_analog_alloc(T4,sizeof(double));
} }

8
src/xspice/icm/analog/triangle/cfunc.mod

@ -193,10 +193,10 @@ void cm_triangle(ARGS) /* structure holding parms,
/* Allocate memory */ /* Allocate memory */
if(INIT==1){ if(INIT==1){
phase = cm_analog_alloc(INT1,sizeof(double));
t1 = cm_analog_alloc(T1,sizeof(double));
t2 = cm_analog_alloc(T2,sizeof(double));
t_end = cm_analog_alloc(T3,sizeof(double));
cm_analog_alloc(INT1,sizeof(double));
cm_analog_alloc(T1,sizeof(double));
cm_analog_alloc(T2,sizeof(double));
cm_analog_alloc(T3,sizeof(double));
} }

6
src/xspice/icm/digital/adc_bridge/cfunc.mod

@ -175,12 +175,10 @@ void cm_adc_bridge(ARGS)
/* Allocate storage for inputs */ /* Allocate storage for inputs */
in = in_old = cm_analog_alloc(0,size * sizeof(double));
cm_analog_alloc(0,size * sizeof(double));
/* Allocate storage for outputs */ /* Allocate storage for outputs */
out = out_old = (Digital_State_t *) cm_event_alloc(1,size * sizeof(Digital_State_t));
cm_event_alloc(1,size * sizeof(Digital_State_t));
/* Get analog addresses */ /* Get analog addresses */
in = in_old = cm_analog_get_ptr(0,0); in = in_old = cm_analog_get_ptr(0,0);

2
src/xspice/icm/digital/d_and/cfunc.mod

@ -148,7 +148,7 @@ void cm_d_and(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage for the outputs */ /* allocate storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
/* set loading for inputs */ /* set loading for inputs */
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load); for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);

2
src/xspice/icm/digital/d_buffer/cfunc.mod

@ -137,7 +137,7 @@ void cm_d_buffer(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage for the outputs */ /* allocate storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
/* define input loading... */ /* define input loading... */
LOAD(in) = PARAM(input_load); LOAD(in) = PARAM(input_load);

11
src/xspice/icm/digital/d_dff/cfunc.mod

@ -219,13 +219,10 @@ void cm_d_dff(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage */ /* allocate storage */
clk = clk_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
set = set_old = (Digital_State_t *) cm_event_alloc(1,sizeof(Digital_State_t));
reset = reset_old = (Digital_State_t *) cm_event_alloc(2,sizeof(Digital_State_t));
out = out_old = (Digital_State_t *) cm_event_alloc(3,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(1,sizeof(Digital_State_t));
cm_event_alloc(2,sizeof(Digital_State_t));
cm_event_alloc(3,sizeof(Digital_State_t));
/* declare load values */ /* declare load values */
LOAD(data) = PARAM(data_load); LOAD(data) = PARAM(data_load);

10
src/xspice/icm/digital/d_dlatch/cfunc.mod

@ -223,11 +223,11 @@ void cm_d_dlatch(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage */ /* allocate storage */
data = data_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
enable = enable_old = (Digital_State_t *) cm_event_alloc(1,sizeof(Digital_State_t));
set = set_old = (Digital_State_t *) cm_event_alloc(2,sizeof(Digital_State_t));
reset = reset_old = (Digital_State_t *) cm_event_alloc(3,sizeof(Digital_State_t));
out = out_old = (Digital_State_t *) cm_event_alloc(4,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(1,sizeof(Digital_State_t));
cm_event_alloc(2,sizeof(Digital_State_t));
cm_event_alloc(3,sizeof(Digital_State_t));
cm_event_alloc(4,sizeof(Digital_State_t));
/* declare load values */ /* declare load values */
LOAD(data) = PARAM(data_load); LOAD(data) = PARAM(data_load);

6
src/xspice/icm/digital/d_fdiv/cfunc.mod

@ -147,9 +147,9 @@ void cm_d_fdiv(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage */ /* allocate storage */
freq_in = freq_in_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
freq_out = freq_out_old = (Digital_State_t *) cm_event_alloc(1,sizeof(Digital_State_t));
count = count_old = (Digital_State_t *) cm_event_alloc(2,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(1,sizeof(Digital_State_t));
cm_event_alloc(2,sizeof(Digital_State_t));
/* declare load values */ /* declare load values */
LOAD(freq_in) = PARAM(freq_in_load); LOAD(freq_in) = PARAM(freq_in_load);

2
src/xspice/icm/digital/d_inverter/cfunc.mod

@ -140,7 +140,7 @@ void cm_d_inverter(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage for the outputs */ /* allocate storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
/* define load value on inputs */ /* define load value on inputs */
LOAD(in) = PARAM(input_load); LOAD(in) = PARAM(input_load);

8
src/xspice/icm/digital/d_jkff/cfunc.mod

@ -312,10 +312,10 @@ void cm_d_jkff(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage */ /* allocate storage */
clk = clk_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
set = set_old = (Digital_State_t *) cm_event_alloc(1,sizeof(Digital_State_t));
reset = reset_old = (Digital_State_t *) cm_event_alloc(2,sizeof(Digital_State_t));
out = out_old = (Digital_State_t *) cm_event_alloc(3,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(1,sizeof(Digital_State_t));
cm_event_alloc(2,sizeof(Digital_State_t));
cm_event_alloc(3,sizeof(Digital_State_t));
/* declare load values */ /* declare load values */
LOAD(j) = PARAM(jk_load); LOAD(j) = PARAM(jk_load);

2
src/xspice/icm/digital/d_nand/cfunc.mod

@ -143,7 +143,7 @@ void cm_d_nand(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage for the outputs */ /* allocate storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load); for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);

2
src/xspice/icm/digital/d_nor/cfunc.mod

@ -144,7 +144,7 @@ void cm_d_nor(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage for the outputs */ /* allocate storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load); for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);

1
src/xspice/icm/digital/d_open_c/cfunc.mod

@ -137,7 +137,6 @@ void cm_d_open_c(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage for the outputs */ /* allocate storage for the outputs */
out = out_old = (Digital_State_t *)
cm_event_alloc(0,sizeof(Digital_State_t)); cm_event_alloc(0,sizeof(Digital_State_t));
/* define input loading... */ /* define input loading... */

1
src/xspice/icm/digital/d_open_e/cfunc.mod

@ -137,7 +137,6 @@ void cm_d_open_e(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage for the outputs */ /* allocate storage for the outputs */
out = out_old = (Digital_State_t *)
cm_event_alloc(0,sizeof(Digital_State_t)); cm_event_alloc(0,sizeof(Digital_State_t));
/* define input loading... */ /* define input loading... */

2
src/xspice/icm/digital/d_or/cfunc.mod

@ -144,7 +144,7 @@ void cm_d_or(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage for the outputs */ /* allocate storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load); for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);

8
src/xspice/icm/digital/d_osc/cfunc.mod

@ -209,11 +209,9 @@ void cm_d_osc(ARGS)
/* Allocate storage for internal variables */ /* Allocate storage for internal variables */
phase = phase_old = cm_analog_alloc(0,sizeof(double));
t1 = cm_analog_alloc(1,sizeof(double));
t3 = cm_analog_alloc(2,sizeof(double));
cm_analog_alloc(0, sizeof(double));
cm_analog_alloc(1, sizeof(double));
cm_analog_alloc(2, sizeof(double));
/* assign internal variables */ /* assign internal variables */
phase = phase_old = cm_analog_get_ptr(0,0); phase = phase_old = cm_analog_get_ptr(0,0);

8
src/xspice/icm/digital/d_ram/cfunc.mod

@ -953,13 +953,13 @@ void cm_d_ram(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage */ /* allocate storage */
address = address_old = (Digital_State_t *) cm_event_alloc(0,address_size * sizeof(Digital_State_t));
write_en = write_en_old = (Digital_State_t *) cm_event_alloc(1,sizeof(Digital_State_t));
select = select_old = (Digital_State_t *) cm_event_alloc(2,select_size * sizeof(Digital_State_t));
cm_event_alloc(0,address_size * sizeof(Digital_State_t));
cm_event_alloc(1,sizeof(Digital_State_t));
cm_event_alloc(2,select_size * sizeof(Digital_State_t));
/* allocate storage for ram memory */ /* allocate storage for ram memory */
ram = ram_old = (short *) cm_event_alloc(3,num_of_ram_ints * sizeof(short));
cm_event_alloc(3,num_of_ram_ints * sizeof(short));
/* declare load values */ /* declare load values */
for (i=0; i<word_width; i++) { for (i=0; i<word_width; i++) {

4
src/xspice/icm/digital/d_source/cfunc.mod

@ -1088,7 +1088,6 @@ void cm_d_source(ARGS)
/*** allocate storage for *index, *bits & *timepoints ***/ /*** allocate storage for *index, *bits & *timepoints ***/
info = info_old = (Source_Table_Info_t *)
cm_event_alloc(0,sizeof(Source_Table_Info_t)); cm_event_alloc(0,sizeof(Source_Table_Info_t));
@ -1096,9 +1095,8 @@ void cm_d_source(ARGS)
modf( (PORT_SIZE(out) * i / 4), &double_dummy ); modf( (PORT_SIZE(out) * i / 4), &double_dummy );
dummy = double_dummy + 1; dummy = double_dummy + 1;
bits = bits_old = (short *) cm_event_alloc(1,(dummy * sizeof(short)));
cm_event_alloc(1,(dummy * sizeof(short)));
timepoints = timepoints_old = (double *)
cm_event_alloc(2,i * sizeof(double)); cm_event_alloc(2,i * sizeof(double));

8
src/xspice/icm/digital/d_srff/cfunc.mod

@ -311,10 +311,10 @@ void cm_d_srff(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage */ /* allocate storage */
clk = clk_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
set = set_old = (Digital_State_t *) cm_event_alloc(1,sizeof(Digital_State_t));
reset = reset_old = (Digital_State_t *) cm_event_alloc(2,sizeof(Digital_State_t));
out = out_old = (Digital_State_t *) cm_event_alloc(3,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(1,sizeof(Digital_State_t));
cm_event_alloc(2,sizeof(Digital_State_t));
cm_event_alloc(3,sizeof(Digital_State_t));
/* declare load values */ /* declare load values */
LOAD(s) = PARAM(sr_load); LOAD(s) = PARAM(sr_load);

12
src/xspice/icm/digital/d_srlatch/cfunc.mod

@ -313,12 +313,12 @@ void cm_d_srlatch(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage */ /* allocate storage */
s = s_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
r = r_old = (Digital_State_t *) cm_event_alloc(1,sizeof(Digital_State_t));
enable = enable_old = (Digital_State_t *) cm_event_alloc(2,sizeof(Digital_State_t));
set = set_old = (Digital_State_t *) cm_event_alloc(3,sizeof(Digital_State_t));
reset = reset_old = (Digital_State_t *) cm_event_alloc(4,sizeof(Digital_State_t));
out = out_old = (Digital_State_t *) cm_event_alloc(5,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(1,sizeof(Digital_State_t));
cm_event_alloc(2,sizeof(Digital_State_t));
cm_event_alloc(3,sizeof(Digital_State_t));
cm_event_alloc(4,sizeof(Digital_State_t));
cm_event_alloc(5,sizeof(Digital_State_t));
/* declare load values */ /* declare load values */
LOAD(s) = PARAM(sr_load); LOAD(s) = PARAM(sr_load);

8
src/xspice/icm/digital/d_state/cfunc.mod

@ -1936,7 +1936,8 @@ void cm_d_state(ARGS)
/*** allocate storage for *states... ***/ /*** allocate storage for *states... ***/
states = states_old = (State_Table_t *) cm_event_alloc(0,sizeof(State_Table_t));
cm_event_alloc(0,sizeof(State_Table_t));
states = states_old = (State_Table_t *) cm_event_get_ptr(0,0);
/* Store depth value */ /* Store depth value */
states->depth = i; states->depth = i;
@ -1964,10 +1965,11 @@ void cm_d_state(ARGS)
/*** allocate storage for *clk, *clk_old, *reset & *reset_old... ***/ /*** allocate storage for *clk, *clk_old, *reset & *reset_old... ***/
clk = clk_old = (Digital_State_t *) cm_event_alloc(1,sizeof(Digital_State_t));
cm_event_alloc(1,sizeof(Digital_State_t));
reset = reset_old = (Digital_State_t *) cm_event_alloc(2,sizeof(Digital_State_t));
cm_event_alloc(2,sizeof(Digital_State_t));
/* fetch states again, it might have moved per realloc */
states = states_old = (State_Table_t *) cm_event_get_ptr(0,0); states = states_old = (State_Table_t *) cm_event_get_ptr(0,0);
clk = clk_old = (Digital_State_t *) cm_event_get_ptr(1,0); clk = clk_old = (Digital_State_t *) cm_event_get_ptr(1,0);
reset = reset_old = (Digital_State_t *) cm_event_get_ptr(2,0); reset = reset_old = (Digital_State_t *) cm_event_get_ptr(2,0);

8
src/xspice/icm/digital/d_tff/cfunc.mod

@ -235,10 +235,10 @@ void cm_d_tff(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage */ /* allocate storage */
clk = clk_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
set = set_old = (Digital_State_t *) cm_event_alloc(1,sizeof(Digital_State_t));
reset = reset_old = (Digital_State_t *) cm_event_alloc(2,sizeof(Digital_State_t));
out = out_old = (Digital_State_t *) cm_event_alloc(3,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(1,sizeof(Digital_State_t));
cm_event_alloc(2,sizeof(Digital_State_t));
cm_event_alloc(3,sizeof(Digital_State_t));
/* declare load values */ /* declare load values */
LOAD(t) = PARAM(t_load); LOAD(t) = PARAM(t_load);

2
src/xspice/icm/digital/d_xnor/cfunc.mod

@ -224,7 +224,7 @@ void cm_d_xnor(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage for the outputs */ /* allocate storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load); for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);

2
src/xspice/icm/digital/d_xor/cfunc.mod

@ -198,7 +198,7 @@ void cm_d_xor(ARGS)
if(INIT) { /* initial pass */ if(INIT) { /* initial pass */
/* allocate storage for the outputs */ /* allocate storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t));
cm_event_alloc(0,sizeof(Digital_State_t));
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load); for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);

6
src/xspice/icm/digital/dac_bridge/cfunc.mod

@ -206,7 +206,7 @@ void cm_dac_bridge(ARGS)
/* Allocate storage for inputs */ /* Allocate storage for inputs */
in = in_old = (Digital_State_t *) cm_event_alloc(0,size * sizeof(Digital_State_t));
cm_event_alloc(0, size * sizeof(Digital_State_t));
/* Allocate storage for outputs */ /* Allocate storage for outputs */
@ -215,8 +215,8 @@ void cm_dac_bridge(ARGS)
/* allocate storage for analog output values. */ /* allocate storage for analog output values. */
/* allocate output space and obtain adresses */ /* allocate output space and obtain adresses */
out = out_old = cm_analog_alloc(0,size * sizeof(double));
breakpoint = cm_analog_alloc(1,sizeof(double));
cm_analog_alloc(0, size * sizeof(double));
cm_analog_alloc(1, sizeof(double));
/* assign discrete addresses */ /* assign discrete addresses */
in = in_old = (Digital_State_t *) cm_event_get_ptr(0,0); in = in_old = (Digital_State_t *) cm_event_get_ptr(0,0);

8
src/xspice/icm/dlmain.c

@ -261,8 +261,8 @@ double cm_analog_ramp_factor(void) {
return (coreitf->dllitf_cm_analog_ramp_factor)(); return (coreitf->dllitf_cm_analog_ramp_factor)();
} }
void *cm_analog_alloc(int tag, int bytes) {
return (coreitf->dllitf_cm_analog_alloc)(tag,bytes);
void cm_analog_alloc(int tag, int bytes) {
(coreitf->dllitf_cm_analog_alloc)(tag,bytes);
} }
void *cm_analog_get_ptr(int tag, int timepoint) { void *cm_analog_get_ptr(int tag, int timepoint) {
@ -293,8 +293,8 @@ void cm_analog_auto_partial(void) {
(coreitf->dllitf_cm_analog_auto_partial)(); (coreitf->dllitf_cm_analog_auto_partial)();
} }
void *cm_event_alloc(int tag, int bytes){
return (coreitf->dllitf_cm_event_alloc)(tag,bytes);
void cm_event_alloc(int tag, int bytes){
(coreitf->dllitf_cm_event_alloc)(tag,bytes);
} }
void *cm_event_get_ptr(int tag, int timepoint) { void *cm_event_get_ptr(int tag, int timepoint) {

3
src/xspice/icm/xtradev/capacitor/cfunc.mod

@ -57,7 +57,8 @@ void cm_capacitor (ARGS)
/* Initialize/access instance specific storage for capacitor voltage */ /* Initialize/access instance specific storage for capacitor voltage */
if(INIT) { if(INIT) {
vc = cm_analog_alloc(VC, sizeof(double));
cm_analog_alloc(VC, sizeof(double));
vc = cm_analog_get_ptr(VC, 0);
*vc = PARAM(ic) * cm_analog_ramp_factor(); *vc = PARAM(ic) * cm_analog_ramp_factor();
} }
else { else {

4
src/xspice/icm/xtradev/core/cfunc.mod

@ -454,7 +454,9 @@ void cm_core(ARGS) /* structure holding parms,
hyst_state = cm_analog_alloc(TRUE,sizeof(Boolean_t));
cm_analog_alloc(TRUE,sizeof(Boolean_t));
hyst_state = cm_analog_get_ptr(TRUE,0);
old_hyst_state = cm_analog_get_ptr(TRUE,1); old_hyst_state = cm_analog_get_ptr(TRUE,1);
if (in < x_rise_zero + input_domain) { /* Set state to X_RISING */ if (in < x_rise_zero + input_domain) { /* Set state to X_RISING */

3
src/xspice/icm/xtradev/inductor/cfunc.mod

@ -56,7 +56,8 @@ void cm_inductor (ARGS)
/* Initialize/access instance specific storage for capacitor voltage */ /* Initialize/access instance specific storage for capacitor voltage */
if(INIT) { if(INIT) {
li = cm_analog_alloc(LI, sizeof(double));
cm_analog_alloc(LI, sizeof(double));
li = cm_analog_get_ptr(LI, 0);
*li = PARAM(ic) * ramp_factor; *li = PARAM(ic) * ramp_factor;
} }
else { else {

18
src/xspice/icm/xtradev/lcouple/cfunc.mod

@ -169,27 +169,21 @@ void cm_lcouple(ARGS) /* structure holding parms,
/* Also, calculate roughly where the current output */ /* Also, calculate roughly where the current output */
/* will be and use this value to define current state. */ /* will be and use this value to define current state. */
in_flux = cm_analog_alloc(1,sizeof(double));
in_flux_old = cm_analog_get_ptr(1,1);
/* assign fake input and output values for truncation
error checking */
in_flux_fake = cm_analog_alloc(2,sizeof(double));
output_voltage_fake = cm_analog_alloc(3,sizeof(double));
cm_analog_alloc(1,sizeof(double));
cm_analog_alloc(2,sizeof(double));
cm_analog_alloc(3,sizeof(double));
} }
else { /* Allocation not necessary...retrieve previous values */
/* Allocation not necessary...retrieve previous values */
in_flux = cm_analog_get_ptr(TRUE,0); /* Set out pointer to current
in_flux = cm_analog_get_ptr(1,0); /* Set out pointer to current
time storage */ time storage */
in_flux_old = cm_analog_get_ptr(TRUE,1); /* Set old-output-state pointer
in_flux_old = cm_analog_get_ptr(1,1); /* Set old-output-state pointer
to previous time storage */ to previous time storage */
/* retrieve fake input and output values for truncation /* retrieve fake input and output values for truncation
error checking */ error checking */
in_flux_fake = cm_analog_get_ptr(2,0); in_flux_fake = cm_analog_get_ptr(2,0);
output_voltage_fake = cm_analog_get_ptr(3,0); output_voltage_fake = cm_analog_get_ptr(3,0);
}

2
src/xspice/icm/xtraevt/real_delay/cfunc.mod

@ -15,7 +15,7 @@ void ucm_real_delay (ARGS)
if(INIT) { if(INIT) {
state = (void *) cm_event_alloc(CLK_STATE, sizeof(Digital_State_t));
cm_event_alloc(CLK_STATE, sizeof(Digital_State_t));
state = (void *) cm_event_get_ptr(CLK_STATE, 0); state = (void *) cm_event_get_ptr(CLK_STATE, 0);
old_state = state; old_state = state;
*state = INPUT_STATE(clk); *state = INPUT_STATE(clk);

4
src/xspice/icm/xtraevt/real_to_v/cfunc.mod

@ -17,8 +17,8 @@ void ucm_real_to_v (ARGS)
in = INPUT(in); in = INPUT(in);
if(INIT) { if(INIT) {
t = (void *) cm_event_alloc(TS, 2 * sizeof(double));
v = (void *) cm_event_alloc(VS, 2 * sizeof(double));
cm_event_alloc(TS, 2 * sizeof(double));
cm_event_alloc(VS, 2 * sizeof(double));
t = (void *) cm_event_get_ptr(TS, 0); t = (void *) cm_event_get_ptr(TS, 0);
v = (void *) cm_event_get_ptr(VS, 0); v = (void *) cm_event_get_ptr(VS, 0);
t[0] = -2.0; t[0] = -2.0;

Loading…
Cancel
Save