-bugs, prise en compte des cellules multi-sorties, +doc ...
This commit is contained in:
parent
044e091c5f
commit
710ad11452
|
@ -11,7 +11,7 @@ AC_SUBST(A2SDF_VERSION)
|
||||||
|
|
||||||
# For automake.
|
# For automake.
|
||||||
VERSION=$A2SDF_VERSION
|
VERSION=$A2SDF_VERSION
|
||||||
PACKAGE=emmaus
|
PACKAGE=a2sdf
|
||||||
|
|
||||||
dnl Initialize automake stuff
|
dnl Initialize automake stuff
|
||||||
AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
|
AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
|
||||||
|
@ -32,4 +32,5 @@ AM_ALLIANCE
|
||||||
AC_OUTPUT([
|
AC_OUTPUT([
|
||||||
Makefile
|
Makefile
|
||||||
src/Makefile
|
src/Makefile
|
||||||
|
doc/Makefile
|
||||||
])
|
])
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
|
man_MANS = a2sdf.1
|
||||||
|
EXTRA_DIST = $(man_MANS)
|
|
@ -0,0 +1,39 @@
|
||||||
|
.pl -.4
|
||||||
|
.TH A2SDF 1 "December 09, 2002" "ASIM/LIP6" "CAO\-VLSI Reference Manual"
|
||||||
|
.SH NAME
|
||||||
|
.TP
|
||||||
|
a2sdf
|
||||||
|
- alliance to sdf format converter
|
||||||
|
.so man1/alc_origin.1
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.TP
|
||||||
|
\fBa2sdf\fP
|
||||||
|
[\fBoptions\fP] \fIcells_dir\fP \fIoutputname\fP
|
||||||
|
.br
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
\fBa2sdf\fP translates the SXLIB library to the SDF format. Please refer to
|
||||||
|
http://www.eda.org/sdf/ for more information on SDF format.
|
||||||
|
.br
|
||||||
|
Only the SXLIB library has got timing informations at the moment, so it's
|
||||||
|
the only library we are able to convert.
|
||||||
|
.br
|
||||||
|
\fBcells directory\fP
|
||||||
|
.br
|
||||||
|
The path to the SXLIB cells directory.
|
||||||
|
.br
|
||||||
|
\fBoutput name\fP
|
||||||
|
.br
|
||||||
|
Just the name of the file containing the timing information in sdf format.
|
||||||
|
It should be named with a .sdf extension.
|
||||||
|
.br
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
.PP
|
||||||
|
\fB-v[ersion]\fP displays the tool's version.
|
||||||
|
.br
|
||||||
|
\fB-h[elp]\fP displays a small help message.
|
||||||
|
.br
|
||||||
|
\fB-V[erbose]\fP sets the verbose mode on.
|
||||||
|
.br
|
||||||
|
.so man1/alc_bug_report.1
|
|
@ -42,6 +42,12 @@ A2Sdf::CreateTimingCell(const char* name)
|
||||||
|
|
||||||
befig_list* befig = vhdlloadbefig(NULL,const_cast<char*>(name),0/*don't dump message*/);
|
befig_list* befig = vhdlloadbefig(NULL,const_cast<char*>(name),0/*don't dump message*/);
|
||||||
assert(befig);
|
assert(befig);
|
||||||
|
|
||||||
|
if (_verbose)
|
||||||
|
{
|
||||||
|
cout << " o Treating cell: " << name << endl;
|
||||||
|
}
|
||||||
|
|
||||||
list<const char*> outs;
|
list<const char*> outs;
|
||||||
for (const bepor_list* bepor=befig->BEPOR; bepor; bepor=bepor->NEXT)
|
for (const bepor_list* bepor=befig->BEPOR; bepor; bepor=bepor->NEXT)
|
||||||
{
|
{
|
||||||
|
@ -52,12 +58,6 @@ A2Sdf::CreateTimingCell(const char* name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (outs.size() > 1)
|
|
||||||
{
|
|
||||||
cerr << name << endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (list<const char*>::const_iterator lit = outs.begin();
|
for (list<const char*>::const_iterator lit = outs.begin();
|
||||||
lit != outs.end();
|
lit != outs.end();
|
||||||
lit++)
|
lit++)
|
||||||
|
|
|
@ -10,11 +10,14 @@ class A2Sdf
|
||||||
public:
|
public:
|
||||||
typedef list<TimingCell*> TimingCells;
|
typedef list<TimingCell*> TimingCells;
|
||||||
private:
|
private:
|
||||||
|
bool _verbose;
|
||||||
const char* _fileName;
|
const char* _fileName;
|
||||||
TimingCells _timingCells;
|
TimingCells _timingCells;
|
||||||
public:
|
public:
|
||||||
A2Sdf(const char* filename):
|
A2Sdf(const char* filename, bool verbose)
|
||||||
_fileName(filename), _timingCells()
|
: _verbose(verbose)
|
||||||
|
, _fileName(filename)
|
||||||
|
, _timingCells()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
~A2Sdf();
|
~A2Sdf();
|
||||||
|
|
|
@ -12,10 +12,10 @@ IOPath*
|
||||||
TimingCell::AddIOPath(const char* input, const char* output)
|
TimingCell::AddIOPath(const char* input, const char* output)
|
||||||
{
|
{
|
||||||
IOPathKey key(input, output);
|
IOPathKey key(input, output);
|
||||||
IOPath* ioPath = _ioPaths[key];
|
IOPaths::iterator ioPathIt;
|
||||||
if (ioPath)
|
if ((ioPathIt = _ioPaths.find(key)) != _ioPaths.end())
|
||||||
return ioPath;
|
return ioPathIt->second;
|
||||||
ioPath = new IOPath(input, output);
|
IOPath* ioPath = new IOPath(input, output);
|
||||||
_ioPaths[key] = ioPath;
|
_ioPaths[key] = ioPath;
|
||||||
return ioPath;
|
return ioPath;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ using namespace std;
|
||||||
static void version(void)
|
static void version(void)
|
||||||
{
|
{
|
||||||
cout << "a2sdf(" PACKAGE ") " VERSION << endl;
|
cout << "a2sdf(" PACKAGE ") " VERSION << endl;
|
||||||
cout << "The " PACKAGE " package comes with NO WARRANTY" << endl;
|
cout << "ALLIANCE " << ALLIANCE_VERSION << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -18,20 +18,22 @@ main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
int showUsage = 0;
|
int showUsage = 0;
|
||||||
int showVersion = 0;
|
int showVersion = 0;
|
||||||
|
int verbose = 0;
|
||||||
const char* cellsDir = NULL;
|
const char* cellsDir = NULL;
|
||||||
const char* sdfFileName = NULL;
|
const char* sdfFileName = NULL;
|
||||||
poptOption options[] = {
|
poptOption options[] = {
|
||||||
{ "help", 'h', POPT_ARG_NONE, &showUsage, 0, "print this message", 0},
|
{ "help", 'h', POPT_ARG_NONE, &showUsage, 0, "print this message", 0},
|
||||||
{ "version", 'v', POPT_ARG_NONE, &showVersion, 0, "print the version information", 0},
|
{ "version", 'v', POPT_ARG_NONE, &showVersion, 0, "print the version information", 0},
|
||||||
|
{ "Verbose", 'V', POPT_ARG_NONE, &verbose, 0, "verbose mode", 0},
|
||||||
{ 0, 0, 0, 0, 0, 0, 0 }
|
{ 0, 0, 0, 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
poptContext context = poptGetContext("a2sdf", argc, (const char**)argv, options, 0);
|
poptContext context = poptGetContext("a2sdf", argc, (const char**)argv, options, 0);
|
||||||
poptSetOtherOptionHelp(context, "<cellsdir> <sdffilename> ");
|
poptSetOtherOptionHelp(context, " -hvV <cellsdir> <sdffilename> ");
|
||||||
|
|
||||||
if (int rc = poptGetNextOpt(context) < -1)
|
if (int rc = poptGetNextOpt(context) < -1)
|
||||||
{
|
{
|
||||||
cerr << "simann: bad argument " << poptBadOption(context, POPT_BADOPTION_NOALIAS) << ": " << poptStrerror(rc) << endl;
|
cerr << "a2sdf: bad argument " << poptBadOption(context, POPT_BADOPTION_NOALIAS) << ": " << poptStrerror(rc) << endl;
|
||||||
cerr << "Try `" << argv[0] << " --help' for more information" << endl;
|
cerr << "Try `" << argv[0] << " --help' for more information" << endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -74,12 +76,14 @@ main(int argc, char** argv)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
A2Sdf a2sdf(sdfFileName);
|
A2Sdf a2sdf(sdfFileName, verbose);
|
||||||
|
|
||||||
int extensionlength = strlen(EXTENSION);
|
int extensionlength = strlen(EXTENSION);
|
||||||
|
|
||||||
struct dirent* entry = NULL;
|
struct dirent* entry = NULL;
|
||||||
|
|
||||||
|
bool cellFound = false;
|
||||||
|
|
||||||
while ((entry = readdir (dir)) != NULL)
|
while ((entry = readdir (dir)) != NULL)
|
||||||
{
|
{
|
||||||
char* filename = entry->d_name;
|
char* filename = entry->d_name;
|
||||||
|
@ -89,12 +93,21 @@ main(int argc, char** argv)
|
||||||
/* is extension of filename accepted */
|
/* is extension of filename accepted */
|
||||||
if (strncmp (filename + filenamelength - extensionlength,
|
if (strncmp (filename + filenamelength - extensionlength,
|
||||||
EXTENSION, extensionlength)) continue;
|
EXTENSION, extensionlength)) continue;
|
||||||
|
cellFound = true;
|
||||||
string cellName(filename);
|
string cellName(filename);
|
||||||
cellName.erase( cellName.find(EXTENSION));
|
cellName.erase( cellName.find(EXTENSION));
|
||||||
a2sdf.CreateTimingCell(cellName.c_str());
|
a2sdf.CreateTimingCell(cellName.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
a2sdf.Dump();
|
if (cellFound)
|
||||||
|
a2sdf.Dump();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cerr << " o Error: No cell to convert in: "
|
||||||
|
<< cellsDir << endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue