| Patrick- Roeder.de |
|
||||||||||
| Projekte > 16-Bit-RISC-CPU > | |||||||||||
|
16-Bit-RISC-Prozessor in Verilog
Einleitung:Dieses Projekt entstand im Rahmen des Prozessor-Entwurfs-Praktikums an der TU-Darmstadt unter der Leitung von Professor Rolf Hoffmann. Ziel des Projektes war es einen eigenen 16-Bit-Risc-Prozessor in Verilog zu entwerfen und seine Funktionen durch selbstgeschriebene Programme in der selbst erdachten Maschinensprache des Prozessors nachzuweisen. Verilog ist wie VHDL eine Sprache in der man Hardware beschreiben kann. Man programmiert nicht direkt etwas, sondern beschreibt vielmehr die Hardware, die dann eine bestimmte Funktion ausführt. Auf diese Weise kann man verschiedene Bauteile definieren, diese über Kabel verbinden und so größere Funtkionseinheiten bauen. So sieht zum Beispiel ein Stück Verilog aus:
wire [2:0] w_sel_a;
mux_3bit_2to1 mux_sel_a(
.sel(set_sel_a),
.out(w_sel_a),
.in0(w_ir_out[5:3]),
.in1(new_sel_a)
);
always @(w_ir_out)
begin
opc = w_ir_out[15:10];
mode = w_ir_out[9:6];
$display("%t %m OPC: %h, w_ir_out: %h, mode: %d", $time, opc, w_ir_out[15:10], mode);
end
Ganz oben wird ein drei Bit breites Kabel definiert, das zunächst mit noch nichts verbunden ist. Darunter wird ein Multiplexer an verschiedene Leitungen und Register angeschlossen. Im untersten Abschnitt mit "always @(w_ir_out)" passiert wirklich mal etwas. Jedesmal wenn das Kabel w_ir_out eine Eins liefert, werden die Werte von verschiedenen Kabeln an bestimmte interne Register zugewiesen. Die display-Anweisung hat nicht mit der Funktion der CPU zu tun und ist fürs Debugging nützlich. Dokumentation des Prozessors:Die Dokumenation des Prozessors kann man sich hier ansehen. Alle Dateien, die nötig sind, um den Prozessor laufen zu lassen sind komplett in der Doku enthalten. Das Einzige was man noch benötigt ist ein Verilog-Simulator. Hier bekommt man einen kostenlosen und guten Verilog-Simulator. |