summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2016-01-20 15:01:27 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2016-01-20 15:01:27 -0800
commitdf34a262162df02ec1156bfbca21f9b8884c6e3f (patch)
tree23d54343e1130c59cc5257624da646674b9a8c56
parentf5ee46eb3c2c691e4bafc5b7a7dbe3be16bef5dd (diff)
downloadabc-df34a262162df02ec1156bfbca21f9b8884c6e3f.tar.gz
abc-df34a262162df02ec1156bfbca21f9b8884c6e3f.tar.bz2
abc-df34a262162df02ec1156bfbca21f9b8884c6e3f.zip
Generating sorting network as a PLA file.
-rw-r--r--src/base/pla/plaCom.c14
-rw-r--r--src/base/pla/plaMan.c41
2 files changed, 52 insertions, 3 deletions
diff --git a/src/base/pla/plaCom.c b/src/base/pla/plaCom.c
index 6d2d4b62..77fd921c 100644
--- a/src/base/pla/plaCom.c
+++ b/src/base/pla/plaCom.c
@@ -290,15 +290,17 @@ usage:
******************************************************************************/
int Abc_CommandGen( Abc_Frame_t * pAbc, int argc, char ** argv )
{
+ extern void Pla_GenSorter( int nVars );
Pla_Man_t * p = NULL;
int nInputs = 8;
int nOutputs = 1;
int nCubes = 20;
int Seed = 0;
+ int fSorter = 0;
int fPrimes = 0;
int c, fVerbose = 0;
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "IOPSpvh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "IOPSspvh" ) ) != EOF )
{
switch ( c )
{
@@ -346,6 +348,9 @@ int Abc_CommandGen( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( Seed < 0 )
goto usage;
break;
+ case 's':
+ fSorter ^= 1;
+ break;
case 'p':
fPrimes ^= 1;
break;
@@ -358,7 +363,9 @@ int Abc_CommandGen( Abc_Frame_t * pAbc, int argc, char ** argv )
goto usage;
}
}
- if ( fPrimes )
+ if ( fSorter )
+ Pla_GenSorter( nInputs );
+ else if ( fPrimes )
p = Pla_ManPrimesDetector( nInputs );
else
{
@@ -370,12 +377,13 @@ int Abc_CommandGen( Abc_Frame_t * pAbc, int argc, char ** argv )
Pla_AbcUpdateMan( pAbc, p );
return 0;
usage:
- Abc_Print( -2, "usage: |gen [-IOPS num] [-pvh]\n" );
+ Abc_Print( -2, "usage: |gen [-IOPS num] [-spvh]\n" );
Abc_Print( -2, "\t generate random or specialized SOP\n" );
Abc_Print( -2, "\t-I num : the number of inputs [default = %d]\n", nInputs );
Abc_Print( -2, "\t-O num : the number of outputs [default = %d]\n", nOutputs );
Abc_Print( -2, "\t-P num : the number of products [default = %d]\n", nCubes );
Abc_Print( -2, "\t-S num : ramdom seed (0 <= num <= 1000) [default = %d]\n", Seed );
+ Abc_Print( -2, "\t-s : toggle generating sorter as a PLA file [default = %s]\n", fSorter? "yes": "no" );
Abc_Print( -2, "\t-p : toggle generating prime detector [default = %s]\n", fPrimes? "yes": "no" );
Abc_Print( -2, "\t-v : toggle printing verbose information [default = %s]\n", fVerbose? "yes": "no" );
Abc_Print( -2, "\t-h : print the command usage\n");
diff --git a/src/base/pla/plaMan.c b/src/base/pla/plaMan.c
index 23ea8368..c396a264 100644
--- a/src/base/pla/plaMan.c
+++ b/src/base/pla/plaMan.c
@@ -32,6 +32,47 @@ ABC_NAMESPACE_IMPL_START
/**Function*************************************************************
+ Synopsis [Generates PLA description of a sorter.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Pla_GenSorter( int nVars )
+{
+ int i, k, Count, nMints = ( 1 << nVars );
+ char Buffer[20];
+ FILE * pFile;
+ sprintf( Buffer, "sorter%02d.pla", nVars );
+ pFile = fopen( Buffer, "wb" );
+ fprintf( pFile, "# This file was generated by ABC on %s.\n", Extra_TimeStamp() );
+ fprintf( pFile, ".i %d\n", nVars );
+ fprintf( pFile, ".o %d\n", nVars );
+ fprintf( pFile, ".p %d\n", nMints-1 );
+ for ( i = 1; i < nMints; i++ )
+ {
+ Count = 0;
+ for ( k = nVars-1; k >= 0; k-- )
+ {
+ Count += ((i >> k) & 1);
+ fprintf( pFile, "%d", (i >> k) & 1 );
+ }
+ fprintf( pFile, " " );
+ for ( k = 0; k < Count; k++ )
+ fprintf( pFile, "1" );
+ for ( ; k < nVars; k++ )
+ fprintf( pFile, "0" );
+ fprintf( pFile, "\n" );
+ }
+ fprintf( pFile, ".end\n" );
+ fclose( pFile );
+}
+
+/**Function*************************************************************
+
Synopsis [Generates prime detector for the given bit-widths.]
Description []