Skip to content

Commit 291e0a2

Browse files
committed
Updating &write_ver.
1 parent 8d3ba7b commit 291e0a2

3 files changed

Lines changed: 886 additions & 41 deletions

File tree

src/aig/gia/giaMan.c

Lines changed: 114 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1866,6 +1866,72 @@ void Gia_ManDumpIoList( Gia_Man_t * p, FILE * pFile, int fOuts, int fReverse )
18661866
Vec_IntFree( vArray );
18671867
}
18681868
}
1869+
static Vec_Bit_t * Gia_ManCollectMultiBits( Vec_Ptr_t * vNames, int n )
1870+
{
1871+
Vec_Bit_t * vBits = Vec_BitStart( n );
1872+
if ( n == 0 )
1873+
return vBits;
1874+
if ( vNames == NULL )
1875+
{
1876+
if ( n > 1 )
1877+
{
1878+
int i;
1879+
for ( i = 0; i < n; i++ )
1880+
Vec_BitWriteEntry( vBits, i, 1 );
1881+
}
1882+
return vBits;
1883+
}
1884+
{
1885+
Vec_Int_t * vArray = Gia_ManCountSymbsAll( vNames );
1886+
int iName, Size, i;
1887+
int nNames = Vec_PtrSize( vNames );
1888+
Vec_IntForEachEntryDouble( vArray, iName, Size, i )
1889+
{
1890+
int iNameNext = Vec_IntSize(vArray) > i+2 ? Vec_IntEntry(vArray, i+2) : nNames;
1891+
int k;
1892+
if ( iNameNext - iName <= 1 )
1893+
continue;
1894+
for ( k = iName; k < iNameNext && k < n; k++ )
1895+
Vec_BitWriteEntry( vBits, k, 1 );
1896+
}
1897+
Vec_IntFree( vArray );
1898+
}
1899+
return vBits;
1900+
}
1901+
static int Gia_ManDumpIoListMulti( Gia_Man_t * p, FILE * pFile, int fOuts, int fReverse )
1902+
{
1903+
Vec_Ptr_t * vNames = fOuts ? p->vNamesOut : p->vNamesIn;
1904+
int nNames = vNames ? Vec_PtrSize(vNames) : (fOuts ? Gia_ManCoNum(p) : Gia_ManCiNum(p));
1905+
if ( vNames == NULL )
1906+
{
1907+
if ( nNames > 1 )
1908+
{
1909+
fprintf( pFile, "_%c_", fOuts ? 'o' : 'i' );
1910+
return 1;
1911+
}
1912+
return 0;
1913+
}
1914+
{
1915+
Vec_Int_t * vArray = Gia_ManCountSymbsAll( vNames );
1916+
int nGroups = Vec_IntSize(vArray) / 2;
1917+
int idx, fFirst = 1;
1918+
for ( idx = 0; idx < nGroups; idx++ )
1919+
{
1920+
int g = fReverse ? (nGroups - 1 - idx) : idx;
1921+
int iName = Vec_IntEntry(vArray, 2*g);
1922+
int Size = Vec_IntEntry(vArray, 2*g + 1);
1923+
int iNameNext = (g + 1 < nGroups) ? Vec_IntEntry(vArray, 2*(g + 1)) : nNames;
1924+
if ( iNameNext - iName <= 1 )
1925+
continue;
1926+
if ( !fFirst )
1927+
fprintf( pFile, ", " );
1928+
Gia_ManPrintOneName( pFile, (char *)Vec_PtrEntry(vNames, iName), Size );
1929+
fFirst = 0;
1930+
}
1931+
Vec_IntFree( vArray );
1932+
return !fFirst;
1933+
}
1934+
}
18691935
void Gia_ManDumpIoRanges( Gia_Man_t * p, FILE * pFile, int fOuts )
18701936
{
18711937
Vec_Ptr_t * vNames = fOuts ? p->vNamesOut : p->vNamesIn;
@@ -1943,17 +2009,30 @@ void Gia_ManDumpInterface( Gia_Man_t * p, char * pFileName )
19432009
Gia_ManWriteNames( pFile, 'z', Gia_ManPoNum(p), p->vNamesOut, 9, 4, NULL, 0 );
19442010
fprintf( pFile, ";\n\n" );
19452011

1946-
fprintf( pFile, " assign { " );
1947-
Gia_ManWriteNames( pFile, 'x', Gia_ManCiNum(p), p->vNamesIn, 8, 4, NULL, 1 );
1948-
fprintf( pFile, " } = { " );
1949-
Gia_ManDumpIoList( p, pFile, 0, 1 );
1950-
fprintf( pFile, " };\n\n" );
1951-
1952-
fprintf( pFile, " assign { " );
1953-
Gia_ManDumpIoList( p, pFile, 1, 1 );
1954-
fprintf( pFile, " } = { " );
1955-
Gia_ManWriteNames( pFile, 'z', Gia_ManCoNum(p), p->vNamesOut, 9, 4, NULL, 1 );
1956-
fprintf( pFile, " };\n\n" );
2012+
{
2013+
Vec_Bit_t * vMultiIn = Gia_ManCollectMultiBits( p->vNamesIn, Gia_ManCiNum(p) );
2014+
Vec_Bit_t * vMultiOut = Gia_ManCollectMultiBits( p->vNamesOut, Gia_ManCoNum(p) );
2015+
int fHasMultiIn = Vec_BitCount( vMultiIn );
2016+
int fHasMultiOut = Vec_BitCount( vMultiOut );
2017+
if ( fHasMultiIn )
2018+
{
2019+
fprintf( pFile, " assign { " );
2020+
Gia_ManWriteNames( pFile, 'x', Gia_ManCiNum(p), p->vNamesIn, 8, 4, vMultiIn, 1 );
2021+
fprintf( pFile, " } = { " );
2022+
Gia_ManDumpIoListMulti( p, pFile, 0, 1 );
2023+
fprintf( pFile, " };\n\n" );
2024+
}
2025+
if ( fHasMultiOut )
2026+
{
2027+
fprintf( pFile, " assign { " );
2028+
Gia_ManDumpIoListMulti( p, pFile, 1, 1 );
2029+
fprintf( pFile, " } = { " );
2030+
Gia_ManWriteNames( pFile, 'z', Gia_ManCoNum(p), p->vNamesOut, 9, 4, vMultiOut, 1 );
2031+
fprintf( pFile, " };\n\n" );
2032+
}
2033+
Vec_BitFree( vMultiIn );
2034+
Vec_BitFree( vMultiOut );
2035+
}
19572036

19582037
if ( Vec_BitCount(vUsed) )
19592038
{
@@ -2054,17 +2133,30 @@ void Gia_ManDumpInterfaceAssign( Gia_Man_t * p, char * pFileName )
20542133
Gia_ManWriteNames( pFile, 'z', Gia_ManPoNum(p), p->vNamesOut, 9, 4, NULL, 0 );
20552134
fprintf( pFile, ";\n\n" );
20562135

2057-
fprintf( pFile, " assign { " );
2058-
Gia_ManWriteNames( pFile, 'x', Gia_ManCiNum(p), p->vNamesIn, 8, 4, NULL, 1 );
2059-
fprintf( pFile, " } = { " );
2060-
Gia_ManDumpIoList( p, pFile, 0, 1 );
2061-
fprintf( pFile, " };\n\n" );
2062-
2063-
fprintf( pFile, " assign { " );
2064-
Gia_ManDumpIoList( p, pFile, 1, 1 );
2065-
fprintf( pFile, " } = { " );
2066-
Gia_ManWriteNames( pFile, 'z', Gia_ManCoNum(p), p->vNamesOut, 9, 4, NULL, 1 );
2067-
fprintf( pFile, " };\n\n" );
2136+
{
2137+
Vec_Bit_t * vMultiIn = Gia_ManCollectMultiBits( p->vNamesIn, Gia_ManCiNum(p) );
2138+
Vec_Bit_t * vMultiOut = Gia_ManCollectMultiBits( p->vNamesOut, Gia_ManCoNum(p) );
2139+
int fHasMultiIn = Vec_BitCount( vMultiIn );
2140+
int fHasMultiOut = Vec_BitCount( vMultiOut );
2141+
if ( fHasMultiIn )
2142+
{
2143+
fprintf( pFile, " assign { " );
2144+
Gia_ManWriteNames( pFile, 'x', Gia_ManCiNum(p), p->vNamesIn, 8, 4, vMultiIn, 1 );
2145+
fprintf( pFile, " } = { " );
2146+
Gia_ManDumpIoListMulti( p, pFile, 0, 1 );
2147+
fprintf( pFile, " };\n\n" );
2148+
}
2149+
if ( fHasMultiOut )
2150+
{
2151+
fprintf( pFile, " assign { " );
2152+
Gia_ManDumpIoListMulti( p, pFile, 1, 1 );
2153+
fprintf( pFile, " } = { " );
2154+
Gia_ManWriteNames( pFile, 'z', Gia_ManCoNum(p), p->vNamesOut, 9, 4, vMultiOut, 1 );
2155+
fprintf( pFile, " };\n\n" );
2156+
}
2157+
Vec_BitFree( vMultiIn );
2158+
Vec_BitFree( vMultiOut );
2159+
}
20682160

20692161
if ( Vec_BitCount(vUsed) )
20702162
{

0 commit comments

Comments
 (0)