Differences

This shows you the differences between two versions of the page.

wiki:study:prakt:pld [2005/09/19 10:49] (current)
Line 1: Line 1:
 +====== Programmierbare Logikbausteine ======
 +{{ wiki:study:pld:pld_all_prakt1.jpg?300}}
 +
 +Praktikum PLD **Aufgabe 1**, im Raum H 1555
 +
 +Am Praktikum beteiligt sind:
 +  * [[user>rhspirit|Rocco Hanf]]
 +  * [[user>cwe|Christian Wenzel]]
 +  * [[user>e-razor|Alexander Krause]]
 +
 +\\
 +**Fett** gedruckte Links sind aktuell und stimmen mit dem Code der WIki überein!
 +
 +\\
 +Termine:
 +  * <del>Mon 11.07.2005 - 08:00h</del>
 +  * <del>Mon 20.06.2005 - 08:00h</del>
 +  * Mon 06.06.2005 - 08:00h
 +    * Realisierung des restlichen Designs
 +      * checkpas
 +      * 7segment
 +      * light
 +    * Erweiterung auf 0-99 Zähler
 +      * light_99
 +      * count4fb_99
 +    * beim checkpas war ein Zustandswechsel falsch
 +  * Mon 18.04.2005 - 08:00h
 +    * 0-15 Zähler über Carrykette realisiert
 +
 +===== Links =====
 +  * [[http://www.tu-ilmenau.de/site/se_ess/PLD.2023.0.html?&no_cache=1&sword_list=pld|PLD- Vorlesung]]
 +  * [[http://www.tu-ilmenau.de/site/se_ess/fileadmin/template/fg/se_ess/pdf/PLD_Vorlesung_2005.pdf|Vorlesungsfolien]]
 +  * [[http://www.inf-technik.tu-ilmenau.de/htlocal/mss/praktikum/pld_praktikum.pdf|Praktikumsbeschreibung]]
 +  * [[http://www.altera.com|benötigte Software]]
 +    - Link folgen
 +    - Download (oben rechts)
 +    - MAX+PLUS II Student Edition (version 10.2)  downloaden (ganz unten halb-links)
 +    - Lizenzieren
 +      * Start -> Ausführen -> cmd
 +      * $>dir /p
 +      * Serial im Format XXXX-XXXX im Webinterface von Altera eingeben
 +  * Archive
 +    * **{{wiki:study:pld:pld-complete-06.06.2005.zip|pld-complete-06.06.2005.zip}}**
 +      * beinhaltet 0 bis 99 Erweiterungen für den Zähler, 7segment und den Comperator
 +    * {{wiki:study:pld:pdl-complete-01.06.2005.zip|pdl-complete-01.06.2005.zip}}
 +    * {{wiki:study:pld:prak-18.04.2005.zip|prak-18.04.2005.zip}}
 +
 +
 +===== Teil (1/4): count4fb =====
 +  * 4 bit BCD 0 bis 9 Vor- Rückwärts- Zähler
 +  * nicht über Wahrheitstabelle lösen
 +  * später soll ein 0-99 Zähler realisiert werden
 +  * **Entwurf im GraficEditor**
 +  * Bildungsvorschrift vorwärts zählen:
 +    * <latex>CLK_{i+1}=CLK_{i+1}</latex>
 +    * <latex>J_{i}=K_{i}</latex>
 +    * <latex>J_{1}=1</latex>
 +    * <latex>J_{i+1}=COUNT \bigcap Q_{i}</latex>
 +  * Bildungsvorschrift rückwärts zählen:
 +    * <latex>CLK_{i+1}=CLK_{i+1}</latex>
 +    * <latex>J_{i}=K_{i}</latex>
 +    * <latex>J_{1}=1</latex>
 +    * <latex>J_{i+1}=COUNT \bigcap \overline{Q_{i}}</latex>
 +
 +++++ Lösung (0-15 Vor- Rückwärtszähler) |
 +  * **{{wiki:study:pld:count4fb.scf.zip|count4fb.scf.zip}}**
 +{{wiki:study:pld:pld_all_prakt1_counter_0to15.jpg?400}}
 +++++
 +
 +++++ Lösung (0-99 Vor- Rückwärtszähler, VHDL) |
 +  * **{{wiki:study:pld:pld-count4fb_99-03.06.2005.zip|pld-count4fb_99-03.06.2005.zip}}**
 +<code vhdl>
 + library IEEE;
 + use ieee.std_logic_1164.all;
 + use ieee.std_logic_arith.all;
 +
 + entity count4fb_99 is
 +  port(
 +    clk,forward,back: in std_logic;
 +    q,qz            : out std_logic_vector (3 downto 0)
 +  );
 + end count4fb_99;
 +
 + architecture A1 of count4fb_99 is
 + begin
 +  counter: process (clk)
 +  variable tmp_q  : integer range 9 downto 0;
 +  variable tmp_qz : integer range 9 downto 0;
 +  variable tmp_d  : std_logic;
 +  begin
 +  if (clk'event and clk = '1') then
 +    if (tmp_d='0' and (forward='1' or back='1')) then
 +    tmp_d:='1';
 +    if (forward='1') then
 +      if (tmp_q=9) then
 +      if (tmp_qz=9) then
 +        tmp_qz:=0;
 +      else
 +        tmp_qz:=tmp_qz+1;
 +      end if;
 +      tmp_q:=0;
 +      else
 +      tmp_q:=tmp_q+1;
 +      end if;
 +
 +    elsif (back='1') then
 +      if (tmp_q=0) then
 +      if (tmp_qz=0) then
 +        tmp_qz:=9;
 +      else
 +        tmp_qz:=tmp_qz-1;
 +      end if;
 +      tmp_q:=9;
 +      else
 +      tmp_q:=tmp_q-1;
 +      end if;
 +    end if;
 +
 +    elsif (forward='0' and back='0') then
 +    tmp_d:='0';
 +    end if;
 +    q<=conv_std_logic_vector(tmp_q,4);
 +    qz<=conv_std_logic_vector(tmp_qz,4);
 +  end if;
 +  end process;
 + end A1;
 +</code>
 +++++
 +
 +===== Teil (2/4): light =====
 +  * Light bei I[0..3] > 0
 +  * Full bei I[0..3] > 4
 +  * **Entwurf im Waveform-Editor**
 +
 +==== Zustände ====
 +^ Zustand | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
 +^      I0 | 0 ^ 1 | 0 ^ 1 | 0 ^ 1 | 0 ^ 1 | 0 ^ 1 |  0 ^  1 |  0 ^  1 |  0 ^  1 |
 +^      I1 | 0 | 0 ^ 1 ^ 1 | 0 | 0 ^ 1 ^ 1 | 0 | 0 ^  1 ^  1 |  0 |  0 ^  1 ^  1 |
 +^      I2 | 0 | 0 | 0 | 0 ^ 1 ^ 1 ^ 1 ^ 1 | 0 | 0 |  0 |  0 ^  1 ^  1 ^  1 ^  1 |
 +^      I3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 ^ 1 ^ 1 ^  1 ^  1 ^  1 ^  1 ^  1 ^  1 |
 +^  Light | 0 ^ 1 ^ 1 ^ 1 ^ 1 ^ 1 ^ 1 ^ 1 ^ 1 ^ 1 ^  1 ^  1 ^  1 ^  1 ^  1 ^  1 |
 +^    Full | 0 | 0 | 0 | 0 | 0 ^ 1 ^ 1 ^ 1 ^ 1 ^ 1 ^  1 ^  1 ^  1 ^  1 ^  1 ^  1 |
 +
 +++++ Lösung |
 +  * **{{wiki:study:pld:light.wdf.zip|light.wdf.zip}}**
 +{{wiki:study:pld:pld_all_prakt1_light.jpg?400}}
 +++++
 +
 +++++ Lösung (0-99 Comperator, VHDL) |
 +<code vhdl>
 + library IEEE;
 + use ieee.std_logic_1164.all;
 + use ieee.std_logic_arith.all;
 + use ieee.std_logic_unsigned.all;
 +
 + entity light_99 is
 +  port(
 +    clk            :  in std_logic;
 +    i,iz            :  in std_logic_vector (3 downto 0);
 +    light,full      : out std_logic
 +  );
 + end light_99;
 +
 + architecture A1 of light_99 is
 + begin
 +  counter: process (clk)
 +  variable  zsum: integer range 99 downto 0;
 +  variable  tmp_i,tmp_iz: integer range 9 downto 0;
 +
 +  begin
 +  if (clk'event and clk = '1') then
 +    tmp_i:=conv_integer(i);
 +    tmp_iz:=conv_integer(iz);
 +    zsum:=tmp_i+tmp_iz*10;
 +    if (zsum>0) then
 +    light<='1';
 +    else
 +    light<='0';
 +    end if;
 +
 +    if (zsum>4) then
 +    full<='1';
 +    else
 +    full<='0';
 +    end if;
 +  end if;
 +  end process;
 + end A1;
 +</code>
 +++++
 +
 +===== Teil (3/4): 7segment =====
 +  * einfacher BCD zu 7 Segment Decoder
 +  * **Entwurf in HDL**
 +
 +==== 7-Segment Aufbau ====
 +|          ^ -A- |          |
 +^ %% |F %% |    ^ %% |B %% |
 +|          ^ -G- |          |
 +^ %% |E %% |    ^ %% |C %% |
 +|          ^ -D- |          |
 +|          |    ^    .H    |
 +
 +==== Wahrheitstabelle ====
 +^              ^^  Bit[3..0] ^^^^ ^        Display[A..G]        ^^^^^^^^^
 +^ dezimal ^ hex  ^ 3 ^ 2 ^ 1 ^ 0 ^ ^ A ^ B ^ C ^ D ^ E ^ F ^ G ^ H ^  sum ^
 +|    0    | 0x00 | 0 | 0 | 0 | 0 ^ | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0xfc |
 +|    1    | 0x01 | 0 | 0 | 0 | 1 ^ | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0x60 |
 +|    2    | 0x02 | 0 | 0 | 1 | 0 ^ | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0xda |
 +|    3    | 0x03 | 0 | 0 | 1 | 1 ^ | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0xf2 |
 +||||||^ | |||||||||
 +|    4    | 0x04 | 0 | 1 | 0 | 0 ^ | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0x66 |
 +|    5    | 0x05 | 0 | 1 | 0 | 1 ^ | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0xb6 |
 +|    6    | 0x06 | 0 | 1 | 1 | 0 ^ | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0xbe |
 +|    7    | 0x07 | 0 | 1 | 1 | 1 ^ | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0xe0 |
 +||||||^ | |||||||||
 +|    8    | 0x08 | 1 | 0 | 0 | 0 ^ | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0xfe |
 +|    9    | 0x09 | 1 | 0 | 0 | 1 ^ | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0xfb |
 +|  10    | 0x0a | 1 | 0 | 1 | 0 ^ | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0xee |
 +|  11    | 0x0b | 1 | 0 | 1 | 1 ^ | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0x3e |
 +||||||^ | |||||||||
 +|  12    | 0x0c | 1 | 1 | 0 | 0 ^ | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0x9c |
 +|  13    | 0x0d | 1 | 1 | 0 | 1 ^ | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0x7a |
 +|  14    | 0x0e | 1 | 1 | 1 | 0 ^ | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0x9e |
 +|  15    | 0x0f | 1 | 1 | 1 | 1 ^ | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0x8e |
 +
 +++++ Lösung (AHDL) |
 +  * **{{wiki:study:pld:7segment.tdf.zip|7segment.tdf.zip}}**
 +// ...von [[user>rhspirit|Rocco Hanf]] //
 +<code vhdl>
 +SUBDESIGN 7segment
 +(
 + I[3..0]      : INPUT;
 + A,B,C,D,E,F,G : OUTPUT;
 +)
 +BEGIN
 + TABLE
 +  I[]  => A,  B,  C,  D,  E,  F,  G;
 +  H"0" => B"1",B"1",B"1",B"1",B"1",B"1",B"0";
 +  H"1" => B"0",B"1",B"1",B"0",B"0",B"0",B"0";
 +  H"2" => B"1",B"1",B"0",B"1",B"1",B"0",B"1";
 +  H"3" => B"1",B"1",B"1",B"1",B"0",B"0",B"1";
 +  H"4" => B"0",B"1",B"1",B"0",B"0",B"1",B"1";
 +  H"5" => B"1",B"0",B"1",B"1",B"0",B"1",B"1";
 +  H"6" => B"1",B"0",B"1",B"1",B"1",B"1",B"1";
 +  H"7" => B"1",B"1",B"1",B"0",B"0",B"0",B"0";
 +  H"8" => B"1",B"1",B"1",B"1",B"1",B"1",B"1";
 +  H"9" => B"1",B"1",B"1",B"1",B"0",B"1",B"1";
 +  H"A" => B"1",B"1",B"1",B"0",B"1",B"1",B"1";
 +  H"B" => B"0",B"0",B"1",B"1",B"1",B"1",B"1";
 +  H"C" => B"1",B"0",B"0",B"1",B"1",B"1",B"0";
 +  H"D" => B"0",B"1",B"1",B"1",B"1",B"0",B"1";
 +  H"E" => B"1",B"0",B"0",B"1",B"1",B"1",B"1";
 +  H"F" => B"1",B"0",B"0",B"0",B"1",B"1",B"1";
 + END TABLE;
 +END;
 +</code>
 +++++
 +
 +===== Teil (4/4): checkpas =====
 +Es sind gesamt 4 Lichtschranken vorhanden, bei denen jeweils 2 für ein Ein- bzw. Ausgang benutzt werden.
 +  * Bildung eines Blockes mit 2 Eingängen und 1 Ausgang
 +  * 2 Blöcke entgegengesetzt zusammen schalten -> 2 Ausgänge, einer für vorwärts einer für rückwärts
 +  * Lösung durch Automaten -> FlipFlops
 +  * Moore Automat benutzen (synchron mit Takt) zur Vermeidung von Hazards
 +    * Ausgang ist abhängig von den internen Zuständen
 +  * eventuell können gleichzeitig 2 Lichtschranken ausgelöst werden -> ein checkpass sollte dann im Ausgang Takt-verschoben sein (damit der Zähler 2 Impulse bekommt)
 +  * **Y0** ist der Zählausgang
 +  * **Y1** ist der Ausgang zum Blockieren
 +  * **Entwurf in HDL**
 +\\
 +
 +==== Zustände ====
 +  * 7 verschiedene Zustände
 +  * bei X2==1 wird der Automat blokiert, wenn er in Z5 ist
 +  * man kann sicher Z7 und Z0 kombinieren
 +
 +^ Zustand ^ 0 ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 ^ 8 ^
 +^  X0    | d | 0 ^ 1 ^ 1 | 0 | 0 | d | d | d |
 +^  X1    | d | 0 | 0 ^ 1 ^ 1 | 0 | d | d | d |
 +^  X2    | d | d | d | d | d ^ 1 ^ 1 | 0 | d |
 +|                                |||||||||
 +^  Y0    | 0 | 0 | 0 | 0 | 0 | 0 | 0 ^ 1 | 0 |
 +^  Y1    | 0 | 0 | 0 | 0 | 0 ^ 1 ^ 1 ^ 1 ^ 1 |
 +
 +++++ Lösung (Automatengraph) |
 +  * Zustände **z4** und **z5** von oben wurden zusammengefasst
 +<graphviz>
 +digraph finite_state_machine {
 + rankdir=LR;
 + size="10,8"
 + node [shape = circle];
 +
 + Z0 -> Z0 [label="*"];
 + Z0 -> Z1 [label="00"];
 +
 + Z1 -> Z1 [label="00"];
 + Z1 -> Z2 [label="10"];
 +
 + Z2 -> Z2 [label="10"];
 + Z2 -> Z0 [label="*"];
 + Z2 -> Z3 [label="11"];
 +
 + Z3 -> Z3 [label="11"];
 + Z3 -> Z0 [label="*"];
 + Z3 -> Z4 [label="01"];
 +
 + Z4 -> Z4 [label="01"];
 + Z4 -> Z0 [label="*"];
 + Z4 -> Z5 [label="00"];
 +
 + node Z5 [label="Z5+Z6"];
 + Z5 -> Z5 [label="X2"];
 + Z5 -> Z7 [label="*"];
 +
 + Z7 -> Z8 [label="*"];
 +
 + Z8 -> Z0 [label="*"];
 +}
 +</graphviz>
 +++++
 +
 +++++ Lösung (AHDL) |
 +  * {{wiki:study:pld:pld-checkpas-03.06.2005.zip|pld-checkpas-03.06.2005.zip}}
 +<code vhdl>
 +SUBDESIGN checkpas (
 + CLK, X0, X1, X2 : INPUT;
 + Y0, Y1          : OUTPUT;
 +)
 +
 +VARIABLE
 + zz: MACHINE OF BITS(Y1,Y0)
 +  WITH STATES (
 +  z0 = B"00",
 +  z1 = B"00",
 +  z2 = B"00",
 +  z3 = B"00",
 +  z4 = B"00",
 +  z5 = B"10",
 +  z6 = B"11",
 +  z7 = B"10"
 +  );
 +
 +BEGIN
 + zz.clk = CLK;
 +
 + CASE zz IS
 +  WHEN z0 =>
 +  Y0 = GND;
 +  Y1 = GND;
 +
 +  IF (!X0 AND !X1) THEN
 +    zz = z1;
 +  ELSE
 +    zz = z0;
 +  END IF;
 +
 +  WHEN z1 =>
 +  Y0 = GND;
 +  Y1 = GND;
 +
 +  IF (X0 AND !X1) THEN
 +    zz = z2;
 +  ELSE
 +    zz = z0;
 +  END IF;
 +
 +  WHEN z2 =>
 +  Y0 = GND;
 +  Y1 = GND;
 +
 +  IF (X0 AND X1) THEN
 +    zz = z3;
 +  ELSIF (X0 AND !X1) THEN
 + zz = z2;
 +  ELSE
 +    zz = z0;
 +  END IF;
 +
 +  WHEN z3 =>
 +  Y0 = GND;
 +  Y1 = GND;
 +
 +  IF (X0 AND X1) then
 +    zz = z3;
 +  ELSIF (!X0 AND X1) THEN
 +    zz = z4;
 +  ELSE
 +    zz = z0;
 +  END IF;
 + 
 +  WHEN z4 =>
 +  Y0 = GND;
 +  Y1 = GND;
 +
 +  IF (!X0 AND !X1) THEN
 +    zz = z5;
 +  ELSIF (!X0 AND X1) THEN
 +    zz = z4;
 +  ELSE
 +    zz = z0;
 +  END IF;
 +
 +  WHEN z5 =>
 +  Y0 = GND;
 +  Y1 = VCC;
 +
 +  IF (X2) THEN
 +    zz = z5;
 +  ELSE
 +    zz = z6;
 +  END IF;
 +
 +  WHEN z6 =>
 +  Y0 = VCC;
 +  Y1 = VCC;
 +
 +  zz = z7;
 +
 +  WHEN z7 =>
 +  Y0 = GND;
 +  Y1 = VCC;
 +
 +  zz = z0;
 +
 +  WHEN others =>
 +  Y0 = GND;
 +  Y1 = GND;
 +  zz = z0;
 +
 + END CASE;
 +END;
 +</code>
 +++++
 +
 +++++ Lösung (AHDL von Ello) |
 +  * die Zustände stimmen mit den o.g. nicht überein!
 +
 +// Beim Entwurf in AHDL ist zu beachten, dass eine Wertetabelle zwar sehr einfach aufzustellen und zu überblicken ist, allerdings kann es passieren, dass der Automat durch unsaubere Eingangssignal oder so in Zustände kommt, die gar nicht definiert sind. Diese Zustände kommen durch den Compiler zustande, da der mehr FlipFlips nimmt als nötig. Wenn der Automat in einen undefinierten Zustand gerät kommt er da nicht mehr raus (weil er ja gar nicht beschrieben ist).
 +
 +Daher ist die Beschreibung mit case und if then... zu empfehlen. Die hat nämlich den Vorteil dass man **alle** undefinierten Zustände mit "when others" erfassen kann. Und dann z.B. wieder in z0 gehen kann. Seltsamerweise hats bei mir auch ohne when others schon geklappt.//
 +
 +
 +Ein Fehler den wohl viele Studenten machen ist nicht zu erfassen, wenn jemand durch die Tür geht, aber umkehrt wenn gerade nur noch die letzte Lichtschranke unterbrochen ist, er also fast drin ist. Wenn er hier umkehrt dann zählt der Automat fürs reingehen nicht. Der Automat fürs rausgehen denkt aber es ist grad jemand rausgegangen (die Impulsfolge stimmt ja dafür). Es ist also notwending pro Lichtschranke beim rein/rausgehn den jeweils anderen Automat in eine blockierungszustand zu versetzen.
 +Folgender AHDL Code kann das leisten:
 +
 +<code vhdl>
 +SUBDESIGN checkpas
 +(
 + CLK, X0, X1, X2 : INPUT;
 + Y0, Y1          : OUTPUT;
 +)
 +
 +VARIABLE
 + zz: MACHINE OF BITS(Y1,Y0)
 +  WITH STATES (
 +  z0 = B"00",
 +  z1 = B"10",
 +  z2 = B"10",
 +  z3 = B"10",
 +  z4 = B"00",
 +  z5 = B"01",
 +  z6 = B"00"
 +  );
 +
 +BEGIN
 + zz.clk = CLK;
 +
 + CASE zz IS
 +  WHEN z0 =>
 +  Y0 = GND;
 +  Y1 = GND;
 +
 +  IF X0 AND !X1 THEN
 +    zz = z1;
 +  END IF;
 +
 +  IF !X0 AND X1 THEN
 +    zz = z6;
 +  END IF;
 +
 +  WHEN z1 =>
 +  Y0 = GND;
 +  Y1 = VCC;
 +
 +  IF !X0 THEN
 +    zz = z0;
 +  END IF;
 + 
 +  IF X0 AND !X1 THEN
 +    zz = z1;
 +  END IF;
 + 
 +  IF X0 AND X1 THEN
 +    zz = z2;
 +  END IF;
 +
 +  WHEN z2 =>
 +  Y0 = GND;
 +  Y1 = VCC;
 +
 +  IF X0 AND X1 THEN
 +    zz = z2;
 +  END IF;
 + 
 +  IF X0 AND !X1 THEN
 +    zz = z1;
 +  END IF;
 +
 +  IF !X0 AND X1 THEN
 +    zz = z3;
 +  END IF;
 +
 +  IF !X0  AND !X1 THEN
 +    zz = z0;
 +  END IF;
 +
 +  WHEN z3 =>
 +  Y0 = GND;
 +  Y1 = VCC;
 +
 +  IF !X0 AND X1 THEN
 +    zz = z3;
 +  END IF;
 +
 +  IF !X0 AND !X1 AND X2 THEN
 +    zz = z4;
 +  END IF;
 +
 +  IF !X0 AND !X1 AND !X2 THEN
 +    zz = z5;
 +  END IF;
 +
 +  IF X0 AND X1 THEN
 +    zz = z2;
 +  END IF;
 +
 +  WHEN z4 =>
 +  Y0 = GND;
 +  Y1 = GND;
 +
 +  IF X2 THEN
 +    zz = z4;
 +  END IF;
 +
 +  IF !X2 THEN
 +    zz = z5;
 +  END IF;
 +
 +  WHEN z5 =>
 +  Y0 = VCC;
 +  Y1 = VCC;
 +
 +  IF !X0 AND X1 THEN
 +    zz = z3;
 +  ELSE
 +    zz = z0;
 +  END IF;
 +
 +  WHEN z6 =>
 +  Y0 = GND;
 +  Y1 = GND;
 +
 +  IF !X0 AND !X1 THEN
 +    zz = z0;
 +  ELSE
 +    zz = z6;
 +  END IF;
 +
 +  WHEN others =>
 +  Y0 = GND;
 +  Y1 = GND;
 +  zz = z0;
 +
 + END CASE;
 +END;
 +</code>
 +++++
 
wiki/study/prakt/pld.txt · Last modified: 2005/09/19 10:49 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki