home *** CD-ROM | disk | FTP | other *** search
-
-
-
- XDC - External Device Compiler - und
- DDL - Device Definition Language
-
-
-
-
- Inhaltsverzeichnis:
-
-
- 1 Einführung
-
- 2 Externe Bausteine
- 2.1 Schaltnetze
- 2.2 ungetaktete Schaltwerke
- 2.3 getaktete Schaltwerke
-
- 3 Beschreibung des XDC und der DDL
- 3.1 Aufruf des XDC
- 3.2 Syntax der DDL
- 3.2.1 Schlüsselworte
- 3.2.2 Syntaxdiagramme
-
- 4 Fehlermeldungen
-
- 5 Danksagung
-
-
-
-
-
- 1 Einführung
-
-
- Der XDC und die DDL erlauben es für den Register-Transfer-Netz-
- Simulator Sim (ab V4.0) externe Bausteine zu definieren. Damit läßt
- der Umfang der simulierbaren Hardwarebauteile nahezu beliebig stei-
- gern. Außerdem kann mit externen Bausteinen die Simulationsgeschwin-
- digkeit erhöht werden, wenn Teile eines Register-Transfer-Netzes zu
- komplexeren Komponenten zusammengefaßt werden. Die DDL ermöglicht
- die Simulation von Schaltnetzen, getakteten sowie ungetakteten Schalt-
- werken.
-
-
-
-
-
- 2 Externe Bausteine
-
- Grundsätzlich ist die Definition jedes beliebigen Baustein möglich.
- Bei getakteten Schaltwerken muß jedoch die Tatsache beachtet werden,
- daß die Bausteine sequentiell bearbeitet werden (siehe 2.3).
-
-
-
- 2.1 Schaltnetze
-
-
- Beispiel für einen AND-Baustein mit vier Eingängen:
-
- device x_and;
-
- input in1,in2,in3,in4;
- output out;
-
- {
- out = in1 & in2 & in3 & in4;
- }
-
-
-
- 2.2 Ungetaktete Schaltwerke
-
-
- Beispiel für einen ungetakteten Automaten:
-
- Automatengraph:
-
- ___ ___
- +--- / \ 1/0 / \ ---+
- 0/0 | | 0 | --------------> | 1 | | 1/0
- +--> \___/ \___/ <--+
-
- A |
- | |
- 0/0 | | 0/0
- | |
- | V
- ___ ___
- +--- / \ 1/1 / \ ---+
- 1/1 | | 3 | <-------------- | 2 | | 0/0
- +--> \___/ \___/ <--+
-
-
- Definition:
-
-
- device auto;
-
- input in;
- output out;
- state s;
-
- {
- switch (s) {
- case 0:
- if (in & 1)
- s = 1;
- break;
- case 1:
- if (~in & 1)
- s = 2;
- break;
- case 2:
- if (in & 1) {
- s = 3;
- out = 1;
- }
- break;
- case 3:
- if (~in & 1) {
- s = 0;
- out = 0;
- }
- break;
- }
- }
-
-
-
- 2.3 Getaktete Schaltwerke
-
-
- Bei getakteten Schaltwerken müssen die Werte auf den Eingangsleitun-
- gen gepuffert werden. Aufgrund der Zwangssequentialisierung der Bau-
- steine darf der Eingang nicht direkt dem Ausgang zugewiesen werden,
- da sonst ein zweites Register, das am Ausgangs des ersten angeschlos-
- sen ist, schon den neuen, aber falschen Wert lesen würde.
-
- Beispiel für ein vorderflankengetaktetes D-Register:
-
- device x_reg;
- input c,d;
- output q;
- state s;
-
- {
- if (c & 1)
- q = s;
- else
- s = d;
- }
-
-
-
-
-
- 3 Beschreibung des XDC und der DDL
-
-
- Der XDC erzeugt aus der Bausteindefinition C-Quellcode, der dann
- compiliert werden kann. Getestet wurde bisher nur der AZTEC-Compiler
- V3.6a getestet. Allgemein gesagt, muß Code erzeugt werden, der 16-Bit-
- Integer mit LARGE DATA (+D) verwendet. Für den LATTICE-Compiler müßte
- die Datei xcomp entsprechend angepaßt werden.
-
-
-
- 3.1 Aufruf des XDC
-
-
- Zur Verwendung des XDC muß ein AZTEC Compiler und Linker vorhanden
- sein. Im gleichen Verzeichnis, in dem der XDC liegt, müssen folgende
- Dateien verfügbar sein: xcomp, sim.h, sim_msg.h
-
- Der XDC wird folgendermaßen gestartet:
-
- Execute xcomp <device>
-
- Die Datei, die die Bausteindefinition enthält, muß den Namen
- <device>.x haben. .x darf aber beim Aufruf nicht mit angegeben wer-
- den.
-
- Durch xcomp wird eine Datei <device> erzeugt. Diese stellt den neuen
- externen Baustein dar, d.h. es kann ein neuer Baustein <device> in
- einer Verschaltungsliste verwendet werden. Die Ein- und Ausgangslei-
- tungsnamen müssen dann in der Reihenfolge ihrer Definition angegeben
- werden. Die Datei <device> muß dazu evtl. in das Verzeichnis kopiert
- werden, das den Simulator enthält.
-
-
-
- 3.2 Syntax der DDL
- 3.2.1 Schlüsselworte
-
-
- In der DDL existieren folgende Schlüsselworte:
-
- BREAK CASE DEFAULT DEVICE ELSE
- IF INPUT OUTPUT STATE SWITCH
-
- Die Schlüsselworte können groß oder klein (auch gemischt) geschrie-
- ben werden.
-
-
-
- 3.2.2 Syntaxdiagramme
-
-
- file:
-
- --> device_definition -->
-
-
- device_definition:
-
- --> DEVICE --> identifier --> ';' --> declaration_list --+
- |
- +------------------------<---------------------------+
- |
- +--> '{' --> statement_list --> '}' -->
-
-
- comment:
-
- --> '/*' ---+----------------+--> '*/' -->
- A |
- +-- character <--+
-
-
- declaration_list:
-
- --> input_declaration_list --> output_declaration_list --+
- |
- +-------------------------<--------------------------+
- |
- +--> state_declaration_list --+-->
- | A
- +--------------->-------------+
-
-
- input_declaration_list:
-
- --+--> input_declaration --+-->
- A |
- +------------<-----------+
-
-
- input_declaration:
-
- --> INPUT --> identifier_list --> ';' -->
-
-
- output_declaration_list:
-
- --+--> output_declaration --+-->
- A |
- +-------------<-----------+
-
-
- output_declaration:
-
- --> OUTPUT --> identifier_list --> ';' -->
-
-
- state_declaration_list:
-
- --+--> state_declaration --+-->
- A |
- +------------<-----------+
-
-
- state_declaration:
-
- --> STATE --> identifier_list --> ';' -->
-
-
- identifier_list:
-
- --+--> identifier --+-->
- A |
- +------ ',' <-----+
-
-
- identifier:
-
- --> letter --+------->------+-->
- A |
- +<-- letter <--+
- | |
- +---- digit <--+
-
-
- letter:
-
- --+--> 'A' ---+-->
- | . A
- | . |
- | |
- +--> 'Z' -->+
- | |
- +--> 'a' -->+
- | . |
- | . |
- | |
- +--> 'z' -->+
- | |
- +--> '_' ---+
-
-
- digit:
-
- --+--> '0' --+-->
- | . A
- | . |
- | |
- +--> '9' --+
-
-
- statement_list:
-
- --+--> statement --+-->
- A |
- +--------<-------+
-
-
- statement:
-
- --+--> switch_statement ------>+-->
- | A
- +--> if_statement ---------->+
- | |
- +--> assignment_statement -->+
- | |
- +----------> ';' ------------+
-
-
- assignment_statement:
-
- --> identifier --> '=' --> expression --> ';' -->
-
-
- expression:
-
- --+--> expression -------------------------------+-->
- | A
- +--> '~' --> expression ---------------------->+
- | |
- +--> constant -------------------------------->+
- | |
- +--> identifier ------------------------------>+
- | |
- +--> '(' --> expression --> ')' -------------->+
- | |
- +--> expression --> operator --> expression ---+
-
-
- operator:
-
- --+--> '>' --->+-->
- | A
- +--> '<' --->+
- | |
- +--> '>=' -->+
- | |
- +--> '<=' -->+
- | |
- +--> '==' -->+
- | |
- +--> '!=' -->+
- | |
- +--> '&' --->+
- | |
- +--> '|' --->+
- | |
- +--> '^' --->+
- | |
- +--> '+' --->+
- | |
- +--> '-' --->+
- | |
- +--> '>>' -->+
- | |
- +--> '<<' ---+
-
-
- if_statement:
-
- --> IF --> '(' --> expression --> ')' --> if_else_statement_list--+
- |
- +-----------------------------<-------------------------------+
- |
- +--> ELSE --> if_else_statement --+-->
- | A
- +----------------->---------------+
-
-
- if_else_statement_list:
-
- --+--> statement -----------------------+-->
- | A
- +--> '{' --> statement_list --> '}' --+
-
-
- switch_statement:
-
- --> SWITCH --> '(' --> expression --> ')' --> switch_statement_list -->
-
-
- switch_statement_list:
-
- --> '{' --+--> case_statment --+---+--> default_statement --+--> '}' -->
- A | | A
- +----------<---------+ +------------>-----------+
-
-
- case_statement:
-
- --> CASE --> constant --> ':' --+--> statement_list --+--+
- | A |
- +---------->----------+ |
- |
- +--------------------------<-------------------------+
- |
- +--> BREAK --> ';' --+-->
- | A
- +--------------------+
-
-
- default_statement:
-
- --> DEFAULT --> ':' --+--> statement_list --+---+--> BREAK --+-->
- | A | A
- +---------->----------+ +------>-----+
-
-
- constant:
-
- --+--> hexadecimal_constant --+-->
- | A
- +--> decimal_constant-------+
-
-
- hexadecimal_constant:
-
- +----------<---------+
- V |
- --+--> '0x' --+---+---+--> digit --+---+-->
- | A | A
- +--> '0X' --+ +--> 'A' --->+
- | . |
- | . |
- | |
- +--> 'F' --->+
- | |
- +--> 'a' --->+
- | . |
- | . |
- | |
- +--> 'f' ----+
-
-
- decimal_constant:
-
- --+--> '0' -----------------------------+-->
- | A
- +--> positive_digit --+--> digit --+--+
- A |
- +------<-----+
-
-
- positive_digit:
-
- --+--> '1' --+-->
- | . A
- | . |
- | |
- +--> '9' --+
-
-
-
-
-
- 4 Fehlermeldungen
-
-
- Es gibt drei Fehlerklassen:
-
- a) parse error ohne nähere Beschreibung
-
-
- b) parse error mit näherer Beschreibung
-
- '=' expected
- '(' expected
- ')' expected
- '{' expected
- '}' expected
- ';' expected
- ':' expected
- constant expected
- lead name expected
-
-
- c) semantische Fehler
-
- BREAK outside of SWITCH
- CASE outside of SWITCH
- DEFAULT outside of SWITCH
- no CASE behind DEFAULT
- missing CASE
- duplicate CASE
- duplicate DEFAULT
- already defined lead name
- undefined lead
- device name differs from file name
- no memory
-
-
- Fehler sollten immer vom Anfang zum Ende hin korrigiert werden, da
- dann viele Folgefehler mit beseitigt werden. Folgefehler treten über-
- wiegend auf bei den Klassen a) und b), sehr selten dagegen bei c).
-
-
-
-
-
- 5 Danksagung
-
-
- Mein Dank gebührt Klaus-Dieter Renner, dessen Idee und Erstellung
- eines Register-Transfer-Netz-Simulators und einer Baustein-Defini-
- tions-Sprache die Anregung zu meinen Programmen gab und Michael Koch
- für die ausführlichen Tests und seine Verbesserungs- und Erweiterungs-
- vorschläge.
-