TGI Praktikum |
Aufgabenbereich VHDL - Projekt 31
Implementierung |
Deklaration der Entity
Die Implementierung findet von Aussen nach Innen statt. Begonnen wird also mit der zu Anfang betrachteten Black Box.
In VHDL wird diese Schnittstelle zur Umwelt durch eine sogenannte ENTITY dargestellt.
Wie auch in der Skizze, werden
hier nur die Signale, die mit der Aussenwelt in Verbindung stehen, beachtet.
ENTITY regchange IS
a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); -- Ausgangssignale cs : IN STD_LOGIC -- Taktsignal (Enablebit) ); |
Deklaration der Architecture
Zu jeder Entity gehört mindestens eine Architecture, die das Innere der Schaltung beschreibt.
In dieser Architecture wird nun der zuvor überlegte Algorithmus realisiert.
Die hier zu verwirklichende
Architecture wird aus nur einem einzigen Prozess bestehen. Dieser wiederum ist, wie alle Prozesse, von
seiner Sensitivity List abhängig. (Dies ist eine Liste von Signalen, deren Änderung
den Prozess in Gang setzt.)
Das Enablebit (cs) steht hier als einziges Signal in dieser Liste, das
bedeutet, dass die Schaltung nur arbeitet, wenn sich der Wert dieses Signals ändert.
Da im Algorithmus jedoch die Bedingung eines gesetzten Bits gefordert wird, ist noch eine weitere
Abfrage notwendig, da der Prozess im jetzigen Zustand auch laufen würde, wenn das Bit sich
von '1' auf '0' ändert.
Dies wird durch ein IF-Kommando mit der Bedingung der steigenden Taktflanke
gelöst.
ARCHITECTURE arch_regchange OF regchange IS
SIGNAL r : STD_LOGIC_VECTOR (7 DOWNTO 0 ) := "XXXXXXXX"; BEGIN
. . . |
Variante 1
Bei der Implementierung muss man bedenken, dass eine direkte Ausgabe des Registerinhalts von der Form a <= r, nur
machbar ist, wenn das Register im Prozess nicht geändert wurde. Da Signalzuweisungen erst mit
der END PROCESS Anweisung erfolgen, ist es bei einer Änderung der Registersignale nicht möglich
diese aktuellen Werte im selben Takt auszugeben. Sie sind erst im nächsten Takt verfügbar.
Die Schaltung würde also zwei Takte benötigen, um den gewünschten Algorithmus zu verwirklichen.
Diese Verzögerung entsteht durch die sogenannte Gleichzeitigkeit der Berechnungen.
. . . IF (e /= r) THEN -- Eingang ungleich Register:
ELSE -- Eingang gleich Register:
END IF;
END IF; END PROCESS; |
Variante 2
Diese Variante, die hier auch als Lösung gewählt wurde, braucht nur einen
Takt für den Algorithmus. Allerdings wird hier der Registerinhalt im Falle einer
Änderung nicht direkt an den Ausgang ausgegeben, wie in der obigen Variante.
Statt dessen wird einfach gleich der Eingang zum Ausgang durchgeschalten.
So ist es möglich die aktuellen Registerwerte auch bei einer Änderung im selben Takt auszugeben.
Unserer Meinung nach, entsprach dies mehr der Aufgabenstellung, daher wurde Variante 2 bevorzugt.
. . . IF (e /= r) THEN -- Eingang ungleich Register:
a <= e; -- Eingang ausgeben
a <= r; -- Register ausgeben END IF; END PROCESS; |
zurück | 20.01.01 Katrin Stedele, Rainer Schmoll, Tanja Wojak |