Betreff: Fehler bei meiner Erklärung


Antwort(en)   Eine Antwort erstellen   Diskussionsforum


Gesendet von Tobias Schubert am 24. Juni 2003 um 10:14 Uhr.
Als Antwort auf Re: Probleme mit VHDL gesendet von Tobias Schubert am 24. Juni 2003 um 10:10 Uhr.
 
: : Also ich bin so langsam etwas am verzweifeln, was den Speicherkern zu dem SRAM in VHDL angeht.

: : Zuvor erstmal: Wir hatten den SRAM zuerst rein als gdf konstruiert. Und erst später gesehen, dass der SPeicherkern VHDL sein soll. Müssen wir das unbedingt ändern?

: : Naja, jedenfalls: Eigentlich sollte das in VHDL ja ganz simpel sein, aber es ergibt sich folgendes Problem:

: : Wir haben als Eingang Ein Bit für das schreiben, einen BIT_Vector (7 downto 0) für die Adresswahl und ein INTEGER RANGE 0 TO 3 als Eingangswert. Für den Ausgang 8 mal INTEGER RANGE 0 TO 3.

: : Ausserdem noch 8 INTEGER Variablen, die den eigentlichen Speicher darstellen sollen.

: : Innerhalb des Programms werden nun die Variablen abhängig von den Eingangssignalen geändert und entprechend auf die Ausgänge gelegt.

: : Nun das Problem. Nachdem in der Simulation ständig falsche Werte rauskamen habe ich mal 8 zusätzliche Ausgänge eingefügt, um mir die Werte in den Variablen ansehen zu können. Und da stellte sich raus, dass die in die Variablen geschriebenen Werte einfach nicht dauerhaft gespeichert werden. Während des Schreibsignales stimmen die Werte, danach ändern sie sich jedoch (ohne, dass in sie geschrieben werden sollte) in eine wirre Wellenform in der Simulation. Und dies ist bei mehreren Gruppenmitgliedern in unabhängig geschriebenen Teilen aufgetaucht. Ich weiss nun wirklich langsam nicht mehr weiter, da ich wirklich schon alles Mögliche probiert habe und einfach keine Ahnung habe, wo dieser Fehler herkommen kann, da der Code an sich sehr simpel ist...

: : Ach und noch was: Liegt das an mir oder hat der Wert mit dem man Variablen initialisiert keine Auswirkung auf die Simulation!?

: : Würde mich über Antwort freuen :)

: : MfG, Bastian

: ******************************************
: Es gab ähnliche Probleme bei einer anderen Gruppe, die es in etwa wie folgt lösen wollte:

: PROCESS
: BEGIN

: IF W='1' THEN

: IF ADR = "00000001" THEN OUT0 <= DIN; END IF;
: IF ADR = "00000010" THEN OUT1 <= DIN; END IF;
: .....

: END IF;

: END

: DIES FUNKTIONIERT LEIDER NICHT!!!!!!!!!!!!!!!!!
: Sobald man aber den Prozess, der die Anweisungen umgibt, nicht ständig durchläuft, sondern nur noch dann, wenn wirklich eine Änderung an W vorliegt, läuft alles. D.h. PROCESS (W) in obigem Beispiel. Zusätzlich kann man noch gewährleisten, dass man nur steigende Flanken von W "abgreift", indem man IF (W='1' AND W'EVENT) THEN einfügt.

: Ich hoffe es funktioniert jetzt
: Tobias

****************************************
Das mit der steigenden Flanke war unnötig, da durch PROCESS (W) und IF W='1' THEN bereits nur steigende Flanken betrachtet werden. Also das mit dem W'EVENT bitte weglassen.

Sorry
Tobias


Antwort(en)


Eine Antwort erstellen

Name:
EMail:
Betreff:
Nachricht:
 


       Letzte Änderung: März 2003, Tobias Schubert