-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.
|
||||
VERSION=$A2SDF_VERSION
|
||||
PACKAGE=emmaus
|
||||
PACKAGE=a2sdf
|
||||
|
||||
dnl Initialize automake stuff
|
||||
AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
|
||||
|
@ -32,4 +32,5 @@ AM_ALLIANCE
|
|||
AC_OUTPUT([
|
||||
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*/);
|
||||
assert(befig);
|
||||
|
||||
if (_verbose)
|
||||
{
|
||||
cout << " o Treating cell: " << name << endl;
|
||||
}
|
||||
|
||||
list<const char*> outs;
|
||||
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();
|
||||
lit != outs.end();
|
||||
lit++)
|
||||
|
|
|
@ -10,11 +10,14 @@ class A2Sdf
|
|||
public:
|
||||
typedef list<TimingCell*> TimingCells;
|
||||
private:
|
||||
bool _verbose;
|
||||
const char* _fileName;
|
||||
TimingCells _timingCells;
|
||||
public:
|
||||
A2Sdf(const char* filename):
|
||||
_fileName(filename), _timingCells()
|
||||
A2Sdf(const char* filename, bool verbose)
|
||||
: _verbose(verbose)
|
||||
, _fileName(filename)
|
||||
, _timingCells()
|
||||
{}
|
||||
|
||||
~A2Sdf();
|
||||
|
|
|
@ -12,10 +12,10 @@ IOPath*
|
|||
TimingCell::AddIOPath(const char* input, const char* output)
|
||||
{
|
||||
IOPathKey key(input, output);
|
||||
IOPath* ioPath = _ioPaths[key];
|
||||
if (ioPath)
|
||||
return ioPath;
|
||||
ioPath = new IOPath(input, output);
|
||||
IOPaths::iterator ioPathIt;
|
||||
if ((ioPathIt = _ioPaths.find(key)) != _ioPaths.end())
|
||||
return ioPathIt->second;
|
||||
IOPath* ioPath = new IOPath(input, output);
|
||||
_ioPaths[key] = ioPath;
|
||||
return ioPath;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ using namespace std;
|
|||
static void version(void)
|
||||
{
|
||||
cout << "a2sdf(" PACKAGE ") " VERSION << endl;
|
||||
cout << "The " PACKAGE " package comes with NO WARRANTY" << endl;
|
||||
cout << "ALLIANCE " << ALLIANCE_VERSION << endl;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -18,20 +18,22 @@ main(int argc, char** argv)
|
|||
{
|
||||
int showUsage = 0;
|
||||
int showVersion = 0;
|
||||
int verbose = 0;
|
||||
const char* cellsDir = NULL;
|
||||
const char* sdfFileName = NULL;
|
||||
poptOption options[] = {
|
||||
{ "help", 'h', POPT_ARG_NONE, &showUsage, 0, "print this message", 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 }
|
||||
};
|
||||
|
||||
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)
|
||||
{
|
||||
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;
|
||||
return 1;
|
||||
}
|
||||
|
@ -74,12 +76,14 @@ main(int argc, char** argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
A2Sdf a2sdf(sdfFileName);
|
||||
A2Sdf a2sdf(sdfFileName, verbose);
|
||||
|
||||
int extensionlength = strlen(EXTENSION);
|
||||
|
||||
struct dirent* entry = NULL;
|
||||
|
||||
bool cellFound = false;
|
||||
|
||||
while ((entry = readdir (dir)) != NULL)
|
||||
{
|
||||
char* filename = entry->d_name;
|
||||
|
@ -89,12 +93,21 @@ main(int argc, char** argv)
|
|||
/* is extension of filename accepted */
|
||||
if (strncmp (filename + filenamelength - extensionlength,
|
||||
EXTENSION, extensionlength)) continue;
|
||||
cellFound = true;
|
||||
string cellName(filename);
|
||||
cellName.erase( cellName.find(EXTENSION));
|
||||
a2sdf.CreateTimingCell(cellName.c_str());
|
||||
}
|
||||
|
||||
if (cellFound)
|
||||
a2sdf.Dump();
|
||||
else
|
||||
{
|
||||
cerr << " o Error: No cell to convert in: "
|
||||
<< cellsDir << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue