Prüfung - Institut für Kommunikationsnetze und Rechnersysteme ...
Prüfung - Institut für Kommunikationsnetze und Rechnersysteme ...
Prüfung - Institut für Kommunikationsnetze und Rechnersysteme ...
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