Ignore:
Timestamp:
Jan 10, 2012, 6:51:23 PM (12 years ago)
Author:
cecile
Message:

new command generate cnf from network

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vis_dev/vis-2.3/src/debug/debugAbnormal.c

    r40 r41  
    138138         abn->abnormal = array_alloc(Ntk_Node_t*,0);
    139139         abn->freeInputs = array_alloc(Ntk_Node_t*,0);
     140     abn->abnAigArray = NIL(array_t);
     141     abn->abnCnfIndexArray = NIL(array_t);
    140142         abn->verbose = 0;
    141143         return abn;
     
    158160         array_free(abn->abnormal);
    159161         array_free(abn->freeInputs);
     162     array_free(abn->abnCnfIndexArray);
     163     array_free(abn->abnAigArray);
    160164         FREE(abn);
    161165}       
     
    267271        return abn;
    268272}
     273/**Function********************************************************************
     274 
     275  Synopsis    [Initialize the abnormal predicate in the clauses array abni =0]
     276
     277  Description [Fill the Dbg data structure, abnAigArray conains the set of Aig
     278  for the set of abnormal perdicate. Each abnormal are set to zero in the clause
     279  array.predicabnCnfIndexArray is the cnf index. The   correspondance is made by
     280  the index in the table, the index of a node in   abnArray is the same in
     281  abnAigArray and in abnIndexArray. If this array were  alredy computed nothing
     282  is done, if the aig or index information either.]
     283
     284  SideEffects [Fill abnAigArray and abnCnfIndexArray]
     285
     286  SeeAlso     []
     287
     288******************************************************************************/
     289void Dbg_InitAbn(Dbg_Abnormal_t * abn,
     290bAig_Manager_t   * manager,
     291st_table * nodeToMvfAigTable,
     292BmcCnfClauses_t *cnfClauses)
     293{
     294  if(abn->abnAigArray != NIL(array_t))
     295    (void) fprintf(vis_stdout, "Abnormal aig alredy filled\n");
     296  if(abn->abnCnfIndexArray != NIL(array_t)){
     297    (void) fprintf(vis_stdout, "Abnormal index alredy filled\n");
     298     return;
     299  }
     300  //Fill
     301   int size = array_n(abn->abnormal);
     302   array_t * abnAigArray = array_alloc(bAigEdge_t *,size);
     303   array_t * abnIndexArray = array_alloc(int,size);
     304   int aIndex;
     305   Ntk_Node_t * abnNode;
     306   Dbg_ForEachAbnormal(abn, aIndex,abnNode){
     307   MvfAig_Function_t * abnMvfAig = Bmc_ReadMvfAig(abnNode, nodeToMvfAigTable);
     308    if (abnMvfAig ==  NIL(MvfAig_Function_t)){
     309     (void) fprintf(vis_stdout, "No multi-valued function for this node %s \
     310     create abnormal predicate firs \n", Ntk_NodeReadName(abnNode));
     311     return ;
     312    }
     313    int mvfSize   = array_n(abnMvfAig);
     314    int i;
     315    bAigEdge_t         * abnBAig  = ALLOC(bAigEdge_t, mvfSize);
     316
     317    for(i=0; i< mvfSize; i++)
     318    {
     319      abnBAig[i] = bAig_GetCanonical(manager,
     320      MvfAig_FunctionReadComponent(abnMvfAig,  i));
     321    }
     322    array_insert(bAigEdge_t*,abnAigArray,aIndex,abnBAig);
     323    int abnIndex = BmcGenerateCnfFormulaForAigFunction(manager,abnBAig[0],0,cnfClauses);
     324    array_insert(int,abnIndexArray,aIndex,cnfClauses->nextIndex);
     325    // Create clause
     326     array_t           *abnClause = NIL(array_t);
     327         abnClause = array_alloc(int, 0);   
     328         array_insert_last(int, abnClause, abnIndex);
     329         BmcCnfInsertClause(cnfClauses, abnClause);
     330     array_free(abnClause);
     331   }
     332   abn->abnAigArray = abnAigArray;
     333   abn->abnCnfIndexArray = abnIndexArray;
     334}
Note: See TracChangeset for help on using the changeset viewer.