Forum: FPGA, VHDL & Co. Testbenchsignale undefiniert


von Tobias L. (Firma: keine) (blacksheep888)


Angehängte Dateien:

Lesenswert?

Hi bin noch recht neu im Bereich VHDL unterwegs. Nach stundenlanger 
Fehlersuche versuche ich es jetzt hier. Ich hoffe ihr könnt mir helfen. 
Die Aufgabe habe ich angehängt. Mein Projekt ebenfalls. Die einzelnen 
Blöcke funktionieren soweit. Habe extra eine Testbench nur für den 
Register und nur für den Multiplexer geschrieben. Diese funktionieren 
soweit auch so wie sie sollen. Will ich jetzt aber den kompletten 
Automaten testen und 2 Raminhalte vertauschen bekomme ich überall 
undefinierte Zustände. Meine Zwischensignaleinteilung habe ich in der 
Aufgabe hinzugefügt. Schonmal vielen Dank für Hilfe oder hilfreiche 
Tipps

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


Lesenswert?

Tobias L. schrieb:
> hilfreiche Tipps
Würde ich eher geben, wenn du einfach nur deine VHDL-Files (mit 
Dateiendung *.vhd) hier einfach anhängen würdest. Da muss nicht gleich 
das ganze ISE-Projekt her...

Aber schon das sieht vielversprechend aus:
1
process (din,clk,we)
2
begin
3
 IF ((clk'event AND clk='1') and we='1') THEN
4
    dout <= din;
5
 END IF;
6
end process p1;
Das ist eine eher aussergewöhnliche Clock-Enable Beschreibung und din 
ist in der Sensitivliste unnötig. Ich würde das ohne jede 
Funktionseinschränkung mit korrekter Sensitivliste so schreiben:
1
process (clk)
2
begin
3
  IF clk'event AND clk='1' THEN
4
    if we='1' THEN
5
      dout <= din;
6
    END IF;
7
  end if;
8
end process p1;

von Tobias L. (Firma: keine) (blacksheep888)


Lesenswert?

Sorry dachte das geht auch so. Daran liegt es aber nicht. Werde die VHDL 
Files gleich mal hochladen

von Tobias L. (Firma: keine) (blacksheep888)


Angehängte Dateien:

Lesenswert?

So hier nochmal die vhd files einzeln

von Philip (Gast)


Lesenswert?

In main.vhd ist z.B. das Signal ma1 mit zwei Ausgängen verbunden.

von Tobias L. (Firma: keine) (blacksheep888)


Lesenswert?

Danke schonmal für die Hilfe. Habe ich schonmal verbessert. So ganz 
klappt es aber noch nicht. Nur der Inhalt der 2. Adresse wird durch den 
Inhalt der 1. Adresse getauscht. Inhalt der 1. Adresse bleibt dauerhaft 
gleich. Es wird auch nur der Inhalt der 1. Adresse in beiden Registern 
dauerhaft gespeichert

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


Lesenswert?

Kann man da evtl. mal eine Waveform davon sehen?

von Eike Renners (Gast)


Angehängte Dateien:

Lesenswert?

Guten Morgen,
hat mich ne Weile gekostet bis ich den Problemen auf die Schliche 
gekommen bin. Ich fange einfach mal an, wo ich etwas geändert habe:

In der auto.vhd:
Der wohl wichtigste Fehler. In Zeile 45+ beschreibst du die Portmap der 
main-component. Dort hast du nen Dreher in den write-enables!! Daher das 
irrationale Verhalten, wann welches Register / das RAM beschrieben 
wurde.
Ansonsten habe ich die IF-Anweisung durch eine CASE ersetzt (hab's im 
Prinzip Stück für Stück neu geschrieben). Sollte aber von der Funktion 
keine Unterschiede machen ob du nun IF oder CASE verwendest...
1
component main port( 
2
    clk,we0,we1,we2,sw0,sw1,sw2 : in STD_LOGIC;
3
    adr : in std_logic_vector(3 downto 0));
4
end component;
5
.
6
.
7
.
8
K1 : main port map (clk,we0,we1,we2,sw0,sw1,sw2,ad);

In der main.vhd:
Da ich das ganze Projekt geladen habe, hier logischerweise das mit dem 
ma1, ansonsten glaube ich war alles soweit in Ordnung.

In der mux.vhd:
Auch nur ne kleine Änderung für mich für die Lesbarkeit, sollte in der 
Funktion eigentlich keine Unterschiede machen, soweit ich das beurteilen 
kann.

reg.vhd:
Hier wurde der Process und die Sensitivity-List auch bereits 
angesprochen - Habe dort auch nur die bereits erwähnten Änderungen 
vorgenommen.

Der Rest (RAM, TB) ist soweit unverändert geblieben. Ich habe auch mal 
ein Bild meiner Simulation angehängt.

Ich hoffe ich konnte dir damit weiterhelfen und wünsche dir weiter viel 
Spaß mit VHDL (ich lerne es derzeit selber...)

Besten Gruß,
Eike

von Tobias L. (Firma: keine) (blacksheep888)


Lesenswert?

Vielen Dank für die Hilfe. Hat mich mittlerweile echt zum verzweifeln 
gebracht. Funktioniert jetzt alles so wie es sollte. Nochmals Danke für 
die Hilfe

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.