extern char *tech_ttl_string[]; extern char *TTLTYPES[]; #define INST_NAME (instance->name) #define INST (instance) #define ONENANOSEC 10 #define ONEMILLIAMP 1 #define MAXNUMTECH 10 #define MAXALSTECH 10 #ifndef NOT_THIS #define DESENSITIZE(x) delete_port_node(x,x->node) #define SENSITIZE(x) add_port_node(x,x->node) #else #define DESENSITIZE(x) #define SENSITIZE(x) #endif int atotype(); int matches(); int add_iload_to_node(); float get_node_iload(); int numdriven(); portptr portdriven(); int only_port_driving(); char *pnode(); int add_ttl_tech(); typedef struct nodememory *nodememptr; struct nodememory { char **attr; float iload; }; #define NEW_VALHL(x,delh,dell,delt,val) switch (val) {\ case HIGH: NEW_VAL(x,delh,HIGH); break;\ case LOW: NEW_VAL(x,dell,LOW); break;\ case TRISTATE: NEW_VAL(x,delt,TRISTATE); break;\ default: NEW_VAL(x,delt,X); break; } #define NEW_VALHLONLY(x,delh,dell,val) {\ int value;\ if ((value = val) == HIGH) NEW_VAL(x,delh,HIGH); \ else NEW_VAL(x,dell,value); } #define NEW_VALTRIS(x,delh,dell,val) {\ if (val == LOW) NEW_VAL(x,delh,TRISTATE); \ else NEW_VAL(x,dell,TRISTATE); } #define SWITCH_VAL(x,y,delh,dell,thz,tlz,val) {\ int value;\ if ((value = val) == HIGH) { \ NEW_VAL(x,delh,HIGH); \ NEW_VAL(y,delh,TRISTATE); \ } else { NEW_VAL(x,dell,value); \ NEW_VAL(y,delh,TRISTATE); \ } } #define NEW_VALOC(check,x,tlh,thl,tlt,val) { \ if (debug) lprintf (stdout,"numdriven = %d\n",numdriven(x)); \ if (val == LOW) NEW_VAL(x,thl,LOW);\ else if (PORT_DRIVEN(x)) { \ if (only_port_driving(x)) { \ NEW_VAL(x,tlh,HIGH); \ NEW_VAL(x,tlh+tlt,TRISTATE); \ } else { \ NEW_VAL(x,0,TRISTATE); \ INTERRUPT(check,1); \ } } } #define PORT_DRIVEN(x) (x->val != TRISTATE) #define NOTDRIVEN(x) (x->node->head_driven==NULL) #define ADD_TTL_LOAD(xp,yl) add_iload_to_node(xp->node,yl) #define TTL_LOAD(x) get_node_iload(x->node) #define CHECK_TTL_LOAD(xp,yt,zd) {\ if (yt) if (TTL_LOAD(xp) > zd)\ lprintf(stdout,"load %f on node %s to large for %s %s type=%s\n",\ TTL_LOAD(xp),pnode(xp->node),INST_CLASS_NAME,INST_NAME,yt);\ } #define ASSIGN_TECH_TYPE(def_type) {\ if ((ATTR("type")) == NULL) type = atotech(def_type,tech_ttl);\ else type = atotech(ATTR("type"),tech_ttl); \ if (type < 0) {\ type = 0;\ if (!tech_ttl[0]) lprintf(stdout,"%s has no data base , all delays 0\n",\ INST_CLASS_NAME);\ else lprintf(stdout,"USING ttl tech %s for %s\n",tech_ttl[0],\ INST_NAME);\ }\ if (tech_ttl[type]) strcpy(typstr,tech_ttl[type]);\ else strcpy(typstr,"NULL");\ } #define TOO_MANY_TECH_MESG lprintf(stdout,"Too many technologys for %s\n",INST_CLASS_NAME)