Exemple #1
0
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);
	}
    }
}
Exemple #2
0
/**
 * @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;
}
Exemple #3
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;
}