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
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; |
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.