void shadow_satisfy(shadow_mgr mgr, ref_t r) { if (!mgr->do_cudd) return; DdNode *n = get_ddnode(mgr, r); bool zdd = is_zdd(mgr, r); FILE *logfile = get_logfile(); if (zdd) { Cudd_zddPrintMinterm(mgr->bdd_manager, n); if (logfile) { FILE *savefile = Cudd_ReadStdout(mgr->bdd_manager); Cudd_SetStdout(mgr->bdd_manager, logfile); Cudd_zddPrintMinterm(mgr->bdd_manager, n); Cudd_SetStdout(mgr->bdd_manager, savefile); } } else { Cudd_PrintMinterm(mgr->bdd_manager, n); if (logfile) { FILE *savefile = Cudd_ReadStdout(mgr->bdd_manager); Cudd_SetStdout(mgr->bdd_manager, logfile); Cudd_PrintMinterm(mgr->bdd_manager, n); Cudd_SetStdout(mgr->bdd_manager, savefile); } } }
/** * @brief Basic ADD test. * @return 0 if successful; -1 otherwise. */ static int testAdd(int verbosity) { DdManager *manager; DdNode *f, *var, *tmp, *bg; int i, ret; CUDD_VALUE_TYPE pinf; manager = Cudd_Init(0, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0); if (!manager) { if (verbosity) { printf("initialization failed\n"); } return -1; } pinf = Cudd_V(Cudd_ReadPlusInfinity(manager)); if (verbosity) { printf("Plus infinity is %g\n", pinf); } f = Cudd_addConst(manager,5); Cudd_Ref(f); for (i = 3; i >= 0; i--) { var = Cudd_addIthVar(manager,i); Cudd_Ref(var); tmp = Cudd_addApply(manager,Cudd_addTimes,var,f); Cudd_Ref(tmp); Cudd_RecursiveDeref(manager,f); Cudd_RecursiveDeref(manager,var); f = tmp; } if (verbosity) { Cudd_PrintMinterm(manager, f); printf("\n"); } Cudd_RecursiveDeref(manager, f); bg = Cudd_ReadBackground(manager); if (verbosity) { printf("background (%g) minterms : ", Cudd_V(bg)); Cudd_ApaPrintMinterm(Cudd_ReadStdout(manager), manager, bg, 0); } ret = Cudd_CheckZeroRef(manager); if (ret != 0 && verbosity) { printf("%d non-zero ADD reference counts after dereferencing\n", ret); } Cudd_Quit(manager); return ret != 0; }
void BddBuilder::dotDumpC(DdNode ** ddNodes,int& number_of_diff_output,char** diff_output){ char filename[128]; DdNode * dumpdd[1]; char * dumpname[1]; int res; int * index_of_diff_output; int j=0; index_of_diff_output = new int[__outputWireCnt]; for(int i=0 ; i<__outputWireCnt ; ++i){ if(ddNodes[i] != NULL){ number_of_diff_output++; index_of_diff_output[j++] = i; printf("%s\n",__ppOutputNodesNames[i]); sprintf(filename, "./dotdump/dumpC_%s.dot", __ppOutputNodesNames[i]); FILE * fp = fopen(filename, "w"); dumpdd[0] = ddNodes[i]; dumpname[0] = __ppOutputNodesNames[i]; res = Cudd_DumpDot(__pddManager, 1, dumpdd, __ppInputNodesNames, dumpname, fp); fclose(fp); sprintf(filename, "./factored/dumpC_factored_%s", __ppOutputNodesNames[i]); fp = fopen(filename, "w"); Cudd_DumpFactoredForm(__pddManager, 1, dumpdd, __ppInputNodesNames, dumpname, fp); fclose(fp); printf("Factored form(Boolean equation) written : %s\n", filename); //Cudd_PrintDebug(__pddManager, dumpdd[0], Cudd_ReadSize(__pddManager), 4); sprintf(filename, "./sop/%s.sop", __ppOutputNodesNames[i]); FILE * fp_sop = fopen(filename, "w"); FILE * tmp; FILE* debug = fopen("debug.txt","w"); printf("%s's SOP:\n", __ppOutputNodesNames[i]); Cudd_bddPrintCover(__pddManager, dumpdd[0], dumpdd[0]); //Cudd_PrintMinterm(__pddManager,dumpdd[0]); tmp = Cudd_ReadStdout(__pddManager); Cudd_SetStdout(__pddManager, fp_sop); Cudd_bddPrintCover(__pddManager, dumpdd[0], dumpdd[0]); //Cudd_PrintMinterm(__pddManager,dumpdd[0]); //fprintf(fp_sop,"\n"); Cudd_SetStdout(__pddManager, debug); Cudd_PrintDebug(__pddManager,dumpdd[0],Cudd_ReadSize(__pddManager),4); Cudd_SetStdout(__pddManager, tmp); fseek(fp_sop,-2,SEEK_END); //fputc(0,fp_so; fclose(fp_sop); printf("SOP file written : %s\n\n", filename); /*printf("Quine-Mccluskey for %s:\n", __ppOutputNodesNames[i]); QuineMccluskey quine(filename); printf("Quine-Mccluskey for %s Done.\n", __ppOutputNodesNames[i]); */ //Cudd_PrintMinterm(__pddManager, dumpdd[0]); if(res == 1) printf("DOT dump for C's %s completed.\n", __ppOutputNodesNames[i]); else printf("DOT dump for C's %s failed.\n", __ppOutputNodesNames[i]); } else printf("DOT dump for C's %s not executed: A = B\n", __ppOutputNodesNames[i]); } for(int i=0;i<number_of_diff_output;i++){ strcpy(diff_output[i],__ppOutputNodesNames[index_of_diff_output[i]]); } delete index_of_diff_output; }