Forum: FPGA, VHDL & Co. MIPS Datenpfad: Wieso werden die Steuersignale nicht verarbeitet?


von Dominik B. (johnston)


Angehängte Dateien:

Lesenswert?

Hey!

Ich muss für eine Übung die Testbench für den Datenpfad eines MIPS 
Prozessors schreiben.

Die VHDL Datei ist vorgegeben, es muss also nur noch die Testbench 
geschrieben werden.

Ich habe zuerst versucht über die Steuersignale die dezimal Zahl 7 
abzuspeichern. Die Inputs werden auch laut GTKWave übernommen, aber 
nicht weiterverarbeitet. In der Wave sind die In-/Outputs mit uuuuuuu 
dargestellt.

Mein Clock Zyklus läuft eigentlich, so dass die Bausteine bei 
aufsteigenden Flanken reagieren müssten, das tun sie aber nicht. Kann 
mich jemand in die richtige Richtung leiten, wo mein Fehler ist?

Der Code ist als ZIP angehangen. Dort ist auch ein Screenshot der Wave 
zu finden.

(Ich habe erst im Rahmen der Übung VHDL gelernt und bin daher ein 
blutiger Anfänger)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dominik B. schrieb:
> Der Code ist als ZIP angehangen.
Die VHDL-Dateien hättest du einfacher mal als *.vhdl Dateien angehängt, 
dann müsste man nicht den Umweg über einen Entpacker machen.

> In der Wave sind die In-/Outputs mit uuuuuuu dargestellt.
U bedeutet "uninitialized" (nicht wie gern angenommen "undefined"), also 
dass seit Start der Simulation noch keiner einen anderen Wert auf das 
Signal getrieben hat.

> Kann mich jemand in die richtige Richtung leiten, wo mein Fehler ist?
Auf jeden Fall würde ich dafür sorgen, dass vor dem Wegnehmen des 
Resets alle Eingangssignale auf einem gültigen Pegel sitzen!
Bei dir passiert das erst einen Takt später...

Und dann würde ich noch klären, ob der Reset tatsächlich high-aktiv ist.


BTW: ich würde das hier
1
    PROCESS BEGIN
2
        for i in 0 to 60 loop
3
        clk <= not clk after ClockPeriod / 2; --- das hier sieht übrigens
4
        wait for 10 ns;                       --- überaus eigenartig aus...
5
        end loop;
6
        
7
        wait;
8
    END PROCESS;
so abkürzen:
1
        clk <= not clk after ClockPeriod/2;


Und auch die Definition der ClockPeriod sieht arg holprig aus:
1
        constant ClockFrequency : integer := 100e6; -- 100 MHz
2
        constant ClockPeriod    : time    := 2000 ms / ClockFrequency;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.