1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
/**CFile****************************************************************
FileName [dsc.h]
SystemName [ABC: Logic synthesis and verification system.]
PackageName [Disjoint support decomposition - ICCD'15]
Synopsis [Disjoint-support decomposition with cofactoring and boolean difference analysis
from V. Callegaro, F. S. Marranghello, M. G. A. Martins, R. P. Ribas and A. I. Reis,
"Bottom-up disjoint-support decomposition based on cofactor and boolean difference analysis," ICCD'15]
Author [Vinicius Callegaro, Mayler G. A. Martins, Felipe S. Marranghello, Renato P. Ribas and Andre I. Reis]
Affiliation [UFRGS - Federal University of Rio Grande do Sul - Brazil]
Date [Ver. 1.0. Started - October 24, 2014.]
Revision [$Id: dsc.h,v 1.00 2014/10/24 00:00:00 vcallegaro Exp $]
***********************************************************************/
#ifndef ABC__DSC___h
#define ABC__DSC___h
////////////////////////////////////////////////////////////////////////
/// INCLUDES ///
////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <string.h>
#include "misc/util/abc_global.h"
////////////////////////////////////////////////////////////////////////
/// PARAMETERS ///
////////////////////////////////////////////////////////////////////////
ABC_NAMESPACE_HEADER_START
#define DSC_MAX_VAR 16 // should be 6 or more, i.e. DSC_MAX_VAR >= 6
#define DSC_MAX_STR DSC_MAX_VAR << 2 // DSC_MAX_VAR * 4
////////////////////////////////////////////////////////////////////////
/// BASIC TYPES ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// MACRO DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
/*=== dsc.c ==========================================================*/
/**
* memory allocator with a capacity of storing 3*nVars
* truth-tables for negative and positive cofactors and
* the boolean difference for each input variable
*/
extern word * Dsc_alloc_pool(int nVars);
/**
* This method implements the paper proposed by V. Callegaro, F. S. Marranghello, M. G. A. Martins, R. P. Ribas and A. I. Reis,
* entitled "Bottom-up disjoint-support decomposition based on cofactor and boolean difference analysis", presented at ICCD 2015.
* pTruth: pointer for the truth table representing the target function.
* nVarsInit: the number of variables of the truth table of the target function.
* pRes: pointer for storing the resulting decomposition, whenever a decomposition can be found.
* pool: NULL or a pointer for with a capacity of storing 3*nVars truth-tables. IF NULL, the function will allocate and free the memory of each call.
* (the results presented on ICCD paper are running this method with NULL for the memory pool).
* The method returns 0 if a full decomposition was found and a negative value otherwise.
*/
extern int Dsc_Decompose(word * pTruth, const int nVarsInit, char * const pRes, word *pool);
/**
* just free the memory pool
*/
extern void Dsc_free_pool(word * pool);
int * Dsc_ComputeMatches( char * p );
int Dsc_CountAnds_rec( char * pStr, char ** p, int * pMatches );
extern int Dsc_CountAnds( char * pDsd );
ABC_NAMESPACE_HEADER_END
#endif
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
|