Browse Source

Applied changes to cfunc.mod sent by Hitoshi

pre-master-46
pnenzi 21 years ago
parent
commit
f805d7ab71
  1. 10
      ChangeLog
  2. 5
      src/xspice/icm/digital/adc_bridge/cfunc.mod
  3. 3
      src/xspice/icm/digital/d_and/cfunc.mod
  4. 4
      src/xspice/icm/digital/d_buffer/cfunc.mod
  5. 10
      src/xspice/icm/digital/d_dff/cfunc.mod
  6. 9
      src/xspice/icm/digital/d_dlatch/cfunc.mod
  7. 5
      src/xspice/icm/digital/d_fdiv/cfunc.mod
  8. 3
      src/xspice/icm/digital/d_inverter/cfunc.mod
  9. 8
      src/xspice/icm/digital/d_jkff/cfunc.mod
  10. 4
      src/xspice/icm/digital/d_nand/cfunc.mod
  11. 3
      src/xspice/icm/digital/d_nor/cfunc.mod
  12. 4
      src/xspice/icm/digital/d_open_c/cfunc.mod
  13. 4
      src/xspice/icm/digital/d_open_e/cfunc.mod
  14. 3
      src/xspice/icm/digital/d_or/cfunc.mod
  15. 12
      src/xspice/icm/digital/d_osc/cfunc.mod
  16. 18
      src/xspice/icm/digital/d_ram/cfunc.mod
  17. 45
      src/xspice/icm/digital/d_source/cfunc.mod
  18. 10
      src/xspice/icm/digital/d_srff/cfunc.mod
  19. 10
      src/xspice/icm/digital/d_srlatch/cfunc.mod
  20. 74
      src/xspice/icm/digital/d_state/cfunc.mod
  21. 12
      src/xspice/icm/digital/d_tff/cfunc.mod
  22. 7
      src/xspice/icm/digital/d_xnor/cfunc.mod
  23. 9
      src/xspice/icm/digital/d_xor/cfunc.mod
  24. 8
      src/xspice/icm/digital/dac_bridge/cfunc.mod
  25. 4
      src/xspice/icm/xtradev/aswitch/cfunc.mod
  26. 2
      src/xspice/icm/xtradev/core/ifspec.ifs
  27. 1
      src/xspice/icm/xtraevt/real_delay/cfunc.mod
  28. 2
      src/xspice/icm/xtraevt/real_to_v/cfunc.mod

10
ChangeLog

@ -1,3 +1,13 @@
2005-08-23 Paolo Nenzi <p.nenzi@ieee.org>
* src/xspice/icm/xtradev/aswitch/cfunc.mod: Added minimum on resistance
for aswitch to avoid unreasonable high values (due to near zero
resistance) in current of connected voltage source. Change supplied by
Hitoshi Tanaka.
* src/xspice/icm/{cfunc.mod}: updated cfunc.mod files. Changes sent by
Hitoshi Tanaka.
2005-08-22 Paolo Nenzi <p.nenzi@ieee.org>
* src/frontend/plotting/x11.c: removed casting in a macro. It conflicts

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

@ -182,6 +182,11 @@ void cm_adc_bridge(ARGS)
/* Allocate storage for outputs */
out = out_old = (Digital_State_t *) cm_event_alloc(1,size * sizeof(Digital_State_t));
/* Get analog addresses */
in = in_old = cm_analog_get_ptr(0,0);
/* Get discrete addresses */
out = out_old = (Digital_State_t *) cm_event_get_ptr(1,0);
}
else { /*** This is not an initialization pass...retrieve storage

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

@ -153,6 +153,9 @@ void cm_d_and(ARGS)
/* set loading for inputs */
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);
/* retrieve storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0);
}
else { /* Retrieve previous values */

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

@ -141,6 +141,10 @@ void cm_d_buffer(ARGS)
/* define input loading... */
LOAD(in) = PARAM(input_load);
/* retrieve storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0);
}
else { /* Retrieve previous values */

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

@ -120,7 +120,7 @@ NON-STANDARD FEATURES
NONE
=============================================================================*/
/*=============================================================================*/
/*=== CM_TOGGLE_BIT ROUTINE ===*/
@ -235,7 +235,13 @@ void cm_d_dff(ARGS)
}
if ( !PORT_NULL(reset) ) {
LOAD(reset) = PARAM(reset_load);
}
}
/* retrieve storage for the outputs */
clk = clk_old = (Digital_State_t *) cm_event_get_ptr(0,0);
set = set_old = (Digital_State_t *) cm_event_get_ptr(1,0);
reset = reset_old = (Digital_State_t *) cm_event_get_ptr(2,0);
out = out_old = (Digital_State_t *) cm_event_get_ptr(3,0);
}
else { /* Retrieve previous values */

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

@ -237,7 +237,14 @@ void cm_d_dlatch(ARGS)
}
if ( !PORT_NULL(reset) ) {
LOAD(reset) = PARAM(reset_load);
}
}
/* retrieve storage for the outputs */
data = data_old = (Digital_State_t *) cm_event_get_ptr(0,0);
enable = enable_old = (Digital_State_t *) cm_event_get_ptr(1,0);
set = set_old = (Digital_State_t *) cm_event_get_ptr(2,0);
reset = reset_old =(Digital_State_t *) cm_event_get_ptr(3,0);
out = out_old = (Digital_State_t *) cm_event_get_ptr(4,0);
}
else { /* Retrieve previous values */

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

@ -154,6 +154,11 @@ void cm_d_fdiv(ARGS)
/* declare load values */
LOAD(freq_in) = PARAM(freq_in_load);
/* retrieve storage for the outputs */
freq_in = freq_in_old = (Digital_State_t *) cm_event_get_ptr(0,0);
freq_out = freq_out_old = (Digital_State_t *) cm_event_get_ptr(1,0);
count = count_old = (Digital_State_t *) cm_event_get_ptr(2,0);
}
else { /* Retrieve previous values */

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

@ -145,6 +145,9 @@ void cm_d_inverter(ARGS)
/* define load value on inputs */
LOAD(in) = PARAM(input_load);
/* retrieve storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0);
}
else { /* Retrieve previous values */

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

@ -326,7 +326,13 @@ void cm_d_jkff(ARGS)
}
if ( !PORT_NULL(reset) ) {
LOAD(reset) = PARAM(reset_load);
}
}
/* retrieve storage for the outputs */
clk = clk_old = (Digital_State_t *) cm_event_get_ptr(0,0);
set = set_old = (Digital_State_t *) cm_event_get_ptr(1,0);
reset = reset_old = (Digital_State_t *) cm_event_get_ptr(2,0);
out = out_old = (Digital_State_t *) cm_event_get_ptr(3,0);
}
else { /* Retrieve previous values */

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

@ -147,6 +147,10 @@ void cm_d_nand(ARGS)
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);
/* retrieve storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0);
}
else { /* Retrieve previous values */

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

@ -148,6 +148,9 @@ void cm_d_nor(ARGS)
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);
/* retrieve storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0);
}
else { /* Retrieve previous values */

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

@ -142,6 +142,10 @@ void cm_d_open_c(ARGS)
/* define input loading... */
LOAD(in) = PARAM(input_load);
/* retrieve storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0);
}
else { /* Retrieve previous values */

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

@ -142,6 +142,10 @@ void cm_d_open_e(ARGS)
/* define input loading... */
LOAD(in) = PARAM(input_load);
/* retrieve storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0);
}
else { /* Retrieve previous values */

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

@ -148,6 +148,9 @@ void cm_d_or(ARGS)
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);
/* retrieve storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0);
}
else { /* Retrieve previous values */

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

@ -214,7 +214,13 @@ void cm_d_osc(ARGS)
t1 = cm_analog_alloc(1,sizeof(double));
t3 = cm_analog_alloc(2,sizeof(double));
/* assign internal variables */
phase = phase_old = cm_analog_get_ptr(0,0);
t1 = cm_analog_get_ptr(1,0);
t3 = cm_analog_get_ptr(2,0);
}
@ -394,8 +400,8 @@ void cm_d_osc(ARGS)
free(x);
free(y);
if(x) free(x);
if(y) free(y);
}

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

@ -944,7 +944,7 @@ void cm_d_ram(ARGS)
word_width = PORT_SIZE(data_in);
num_of_ram_ints = ram_size * word_width / 8;
num_of_ram_ints = ram_size * word_width / 8 + 1;
@ -976,6 +976,14 @@ void cm_d_ram(ARGS)
LOAD(select[i]) = PARAM(select_load);
}
/* retrieve storage for the outputs */
address = address_old = (Digital_State_t *) cm_event_get_ptr(0,0);
write_en = write_en_old = (Digital_State_t *) cm_event_get_ptr(1,0);
select = select_old = (Digital_State_t *) cm_event_get_ptr(2,0);
/* retrieve ram base addresses */
ram = ram_old = (short *) cm_event_get_ptr(3,0);
}
else { /* Retrieve previous values */
@ -990,6 +998,9 @@ void cm_d_ram(ARGS)
/* retrieve ram base addresses */
ram = (short *) cm_event_get_ptr(3,0);
ram_old = (short *) cm_event_get_ptr(3,1);
for(i=0;i<num_of_ram_ints;i++)
ram[i] = ram_old[i];
}
@ -1084,11 +1095,13 @@ void cm_d_ram(ARGS)
for (j=0; j<ram_size; j++) {
cm_initialize_ram(UNKNOWN,word_width,i,j,ram);
}
OUTPUT_STATE(data_out[i]) = UNKNOWN;
}
else {
out = INPUT_STATE(data_in[i]);
cm_store_ram_value(out,word_width,i,address,
address_size,ram);
OUTPUT_STATE(data_out[i]) = out;
}
OUTPUT_STRENGTH(data_out[i]) = HI_IMPEDANCE;
OUTPUT_DELAY(data_out[i]) = PARAM(read_delay);
@ -1101,6 +1114,7 @@ void cm_d_ram(ARGS)
case ZERO: /* output goes tristate unless already so... */
if ( ZERO == *write_en ) { /* output needs tristating */
for (i=0; i<word_width; i++) {
OUTPUT_STATE(data_out[i]) = UNKNOWN;
OUTPUT_STRENGTH(data_out[i]) = HI_IMPEDANCE;
OUTPUT_DELAY(data_out[i]) = PARAM(read_delay);
}
@ -1129,11 +1143,13 @@ void cm_d_ram(ARGS)
for (j=0; j<ram_size; j++) {
cm_initialize_ram(UNKNOWN,word_width,i,j,ram);
}
OUTPUT_STATE(data_out[i]) = UNKNOWN;
}
else {
out = INPUT_STATE(data_in[i]);
cm_store_ram_value(out,word_width,i,address,
address_size,ram);
OUTPUT_STATE(data_out[i]) = out;
}
OUTPUT_STRENGTH(data_out[i]) = HI_IMPEDANCE;
OUTPUT_DELAY(data_out[i]) = PARAM(read_delay);

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

@ -167,7 +167,7 @@ static char *CNVgettok(char **s)
switch(**s) {
case '\0': /* End of string found */
free(buf);
if(buf) free(buf);
return(NULL);
@ -200,7 +200,7 @@ static char *CNVgettok(char **s)
ret_str = (void *) malloc(strlen(buf) + 1);
ret_str = strcpy(ret_str,buf);
free(buf);
if(buf) free(buf);
return(ret_str);
}
@ -1071,17 +1071,19 @@ void cm_d_source(ARGS)
/*** open file and count the number of vectors in it ***/
source = fopen( PARAM(input_file), "r");
/* increment counter if not a comment until EOF reached... */
i = 0;
s = temp;
while ( fgets(s,MAX_STRING_SIZE,source) != NULL) {
if ( '*' != s[0] ) {
while(isspace(*s) || (*s == '*'))
(s)++;
if ( *s != '\0' ) i++;
}
s = temp;
i = 0;
if (source) {
s = temp;
while ( fgets(s,MAX_STRING_SIZE,source) != NULL) {
if ( '*' != s[0] ) {
while(isspace(*s) || (*s == '*'))
(s)++;
if ( *s != '\0' ) i++;
}
s = temp;
}
}
/*** allocate storage for *index, *bits & *timepoints ***/
@ -1100,7 +1102,7 @@ void cm_d_source(ARGS)
cm_event_alloc(2,i * sizeof(double));
/**** Patch assignment for memory...remove in final version ****/
/**** Get all pointers again (to avoid realloc problems) ****/
info = info_old = (Source_Table_Info_t *) cm_event_get_ptr(0,0);
bits = bits_old = (short *) cm_event_get_ptr(1,0);
timepoints = timepoints_old = (double *) cm_event_get_ptr(2,0);
@ -1135,8 +1137,12 @@ void cm_d_source(ARGS)
/* vectors will be loaded and the width and depth */
/* values supplied. */
rewind(source);
err = cm_read_source(source,bits,timepoints,info);
if (source) {
rewind(source);
err = cm_read_source(source,bits,timepoints,info);
} else {
err=1;
}
@ -1151,7 +1157,8 @@ void cm_d_source(ARGS)
}
/* close source file */
fclose(source);
if (source)
fclose(source);
}
else { /*** Retrieve previous values ***/
@ -1196,7 +1203,7 @@ void cm_d_source(ARGS)
if ( 0.0 == TIME ) {
test_double = timepoints[info->index];
if ( 0.0 == test_double ) { /* Set DC value */
if ( 0.0 == test_double && info->depth > 0 ) { /* Set DC value */
/* reset current breakpoint */
test_double = timepoints[info->index];
@ -1232,6 +1239,10 @@ void cm_d_source(ARGS)
test_double = timepoints[info->index] - 1.0e-10;
cm_event_queue( test_double );
}
for(i=0; i<info->width; i++) {
OUTPUT_STATE(out[i]) = UNKNOWN;
OUTPUT_STRENGTH(out[i]) = UNDETERMINED;
}
}
}
else {

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

@ -120,7 +120,7 @@ NON-STANDARD FEATURES
NONE
=============================================================================*/
/*=============================================================================*/
/*=== CM_TOGGLE_BIT ROUTINE ===*/
@ -325,7 +325,13 @@ void cm_d_srff(ARGS)
}
if ( !PORT_NULL(reset) ) {
LOAD(reset) = PARAM(reset_load);
}
}
/* retrieve storage for the outputs */
clk = clk_old = (Digital_State_t *) cm_event_get_ptr(0,0);
set = set_old = (Digital_State_t *) cm_event_get_ptr(1,0);
reset = reset_old = (Digital_State_t *) cm_event_get_ptr(2,0);
out = out_old = (Digital_State_t *) cm_event_get_ptr(3,0);
}
else { /* Retrieve previous values */

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

@ -329,7 +329,15 @@ void cm_d_srlatch(ARGS)
}
if ( !PORT_NULL(reset) ) {
LOAD(reset) = PARAM(reset_load);
}
}
/* retrieve storage for the outputs */
s = s_old = (Digital_State_t *) cm_event_get_ptr(0,0);
r = r_old = (Digital_State_t *) cm_event_get_ptr(1,0);
enable = enable_old = (Digital_State_t *) cm_event_get_ptr(2,0);
set = set_old = (Digital_State_t *) cm_event_get_ptr(3,0);
reset = reset_old = (Digital_State_t *) cm_event_get_ptr(4,0);
out = out_old = (Digital_State_t *) cm_event_get_ptr(5,0);
}
else { /* Retrieve previous values */

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

@ -227,7 +227,7 @@ static char *CNVgettok(char **s)
switch(**s) {
case '\0': /* End of string found */
free(buf);
if(buf) free(buf);
return(NULL);
@ -260,7 +260,7 @@ static char *CNVgettok(char **s)
ret_str = (void *) malloc(strlen(buf) + 1);
ret_str = strcpy(ret_str,buf);
free(buf);
if(buf) free(buf);
return(ret_str);
}
@ -1530,7 +1530,9 @@ static int cm_read_state_file(FILE *state_file,State_Table_t *states)
state.in file which needs to be stored */
/*base;*/ /* holding variable for existing
non-masked bits[] integer */
if (!state_file) {
return 1;
}
i = 0;
s = temp;
@ -1655,7 +1657,7 @@ static int cm_read_state_file(FILE *state_file,State_Table_t *states)
}
else { /* need to store this value in the inputs[] array */
cm_store_inputs_value(states,i,(j-1),bit_value);
cm_store_inputs_value(states,i,(j-1-states->num_outputs),bit_value);
}
}
@ -1685,8 +1687,7 @@ static int cm_read_state_file(FILE *state_file,State_Table_t *states)
/* set bits values to previous bits values */
for (j=0; j<states->num_outputs; j++) {
/*** Retrieve the previous bit value ***/
/*
/*** Retrieve the previous bit value ***?
cm_get_bits_value(*states,i,j,&out);
switch (out.state) {
@ -1755,7 +1756,8 @@ static int cm_read_state_file(FILE *state_file,State_Table_t *states)
break;
}
*/
*/
/*** Store this bit value ***/
cm_store_bits_value(states,i,j,bit_value);
@ -1874,7 +1876,7 @@ void cm_d_state(ARGS)
err=0, /* integer for storage of error status */
test; /* testing integer */
State_Table_t *states; /* pointer to base address structure
State_Table_t *states, /* pointer to base address structure
for all state arrays. *states
contains the pointers to
state[], bits[], input[]
@ -1883,7 +1885,7 @@ void cm_d_state(ARGS)
calloc, so they do not take up
rotational storage space...only
the *states structure does this. */
*states_old;
FILE *state_file; /* pointer to the state.in input
vector file */
@ -1901,9 +1903,12 @@ void cm_d_state(ARGS)
input from state.in */
*s; /* main string variable */
char *loading_error = "\n***ERROR***\nD_STATE: state.in file was not read successfully. \nThe most common cause of this problem is a\ntrailing blank line in the state.in file \n";
char *open_error = "\n***ERROR***\nD_STATE: failed to open state file.\n";
char *loading_error = "\n***ERROR***\nD_STATE: state file was not read successfully. \nThe most common cause of this problem is a\ntrailing blank line in the state.in file \n";
char *index_error = "\n***ERROR***\nD_STATE: An error exists in the ordering of states values\n in the states->state[] array. This is usually caused \nby non-contiguous state definitions in the state.in file \n";
char buf[100];
@ -1916,22 +1921,23 @@ void cm_d_state(ARGS)
/*** open file and count the number of vectors in it ***/
state_file = fopen( PARAM(state_file), "r");
/* increment counter if not a comment until EOF reached... */
i = 0;
s = temp;
while ( fgets(s,MAX_STRING_SIZE,state_file) != NULL) {
if ( '*' != s[0] ) {
while(isspace(*s) || (*s == '*'))
(s)++;
if ( *s != '\0' ) i++;
if (state_file!=NULL)
while ( fgets(s,MAX_STRING_SIZE,state_file) != NULL) {
if ( '*' != s[0] ) {
while(isspace(*s) || (*s == '*'))
(s)++;
if ( *s != '\0' ) i++;
}
s = temp;
}
s = temp;
}
/*** allocate storage for *states... ***/
states = (State_Table_t *) cm_event_alloc(0,sizeof(State_Table_t));
states = states_old = (State_Table_t *) cm_event_alloc(0,sizeof(State_Table_t));
/* Store depth value */
states->depth = i;
@ -1942,10 +1948,10 @@ void cm_d_state(ARGS)
/* assign storage for arrays to pointers in states table */
states->state = (int *) calloc(states->depth,sizeof(int));
states->bits = (short *) calloc((states->num_outputs * states->depth / 4),sizeof(short));
states->inputs = (short *) calloc((states->num_inputs * states->depth / 8),sizeof(short));
states->next_state = (int *) calloc(states->depth,sizeof(int));
states->state = (int *) calloc(states->depth + 1,sizeof(int));
states->bits = (short *) calloc((states->num_outputs * states->depth / 4 + 1),sizeof(short));
states->inputs = (short *) calloc((states->num_inputs * states->depth / 8 + 1),sizeof(short));
states->next_state = (int *) calloc(states->depth + 1,sizeof(int));
/* Initialize *state, *bits, *inputs & *next_state to zero */
@ -1963,7 +1969,9 @@ void cm_d_state(ARGS)
reset = reset_old = (Digital_State_t *) cm_event_alloc(2,sizeof(Digital_State_t));
states = states_old = (State_Table_t *) cm_event_get_ptr(0,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);
/*** Send file pointer and the four storage pointers ***/
/*** to "cm_read_state_file()". This will return after ***/
@ -1973,9 +1981,12 @@ void cm_d_state(ARGS)
/*** and the num_inputs, num_outputs and depth ***/
/*** values supplied. ***/
rewind(state_file);
err = cm_read_state_file(state_file,states);
if (state_file) {
rewind(state_file);
err = cm_read_state_file(state_file,states);
} else {
err = 1;
}
if (err) { /* problem occurred in load...send error msg. */
@ -1993,12 +2004,14 @@ void cm_d_state(ARGS)
}
/* close state_file */
fclose(state_file);
if (state_file)
fclose(state_file);
/* declare load values */
for (i=0; i<states->num_outputs; i++) {
// for (i=0; i<states->num_outputs; i++) {
for (i=0; i<states->num_inputs; i++) {
LOAD(in[i]) = PARAM(input_load);
}
@ -2010,6 +2023,9 @@ void cm_d_state(ARGS)
else { /**** Retrieve previous values ****/
states = (State_Table_t *) cm_event_get_ptr(0,0);
states_old = (State_Table_t *) cm_event_get_ptr(0,1);
// Copy storage
*states = *states_old;
clk = (Digital_State_t *) cm_event_get_ptr(1,0);
clk_old = (Digital_State_t *) cm_event_get_ptr(1,1);

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

@ -127,7 +127,7 @@ NON-STANDARD FEATURES
NONE
=============================================================================*/
/*=============================================================================*/
/*=== CM_TOGGLE_BIT ROUTINE ===*/
@ -196,7 +196,7 @@ NON-STANDARD FEATURES
NONE
=============================================================================*/
/*=============================================================================*/
/*=== CM_D_TFF ROUTINE ===*/
@ -248,7 +248,13 @@ void cm_d_tff(ARGS)
}
if ( !PORT_NULL(reset) ) {
LOAD(reset) = PARAM(reset_load);
}
}
/* retrieve storage for the outputs */
clk = clk_old = (Digital_State_t *) cm_event_get_ptr(0,0);
set = set_old = (Digital_State_t *) cm_event_get_ptr(1,0);
reset = reset_old = (Digital_State_t *) cm_event_get_ptr(2,0);
out = out_old = (Digital_State_t *) cm_event_get_ptr(3,0);
}
else { /* Retrieve previous values */

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

@ -120,7 +120,7 @@ NON-STANDARD FEATURES
NONE
=============================================================================*/
/*=============================================================================*/
/*=== CM_TOGGLE_BIT ROUTINE ===*/
@ -188,7 +188,7 @@ NON-STANDARD FEATURES
NONE
=============================================================================*/
/*=============================================================================*/
/*=== CM_D_XNOR ROUTINE ===*/
@ -228,6 +228,9 @@ void cm_d_xnor(ARGS)
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);
/* retrieve storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0);
}
else { /* Retrieve previous values */

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

@ -49,7 +49,7 @@ NON-STANDARD FEATURES
NONE
==============================================================================
/*==============================================================================
FUNCTION cm_toggle_bit()
@ -93,7 +93,7 @@ NON-STANDARD FEATURES
NONE
=============================================================================*/
/*=============================================================================*/
/*=== CM_TOGGLE_BIT ROUTINE ===*/
@ -162,7 +162,7 @@ NON-STANDARD FEATURES
NONE
=============================================================================*/
/*=============================================================================*/
/*=== CM_D_XOR ROUTINE ===*/
@ -202,6 +202,9 @@ void cm_d_xor(ARGS)
for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);
/* retrieve storage for the outputs */
out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0);
}
else { /* Retrieve previous values */

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

@ -217,6 +217,14 @@ void cm_dac_bridge(ARGS)
/* allocate output space and obtain adresses */
out = out_old = cm_analog_alloc(0,size * sizeof(double));
breakpoint = cm_analog_alloc(1,sizeof(double));
/* assign discrete addresses */
in = in_old = (Digital_State_t *) cm_event_get_ptr(0,0);
/* assign analog addresses */
out = out_old = cm_analog_get_ptr(0,0);
breakpoint = cm_analog_get_ptr(1,0);
/* read current input values */
for (i=0; i<size; i++) {

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

@ -151,6 +151,7 @@ void cm_aswitch(ARGS) /* structure holding parms,
if ( PARAM(log) == MIF_TRUE ) { /* Logarithmic Variation in 'R' */
intermediate = log(r_off / r_on) / (cntl_on - cntl_off);
r = r_on * exp(intermediate * (cntl_on - INPUT(cntl_in)));
if(r<=1.0e-9) r=1.0e-9;/* minimum resistance limiter */
pi_pvout = 1.0 / r;
pi_pcntl = intermediate * INPUT(out) / r;
}
@ -158,11 +159,12 @@ void cm_aswitch(ARGS) /* structure holding parms,
intermediate = (r_on - r_off) / (cntl_on - cntl_off);
r = INPUT(cntl_in) * intermediate + ((r_off*cntl_on -
r_on*cntl_off) / (cntl_on - cntl_off));
if(r<=1.0e-9) r=1.0e-9;/* minimum resistance limiter */
pi_pvout = 1.0 / r;
pi_pcntl = -intermediate * INPUT(out) / (r*r);
}
pi_pvout = 1.0 / r;
/*pi_pvout = 1.0 / r;*/
if(ANALYSIS != MIF_AC) { /* Output DC & Transient Values */

2
src/xspice/icm/xtradev/core/ifspec.ifs

@ -39,7 +39,7 @@ Null_Allowed: no
PARAMETER_TABLE:
Parameter_Name: H_array B_array
Parameter_Name: h_array b_array
Description: "magnetic field array" "flux density array"
Data_Type: real real
Default_Value: - -

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

@ -16,6 +16,7 @@ void ucm_real_delay (ARGS)
if(INIT) {
state = (void *) 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);
}

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

@ -19,6 +19,8 @@ void ucm_real_to_v (ARGS)
if(INIT) {
t = (void *) cm_event_alloc(TS, 2 * sizeof(double));
v = (void *) 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;

Loading…
Cancel
Save