我试图将bif文件导入CUDD包,从中创建BDD,然后执行一些操作。我已经设法使用ntr包导入bif文件。但是,我不知道应该如何访问生成的BDD中的任何变量或节点。
如果我为一个函数创建自己的BDD,我将创建变量,并且能够调用它们来执行不同的操作/操作。但是,对于bif导入,我所拥有的只是结果ddManager (dd)和布尔网络(net1)。有人知道如何调用单个变量/节点吗?请参阅下面的bif生成代码。谢谢!
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;
}
}