2016-09-15 2 views
3

Ich versuche eine BLIF-Datei in das CUDD-Paket zu importieren, ein BDD daraus zu erstellen und dann einige Manipulationen durchzuführen. Ich habe es geschafft, die BLIF-Datei mit dem NTR-Paket zu importieren. Ich kann jedoch nicht herausfinden, wie ich auf eine der Variablen oder Knoten im resultierenden BDD zugreifen soll.BDD manipulieren, importiert aus einer BLIF-Datei in CUDD

Wenn ich meine eigene BDD für eine Funktion erstellt habe, würde ich die Variablen so erstellen, wie ich gehe und in der Lage sein, sie aufzurufen, verschiedene Manipulationen/Operationen zu tun. Beim BLIF-Import ist alles, was ich habe, der resultierende ddManager (dd) und das boolesche Netzwerk (net1). Weiß jemand wie man die einzelnen Variablen/Knoten aufruft? Siehe unten den BLIF-Generierungscode. Vielen Dank!

NtrOptions *option; 
option = mainInit(); 
FILE *fp1; 
BnetNetwork *net1 = NULL; 
fp1 = fopen("C17.blif","r"); 
net1 = Bnet_ReadNetwork(fp1,1); 
fclose(fp1); 

DdManager *dd; 
dd = Cudd_Init(0,0,CUDD_UNIQUE_SLOTS,CUDD_CACHE_SLOTS,0); 
Cudd_AutodynEnable(dd,CUDD_REORDER_SIFT); 
int result;  
result = Ntr_buildDDs(net1,dd,option,NULL); 

Antwort

0

Gut stellt sich heraus, es war nicht so schlimm. Siehe unten. Durchlaufen Sie einfach die boolesche Netzwerkstruktur (net1) und suchen Sie mit dem BNET_OUTPUT_NODE-Flag nach den Ausgaben.

BnetNode *node; 
    DdNode **outputArray; /* output array to store BDD for each output */ 
    outputArray = (DdNode**)malloc(numOutputs * sizeof(DdNode*)); 
    int outCount = 0; 
    for (node = net1->nodes; outCount < numOutputs; node = node->next) { 
    if (node->type == BNET_OUTPUT_NODE){ 
      outputArray[outCount] = node->dd; 
      outCount = outCount + 1; 
     } 
    }