- New small tool that can be helpfull to convert pat files to equivalent
PWL spice commands
This commit is contained in:
parent
e9398c13fd
commit
37e0f58473
|
@ -0,0 +1 @@
|
|||
SUBDIRS = src man1
|
|
@ -0,0 +1,35 @@
|
|||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(src/pat2spi.c)
|
||||
|
||||
PAT2SPI_MAJOR_VERSION=1
|
||||
PAT2SPI_MINOR_VERSION=1
|
||||
PAT2SPI_VERSION=$PAT2SPI_MAJOR_VERSION.$PAT2SPI_MINOR_VERSION
|
||||
|
||||
AC_SUBST(PAT2SPI_MAJOR_VERSION)
|
||||
AC_SUBST(PAT2SPI_MINOR_VERSION)
|
||||
AC_SUBST(PAT2SPI_VERSION)
|
||||
|
||||
# For automake.
|
||||
VERSION=$PAT2SPI_VERSION
|
||||
PACKAGE=pat2spi
|
||||
|
||||
dnl Initialize automake stuff
|
||||
AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
AM_PROG_LEX
|
||||
AC_PROG_YACC
|
||||
AM_PROG_LIBTOOL
|
||||
AC_PROG_MAKE_SET
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
|
||||
AM_ALLIANCE
|
||||
|
||||
AC_OUTPUT([
|
||||
Makefile
|
||||
man1/Makefile
|
||||
src/Makefile
|
||||
])
|
|
@ -0,0 +1,2 @@
|
|||
man_MANS = pat2spi.1
|
||||
EXTRA_DIST = $(man_MANS)
|
|
@ -0,0 +1,37 @@
|
|||
.TH PAT2SPI 1 "May 23, 2004" "ASIM/LIP6" "CAO\-VLSI Reference Manual"
|
||||
.SH NAME
|
||||
.PP
|
||||
\fIpat2spi\fP, PAT ALLIANCE format translator to Spice PWL format
|
||||
|
||||
.so man1/alc_origin.1
|
||||
.SH SYNOPSIS
|
||||
.PP
|
||||
\fBpat2spi\fP
|
||||
[
|
||||
.I -slope natural_value
|
||||
]
|
||||
.I In_filename
|
||||
.I Out_filename
|
||||
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
\fBpat2spi\fP is a translator from ALLIANCE pattern format (\fI".pat"\fP)
|
||||
to spice PWL format (\fI".spi"\fP). An optional slope parameter can be used to specify
|
||||
the slope value in pico second.
|
||||
|
||||
.SH EXAMPLE
|
||||
.br
|
||||
Converts adder4.pat using PWL commands and generates the file spice_pattern.spi
|
||||
(that could be used in a SPICE testbench for example).
|
||||
|
||||
.PP
|
||||
.ti 7
|
||||
pat2spi -slope 100 adder4 spice_pattern
|
||||
|
||||
.SH SEE ALSO
|
||||
.PP
|
||||
asimut(1), pat(5)
|
||||
|
||||
|
||||
.so man1/alc_bug_report.1
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
bin_PROGRAMS = pat2spi
|
||||
|
||||
AM_CFLAGS = @ALLIANCE_CFLAGS@
|
||||
|
||||
pat2spi_LDADD = @ALLIANCE_LIBS@ \
|
||||
-lPpt -lPhl -lPat -lAut -lMut
|
||||
|
||||
|
||||
pat2spi_SOURCES = pat2spi.c pat2spi.h
|
|
@ -0,0 +1,558 @@
|
|||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Tool : PAT2SPI |
|
||||
| |
|
||||
| File : pat2spi.c |
|
||||
| |
|
||||
| Authors : Jacomme Ludovic |
|
||||
| |
|
||||
| Date : 10.08.02 |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Include Files |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <signal.h>
|
||||
# include <string.h>
|
||||
# include <setjmp.h>
|
||||
# include "mut.h"
|
||||
# include "aut.h"
|
||||
# include "pat.h"
|
||||
# include "ppt.h"
|
||||
|
||||
# include "pat2spi.h"
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Constants |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Types |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Variables |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| pat_addpatfig |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
patfig_list *pat_addpatfig( paseq_list *Sequence )
|
||||
{
|
||||
patfig_list *FigurePat;
|
||||
char **ModeArray;
|
||||
char **NameArray;
|
||||
char *FormatArray;
|
||||
long *WidthArray;
|
||||
char *ScanBuffer;
|
||||
|
||||
char Buffer[ 4096 ];
|
||||
char Name [ 512 ];
|
||||
char Format;
|
||||
int Left;
|
||||
int Right;
|
||||
char *Direction;
|
||||
char *Mode;
|
||||
|
||||
long NumberIO;
|
||||
long NumberBit;
|
||||
long IndexBit;
|
||||
|
||||
char TimeUnit;
|
||||
unsigned long TimeScale;
|
||||
unsigned long TimeDelta;
|
||||
unsigned long Delta;
|
||||
unsigned long TimeCurrent;
|
||||
unsigned long TimeNext;
|
||||
char TimeAllZero;
|
||||
|
||||
paiol_list *ScanIol;
|
||||
pagrp_list *ScanGrp;
|
||||
papat_list *ScanPaPat;
|
||||
|
||||
FigurePat = (patfig_list *)autallocblock( sizeof( patfig_list ) );
|
||||
|
||||
NumberBit = Sequence->IOLNBR;
|
||||
ScanGrp = Sequence->PAGRP;
|
||||
|
||||
ScanIol = Sequence->PAIOL;
|
||||
|
||||
NameArray = (char **)autallocblock( sizeof( char * ) * NumberBit );
|
||||
FormatArray = (char *)autallocblock( sizeof( char ) * NumberBit );
|
||||
ModeArray = (char **)autallocblock( sizeof( char * ) * NumberBit );
|
||||
WidthArray = (long *)autallocblock( sizeof( long ) * NumberBit );
|
||||
|
||||
NumberIO = 0;
|
||||
IndexBit = 0;
|
||||
|
||||
while ( ScanIol != (paiol_list *)0 )
|
||||
{
|
||||
switch ( ScanIol->MODE)
|
||||
{
|
||||
case 'I': Mode = "in";
|
||||
break;
|
||||
case 'O':
|
||||
case 'B':
|
||||
case 'Z': Mode = "out";
|
||||
break;
|
||||
case 'R': Mode = "register";
|
||||
break;
|
||||
case 'T': Mode = "inout";
|
||||
break;
|
||||
case 'S':
|
||||
case 'W':
|
||||
case 'X':
|
||||
case 'U': Mode = "signal";
|
||||
break;
|
||||
}
|
||||
|
||||
Format = ScanIol->FORMAT;
|
||||
|
||||
# ifdef DEBUG
|
||||
if ( ScanGrp != (pagrp_list *)0 )
|
||||
{
|
||||
fprintf( stdout, "ScanGrp %s %d %d %d\n",
|
||||
ScanGrp->NAME, ScanGrp->FINDEX, ScanGrp->LENGTH, ScanGrp->FLAG );
|
||||
}
|
||||
# endif
|
||||
|
||||
if ( ( ScanGrp != (pagrp_list *)0 ) &&
|
||||
( IndexBit == ScanGrp->FINDEX ) )
|
||||
{
|
||||
if ( Format == 'B' ) Format = 'X';
|
||||
/*
|
||||
if ( ScanIol->FORMAT != 'B' )
|
||||
*/
|
||||
{
|
||||
if ( ! ScanGrp->FLAG )
|
||||
{
|
||||
sscanf( ScanIol->NAME, "%s %d", Name, &Left );
|
||||
|
||||
ScanIol += ScanGrp->LENGTH - 1;
|
||||
IndexBit += ScanGrp->LENGTH;
|
||||
|
||||
sscanf( ScanIol->NAME, "%s %d", Name, &Right );
|
||||
|
||||
if ( Left < Right ) Direction = "to";
|
||||
else Direction = "downto";
|
||||
|
||||
sprintf( Buffer, "%s (%d %s %d) %c", Name, Left, Direction, Right, Format );
|
||||
|
||||
# ifdef DEBUG
|
||||
fprintf( stdout, "ICI %s\n", Buffer );
|
||||
# endif
|
||||
ScanIol = ScanIol->NEXT;
|
||||
}
|
||||
else
|
||||
{
|
||||
# ifdef DEBUG
|
||||
fprintf( stdout, "NAME %s\n", ScanGrp->NAME );
|
||||
# endif
|
||||
|
||||
ScanBuffer = Buffer;
|
||||
strcpy( ScanBuffer, ScanGrp->NAME );
|
||||
ScanBuffer += strlen( ScanBuffer );
|
||||
strcpy( ScanBuffer, " (" );
|
||||
ScanBuffer += 2;
|
||||
|
||||
for ( Left = 0; Left < ScanGrp->LENGTH; Left++ )
|
||||
{
|
||||
# ifdef DEBUG
|
||||
fprintf( stdout, "IOLNAME %s\n", ScanIol->NAME );
|
||||
# endif
|
||||
strcpy( ScanBuffer, ScanIol->NAME );
|
||||
ScanBuffer += strlen( ScanBuffer );
|
||||
|
||||
if ( Left != (ScanGrp->LENGTH - 1) )
|
||||
{
|
||||
strcpy( ScanBuffer, ", " );
|
||||
ScanBuffer += 2;
|
||||
}
|
||||
|
||||
ScanIol = ScanIol->NEXT;
|
||||
}
|
||||
|
||||
strcpy( ScanBuffer, ")" );
|
||||
IndexBit += ScanGrp->LENGTH;
|
||||
# ifdef DEBUG
|
||||
fprintf( stdout, "Buffer %s\n", Buffer );
|
||||
# endif
|
||||
}
|
||||
|
||||
NameArray [ NumberIO ] = autnamealloc( Buffer );
|
||||
ModeArray [ NumberIO ] = autnamealloc( Mode );
|
||||
FormatArray[ NumberIO ] = Format;
|
||||
WidthArray [ NumberIO ] = ScanGrp->LENGTH;
|
||||
NumberIO = NumberIO + 1;
|
||||
|
||||
ScanGrp = ScanGrp->NEXT;
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
NameArray [ NumberIO ] = ScanIol->NAME;
|
||||
FormatArray[ NumberIO ] = Format;
|
||||
ModeArray [ NumberIO ] = autnamealloc( Mode );
|
||||
WidthArray [ NumberIO ] = 1;
|
||||
NumberIO = NumberIO + 1;
|
||||
|
||||
ScanIol = ScanIol->NEXT;
|
||||
IndexBit = IndexBit + 1;
|
||||
}
|
||||
|
||||
FigurePat->NAME = Sequence->NAME;
|
||||
FigurePat->SEQUENCE = Sequence;
|
||||
FigurePat->IO_NUMBER_BIT = NumberBit;
|
||||
FigurePat->IO_NUMBER = NumberIO;
|
||||
FigurePat->IO_NAME_ARRAY = NameArray;
|
||||
FigurePat->IO_MODE_ARRAY = ModeArray;
|
||||
FigurePat->IO_FORMAT_ARRAY = FormatArray;
|
||||
FigurePat->IO_WIDTH_ARRAY = WidthArray;
|
||||
|
||||
switch ( Sequence->TIME_UNIT & PAT_SEQ__TIMEUNIT )
|
||||
{
|
||||
case PAT_TU__FS : TimeScale = 1000000000;
|
||||
TimeUnit = PAT_TU__US;
|
||||
break;
|
||||
case PAT_TU__PS : TimeScale = 1000000000;
|
||||
TimeUnit = PAT_TU__MS;
|
||||
break;
|
||||
case PAT_TU__NS : TimeScale = 1000000;
|
||||
TimeUnit = PAT_TU__MS;
|
||||
break;
|
||||
case PAT_TU__US : TimeScale = 1000;
|
||||
TimeUnit = PAT_TU__MS;
|
||||
break;
|
||||
default : TimeScale = 1;
|
||||
TimeUnit = Sequence->TIME_UNIT;
|
||||
break;
|
||||
}
|
||||
|
||||
TimeDelta = 0;
|
||||
|
||||
# ifdef DEBUG
|
||||
fprintf( stdout, "PAT_TIMEUNIT %d\n", PAT_TIMEUNIT );
|
||||
# endif
|
||||
|
||||
if ( ( Sequence->TIME_UNIT & PAT_SEQ__TIMEUNIT ) != PAT_TU__VU )
|
||||
{
|
||||
for ( ScanPaPat = Sequence->CURPAT;
|
||||
ScanPaPat != (papat_list *)0;
|
||||
ScanPaPat = ScanPaPat->NEXT )
|
||||
{
|
||||
# ifdef DEBUG
|
||||
fprintf( stdout, "%ld\n", ScanPaPat->TIME );
|
||||
# endif
|
||||
if ( ScanPaPat->TIME != 0 ) TimeAllZero = 0;
|
||||
|
||||
if ( ScanPaPat->NEXT != (papat_list *)0 )
|
||||
{
|
||||
Delta = ScanPaPat->NEXT->TIME - ScanPaPat->TIME;
|
||||
|
||||
if ( ( TimeDelta == 0 ) ||
|
||||
( TimeDelta > Delta ) )
|
||||
{
|
||||
TimeDelta = Delta;
|
||||
}
|
||||
}
|
||||
|
||||
while ( ( TimeScale != 1 ) &&
|
||||
( ( ScanPaPat->TIME % TimeScale ) != 0 ) )
|
||||
{
|
||||
TimeScale /= 1000;
|
||||
TimeUnit--;
|
||||
}
|
||||
}
|
||||
|
||||
TimeDelta /= TimeScale;
|
||||
|
||||
if ( TimeDelta == 0 ) TimeDelta = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
TimeUnit = Sequence->TIME_UNIT;
|
||||
TimeScale = 1;
|
||||
TimeDelta = 1;
|
||||
}
|
||||
|
||||
# ifdef DEBUG
|
||||
fprintf( stdout, "TIME_UNIT %ld\n", TimeUnit );
|
||||
fprintf( stdout, "TIME_SCALE %ld\n", TimeScale );
|
||||
fprintf( stdout, "TIME_DELTA %ld\n", TimeDelta );
|
||||
# endif
|
||||
|
||||
FigurePat->TIME_UNIT = TimeUnit;
|
||||
FigurePat->TIME_SCALE = TimeScale;
|
||||
FigurePat->TIME_DELTA = TimeDelta;
|
||||
|
||||
return( FigurePat );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| P2Sloadpatfig |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
patfig_list *P2Sloadpatfig( char *FileName )
|
||||
{
|
||||
paseq_list *Sequence;
|
||||
|
||||
Sequence = pat_lodpaseq( FileName, (paseq_list *)0, 0, 0 );
|
||||
|
||||
if ( Sequence == (paseq_list *)0 )
|
||||
{
|
||||
autexit( 1 );
|
||||
}
|
||||
|
||||
return( pat_addpatfig( Sequence ) );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| P2Sgetvectorname |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
static char *P2Sgetvectorname( char *name )
|
||||
{
|
||||
char *new_name;
|
||||
char *blank;
|
||||
unsigned int length;
|
||||
unsigned int pos_blank;
|
||||
|
||||
if ( name != (char *)0 )
|
||||
{
|
||||
blank = strchr( name, ' ' );
|
||||
if ( blank != (char *)0 )
|
||||
{
|
||||
length = strlen( name );
|
||||
pos_blank = blank - name;
|
||||
new_name = (char *)mbkalloc( (length + 2) * sizeof(char) );
|
||||
strcpy(new_name, name);
|
||||
new_name[ pos_blank ] = '[';
|
||||
new_name[ length ] = ']';
|
||||
new_name[ length + 1] = '\0';
|
||||
|
||||
name = namealloc( new_name );
|
||||
mbkfree( new_name );
|
||||
}
|
||||
}
|
||||
|
||||
return( name );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| P2Sdrivepatfig |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
void P2Sdrivepatfig( patfig_list *PatFigure, char *FileName, long Slope )
|
||||
{
|
||||
paseq_list *PaSeq;
|
||||
papat_list *PaPat;
|
||||
paevt_list *PaEvt;
|
||||
paiol_list *PaIol;
|
||||
char CurrentEvent;
|
||||
char NextEvent;
|
||||
char Event;
|
||||
char FirstTime;
|
||||
long NumberBit;
|
||||
long CurrentBit;
|
||||
char *TimeUnitName;
|
||||
char *IolName;
|
||||
FILE *File;
|
||||
|
||||
unsigned long CurrentTime;
|
||||
unsigned long NextTime;
|
||||
|
||||
NumberBit = PatFigure->IO_NUMBER_BIT;
|
||||
PaSeq = PatFigure->SEQUENCE;
|
||||
|
||||
File = mbkfopen( FileName, "spi", "w" );
|
||||
|
||||
if ( File == (FILE *)0 )
|
||||
{
|
||||
fprintf( stdout, "Unable to open output file %s.spi\n", FileName );
|
||||
autexit( 1 );
|
||||
}
|
||||
|
||||
CurrentBit = 0;
|
||||
|
||||
switch ( PaSeq->TIME_UNIT & PAT_SEQ__TIMEUNIT )
|
||||
{
|
||||
case PAT_TU__FS : TimeUnitName = "FS";
|
||||
break;
|
||||
case PAT_TU__PS : TimeUnitName = "PS";
|
||||
break;
|
||||
case PAT_TU__NS : TimeUnitName = "NS";
|
||||
break;
|
||||
case PAT_TU__US : TimeUnitName = "US";
|
||||
break;
|
||||
default : TimeUnitName = "NS";
|
||||
break;
|
||||
}
|
||||
|
||||
for ( CurrentBit = 0; CurrentBit < NumberBit; CurrentBit++ )
|
||||
{
|
||||
NextEvent = '*';
|
||||
CurrentEvent = '*';
|
||||
FirstTime = 1;
|
||||
|
||||
PaIol = &PaSeq->PAIOL[ CurrentBit ];
|
||||
|
||||
if ( ( PaIol->MODE != 'I' ) &&
|
||||
( PaIol->MODE != 'T' ) ) continue;
|
||||
|
||||
IolName = P2Sgetvectorname( PaIol->NAME );
|
||||
|
||||
if ( isvss( IolName ) ||
|
||||
isvdd( IolName ) ) continue;
|
||||
|
||||
for ( PaPat = PaSeq->CURPAT;
|
||||
PaPat != (papat_list *)0;
|
||||
PaPat = PaPat->NEXT )
|
||||
{
|
||||
CurrentTime = PaPat->TIME;
|
||||
|
||||
if ( PaPat->NEXT != (papat_list *)0 )
|
||||
{
|
||||
NextTime = PaPat->NEXT->TIME;
|
||||
}
|
||||
else
|
||||
{
|
||||
NextTime = CurrentTime + Slope;
|
||||
}
|
||||
|
||||
if ( ! FirstTime )
|
||||
{
|
||||
CurrentEvent = NextEvent;
|
||||
}
|
||||
|
||||
for ( PaEvt = PaPat->PAEVT;
|
||||
PaEvt != (paevt_list *)0;
|
||||
PaEvt = PaEvt->NEXT )
|
||||
{
|
||||
if ( PaEvt->INDEX != CurrentBit ) continue;
|
||||
|
||||
Event = PaEvt->USRVAL;
|
||||
|
||||
if ( Event == '-' ) Event = '0';
|
||||
else
|
||||
if ( Event == '+' ) Event = '1';
|
||||
|
||||
NextEvent = Event; break;
|
||||
}
|
||||
|
||||
if ( FirstTime )
|
||||
{
|
||||
FirstTime = 0;
|
||||
CurrentEvent = NextEvent;
|
||||
|
||||
fprintf( File, "vinput%ld %s 0 PWL (\n", CurrentBit, IolName );
|
||||
fprintf( File, "+ %ld%s %s %ld%s %s\n",
|
||||
CurrentTime , TimeUnitName,
|
||||
(( CurrentEvent == '0' ) ? "LOW" : "HIGH"),
|
||||
CurrentTime + Slope, TimeUnitName,
|
||||
(( CurrentEvent == '0' ) ? "LOW" : "HIGH") );
|
||||
|
||||
}
|
||||
else
|
||||
if ( PaEvt != (paevt_list *)0 )
|
||||
{
|
||||
fprintf( File, "+ %ld%s %s %ld%s %s\n",
|
||||
CurrentTime , TimeUnitName,
|
||||
(( CurrentEvent == '0' ) ? "LOW" : "HIGH"),
|
||||
CurrentTime + Slope, TimeUnitName,
|
||||
(( NextEvent == '0' ) ? "LOW" : "HIGH") );
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! FirstTime )
|
||||
{
|
||||
fprintf( File, "+ )\n\n" );
|
||||
}
|
||||
}
|
||||
|
||||
fclose( File );
|
||||
|
||||
fprintf( stdout, "\t o final time %ld ps\n", CurrentTime );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| main |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
void P2Ssyntax()
|
||||
{
|
||||
fprintf( stdout, "\tSyntax: pat2spi [-slope natural] in_file out_file\n" );
|
||||
autexit( 1 );
|
||||
}
|
||||
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
patfig_list *PatFigure;
|
||||
char *InputName;
|
||||
char *OutputName;
|
||||
long Slope;
|
||||
long Number;
|
||||
|
||||
mbkenv();
|
||||
|
||||
InputName = (char *)0;
|
||||
OutputName = (char *)0;
|
||||
Slope = -1;
|
||||
|
||||
alliancebanner ("pat2spi", "1.0", "PAT Format Translator", "2002", ALLIANCE_VERSION);
|
||||
|
||||
if ( argc < 3 ) P2Ssyntax();
|
||||
|
||||
for ( Number = 1;
|
||||
Number < argc;
|
||||
Number++ )
|
||||
{
|
||||
if ( ! strcmp( argv[ Number ], "-slope" ))
|
||||
{
|
||||
Slope = atol( argv[ ++Number ] );
|
||||
if ( Slope <= 0 ) P2Ssyntax();
|
||||
}
|
||||
else
|
||||
if ( InputName == (char *)0 ) InputName = argv[ Number ];
|
||||
else
|
||||
if ( OutputName == (char *)0 ) OutputName = argv[ Number ];
|
||||
else
|
||||
P2Ssyntax();
|
||||
}
|
||||
|
||||
fprintf( stdout, "\t--> Loading pat file %s\n", InputName );
|
||||
PatFigure = P2Sloadpatfig( InputName );
|
||||
|
||||
if ( Slope == -1 )
|
||||
{
|
||||
fprintf( stdout, "\t o Use a default slope of 1000 ps\n" );
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf( stdout, "\t o Use a user slope of %ld ps\n", Slope );
|
||||
}
|
||||
|
||||
fprintf( stdout, "\t--> Driving spi file %s\n", OutputName );
|
||||
P2Sdrivepatfig( PatFigure, OutputName, Slope );
|
||||
|
||||
return( 0 );
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Tool : Pat2Spi |
|
||||
| |
|
||||
| File : pat2spi.h |
|
||||
| |
|
||||
| Authors : Jacomme Ludovic |
|
||||
| |
|
||||
| Date : 10.08.02 |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# ifndef PAT2SPI_H
|
||||
# define PAT2SPI_H
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Constants |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Macros |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Types |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Pattern Figure |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
typedef struct patfig_list
|
||||
{
|
||||
struct patfig_list *NEXT;
|
||||
char *NAME;
|
||||
char **IO_NAME_ARRAY;
|
||||
char **IO_MODE_ARRAY;
|
||||
char *IO_FORMAT_ARRAY;
|
||||
long *IO_WIDTH_ARRAY;
|
||||
long IO_NUMBER;
|
||||
long IO_NUMBER_BIT;
|
||||
paseq_list *SEQUENCE;
|
||||
unsigned long TIME_SCALE;
|
||||
unsigned long TIME_DELTA;
|
||||
char TIME_UNIT;
|
||||
|
||||
} patfig_list;
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Variables |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Functions |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# endif
|
Loading…
Reference in New Issue