我正在尝试将BLIF文件导入CUDD包,从中创建BDD,然后执行一些操作。我已经设法使用ntr包导入BLIF文件。但是,我无法弄清楚应该如何访问生成的BDD中的任何变量或节点。

如果我为函数创建了自己的BDD,则可以随时创建变量,并且可以调出它们进行不同的操作。但是,通过BLIF导入,我所拥有的只是生成的ddManager(dd)和布尔网络(net1)。有谁知道如何调用各个变量/节点?请参阅下面的BLIF生成代码。谢谢!

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);

最佳答案

好吧,事实并非如此。见下文。只需遍历布尔网络结构(net1),并使用BNET_OUTPUT_NODE标志查找输出。

  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;
        }
    }

10-04 21:53