HWP2 - Aufgabe 4.3 (CPU testen)
Moderator: (M) Mod.-Team Allgemein
HWP2 - Aufgabe 4.3 (CPU testen)
Hallo,
Sitze gerade an der Aufgabe 4.3 (Hardwarepraktikum 2), wo wir den zusammengesetzten CPU testen sollen...
[http://www.tu-harburg.de/ti6/lehre/HWPr ... /afg4.html]
0. Darf ich annehmen, dass der Clock-Eingang des C-FlipFlops nicht ckc wie auf dem Bild, sondern ebenfalls ckl heißen soll, sprich es ein Tippfehler ist?
1. was ist mit dem RW-Ausgangssignal des Prozessors? Soll er auf invertierten CKL geschaltet werden?
2. Wie kann ich dem Prozessor einen RAM mit einem einfachen Programm "vortäuschen"?
Mein Ansatz:
PROCESS(ADR)
BEGIN
case ADR is
when "..." => D_READ <= "...";
when "..." => D_READ <= "...";
when "..." => D_READ <= "...";
end case;
END PROCESS;
Geht das?
3. In Aufgabe 4.4 sollen wir den RAM mit [http://www.tu-harburg.de/ti6/lehre/HWPr ... erung.html] initialisieren. Wie sollen wir das genau machen, wie sollen diese Daten in das Projekt eingebunden werden?
Otto
Sitze gerade an der Aufgabe 4.3 (Hardwarepraktikum 2), wo wir den zusammengesetzten CPU testen sollen...
[http://www.tu-harburg.de/ti6/lehre/HWPr ... /afg4.html]
0. Darf ich annehmen, dass der Clock-Eingang des C-FlipFlops nicht ckc wie auf dem Bild, sondern ebenfalls ckl heißen soll, sprich es ein Tippfehler ist?
1. was ist mit dem RW-Ausgangssignal des Prozessors? Soll er auf invertierten CKL geschaltet werden?
2. Wie kann ich dem Prozessor einen RAM mit einem einfachen Programm "vortäuschen"?
Mein Ansatz:
PROCESS(ADR)
BEGIN
case ADR is
when "..." => D_READ <= "...";
when "..." => D_READ <= "...";
when "..." => D_READ <= "...";
end case;
END PROCESS;
Geht das?
3. In Aufgabe 4.4 sollen wir den RAM mit [http://www.tu-harburg.de/ti6/lehre/HWPr ... erung.html] initialisieren. Wie sollen wir das genau machen, wie sollen diese Daten in das Projekt eingebunden werden?
Otto
- NightStalker
- TalkING. Champion
- Beiträge: 891
- Registriert: Mo, 21. Okt. 02, 20:40
- Wohnort: Downloadbereich
Hingekommen ja, aber der Prozessor prozesst noch nicht so ganz...
@Otto: Du hast da zu viel nicht verstanden, um as jetzt schnell zu erklären.
z.B. wird das (Test-)Programm per String-Initialisierung direkt ins RAM geschrieben, case ... when ist da völlig überflüssig.
RW ist das Schreib-/Lesesignal für das RAM und wird in Abhängigkeit vom anliegenden Befehl erzeugt.
@Otto: Du hast da zu viel nicht verstanden, um as jetzt schnell zu erklären.
z.B. wird das (Test-)Programm per String-Initialisierung direkt ins RAM geschrieben, case ... when ist da völlig überflüssig.
RW ist das Schreib-/Lesesignal für das RAM und wird in Abhängigkeit vom anliegenden Befehl erzeugt.
Hallo Room101,
>> Du hast da zu viel nicht verstanden, um as jetzt schnell zu erklären.
Da muss ich Dir Recht geben , aber inzwischen bin ich sehr viel weitergekommen. Mein Prozessor scheint jetzt in der Simulation zu funktionieren: er führt sämtliche Befehle aus, und kommt am Ende in eine Endlosschleife...
Was ich aber entdecke, ist dass der zweite Operand in Hex:0022 bereits beim Anfang nicht wie im offiziellen Quellcode 32 ist, sondern 2048 (Hex:0800). Der zweite Operand stimmt überein und ist eine 8.
Auch das Ergebnis in Hex:0023 und Hex:0024 ist nicht der richtige! Wo liegt der Fehler? Könnte es sein, dass die RAM-Initialisierung unter http://www.tu-harburg.de/ti6/lehre/HWPr ... erung.html fehlerhaft ist?!
Otto
>> Du hast da zu viel nicht verstanden, um as jetzt schnell zu erklären.
Da muss ich Dir Recht geben , aber inzwischen bin ich sehr viel weitergekommen. Mein Prozessor scheint jetzt in der Simulation zu funktionieren: er führt sämtliche Befehle aus, und kommt am Ende in eine Endlosschleife...
Was ich aber entdecke, ist dass der zweite Operand in Hex:0022 bereits beim Anfang nicht wie im offiziellen Quellcode 32 ist, sondern 2048 (Hex:0800). Der zweite Operand stimmt überein und ist eine 8.
Auch das Ergebnis in Hex:0023 und Hex:0024 ist nicht der richtige! Wo liegt der Fehler? Könnte es sein, dass die RAM-Initialisierung unter http://www.tu-harburg.de/ti6/lehre/HWPr ... erung.html fehlerhaft ist?!
Otto
In der Aufgabenstellung steht unter Punkt 4:
Ansonsten sieht die RAM-Initialisierung richtig aus. Und ob du nun 16 * 16 oder 16 * 32 rechnest ist doch eigentlich egal.
Somit erklährt sich warum b nicht 2048 ist. Aber 32 ist es dann, so wie ich das sehen, immer noch nicht, sondern 16.Dies ist der Programmcode eines 16 Bit Multiplizierers. Die beiden Operanden a, b liegen auf den Adressen $0200 und $0202, wobei die Bits von b gespiegelt abgelegt sind.[...]
Hinweis: Der Faktor b muss bitvertauscht sein.
Ansonsten sieht die RAM-Initialisierung richtig aus. Und ob du nun 16 * 16 oder 16 * 32 rechnest ist doch eigentlich egal.
Die do-Files sind schon eine coole sache. Schade nur, dass man für das gesamte Xilinx-Projekt die gleiche Simulationseinstellungen verwenden muss...
Jedenfalls läuft mein Prozessor endlich
Das Ende des Assemblerprogramms soll allerdings noch korrigiert werden.
Habe noch versucht, größere Zahlen zu multiplizieren, sodass auch c_high einen Wert > 0 bekommt, aber da funktioniert das ganze nicht mehr. Ist da noch ein Fehler drin?!
Otto
Jedenfalls läuft mein Prozessor endlich
Das Ende des Assemblerprogramms soll allerdings noch korrigiert werden.
Habe noch versucht, größere Zahlen zu multiplizieren, sodass auch c_high einen Wert > 0 bekommt, aber da funktioniert das ganze nicht mehr. Ist da noch ein Fehler drin?!
Otto