25.01.2014 Aufrufe

Prüfung - Institut für Kommunikationsnetze und Rechnersysteme ...

Prüfung - Institut für Kommunikationsnetze und Rechnersysteme ...

Prüfung - Institut für Kommunikationsnetze und Rechnersysteme ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Im Folgenden sollen Teile einer Architecture zur Modellierung des Write Buffers in VHDL entwickelt<br />

werden. Bild 4 zeigt die Struktur des Write Buffers in Form zweier miteinander kommunizierender<br />

Prozesse Process S <strong>und</strong> Process B.<br />

clk<br />

res_n<br />

p_wreq<br />

p_wa<br />

p_wd<br />

16<br />

8<br />

Process B<br />

buffer_mem<br />

Process S<br />

hit<br />

hit_index<br />

remove<br />

Bild 4<br />

Interne Struktur eines Teils des Write Buffers<br />

Die Entity des Write Buffers mit den in Bild 1 dargestellten Ports sei gegeben. Gehen Sie davon<br />

aus, dass die Deklarationen aus Frage 1 <strong>und</strong> Frage 2 sowie die Deklarationen aller in Bild 4 dargestellten<br />

Signale im Deklarationsteil der Architecture bereits enthalten sind. Gehen Sie weiter<br />

davon aus, dass die in Bild 4 dargestellten Ports vom Typ std_logic bzw. vom Typ<br />

std_logic_vector sind.<br />

Frage 4 a) Implementieren Sie eine Funktion is_valid, die <strong>für</strong> eine als Parameter übergebene<br />

Zeile vom Typ line_type nur dann TRUE zurückgibt, wenn mindestens<br />

ein Byte gültig ist.<br />

b) Kann die Funktion is_valid als pure function deklariert werden? Begründen<br />

Sie Ihre Antwort.<br />

c) Eine Prozedur invalidate soll alle Valid-Bits einer Zeile auf FALSE setzen.<br />

Der Index der Zeile innerhalb des Write Buffers werde der Prozedur als<br />

Parameter übergeben. Wo muss diese Prozedur deklariert werden, damit das<br />

Signal buffer_mem nicht als Parameter übergeben werden muss?<br />

d) Implementieren Sie die Prozedur invalidate.<br />

Der Pufferspeicher wird in Form eines Ringpuffers verwaltet. Eine Variable rindex verweise<br />

auf die älteste Zeile, die Variable windex auf die der jüngsten Zeile folgende Zeile, d.h. auf die<br />

erste freie Zeile. Beim Entfernen einer Zeile muss demzufolge rindex erhöht werden, beim Hinzufügen<br />

einer Zeile entsprechend windex. Beachten Sie, dass die Operationen auf windex <strong>und</strong><br />

rindex "modulo CAPACITY" erfolgen müssen. Eine boolesche Variable empty zeige an, ob der<br />

Write Buffer leer ist. Der Einfachheit halber sollen Schreibversuche bei vollem Write Buffer<br />

keine Auswirkung auf seinen Inhalt haben.<br />

Aufgabe 2 Seite 8

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!