Übungen zu VLSI II

Erläuterungen zum praktischen Teil (VHDL)

1. Die Werkzeuge

Alle Werkzeuge, die zum Schreiben, Analysieren und Testen einer VHDL-Beschreibung erforderlich sind, können über die Oberfläche des Leapfrog-Simulators aufgerufen werden. Sie werden in den folgenden Schritten der Einführung an einem kleinen Beispiel schrittweise vorgestellt.

2. Ein Beispiel zur Arbeit mit den Werkzeugen

2.1. Start des VHDL-Simulators

Öffnen Sie ein Terminalfenster und geben Sie hdldesk ein. Anschließend sollte folgendes Fenster auf Ihrem Bildschirm erscheinen:
 

2.2. Anlegen eines Arbeitsverzeichnisses

Nun muß ein Arbeitsverzeichnis angelegt werden. Dieses soll den Namen VHDL erhalten. Dazu sind folgende Schritte erforderlich:
  1. Wählen Sie im Menü Library den Programmpunkt set.
  2. Tragen Sie dort in das Feld Library den Namen VHDL ein und in das Feld Directory den Pfad Ihres VHDL-Verzeichnisses.
  3. Ist das Verzeichnis noch nicht vorhanden, so ist die Schaltfläche create zu aktivieren
  4. Sind die uebergeordneten Verzeichnisse von VHDL noch nicht vorhanden, so ist die Schaltfläche parent zu aktivieren.
  5. Im Feld Save as ist anzugeben, fuer welchen Bereich das neue Verzeichnis gültig sein soll. Für das Beispiel ist Local zu aktivieren.
  6. Abschließend ist der Schalter OK zu betätigen.

Mit obigen Schritten wurde das Verzeichnis VHDL erzeugt, dem Simulator bekanntgemacht und die physikalische Position festgelegt. Die folgenden Schritte dienen dazu, dieses Verzeichnis als Arbeitsverzeichnis festzulegen:

  1. Öffnen Sie das Pull-Down-Menü des Eingabefeldes Work und wählen Sie dort VHDL aus.
  2. Öffnen Sie das Pull-Down-Menü des Eingabefeldes Displayed im Bereich Libraries und wählen Sie dort ebenfalls VHDL aus.
  3. Da das Verzeichnis VHDL noch keine Einträge enthält, ist das Browser-Fenster unterhalb des Feldes Displayed im Bereich Libraries nun leer.

2.2. Die Eingabe einer VHDL-Beschreibung in den Simulator

Wechseln Sie nun auch das aktuelle Verzeichnis. Dazu sind folgende Schritte durchzuführen:
  1. Öffnen Sie das Pull-Down-Menü des Fensters Displayed im Bereich Directories.
  2. Wählen Sie dort Change Working Directory ... aus.
  3. Nun erscheint das Fenster Change Working Directory. Geben Sie dort das VHDL-Verzeichnis ein und beenden Sie den Dialog mit dem OK-Schalter.

Wählen Sie nun im Menue File den Programmpunkt Edit. Anschließend erscheint folgender Dialog:

Geben Sie nun in das Fenster Source File den Namen der zu erstellenden Datei ein. In diesem Falle lautet er HALF_ADDER.vhd.
Sollten Sie mit einem anderen Editor als dem Standardeditor arbeiten wollen, so können Sie die Schaltfläche editor aktivieren und anschliessend den Namen dieses Editors in das untere Fenster eintragen.
Nach Betätigung der OK-Taste erscheint das gewünschte Editor-Fenster. Geben Sie dort folgendn Text ein:

-- Beispielprogramm 1: Halbaddierer
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity HALF_ADDER is
  port(A, B: in BIT := '0';
       SUM, CARRY: out BIT);
end HALF_ADDER;

architecture HA_STRUCTURE of HALF_ADDER is
  component XOR2
    port(X, Y: in  BIT := '0';
         Z   : out BIT);
  end component;
  component AND2
    port(L, M: in  BIT := '0';
         N   : out BIT);
  end component;
begin
  X1: XOR2 port map(A, B, SUM);
  A1: AND2 port map(A, B, CARRY);
end HA_STRUCTURE;
 

Gehen Sie nun folgendermaßen vor:

  1. Speichern Sie die eingegebene Datei ab.
  2. Compilieren Sie die Datei. Dazu ist diese im rechten Auswahlfenster zu markieren. Anschließend wird der Schalter Compile am linken Fensterrand aktivierbar. Nach der Compilierung der Datei sollte im Fenster etwa folgender Text erscheinen:

Enhält die eingegebene VHDL-Datei syntaktische Fehler, so werden diese im unteren Teil des Fensters ausgegeben.

2.3 Die Erstellung einer Konfigurationsdatei

Die Konfigurationsdatei kann automatisch erstellt werden. Dazu muß der Programmpunkt Configuration des Menüs Utilities ausgewählt werden. Anschließend erscheint folgendes Fenster auf dem Bildschirm:

Im Eingabefeld Unit Name ist der Name des Entitys einzugeben, dessen Architektur festgelegt werden soll. Dies kann auch automatisch geschehen, indem der entsprechende Teil im Library-Browser markiert wird. Die Einträge in die anderen Fenster sind manuell vorzunehmen. Eine ausführliche Erklaerung dieser Felder erfolgt bei Betätigung des Schalters Help.
Nach Betätigung des OK-Schalters wird die Konfigurationsdatei erzeugt und erscheint im Browser. Sie hat folgenden Inhalt:

--
-- Configurations for top-level unit VHDL.HALF_ADDER:HA_STRUCTURE
-- Configuration Model: Hierarchical
-- No priority list of architectures specified
--

-- Configuration
configuration CFG_HALF_ADDER_HA_STRUCTURE of HALF_ADDER is
    for HA_STRUCTURE
    end for;
end CFG_HALF_ADDER_HA_STRUCTURE;

2.4 Generierung einer Testbench

Zum Test der Funktion der beschriebenen Schaltung soll nun eine Testbench angelegt werden. Dazu ist im Menü Utilities der Programmpunkt Testbench... auszuwählen. Daraufhin erscheint folgendes Fenster:

Im Eingabefeld Unit Name ist der Name der zu testenden Komponente anzugeben, im Beispiel vhdl.HALF_ADDER. Im Feld output unit ist der Name anzugeben, unter dem auf die Testbench zugegriffen werden kann. Ausführliche Informationen zu allen Elementen dieses Fensters erhalten Sie nach der Betätigung des Schalters Help.
Nachdem Sie alle Einstellungen getätigt haben, ist der Schalter OK zu betätigen. Die Testbench wird nun automatisch erzeugt und erscheint im Browser. Sie besteht aus zwei Dateien mit folgendem Inhalt:

Entity-Deklaration:
-- Author    : martin
-- Created On: Thu Jul  2 18:59:32 1998
-- Testbench for vhdl.half_adder

library STD;
library WORK;
library IEEE;
library vhdl;
use STD.STANDARD.ALL;
use IEEE.STD_LOGIC_1164.ALL;
use WORK.ALL;

entity test_half_adder is

end test_half_adder;

Architecture-Deklaration:
-- Author    : martin
-- Created On: Thu Jul  2 18:59:32 1998
-- Testbench for vhdl.half_adder

architecture BENCH of test_half_adder is
 component half_adder
     PORT(
  A: IN BIT;
  B: IN BIT;
  SUM: OUT BIT;
  CARRY: OUT BIT
     );
 end component;

 signal t_A:BIT;
 signal t_B:BIT;
 signal t_SUM:BIT;
 signal t_CARRY:BIT;

begin
 half_adder_I1: half_adder
     port map (
  A => t_A,
  B => t_B,
  SUM => t_SUM,
  CARRY => t_CARRY
     );

 half_adder_driver: process
 begin
 end process;
end BENCH;
 

2.5 Ergänzung der Testbench

Die Testbench muß nun noch um Code erweitert werden, der Testvektoren an die zu testende Komponente anlegt und die Korrektheit des Ergebnisses prüft:

-- Author    : martin
-- Created On: Wed Jun  3 18:04:31 1998
-- Testbench for testlib.half_adder

architecture BENCH of libtest is
 component half_adder
     PORT(
  A: IN BIT;
  B: IN BIT;
  SUM: OUT BIT;
  CARRY: OUT BIT
     );
 end component;

 signal t_A:BIT;
 signal t_B:BIT;
 signal t_SUM:BIT;
 signal t_CARRY:BIT;

begin
 half_adder_I1: half_adder
     port map (
  A => t_A,
  B => t_B,
  SUM => t_SUM,
  CARRY => t_CARRY
     );

 half_adder_driver: process
 begin
          t_A <= '0';
          t_B <= '0';
   wait for 10 ns;
          assert (t_SUM = '0') and (t_CARRY = '0')
            report "Fehler 1!!!"
            severity ERROR;
          t_A <= '0';
          t_B <= '1';
   wait for 10 ns;
          assert (t_SUM = '1') and (t_CARRY = '0')
            report "Fehler 2!!!"
            severity ERROR;
          t_A <= '1';
          t_B <= '0';
   wait for 10 ns;
          assert (t_SUM = '1') and (t_CARRY = '0')
            report "Fehler 3!!!"
            severity ERROR;
          t_A <= '1';
          t_B <= '1';
   wait for 10 ns;
          assert (t_SUM = '0') and (t_CARRY = '1')
            report "Fehler 4!!!"
            severity ERROR;
          t_A <= '0';
          t_B <= '0';
   wait for 10 ns;
          assert (t_SUM = '1') and (t_CARRY = '0')
            report "kein Feler!!!"
            severity ERROR;
 end process;
end BENCH;

2.6 Das Erzeugen einer Simulationsdatei

Zur Erzeugung einer Simulationsdatei muß die zu simulierende Datei - im Beispiel bench - im Browserfenster markiert werden. Anschließend ist zuerst der Schalter Compile und dann der Schalter Elaborate am linken Fensterrand zu betätigen. Daraufhin erscheint eine Datei mit dem Namen SIM im Browser.

2.7 Der Aufruf des Simulators

Der Simulator wird durch markieren der Datei SIM und Betaetigen des Schalters Simulate aufgerufen. Anschließend erscheint der Simulator auf dem Bildschirm:

Die Simulation kann mit dem Schalter Run gestartet und mit dem Schalter Stop beendet werden.