Stimmt! Das ist irgendwie cool, wenn man eine Bluespec Fehlermeldung bei google eingibt und dann als ersten Treffer das d120 Forum Archiv findet!

Hat also auch Vorteile.
Aber mit Moodle würde man vllt die beiden "nächste Vorlesung verschoben / fällt aus" Ankündigen per Mail zugeschickt bekommen und somit nicht verpassen, dass so was im Forum stehen könnte
Ich fand es auch unangenehm, dass es eigentlich nur Bluespec Übungen gab, die nur ungefähr 50% der Klausur darstellen und man für den Rest dann einfach nur lernen muss, ohne eine Idee zu haben was eigentlich interessant oder wichtig ist.
Und ich hätte noch einen konkreten Kommentar bezüglich der Bluespec-Übungen:
+ Jede Aufgabe sollte erwähnen welche Module man importieren muss. Server, FIFO, Vektor, PutGet, StmtFSM, etc. . So würde man erfahren wie der import heißt, so dass man besser das Packet suchen und nachschlagen kann. Außerdem muss man auch wissen, dass man sie überhaupt importieren muss, denn es gibt ja auch Sachen im Preludium, die man nicht importieren muss.
+ Es sollte deutlicher unterschieden werden:
1. wenn ein Interface aus der Standardbibliothek ist und bereits einen Implementierung hat, die man nutzen soll, (RWire, CReg)
2. wenn ein Interface aus der Standarbibliothek ist und man diese ignorieren soll und eine eigene schreiben soll (FIFO)
3. wenn ein Interface nur in der Aufgabenstellung angegeben wurde, und man es selbst implementieren soll. (CalcUnit)
Das war jedesmal merkwürdig, weil es eigentlich immer gleich klang:
"Verwenden Sie dafür einen Zähler und ein PulseWire mit folgender Definition. interface PulseWire; ..." (benutzen)
"Nutzen Sie dafür zwei RWire, die in einer gemeinsamen Rule abgefragt und in den entsprechenden Methoden gesetzt werden: interface RWire; ..." (benutzen)
"Nutzen Sie das folgende Interface: interface CalcUnit; ..." (selbst implementieren)
"Verwenden Sie folgendes Interface, denken Sie an passende Guards um das Überschreiben von Werten zu verhindern. interface FIFO; ..." (Standard ignorieren und selbst implementieren...)
Das sollte einfach umsetzen sein. Phrasen wie "nutzen sie dafür [das Modul aus der Standardbibliothek] FIFO [im Package FIFO :: *]" oder "Nutzen[Implementieren] Sie für diese Aufgabe selbst folgendes Interface" sollte reichen.
+ In der Lösung von Aufgabe 4.2 gab es ein paar Beispiel-Eingaben und Ausgaben. Es wäre schon wenn in den Aufgaben bei denen man Testen soll, mindestens eine davon in der Aufgabenstellung erwähnt wird, oder bei den Aufgabenstellung 5,6,7 wo man mit Bluecheck etwas testen soll, es einen zusätzlich Tipp gibt, mit was man den Code vergleichen könnte.
+ Ich fande die Aufgaben 5,6,7 waren irgendwie anders als die anderen.
Die Aufgabe 1 hatte das Ziel einem einfachen Bluespec Code schreiben zu lassen.
In der Aufgabe 2 konnte man dann FSMs, FIFOs, Vectoren, RWires/CRegs, Maybe benutzen.
In Aufgabe 3 hat man BlueCheck kennen gelernt.
In Aufgabe 4 konnte man dann Server und extend/pack/unpack ausprobieren.
In Aufgabe 5 habe ich dann die meisten Zeit über den Sortieralgorithmus nachgedacht und dann aufgegeben (eigentlich kein Thema von AER oder?).
In Aufgabe 6 ging es dann um MMIO.
In Aufgabe 7 ging es dann um Streams.
Hier erkennt man, dass in 5,6,7 nichts bluespec-mäßig-neues mehr als Hauptthema behandelt wurde! Wenn ich mir herausnehmen dürfte, dann würde ich behaupt das bezüglich Bluespec es hätte interessant sein könnte, in der Übung 5 mehrere Instanzen von Typklasse anzulegen, und in der Übung 6 mehrere Provisos zu schreiben. Immerhin wurden diese ja dann auch abgefragt, obwohl sie nur nebenbei benutzt wurden.
+ Bezüglich der Sortier/Median Aufgabe: Wie man mit 3Sortieren das größte und das kleinste Element von 9 Elementen findet, konnte ich mir denken. Aber ich habe es nicht geschafft, den Median zu finden. Auch als ich dann die Lösung gelesen hatte, ist mir noch ein bisschen schleierhaft, wie ich beweisen könnte, dass jetzt wirklich der Median von allen 9 gleich dem Median von (das größte Elemten von den linken 3, das Mittlere der mittleren 3, und das Kleinste der rechten 3) sein soll.
Vllt hätte man hier den Schwerpunkt der Aufgabe auf Bluespec legen können und den Algorithmus einfach vollständig vorgeben können, oder vllt einen ganz anderen einfacheren Algorithmus vorstellen können? Zum Beispiel mit 2-Eingang-Sortieren statt 3-Eingang-Sortieren kann man einfach abwechselnd bei 0 beginnend und bei 1 beginnend alle nebeneinanderliegenden Werte sortieren, bis man so oft gewechselt hat, dass das linkste Element bis ganz nach rechts hätte wandern können.
+ Bei Übung 6 werden erst lauter Signale in einer Tabelle erwähnt, und dann steht als nächstes da, dass man die Hälfte davon eh wieder vergessen darf, weil Bluespec die Valid-, Ready-Signale selbst generiert. Überhaupt verstehe ich auch nicht, warum die ersten 150 Zeilen des Lösungscode so kompliziert aussehen. Senden und Empfangen klingt doch eindeutig nach Server/Client Interface. Schließlich macht der Code da gar nichts, sondern tut irgendwie nur Daten von hier nach da weiterleiten. Sollte das nicht schon die toPut und toGet Methoden auch ohne diese Module schaffen? -- Es sieht sowieso so aus, als könnte man das ganze einfacher mit dem bereits bekannten Funktionen von Server, Client, PutGet, und mkConnection schreiben. Mein Versuche sah so aus:
Code: Alles auswählen
typedef 8 AddrSize;
typedef Bit#(AddrSize) Addr;
typedef Bit#(16) Data;
// Rq request; Rp response
typedef struct { Addr addr; Data data; } WriteRq deriving (Eq, Bits, FShow);
typedef Bool WriteRp;
typedef Addr ReadRq;
typedef Data ReadRp;
interface Slave; // Slave bekommt RQs und sendet RPs
interface Server#(WriteRq, WriteRp) write;
interface Server#(ReadRq, ReadRp) read;
endinterface
interface Master; // Master sendet RQs und bekommt RPs
interface Client#(WriteRq, WriteRp) write;
interface Client#(ReadRq, ReadRp) read;
endinterface
instance Connectable#(Master, Slave);
module mkConnection#(Master m, Slave s)();
mkConnection(m.write, s.write);
mkConnection(m.read, s.read);
endmodule
endinstance
Hm... Ich schick das mal ab, vllt fällt mir später noch was zur Klausur ein ein.
