home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff291.lzh / Sim / german.docs / xdc.Doc < prev    next >
Text File  |  1989-12-12  |  13KB  |  538 lines

  1.  
  2.  
  3.  
  4.             XDC - External Device Compiler - und
  5.             DDL - Device Definition Language
  6.  
  7.  
  8.  
  9.  
  10.       Inhaltsverzeichnis:
  11.  
  12.  
  13.       1  Einführung
  14.  
  15.       2  Externe Bausteine
  16.       2.1  Schaltnetze
  17.       2.2  ungetaktete Schaltwerke
  18.       2.3  getaktete Schaltwerke
  19.  
  20.       3  Beschreibung des XDC und der DDL
  21.       3.1  Aufruf des XDC
  22.       3.2  Syntax der DDL
  23.          3.2.1  Schlüsselworte
  24.          3.2.2  Syntaxdiagramme
  25.  
  26.       4  Fehlermeldungen
  27.  
  28.       5  Danksagung
  29.  
  30.  
  31.  
  32.  
  33.  
  34.       1  Einführung
  35.  
  36.  
  37.       Der XDC und die DDL erlauben es für den Register-Transfer-Netz-
  38.       Simulator Sim (ab V4.0) externe Bausteine zu definieren. Damit läßt
  39.       der Umfang der simulierbaren Hardwarebauteile nahezu beliebig stei-
  40.       gern. Außerdem kann mit externen Bausteinen die Simulationsgeschwin-
  41.       digkeit erhöht werden, wenn Teile eines Register-Transfer-Netzes zu
  42.       komplexeren Komponenten zusammengefaßt werden. Die DDL ermöglicht
  43.       die Simulation von Schaltnetzen, getakteten sowie ungetakteten Schalt-
  44.       werken.
  45.  
  46.  
  47.  
  48.  
  49.  
  50.       2  Externe Bausteine
  51.  
  52.       Grundsätzlich ist die Definition jedes beliebigen Baustein möglich.
  53.       Bei getakteten Schaltwerken muß jedoch die Tatsache beachtet werden,
  54.       daß die Bausteine sequentiell bearbeitet werden (siehe 2.3).
  55.  
  56.  
  57.  
  58.       2.1  Schaltnetze
  59.  
  60.  
  61.       Beispiel für einen AND-Baustein mit vier Eingängen:
  62.  
  63.          device x_and;
  64.  
  65.          input  in1,in2,in3,in4;
  66.          output out;
  67.  
  68.          {
  69.             out = in1 & in2 & in3 & in4;
  70.          }
  71.  
  72.  
  73.  
  74.       2.2  Ungetaktete Schaltwerke
  75.  
  76.  
  77.       Beispiel für einen ungetakteten Automaten:
  78.  
  79.          Automatengraph:
  80.  
  81.                     ___                   ___
  82.               +--- /   \       1/0       /   \ ---+
  83.           0/0 |    | 0 | --------------> | 1 |    | 1/0
  84.               +--> \___/                 \___/ <--+
  85.  
  86.                      A                     |
  87.                      |                     |
  88.                  0/0 |                     | 0/0
  89.                      |                     |
  90.                      |                     V
  91.                     ___                   ___
  92.               +--- /   \       1/1       /   \ ---+
  93.           1/1 |    | 3 | <-------------- | 2 |    | 0/0
  94.               +--> \___/                 \___/ <--+
  95.  
  96.  
  97.          Definition:
  98.  
  99.  
  100.          device auto;
  101.  
  102.          input  in;
  103.          output out;
  104.          state  s;
  105.  
  106.          {
  107.             switch (s) {
  108.              case 0:
  109.                if (in & 1)
  110.                   s = 1;
  111.                break;
  112.              case 1:
  113.                if (~in & 1)
  114.                   s = 2;
  115.                break;
  116.              case 2:
  117.                if (in & 1) {
  118.                   s = 3;
  119.                   out = 1;
  120.                }
  121.                break;
  122.              case 3:
  123.                if (~in & 1) {
  124.                   s = 0;
  125.                   out = 0;
  126.                }
  127.                break;
  128.             }
  129.          }
  130.  
  131.  
  132.  
  133.       2.3  Getaktete Schaltwerke
  134.  
  135.  
  136.       Bei getakteten Schaltwerken müssen die Werte auf den Eingangsleitun-
  137.       gen gepuffert werden. Aufgrund der Zwangssequentialisierung der Bau-
  138.       steine darf der Eingang nicht direkt dem Ausgang zugewiesen werden,
  139.       da sonst ein zweites Register, das am Ausgangs des ersten angeschlos-
  140.       sen ist, schon den neuen, aber falschen Wert lesen würde.
  141.  
  142.       Beispiel für ein vorderflankengetaktetes D-Register:
  143.  
  144.          device x_reg;
  145.          input  c,d;
  146.          output q;
  147.          state  s;
  148.  
  149.          {
  150.             if (c & 1)
  151.                q = s;
  152.             else
  153.                s = d;
  154.          }
  155.  
  156.  
  157.  
  158.  
  159.  
  160.       3  Beschreibung des XDC und der DDL
  161.  
  162.  
  163.       Der XDC erzeugt aus der Bausteindefinition C-Quellcode, der dann
  164.       compiliert werden kann. Getestet wurde bisher nur der AZTEC-Compiler
  165.       V3.6a getestet. Allgemein gesagt, muß Code erzeugt werden, der 16-Bit-
  166.       Integer mit LARGE DATA (+D) verwendet. Für den LATTICE-Compiler müßte
  167.       die Datei xcomp entsprechend angepaßt werden.
  168.  
  169.  
  170.  
  171.       3.1  Aufruf des XDC
  172.  
  173.  
  174.       Zur Verwendung des XDC muß ein AZTEC Compiler und Linker vorhanden
  175.       sein. Im gleichen Verzeichnis, in dem der XDC liegt, müssen folgende
  176.       Dateien verfügbar sein:  xcomp, sim.h, sim_msg.h
  177.  
  178.       Der XDC wird folgendermaßen gestartet:
  179.  
  180.          Execute xcomp <device>
  181.  
  182.       Die Datei, die die Bausteindefinition enthält, muß den Namen
  183.       <device>.x haben. .x darf aber beim Aufruf nicht mit angegeben wer-
  184.       den.
  185.  
  186.       Durch xcomp wird eine Datei <device> erzeugt. Diese stellt den neuen
  187.       externen Baustein dar, d.h. es kann ein neuer Baustein <device> in
  188.       einer Verschaltungsliste verwendet werden. Die Ein- und Ausgangslei-
  189.       tungsnamen müssen dann in der Reihenfolge ihrer Definition angegeben
  190.       werden. Die Datei <device> muß dazu evtl. in das Verzeichnis kopiert
  191.       werden, das den Simulator enthält.
  192.  
  193.  
  194.  
  195.       3.2  Syntax der DDL
  196.       3.2.1  Schlüsselworte
  197.  
  198.  
  199.       In der DDL existieren folgende Schlüsselworte:
  200.  
  201.          BREAK    CASE     DEFAULT  DEVICE   ELSE
  202.          IF       INPUT    OUTPUT   STATE    SWITCH
  203.  
  204.       Die Schlüsselworte können groß oder klein (auch gemischt) geschrie-
  205.       ben werden.
  206.  
  207.  
  208.  
  209.       3.2.2  Syntaxdiagramme
  210.  
  211.  
  212.       file:
  213.  
  214.       --> device_definition -->
  215.  
  216.  
  217.       device_definition:
  218.  
  219.       --> DEVICE --> identifier --> ';' --> declaration_list --+
  220.                                                                |
  221.           +------------------------<---------------------------+
  222.           |
  223.           +--> '{' --> statement_list --> '}' -->
  224.  
  225.  
  226.       comment:
  227.  
  228.       --> '/*' ---+----------------+--> '*/' -->
  229.                   A                |
  230.                   +-- character <--+
  231.  
  232.  
  233.       declaration_list:
  234.  
  235.       --> input_declaration_list --> output_declaration_list --+
  236.                                                                |
  237.           +-------------------------<--------------------------+
  238.           |
  239.           +--> state_declaration_list --+-->
  240.           |                             A
  241.           +--------------->-------------+
  242.  
  243.  
  244.       input_declaration_list:
  245.  
  246.       --+--> input_declaration --+-->
  247.         A                        |
  248.         +------------<-----------+
  249.  
  250.  
  251.       input_declaration:
  252.  
  253.       --> INPUT --> identifier_list --> ';' -->
  254.  
  255.  
  256.       output_declaration_list:
  257.  
  258.       --+--> output_declaration --+-->
  259.         A                         |
  260.         +-------------<-----------+
  261.  
  262.  
  263.       output_declaration:
  264.  
  265.       --> OUTPUT --> identifier_list --> ';' -->
  266.  
  267.  
  268.       state_declaration_list:
  269.  
  270.       --+--> state_declaration --+-->
  271.         A                        |
  272.         +------------<-----------+
  273.  
  274.  
  275.       state_declaration:
  276.  
  277.       --> STATE --> identifier_list --> ';' -->
  278.  
  279.  
  280.       identifier_list:
  281.  
  282.       --+--> identifier --+-->
  283.         A                 |
  284.         +------ ',' <-----+
  285.  
  286.  
  287.       identifier:
  288.  
  289.       --> letter --+------->------+-->
  290.                    A              |
  291.                    +<-- letter <--+
  292.                    |              |
  293.                    +---- digit <--+
  294.  
  295.  
  296.       letter:
  297.  
  298.       --+--> 'A' ---+-->
  299.         |     .     A
  300.         |     .     |
  301.         |           |
  302.         +--> 'Z' -->+
  303.         |           |
  304.         +--> 'a' -->+
  305.         |     .     |
  306.         |     .     |
  307.         |           |
  308.         +--> 'z' -->+
  309.         |           |
  310.         +--> '_' ---+
  311.  
  312.  
  313.       digit:
  314.  
  315.       --+--> '0' --+-->
  316.         |     .    A
  317.         |     .    |
  318.         |          |
  319.         +--> '9' --+
  320.  
  321.  
  322.       statement_list:
  323.  
  324.       --+--> statement --+-->
  325.         A                |
  326.         +--------<-------+
  327.  
  328.  
  329.       statement:
  330.  
  331.       --+--> switch_statement ------>+-->
  332.         |                            A
  333.         +--> if_statement ---------->+
  334.         |                            |
  335.         +--> assignment_statement -->+
  336.         |                            |
  337.         +----------> ';' ------------+
  338.  
  339.  
  340.       assignment_statement:
  341.  
  342.       --> identifier --> '=' --> expression --> ';' -->
  343.  
  344.  
  345.       expression:
  346.  
  347.       --+--> expression -------------------------------+-->
  348.         |                                              A
  349.         +--> '~' --> expression ---------------------->+
  350.         |                                              |
  351.         +--> constant -------------------------------->+
  352.         |                                              |
  353.         +--> identifier ------------------------------>+
  354.         |                                              |
  355.         +--> '(' --> expression --> ')' -------------->+
  356.         |                                              |
  357.         +--> expression --> operator --> expression ---+
  358.  
  359.  
  360.       operator:
  361.  
  362.       --+--> '>' --->+-->
  363.         |            A
  364.         +--> '<' --->+
  365.         |            |
  366.         +--> '>=' -->+
  367.         |            |
  368.         +--> '<=' -->+
  369.         |            |
  370.         +--> '==' -->+
  371.         |            |
  372.         +--> '!=' -->+
  373.         |            |
  374.         +--> '&' --->+
  375.         |            |
  376.         +--> '|' --->+
  377.         |            |
  378.         +--> '^' --->+
  379.         |            |
  380.         +--> '+' --->+
  381.         |            |
  382.         +--> '-' --->+
  383.         |            |
  384.         +--> '>>' -->+
  385.         |            |
  386.         +--> '<<' ---+
  387.  
  388.  
  389.       if_statement:
  390.  
  391.       --> IF --> '(' --> expression --> ')' --> if_else_statement_list--+
  392.                                                                         |
  393.           +-----------------------------<-------------------------------+
  394.           |
  395.           +--> ELSE --> if_else_statement --+-->
  396.           |                                 A
  397.           +----------------->---------------+
  398.  
  399.  
  400.       if_else_statement_list:
  401.  
  402.       --+--> statement -----------------------+-->
  403.         |                                     A
  404.         +--> '{' --> statement_list --> '}' --+
  405.  
  406.  
  407.       switch_statement:
  408.  
  409.       --> SWITCH --> '(' --> expression --> ')' --> switch_statement_list -->
  410.  
  411.  
  412.       switch_statement_list:
  413.  
  414.       --> '{' --+--> case_statment --+---+--> default_statement --+--> '}' -->
  415.                 A                    |   |                        A
  416.                 +----------<---------+   +------------>-----------+
  417.  
  418.  
  419.       case_statement:
  420.  
  421.       --> CASE --> constant --> ':' --+--> statement_list --+--+
  422.                                       |                     A  |
  423.                                       +---------->----------+  |
  424.                                                                |
  425.           +--------------------------<-------------------------+
  426.           |
  427.           +--> BREAK --> ';' --+-->
  428.           |                    A
  429.           +--------------------+
  430.  
  431.  
  432.       default_statement:
  433.  
  434.       --> DEFAULT --> ':' --+--> statement_list --+---+--> BREAK --+-->
  435.                             |                     A   |            A
  436.                             +---------->----------+   +------>-----+
  437.  
  438.  
  439.       constant:
  440.  
  441.       --+--> hexadecimal_constant --+-->
  442.         |                           A
  443.         +--> decimal_constant-------+
  444.  
  445.  
  446.       hexadecimal_constant:
  447.  
  448.                         +----------<---------+
  449.                         V                    |
  450.       --+--> '0x' --+---+---+--> digit --+---+-->
  451.         |           A       |            A
  452.         +--> '0X' --+       +--> 'A' --->+
  453.                             |     .      |
  454.                             |     .      |
  455.                             |            |
  456.                             +--> 'F' --->+
  457.                             |            |
  458.                             +--> 'a' --->+
  459.                             |     .      |
  460.                             |     .      |
  461.                             |            |
  462.                             +--> 'f' ----+
  463.  
  464.  
  465.       decimal_constant:
  466.  
  467.       --+--> '0' -----------------------------+-->
  468.         |                                     A
  469.         +--> positive_digit --+--> digit --+--+
  470.                               A            |
  471.                               +------<-----+
  472.  
  473.  
  474.       positive_digit:
  475.  
  476.       --+--> '1' --+-->
  477.         |     .    A
  478.         |     .    |
  479.         |          |
  480.         +--> '9' --+
  481.  
  482.  
  483.  
  484.  
  485.  
  486.       4  Fehlermeldungen
  487.  
  488.  
  489.       Es gibt drei Fehlerklassen:
  490.  
  491.          a) parse error ohne nähere Beschreibung
  492.  
  493.  
  494.          b) parse error mit näherer Beschreibung
  495.  
  496.             '=' expected
  497.             '(' expected
  498.             ')' expected
  499.             '{' expected
  500.             '}' expected
  501.             ';' expected
  502.             ':' expected
  503.             constant expected
  504.             lead name expected
  505.  
  506.  
  507.          c) semantische Fehler
  508.  
  509.             BREAK outside of SWITCH
  510.             CASE outside of SWITCH
  511.             DEFAULT outside of SWITCH
  512.             no CASE behind DEFAULT
  513.             missing CASE
  514.             duplicate CASE
  515.             duplicate DEFAULT
  516.             already defined lead name
  517.             undefined lead
  518.             device name differs from file name
  519.             no memory
  520.  
  521.  
  522.       Fehler sollten immer vom Anfang zum Ende hin korrigiert werden, da
  523.       dann viele Folgefehler mit beseitigt werden. Folgefehler treten über-
  524.       wiegend auf bei den Klassen a) und b), sehr selten dagegen bei c).
  525.  
  526.  
  527.  
  528.  
  529.  
  530.       5  Danksagung
  531.  
  532.  
  533.       Mein Dank gebührt Klaus-Dieter Renner, dessen Idee und Erstellung
  534.       eines Register-Transfer-Netz-Simulators und einer Baustein-Defini-
  535.       tions-Sprache die Anregung zu meinen Programmen gab und Michael Koch
  536.       für die ausführlichen Tests und seine Verbesserungs- und Erweiterungs-
  537.       vorschläge.
  538.