11.10.2013 Aufrufe

Unterlagen zu Versuch 3

Unterlagen zu Versuch 3

Unterlagen zu Versuch 3

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

IL<br />

IS<br />

VS<br />

PRAKTIKUM ZUR<br />

VORLESUNG<br />

Rechnergesteuerte Systeme 2<br />

VERSUCH 3<br />

ADDITIONSSCHALTUNGEN UND ALU<br />

Name: Matrikelnummer:<br />

Vorname: Gruppennummer:<br />

Betreuer: Datum:<br />

Universität Duisburg-Essen<br />

Fak. 5, Abt. IIMT, Institut für<br />

Informationstechnik (IT)<br />

Verteilte Systeme (VS)<br />

© Dr.-Ing. Heinz-Dieter Hümmer<br />

Universität Duisburg-Essen<br />

Fak. 5, IIMT, IT/VS


Praktikum <strong>zu</strong> RgS 2 <strong>Versuch</strong> 3: ADDITIONSSCHALTUNGEN UND ALU<br />

Hinweise<br />

• Arbeiten Sie den anliegenden Vorbereitungstext sorgfältig durch.<br />

• Lösen Sie die im Vorbereitungstext gestellten Aufgaben und bringen Sie Ihre Ergebnisse <strong>zu</strong>m <strong>Versuch</strong>stermin<br />

mit.<br />

• Beantworten Sie <strong>zu</strong>m Antestat die folgenden Fragen.<br />

Vorbereitende Fragen<br />

1. Geben Sie die logischen Gleichungen eines Volladdierers wieder. Minimieren Sie die Gleichungen<br />

möglichst unter Zuhilfenahme der Antivalenzverknüpfung (xor)!<br />

2. Nach welcher Zeit kann bei einem Volladdierer wie in Abb. 1 von einem stabilen Ergebnis ausgegangen<br />

werden, wenn alle Gatter die gleiche Verzögerung T besitzen?<br />

3. Warum wurden in der Simulation unter 2.2.1 die binären Zahlen „0001“ und „1111“ an die Eingänge<br />

angelegt?<br />

4. Erklären Sie in einem kurzen Satz worin der prinzipielle Unterschied in der Übertragslogik zwischen<br />

einem Ripple-Carry-Addierer und einem Carry-Look-Ahead-Addierer liegt.<br />

5. Führen Sie im 8 bit Zweierkomplement folgende Operationen schrittweise durch: 2 – 3 ; 5 - 2<br />

6. Welche Dezimalzahlen stellen die untere bzw. obere Grenze im 8 bit Zweierkomplement dar?<br />

7. Vervollständigen Sie folgende for-Schleife <strong>zu</strong>r Realisierung eines 8-bit breiten Ripple-Carry-Addierers<br />

(ohne Betrachtung der Zeitverzögerungen):<br />

for ... loop<br />

...<br />

end loop;<br />

Verwenden Sie dabei folgende Variablen:<br />

a,b : std_logic_vector(8 downto 0); --Operanden<br />

e : std_logic_vector(8 downto 0); --Ergebnis<br />

c : std_logic_vector; --carry<br />

Inhalt<br />

1 Einleitung ..............................................................................................................................3<br />

2 Additionsschaltungen............................................................................................................3<br />

2.1 Volladdierer.....................................................................................................................3<br />

2.2 Ripple-Carry-Addierer .....................................................................................................4<br />

2.2.1 Simulationsergebnis..................................................................................................5<br />

2.3 Carry-Look-Ahead Addierer ............................................................................................5<br />

2.4 Aufgabe 1 .......................................................................................................................6<br />

3 Arithmetisch-logische Einheit(ALU) eines Prozessors ..........................................................7<br />

3.1 Der Signaltyp std_logic .................................................................................................7<br />

3.2 Schnittstelle und Verhalten der ALU ...............................................................................7<br />

3.3 Aufgabe 2 .......................................................................................................................9<br />

Entwurfsempfehlungen .........................................................................................................9<br />

Universität Duisburg-Essen; Fakultät 5; Abt. IIMT; Inst. Informationstechnik (IT), Verteilte Systeme (VS) Seite 2


Praktikum <strong>zu</strong> RgS 2 <strong>Versuch</strong> 3: ADDITIONSSCHALTUNGEN UND ALU<br />

1 Einleitung<br />

In diesem <strong>Versuch</strong> sollen einleitend zwei Varianten eines mehrstelligen, binären Addieres vorgestellt<br />

werden; daran anschließend wird auf den Entwurf einer kompletten arithmetischen logischen Einheit<br />

(ALU) eingegangen.<br />

2 Additionsschaltungen<br />

2.1 Volladdierer<br />

Wie schon aus den vorherigen <strong>Versuch</strong>en bekannt ist, kann ein Volladdierer aus zwei Halbaddieren aufgebaut<br />

werden; <strong>zu</strong>r Erinnerung ist in Abbildung Abb. 1 das Schaltbild eines solchen Konstruktes dargestellt.<br />

ai<br />

bi<br />

ci<br />

Halbaddierer 1<br />

=1<br />

&<br />

Halbaddierer 2<br />

Abb. 1: Schaltbild eines Volladdierers<br />

Dem in Abb. 1 dargestellten Volladdierer entspricht das folgende VHDL-Modell (Datenfluss), das auf die<br />

einzelnen logischen Gleichungen aufbaut. Aufgrund der <strong>zu</strong>gewiesenen Gatterverzögerungszeit – die<br />

Zeitkonstante totzeit – kommt dieses Modell den realen Komponenten sehr nahe.<br />

entity volladdierer is<br />

port(a,b,c_i: in bit; s,c_o: out bit);<br />

end volladdierer;<br />

architecture verhalten of volladdierer is<br />

constant totzeit: time := 10 ns; --Zeitkonstante<br />

signal x,y,z: bit;<br />

begin<br />

s


Praktikum <strong>zu</strong> RgS 2 <strong>Versuch</strong> 3: ADDITIONSSCHALTUNGEN UND ALU<br />

2.2 Ripple-Carry-Addierer<br />

Durch die Verkettung von mehreren Volladdierern entsteht ein mehrstelliger Addierer: ein sog. Ripple-<br />

Carry-Addierer. Dieser erfüllt zwar die mathematischen Anforderungen, ist aus technischer Sicht jedoch<br />

keine befriedigende Lösung aufgrund der "seriellen" Fortpflan<strong>zu</strong>ng (ripple, dahinplätschern) des Carry-<br />

Bits. Durch diese serielle Verkettung der Stufen entsteht ein langer Signal-Pfad und bedenkt man, dass<br />

jedes Gatter eine „Gatterverzögerung“ hat – auf die hier nicht weiter eingegangen wird –, so wird deutlich,<br />

dass diese Verschaltung bei großen Wortlängen ungünstig ist. Anhand der nächsten VHDL Modelle<br />

soll dieses Verhalten verdeutlicht werden. Hier wurde mit einzelnen Volladdierern ein 4-bit breiter Addierer<br />

konstruiert, der wie in der folgenden graphischen Darstellung Abb. 2 verschaltet ist.<br />

cin<br />

cout<br />

c4<br />

Σ<br />

a3<br />

s3<br />

b3<br />

cin<br />

cout<br />

Abb. 2: Schaltbild des Ripple-Carry-Addierers<br />

Um einen mehrstelligen (hier vierstellig) Addierer im strukturellen Entwurfstil <strong>zu</strong> kreieren, setze man den<br />

Volladdierer als component ein. Jede dieser mehrfach verwendeten Komponente erhält einen eigenen<br />

Namen (Instanziierung der Komponente). Die Verknüpfung der Ein- und Ausgänge der Instanzen mit<br />

den lokal deklarierten Signalen, die sogenannte Netzliste, ist im folgenden Programmcode aufgeführt.<br />

entity rc_addierer is<br />

port(al,bl: in bit_vector (3 downto 0);<br />

sl: out bit_vector (3 downto 0);<br />

c_ol: out bit);<br />

end rc_addierer;<br />

architecture struktur of rc_addierer is<br />

signal x0, x1, x2, x3: bit:='0';<br />

a2 b2<br />

component volladdierer is<br />

port(a,b,c_i: in bit; s,c_o: out bit);<br />

end component;<br />

-- Instanziierung der Komponenten<br />

for VA0: volladdierer use entity mywork.volladdierer(verhalten);<br />

for VA1: volladdierer use entity mywork.volladdierer(verhalten);<br />

for VA2: volladdierer use entity mywork.volladdierer(verhalten);<br />

for VA3: volladdierer use entity mywork.volladdierer(verhalten);<br />

Σ<br />

begin -- Netzliste<br />

VA0: volladdierer port map(a=>al(0),b=>bl(0),c_i=>x0,s=>sl(0),c_o=>x1);<br />

VA1: volladdierer port map(a=>al(1),b=>bl(1),c_i=>x1,s=>sl(1),c_o=>x2);<br />

VA2: volladdierer port map(a=>al(2),b=>bl(2),c_i=>x2,s=>sl(2),c_o=>x3);<br />

VA3: volladdierer port map(a=>al(3),b=>bl(3),c_i=>x3,s=>sl(3),c_o=>c_ol);<br />

end struktur;<br />

s2<br />

a1 b1<br />

Universität Duisburg-Essen; Fakultät 5; Abt. IIMT; Inst. Informationstechnik (IT), Verteilte Systeme (VS) Seite 4<br />

cin<br />

cout<br />

Σ<br />

s1<br />

c0 = 0<br />

cin<br />

cout<br />

Σ<br />

a0 b0<br />

s0


Praktikum <strong>zu</strong> RgS 2 <strong>Versuch</strong> 3: ADDITIONSSCHALTUNGEN UND ALU<br />

2.2.1 Simulationsergebnis<br />

Werden nun zwei 4-bit breite Bitmuster - "0001" und "1111" - an die Eingänge al und bl gelegt - sie<br />

waren <strong>zu</strong>vor mit dem Muster "0000" belegt -, so ergibt sich folgendes Diagramm (Abb. 3):<br />

Abb. 3: Graphische Darstellung der beschriebenen Simulation.<br />

Hier wurde die Bitmuster so gewählt, dass die maximale Verzögerungszeit von 80 ns deutlich <strong>zu</strong> sehen<br />

ist. Erklären lässt sich das Verhalten wie folgt: Im ersten Volladdierer, ist das Carry-Ausgangssignal<br />

nach 20 ns stabil, da an dessem Carry-Eingang ständig eine Null anliegt und das AND-Gatter des zweiten<br />

Halbaddierers (siehe Abb.1) nie eine Eins am Ausgang führen kann. Die restliche Verzögerungszeit<br />

ergibt sich aus der Summe aller Verzögerungszeiten der Gatter im Carry-Bit Signalpfad, also<br />

3*2*totzeit. Summiert man sie auf, ergeben sich die 80 ns Gesamtverzögerungszeit.<br />

2.3 Carry-Look-Ahead Addierer<br />

Die Problematik der großen Durchlaufzeiten läßt sich durch anders konzipierte Addierer umgehen. Als<br />

ein Beispiel soll hier ein Carry-Look-Ahead Addierer vorgestellt werden. Dieser besitzt eine separate, an<br />

die Wortbreite angepasste Logik, wie in der nächsten Abbildung Abb. 4 <strong>zu</strong> sehen ist.<br />

c3<br />

>1<br />

a2 b2<br />

&<br />

g2<br />

=1<br />

p2<br />

=1<br />

s2<br />

a1 b1<br />

&<br />

Abb. 4: Schaltbild eines 3-bit breiten Carry-Look-Ahead Addierers.<br />

Universität Duisburg-Essen; Fakultät 5; Abt. IIMT; Inst. Informationstechnik (IT), Verteilte Systeme (VS) Seite 5<br />

=1<br />

=1<br />

c2 g1p1c1<br />

s1<br />

>1 >1<br />

& & &<br />

& &<br />

&<br />

a0 b0<br />

&<br />

g0<br />

=1<br />

p0<br />

=1<br />

s0<br />

c0<br />

c0=0


Praktikum <strong>zu</strong> RgS 2 <strong>Versuch</strong> 3: ADDITIONSSCHALTUNGEN UND ALU<br />

Dargestellt wird ein 3-bit breiter Carry-Look-Ahead Addierer (CLA): Die jeweils identischen Module haben<br />

den Übertragseingang c, die Additionseingänge a und b und liefern mit dem Signal s das Ergebnis.<br />

Abweichend vom vorherigen Modell besitzen sie jedoch noch zwei weitere Ausgänge, nämlich<br />

p: Propagate und<br />

g: Generate.<br />

Diese tragen die notwendige Information für den Übertrag: g signalisiert, ob im Modul ein Übertrag erzeugt<br />

wird und p, ob ein Carry-Bit des vorherigen Moduls an das nächste Modul übertragen wird. Die<br />

Ausgangsignale sind definiert durch:<br />

g(i) := a(i) and b(i)<br />

p(i) := a(i) xor b(i)<br />

s(i) := p(i) xor c(i)<br />

Das jeweilige Carry-Bit c(i+1) als Stellenübertrag des Moduls an der Stelle i mit i > 0 errechnet sich <strong>zu</strong>:<br />

c(i+1) := g(i) or (p(i) and c(i))<br />

Um die Verzögerung durch die rekursive Form der obigen Gleichung <strong>zu</strong> vermeiden, wird für jeden Übertragseingang<br />

eine eigene Logik aufgebaut (siehe Abb. 4). Dieser parallele, zweistufige Aufbau von UND-<br />

ODER Verknüpfungen ermöglicht eine gleich bleibende Verzögerung, unabhängig von der Wortbreite,<br />

jedoch erkauft durch einen größeren Schaltungsaufwand. Die einzelnen Übertragsgleichungen der jeweiligen<br />

Positionen zeigt das auf und sie werden wie folgt ausgedrückt:<br />

c(0) := 0 -- festgelegt<br />

c(1) := g(0) -- schon gekürzt<br />

c(2) := g(1) or (p(1) and g(0))<br />

c(3) := g(2) or (p(2) and g(1)) or (p(2) and p(1) and g(0))<br />

2.4 Aufgabe 1<br />

Entwerfen Sie einen 4-bit breiten CLA mit einer generellen Gatterverzögerungszeit von 10 ns und vergleichen<br />

Sie die maximale Antwortzeit des CLA mit der des Ripple-Carry-Addierers anhand einer<br />

Testbench.<br />

Universität Duisburg-Essen; Fakultät 5; Abt. IIMT; Inst. Informationstechnik (IT), Verteilte Systeme (VS) Seite 6


Praktikum <strong>zu</strong> RgS 2 <strong>Versuch</strong> 3: ADDITIONSSCHALTUNGEN UND ALU<br />

3 Arithmetisch-logische Einheit(ALU) eines Prozessors<br />

Das vorrangige Thema der kommenden <strong>Versuch</strong>e dieses Praktikums ist der Entwurf eines kleinen Prozessors.<br />

Die grundlegende Architektur eines Prozessors, die Von-Neumann-Architektur, wird dabei als<br />

bekannt vorausgesetzt und daher in den <strong>Versuch</strong>sanleitungen nicht weiter theoretisch betrachtet. Der<br />

Entwurf des Prozessors soll in kleinen Schritten erfolgen und daher werden in den einzelnen <strong>Versuch</strong>en<br />

wesentliche Bestandteile des Prozessors mit wohldefinierten Schnittstellen vorgestellt und deren Realisierung<br />

als VHDL-Modell <strong>zu</strong> Aufgabe gestellt. Diese hier mehr pragmatische Vorgehensweise verzichtet<br />

<strong>zu</strong>nächst bewusst darauf, sich auf ein starres Gesamtkonzept (Maschinentyp, Befehlssatz u.s.w.) für<br />

den Prozessor fest <strong>zu</strong> legen. Statt dessen wird mit dem Entwurf der ALU, der arithmetisch-logischen<br />

Einheit des Prozessors, begonnen.<br />

3.1 Der Signaltyp std_logic<br />

Bevor auf die Einzelheiten der ALU eingegangen wird, soll <strong>zu</strong>nächst ein neuer Datentyp vorgestellt werden,<br />

der für möglichst alle Signale und Variablen in allen <strong>zu</strong>m Prozessorentwurf gehörenden VHDL-<br />

Modellen <strong>zu</strong> verwenden ist:<br />

std_logic bzw. std_logic_vector aus dem Package ieee.std_logic_1164 (IEEE Standard 1164-<br />

1993).<br />

Im Gegensatz <strong>zu</strong>m bisher verwendeten Typ bit mit den Logikwerten ’0’ und ’1’ erlaubt das Package<br />

std_logic die Modellierung von weiteren, für die reale Hardware typischen Logikwerten (sog.9-wertiges<br />

Logikmodell), die in der folgenden Tabelle (Tabelle 1) aufgelistet sind.<br />

Wert Bedeutung Verwendung<br />

'U' Nicht initialisiert Nicht initialisiertes Signal im Simulator „unknown“<br />

'X' Undefiniert Simulator erkennt mehr als einen aktiven Signaltreiber (Buskonflikt)<br />

'0' Starke logische '0' Entspricht '0' eines bit-Signals<br />

'1' Starke logische '1' Entspricht '1' eines bit-Signals<br />

'Z' Hochohmig 'Z' Tri-state Ausgang<br />

'W' Schwach unbekannt Simulator erkennt Buskonflikt zwischen 'L' und 'H' „weak“<br />

'L' Schwache logische '0' Ausgang mit Pull-Down Widerstand (Open Source)<br />

'H' Schwache logische '1' Ausgang mit Pull-Up Widerstand (Open Drain)<br />

'-' Don’t Care Logik<strong>zu</strong>stand bedeutungslos; kann <strong>zu</strong>r Minimierung verwendet werden<br />

Tabelle 1: Wertevorrat von std_logic<br />

Signalwerte wie 'X' und 'Z' werden erst im Zusammenhang mit bidirektionalen Bussen interessant,<br />

wenn Fälle behandelt werden, in denen z.B. mehrere Treiber (Signalquellen) auf den Signalbus schreibend<br />

<strong>zu</strong>greifen. In solchen Fällen müssen Buskonflikte erkannt und aufgelöst werden. Im Zusammenhang<br />

mit der ALU entstehen solche Schwierigkeiten nicht, aber trotzdem empfiehlt es sich auch beim<br />

Entwurf der ALU das Package std_logic <strong>zu</strong> verwenden, um im gesamten Prozessorentwurf einen<br />

durchgehend direkt kompatiblen Signaltyp <strong>zu</strong> haben und auf Konvertierungsfunktionen verzichten <strong>zu</strong><br />

können.<br />

3.2 Schnittstelle und Verhalten der ALU<br />

Die ALU eines Prozessors stellt die Recheneinheit<br />

für arithmetische und logische Operationen dar. Sie<br />

erzeugt aus den beiden gegebenen Operanden A<br />

und B durch rein kombinatorische Logik das<br />

Operationsergebnis E (siehe Abb. 5). Über die<br />

Steuerleitungen S werden die einzelnen Funktionen<br />

der ALU ausgewählt. Außer dem Ergebnis E liefert<br />

die ALU sog. Statussignale (Flags), die einige<br />

Eigenschaften des Operationsergebnisses<br />

anzeigen.<br />

Universität Duisburg-Essen; Fakultät 5; Abt. IIMT; Inst. Informationstechnik (IT), Verteilte Systeme (VS) Seite 7<br />

S<br />

A B<br />

ALU<br />

E<br />

Abb. 5<br />

Statussignale


Praktikum <strong>zu</strong> RgS 2 <strong>Versuch</strong> 3: ADDITIONSSCHALTUNGEN UND ALU<br />

Folgende Rahmendaten seien nun <strong>zu</strong>r Realisierung einer einfachen ALU im Hinblick auf die Aufgabenstellung<br />

dieses <strong>Versuch</strong>es gegeben:<br />

Die Breite der Datenbusse (jeweils A, B und E) sei 8 bit.<br />

Die Breite der Steuerbusses (S) sei 3 bit.<br />

Die Anzahl der <strong>zu</strong>r ALU gehörenden Steuerleitungen (hier 3) verrät, wie viele Operationen die ALU maximal<br />

ausführen kann. Folgende acht Operationen (Tabelle 2) seien nun gefordert:<br />

Nr. Operation Mnemonic Codierung Kurzerläuterung Statussignale<br />

(Verwendete Operanden) C Z<br />

0 Reserviert 000<br />

offen lassen für evtl.<br />

spätere Verwendung<br />

0 *<br />

1 Addition ADD 001 A + B → E * *<br />

2 Subtraktion SUB 010 A – B → E * *<br />

3 Bitweise Konjunktion AND 011 A ∧ B → E 0 *<br />

4 Bitweise Disjunktion OR 100 A ∨ B → E 0 *<br />

5 Bitweise Negation NOT 101 ¬A → E 0 *<br />

6 Logisches Links-Schieben SLL 110 A > 1 → E<br />

siehe Erläuterung unten<br />

* *<br />

Tabelle 2: ALU-Operationen<br />

Die in der Spalte „Codierung“ stehenden Werte werden über die Steuerleitungen an die ALU gelegt, um<br />

die entsprechende Operation aus<strong>zu</strong>wählen. Die am weitesten rechts stehende Spalte zeigt, welche Statussignale<br />

bei den jeweiligen Operationen gesetzt werden müssen. Die Zeichen in dieser Spalte haben<br />

folgende Bedeutung:<br />

C : Übertrag (carry), der z.B. bei einer Addition über die höchstwertige Stelle hinaus entstehen<br />

kann<br />

Z : Zero Flag, wird auf ’1’ gesetzt, falls das Ergebnis gleich Null ist<br />

0 : Flag löschen<br />

* : Flag gemäß dem Ergebnis setzen<br />

Die folgenden Abbildungen machen die Arbeitsweise der Schiebe-Operationen deutlich:<br />

SLL : shift left logically: Das Datenwort wird um eine Stelle in Richtung höherer Wertigkeit<br />

verschoben. Danach wird in die niedrigstwertige Stelle (LSB: Least Significant Bit) eine<br />

'0’ geschrieben. Das höchstwertige Bit (MSB: Most Significant Bit) wird als Übertrag (C:<br />

Carry) festgehalten.<br />

C<br />

MSB ... LSB '0’<br />

SRA : shift right arithmetically: Das Datenworte wird um eine Stelle in Richtung niedrigerer<br />

Wertigkeit verschoben. Danach wird die niedrigstwertige Stelle (LSB) als Carry ausgegeben.<br />

Das höchstwertige Bit (MSB) behält seinen Wert, damit das Vorzeichen erhalten<br />

bleibt.<br />

C<br />

MSB ... LSB<br />

Bei den Operationen Addition und Subtraktion soll die ALU Daten in der 8-bit Zweierkomplement-<br />

Darstellung verarbeiten.<br />

Universität Duisburg-Essen; Fakultät 5; Abt. IIMT; Inst. Informationstechnik (IT), Verteilte Systeme (VS) Seite 8


Praktikum <strong>zu</strong> RgS 2 <strong>Versuch</strong> 3: ADDITIONSSCHALTUNGEN UND ALU<br />

3.3 Aufgabe 2<br />

Erstellen Sie einen VHDL-Modellentwurf der ALU, der die oben beschriebenen Spezifikationen erfüllt.<br />

Die Schnittstelle der ALU sei durch die Tabelle 3 festgelegt. Überprüfen Sie anschließend Ihr ALU-<br />

Modell anhand einer Testbench.<br />

Anschluss[Breite] Richtung Typ<br />

s[3] Eingang std_logic_vector<br />

a[8], b[8] Eingang std_logic_vector<br />

e[8] Ausgang std_logic_vector<br />

cflg, zflg Ausgang std_logic<br />

Tabelle 3: Schnittstelle der ALU<br />

Als Hilfestellung <strong>zu</strong>r Verhaltensbeschreibung der ALU seien folgende Empfehlungen gegeben:<br />

Entwurfsempfehlungen<br />

• Zur Verwendung von std_logic bzw. std_logic_vector und <strong>zu</strong>r eventuellen Nut<strong>zu</strong>ng der<br />

arithmetischen Operatoren sind folgende Zeilen vor der betreffenden entity <strong>zu</strong> platzieren:<br />

library ieee;<br />

use ieee.std_logic_1164.all;<br />

use ieee.std_logic_unsigned.all;<br />

• Zeitverzögerungen brauchen nicht modelliert <strong>zu</strong> werden.<br />

• Als Orientierungshilfe <strong>zu</strong>r Erstellung der Architektur sei folgende Vorlage gegeben:<br />

architecture arch of alu is<br />

begin<br />

operate_alu: process(s, a, b) is<br />

subtype vectorType is std_logic_vector(7 downto 0);<br />

variable evar : vectorType; --temporäre Variable<br />

variable carry : std_logic;<br />

procedure add(x,y :in vectorType; sum :out vectorType; c_out :out std_logic) is<br />

variable c : std_logic := '0'; --temporäre Variable,<br />

variable res : vectorType := (others => '0'); --mit Initialisierung<br />

begin<br />

...<br />

sum := res;<br />

c_out := c;<br />

end add;<br />

begin<br />

evar := x"00"; --Initialisierung im Hex-Format, z.B. x"f2" entspricht "11110010"<br />

...<br />

case s is --Verzweigung in die verschiedenen arithm. und log. Operationen<br />

when "001" => --add<br />

add(a,b,evar,carry); --Aufruf der Prozedur mit Parametern<br />

when "010" => --sub<br />

...<br />

when "011" => --and<br />

evar := a and b;<br />

...<br />

when others => null;<br />

end case;<br />

...<br />

e

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!