3

我正在尝试将 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);
4

1 回答 1

0

事实证明它并没有那么糟糕。见下文。只需遍历布尔网络结构 (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;
        }
    }
于 2016-10-24T22:06:20.620 回答