Name
userlist - User Programmable List Generator
Synopsis
userlist scriptfile projectfile jobname
Beschreibung
Das Programm
userlist ist ein anwenderprogrammierbarer ASCII-Listengenerator, mit dem Daten aus Design-File-Netzlisten in einem vom Benutzer frei festlegbaren Format extrahiert werden können. Dabei lassen sich die Art der Ausgabe (Vor-/Nachkommastellen, Ausgabe von Schlüsselwörtern, usw.) und der Typ der auszugebenden Information (Bauteilattribute, Pinattribute, usw.) vom Benutzer in einem Spezifikationsfile
(userlist-Script) frei definieren.
Das Programm
userlist interpretiert das vom Anwender erstellte
userlist-Script
<scriptfile>.usf
, liest die unter
<jobname>
im Design-File
<projectfile>.ddb
abgelegte Netzliste und generiert eine Ausgabedatei mit Namen
<projectfile>.<ext>
(die Extension
<ext>
ist im Script zu definieren).
Format der Eingabedatei
Dateianfang, Dateiende, Kommentare
Am Dateianfang des
userlist-Scripts ist die Extension des Ausgabefiles über den Parameter
EXTENSION
zu definieren:
EXTENSION = "<ext>";
Das
userlist-Script muss mit dem Schlüsselwort
ENDSPEC
enden. Kommentare können zwischen
/*
und
*/
eingefügt werden.
FOR-Kommando
Die Auswahl von Elementen eines Bereiches erfolgt mit
FOR (ALL <class> ) { <commands> }
<class>
gibt die Klasse der zu bearbeitenden Objekte an. Hierfür können die Schlüsselworte
NETS
,
PARTS
,
PINS
,
ATTRIBUTES
bzw.
<attname>
eingesetzt werden.
NETS
bezeichnet die Objektklasse Netzliste,
PARTS
die Bauteilliste,
PINS
die Pinliste und
ATTRIBUTES
die Attributliste.
<attname>
erlaubt die Abarbeitung der Attributwertliste für das Attribut mit dem durch
<attname>
gegebenen Namen. Die Kommandoliste
<commands>
wird für jedes Element der angegebenen Objektklasse einmal abgearbeitet. Dabei können, soweit sinnvoll, weitere
FOR
-Schleifen verschachtelt werden. Bei verschachtelten
FOR
-Schleifen beziehen sich die Objektklassen jeweils auf die in der übergeordneten Schleife angegebene Objektklasse. So arbeitet in
FOR (ALL NETS) { FOR (ALL PINS) {...}}
die
PINS
-Schleife jeweils die Pins des aktuellen Netzes der
NETS
-Schleife ab.
Ausgabe-Befehle
Zur Ausgabe stehen die Kommandos
PRINT
und
PRINTFOR
zur Verfügung. Die Syntax für das Kommando
PRINT
lautet:
PRINT(<parameters>);
In
<parameters>
ist - getrennt durch Kommas - die Liste der auszugebenden Parameter enthalten. In Anführungszeichen angegebene Parameter werden unverändert ausgegeben. Anführungszeichen selbst werden mit dem Schlüsselwort
QUOTES
ausgegeben. Tabulatorzeichen können mit
TAB
erzeugt werden. Eine neue Zeile erreicht man durch Angabe von
CR
. Die restlichen Parameter geben Elemente der Datenbank an. Dabei kann durch Angabe von
:<length>:<decimals>
die Anzahl der Gesamtstellen und Nachkommastellen zur Ausgabe von Zahlen und Strings angegeben werden. Wird
<length>
negativ angegeben, so wird der Ausgabestring linksbündig in dem durch die Gesamtstellen definierten Ausgabefeld dargestellt. Mit
%<length>:<decimals>
werden Leerstellen zu Beginn des Ausgabefeldes mit Nullen aufgefüllt. Standardeinstellung sind 3 Nachkommastellen und eine Feldbreite, die der Länge des darzustellenden Elements entspricht. Reichen die angegebenen Gesamtstellen nicht zur Ausgabe aus, so verbreitert sich das Ausgabefeld entsprechend. Bei Elementen, die Distanzen angeben, kann die Ausgabe durch Nachstellen von
" MM"
bzw.
" INCH"
in der entsprechenden Längeneinheit erfolgen. Beispiele für die Anwendung des
PRINT
-Kommandos sind:
PRINT(QUOTES,PINWIDTH:7:3,QUOTES); /* Output: " 3.756" */
PRINT(QUOTES,PINWIDTH%7:3,QUOTES); /* Output: "003.756" */
PRINT(QUOTES,PINWIDTH:-7:3,QUOTES); /* Output: "3.756 " */
In
PRINT
-Kommandos kann hinter der Angabe von Namen und Attributen mit durch Leerzeichen getrennten
UPPER
- oder.
LOWER
-Texten eine Ausgabe der Namen bzw. Attribute in Groß- bzw. Kleinschreibung erzwungen werden.
Das Kommando
PRINTFOR
dient zur Ausgabe von Listen unbekannter Länge mit Trennzeichen zwischen den einzelnen Elementen. Die Syntax für dieses Kommando lautet:
PRINTFOR (ALL <class>) SEPERATOR(<sep>),ELEMENTS(<elements>);
Die Trennzeichen zwischen den einzelnen Elementen werden über den Seperator
<sep>
spezifiziert (z.B.
.
,
CR
, usw.). In
<elements> stehen die Daten, die zu einem Listenelement ausgegeben werden sollen. Für die Parameterliste in
<sep> und
<elements> gilt die gleiche Syntax, wie für die Parameterliste in
PRINT
. Steht
PRINTFOR
innerhalb einer
FOR
-Schleife, so beschränkt sich die Ausgabe automatisch auf das gerade aktuelle Element der
FOR
-Schleife.
IF-Abfragen
Das
IF
-Kommando dient zur bedingten Abarbeitung von Kommandos. Die Syntax hierfür lautet:
IF (<expr>) { <commands> }
bzw.
IF (<expr>) { <commands> } ELSE { <commands> }
Die Bedingungsanweisung
<expr>
besteht entweder aus
? <attr>
oder
<attr> <operator> <attr|constant>
Der Ausdruck
? <attr>
prüft, ob das mit
<attr>
angegebene Attribut vorhanden ist. Für vergleichende Ausdrücke stehen die Operatoren
(<operator>
)
=
(gleich),
<>
(ungleich),
<
(kleiner),
>
(größer),
<=
(kleiner oder gleich),
>=
(größer oder gleich) zur Verfügung.
Zählvariable
Die Befehle
CLEARCOUNTER;
und
COUNTUP;
dienen zur Ansteuerung eines Zählers. Mit
CLEARCOUNTER
wird der Zähler auf Null gesetzt.
COUNTUP
erhöht den Zähler um eins. Der aktuelle Wert des Zählers steht als Attribut
COUNTVALUE
zur Verfügung.
Attribute
Es können folgende Attribute ausgegeben werden:
Netzdaten | NETNAME | Netzname |
NETPINCOUNT | Anzahl der Pins am Netz |
PRIORITY | Netz-Priorität (für Router) |
MINDIST | Netz-Mindestabstand (für Router) |
NETNUMBER | Netznummer |
Bauteildaten | PARTNAME | Bauteilname |
PINCOUNT | Anzahl der Pins am Bauteil |
FREEPINS | Anzahl der nichtangeschlossenen Pins am Bauteil |
PARTATTRIBCOUNT | Anzahl der Attribute des Bauteiles |
$attributname | Wert des angegebenen Attributes |
Pindaten | PINNAME | Pinname |
PINWIDTH | Pinbezogene Anschlussbreite |
Allgemeine Daten | PROJECTNAME | Projekt- bzw. Design-Name |
ATTRIBCOUNT | Gesamthäufigkeit der aktuellen Kombination Attributname, Attributwert |
ATTRIBNAME | Name des aktuellen Attributes |
ATTRIBVALUE | Wert des aktuellen Attributes |
COUNTVALUE | Aktueller Wert des Counters |
Beispiele
Netzlisten-Generator
conconv.usf
:
/* Connection List Generator */
EXTENSION = ".con";
PRINT ("LAYOUT ", PROJECTNAME, ";", CR);
PRINT ("PARTS",CR);
FOR (ALL PARTS)
{
PRINT (" ",PARTNAME," : ",$plname,";",CR);
}
PRINT ("CONNECT",CR);
FOR (ALL NETS)
{
PRINT (" /", NETNAME,"/ ");
PRINTFOR (ALL PINS)
SEPERATOR ("="), ELEMENTS (PARTNAME,".",PINNAME);
PRINT (";",CR);
}
PRINT ("END.",CR);
ENDSPEC
Durch einen Aufruf der Form
> userlist conconv design board
wird die Netzliste
board
des Job-Files
design.ddb
gelesen und auf die Datei
design.con
ausgegeben. Die Ausgabe hat dann folgendes Format:
LAYOUT board;
PARTS
ic1 : dil14;
ic2 : dil14;
ic3 : dil16;
CONNECT
/gnd/ ic1.1=ic2.2=ic3.9;
/vcc/ ic1.11=ic2.5=ic3.7;
END.
Partlister:
EXTENSION = ".ptl";
FOR (ALL $plname)
{
PRINT (ATTRIBCOUNT," ",ATTRIBVALUE,CR);
}
ENDSPEC
Ausgabedatei
<job>.ptl
, z.B.:
3 cap50
4 dil14
2 dil16
1 r75
Diagnose
Die durch
userlist erzeugten Fehlermeldungen sind selbsterklärend.