Testbenchsignale undefiniert

OP (Firma: keine) #2896339
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
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #2896414
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;
OP (Firma: keine) #2897353
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
Gast #2898430
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren