25.01.2014 Aufrufe

Musterlösung - Institut für Kommunikationsnetze und ...

Musterlösung - Institut für Kommunikationsnetze und ...

Musterlösung - Institut für Kommunikationsnetze und ...

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.

Universität Stuttgart<br />

INSTITUT FÜR<br />

KOMMUNIKATIONSNETZE<br />

UND RECHNERSYSTEME<br />

Prof. Dr.-Ing. Andreas Kirstädter<br />

<strong>Musterlösung</strong><br />

Entwurf digitaler Systeme<br />

Termin:<br />

4. März 2010<br />

Aufgabe 1<br />

Verhaltensbeschreibung eines Multiplizierwerks<br />

Frage 1 a) Wie oft wird die im Prozess enthaltene Schleife ausgeführt?<br />

(6 Punkte)<br />

5 Mal<br />

b) Wie viele Elemente weist das Array ac auf?<br />

10 Elemente<br />

c) Welchen Typ haben die Elemente des Arrays ac?<br />

std_logic<br />

Frage 2<br />

(10 Punkte)<br />

Frage 3<br />

(4 Punkte)<br />

Geben Sie den Wert der Variablen ac am Ende jedes Schleifendurchlaufs an.<br />

0000000000<br />

0000010101<br />

0000101010<br />

0001010100<br />

0010111101 (189 = 21 * 9)<br />

Wie viele Delta-Zyklen nach den Events auf den Eingangsports a <strong>und</strong> b nimmt<br />

der Ausgangsport p den Wert des Produktes an?<br />

einen Delta-Zyklus später<br />

Frage 4<br />

(8 Punkte)<br />

Welchen Wert nähme der Ausgangsport p im vorliegenden Beispiel an, wenn<br />

man ac in Form eines Signals anstelle einer Variablen modellieren würde?<br />

ac nimmt zum Simulationsstart den Wert UUUUUUUUUU an<br />

Signalzuweisungen (einschließlich der Initialisierung) wirken sich erst aus,<br />

wenn der Prozess suspendiert wird (d.h. hier am Ende des Prozesses). Deshalb<br />

wird als Wert <strong>für</strong> ac im Prozess UUUUUUUUUU gelesen.<br />

Die einzige Ergebnis-Stelle, die unabhängig vom Initialwert von ac ist, ist die<br />

Stelle ac(0). Sie muss wegen ac := ac(ac’LEFT - 1 DOWNTO 0) & ’0’;<br />

auf jeden Fall Null sein.<br />

Deshalb nähme p in diesem Fall den Wert UUUUUUUUU0 an.


Frage 5 a) Wird ein Synthesewerkzeug den Prozess in der Architecture behav als<br />

(23 Punkte) kombinatorisches oder als sequenzielles Netzwerk realisieren? Begründen<br />

Sie Ihre Antwort!<br />

Als kombinatorisches Netzwerk. Die Schleife kann einfach abgerollt werden,<br />

wodurch eine Struktur mit 4 Addieren entsteht.<br />

b) Skizzieren Sie ganz grob die Schaltung auf RT-Ebene, die ein Synthesewerkzeug<br />

aus der Beschreibung erzeugen wird. Gehen Sie dabei davon aus, dass<br />

die Zieltechnologie (z.B. FPGAs) über ausreichend breite Addierer verfügt,<br />

nicht aber über Multiplizierer.<br />

a<br />

5<br />

&&&&&<br />

a<br />

5 5<br />

&&&&&<br />

6 5<br />

b(4)<br />

b(3)<br />

+<br />

7<br />

8<br />

a<br />

5<br />

&&&&&<br />

5<br />

b(2)<br />

+<br />

8<br />

9<br />

a<br />

&&&&&<br />

+ a<br />

9<br />

10<br />

+<br />

5<br />

5<br />

5<br />

&&&&&<br />

5<br />

b(1)<br />

b(0)<br />

p<br />

10<br />

Aufgabe 1 Seite 2


Aufgabe 2<br />

Strukturbeschreibung eines Dividierwerks<br />

Teil 1<br />

Komponenten des Dividierwerks<br />

Frage 1<br />

(18 Punkte)<br />

a) Geben Sie die VHDL-Entity mux2 <strong>für</strong> den in Bild 1 verwendeten Multiplexer<br />

an. Die Wortbreite der beiden Eingangsoperanden <strong>und</strong> des Ausgangsoperanden<br />

soll über einen generischen Parameter N festgelegt werden. Nennen<br />

Sie die Eingangsports x0 <strong>und</strong> x1, den Auswahleingang s <strong>und</strong> den Ausgangsport<br />

z.<br />

LIBRARY ieee; USE ieee.std_logic_1164.ALL;<br />

ENTITY mux2 IS<br />

GENERIC(N: positive);<br />

PORT(<br />

s: IN std_logic;<br />

x0, x1: IN std_logic_vector(N-1 DOWNTO 0);<br />

z: OUT std_logic_vector(N-1 DOWNTO 0));<br />

END ENTITY mux2;<br />

b) Welchen Typ verwenden Sie <strong>für</strong> den generischen Parameter N sinnvollerweise?<br />

Begründen Sie Ihre Antwort!<br />

Den Typ "positive", weil N ganzzahlig <strong>und</strong> mindestens 1 sein muss.<br />

c) Geben Sie eine vollständige VHDL-Architecture behav <strong>für</strong> die Entity mux2<br />

an, die das Verhalten des Multiplexers beschreibt.<br />

ARCHITECTURE behav OF mux2 IS<br />

BEGIN<br />

z


Frage 2<br />

(10 Punkte)<br />

Geben Sie eine vollständige Architecture behav zur Entity au in Form einer<br />

Verhaltensbeschreibung an. Verwenden Sie dazu das Package ieee.numeric_std.<br />

ARCHITECTURE behav OF au IS<br />

BEGIN<br />

process(mode, x, y) is<br />

variable xv, yv: unsigned(N downto 0);<br />

variable zv: unsigned(N downto 0);<br />

begin<br />

xv := unsigned(’0’ & x);<br />

yv := unsigned(’0’ & y);<br />

if mode = ’1’ then<br />

zv := xv - yv;<br />

else<br />

zv := xv + yv;<br />

end if;<br />

z


Frage 4<br />

(10 Punkte)<br />

Vervollständigen Sie die nachfolgende Tabelle:<br />

mode AC MQ<br />

Initialzustand 1 0000 1110<br />

nach 1. Taktflanke 0 1110 1100<br />

nach 2. Taktflanke 1 0001 1100<br />

nach 3. Taktflanke 1 0000 1001<br />

nach 4. Taktflanke 0 1110 0010<br />

nach 5. Taktflanke 1 0001 0010<br />

nach 6. Taktflanke 0 1111 0100<br />

nach 7. Taktflanke 0 0010 0100<br />

Frage 5 a) In welchem Register steht nach erfolgter Division der Quotient?<br />

(6 Punkte)<br />

Im Register MQ.<br />

b) In welchem Register steht nach erfolgter Division der Rest?<br />

Im Register AC.<br />

c) Beschreiben Sie den verwendeten Divisionsalgorithmus in eigenen Worten.<br />

Akkumulator <strong>und</strong> MQ werden nach links geschoben, dann von der oberen Hälfte<br />

des geschobenen Doppelwortes MD subtrahiert. Ist das Ergebnis positiv<br />

(c = ’0’), so wird als Quotientenstelle ’1’ in MQ eingeschoben. Ist das Ergebnis<br />

negativ (c = ’1’), so wird als Quotientenstelle ’0’ in MQ eingeschoben, <strong>und</strong> in<br />

einem darauffolgenden Korrekturschritt wird MD wieder zu AC addiert.<br />

Aufgabe 2 Seite 5


Frage 6<br />

(9 Punkte)<br />

Zeichnen Sie ein geeignetes Zustands-Übergangsdiagramm, das das Verhalten<br />

des Automaten vollständig (einschließlich Ein- <strong>und</strong> Ausgangssignale)<br />

beschreibt.<br />

s0<br />

1<br />

1<br />

k0<br />

0<br />

0<br />

s1<br />

1<br />

1<br />

k1<br />

0<br />

0<br />

s2<br />

1<br />

1<br />

k2<br />

0<br />

0<br />

s3<br />

1<br />

1<br />

k3<br />

0<br />

0<br />

dead<br />

0<br />

Aufgabe 2 Seite 6


Frage 7 a) Geben Sie die Deklaration eines Typs zur Beschreibung des Zustands des<br />

Automaten an.<br />

(20 Punkte)<br />

type state_type is (s0, s1, s2, s3, k0, k1, k2, k3, dead);<br />

b) Geben Sie die Deklaration je eines Signals <strong>für</strong> den Istzustand<br />

current_state <strong>und</strong> den Folgezustand next_state an.<br />

signal current_state, next_state: state_type;<br />

c) Geben Sie einen Prozess zur Ermittlung des Folgezustandes an.<br />

process(current_state, c) is<br />

begin<br />

case current_state is<br />

when s0 =><br />

if c = ’1’ then next_state


Teil 3<br />

Frage 8<br />

(16 Punkte)<br />

Verhaltensbeschreibung <strong>für</strong> das Dividierwerk<br />

Beschreiben Sie das Verhalten des Dividierwerks gemäß Bild 1 (d.h. ohne<br />

Steuerung) in Form einer reinen Verhaltensbeschreibung (Architecture behav),<br />

die neben Signaldeklarationen nur zwei Prozesse <strong>und</strong> eine nebenläufige<br />

Signalzuweisung enthält.<br />

library ieee; use ieee.numeric_std.all;<br />

architecture behav of mult is<br />

signal md, mq, ac: std_logic_vector(N-1 downto 0);<br />

signal aux: unsigned(N downto 0);<br />

begin<br />

process(mode, ac, mq, md) is<br />

begin<br />

if mode = ’1’ then<br />

aux

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!