Hi,
leider ist es mir fast peinlich soviele Fragen zustellen, aber ich will
lernen und finde zu diesem Problem keine Lösung. Ich hoffe auf eure
Hilfbereitschaft.
Wie im anderen Thread zuerfahren bin ich dabei mir ein Memory
Controller zubauen. Ich kann aber in Modelsim keine Daten erkennen die
z.B. zum adressout: out std_logic_vector(18 downto 0) gehen. Besser
ausgedrückt ich sehe im Ablauf keine Binaeren Daten. Ich sehe nur
direkte Flankenwechsel. Ist das normal?
Ich habe mir schon extra ein Counter programmiert wo der
std_logic_vector(2 downto 0) inkremiert wird. Leider sehe ich da auch
keine Aenderungen.
Im Testbench koennte ich die Ausgaenge selber setzen, aber sollte das
nicht schon durch den eigentlich VHDL Code gesehen? Ich würde es
verstehen wenn der std_logic_vector als Eingang programmiert ist das
ich die Werte von Hand aendern muss, aber nicht wenn es ein Ausgang
ist.
Ich hoffe jemand kann mir ein Tipp geben oder mich aufklaeren ob es
ueberhaupt moeglich ist.
Gruß,
Dirk
PS.: Ich stelle mir das so wie beim AVR Studio vor das ich mir die Daten
zu einem Zeitpunkt anschaun kann. Std_logic's werden richtig gesetzt,
aber Vectoren binhalten keine Information.
was siehst Du, wenn Du das Signal im Wave-Fenster
hast? Nur den Signalnamen oder einen Signalverlauf, der
sich nicht ändert ?
Mach doch mal einen Screenshot oder gib genauere Infos.
Hi,
ein Signalverlauf kann man erkennen (Flankenwechsel). Am Anfang steht
auch z.B. "UUUUUUUUUUUUUU" gehe ich nun mit dem Cursor in den Bereich
wo Daten geschrieben wurden (z.B. write wird gesetzt und Daten werden an
das Logic Vector uebergeben) sehe ich die Flankenwechsel, aber keine Bit
o. Hex Werte die im Logic Vector stehen.
Ein Bild kann ich heute abend online stellen.
Gruß,
Dirk
Ich dachte, Du wolltest ein Bild anhängen. Oder sollen wir hier alles
herunterladen? :-o
Troubleshooting:
- hineinzoomen
- hineinzoomen
- hineinzoomen
Kest
Also ich sehe was: UUUUUUUUUUUUUUUU
Das liegt nicht an ModelSIM sondern an Deinem Code, die DAten werden
eben nicht initialisiert, danach (so ab 900 ns) hast Du da gar einen
Kurzschluß.
Kest
Danke es funktioniert. Langsam wird es immer besser schoen waere es sich
auch endlich von der ISE 7.1 zuloesen und per cmdline die Synthese
zumachen und gleich per button an Modelsim zuuebergeben.
Gruß,
Dirk
Dein Design ist übrigens asynchron (=> nicht gut).
Der Synthesizer generiert mehrere Latches, und vier durch
kombinatorische Logik erzeugte Takte.
Wirf mal 'nen Blick in den Synthesizerreport.
Hi,
jetzt bin ich verunsichert. Mein SRAM Controller soll fuer ein
asynchrones SRAM sein, deshalb habe ich die FSM asynchron
programmiert.
Kriege ich nun Probleme wenn der Rest (z.B. Main FSM o. andere
Bausteine) synchron arbeitet ?
Gruß,
Dirk
>Kriege ich nun Probleme wenn der Rest (z.B. Main FSM o. andere>Bausteine) synchron arbeitet ?
Asynchrone FPGA-Designs sind so gut wie immer eine schlechte Idee.
Man muss schon sehr genau wissen, was man tut, wenn man sich auf sowas
einlässt (Anfänger wissen das in der Regel nicht).
Zum Thema Latches:
Latches sind pegelgesteuerte Flip-Flops. Das Problem mit
pegelgesteuerten Flip-Flops ist, daß sie, äh, pegelgesteuert sind.
Wenn jetzt der Enable-Eingang des Latches durch ein Signal angesteuert
wird, welches selber wieder durch kombinatorische Logik erzeugt wird
(und so ist es meistens bei asynchronem VHDL-Murks-Code) bekommt man
folgendes Problem: Kombinatorische Logik mit mehr als einem Eingang hat
die unangenehme Eigenschaft, durch Laufzeitverzögerungen am Ausgang
Störimpulse ("Glitches") zu erzeugen. D.h. das Latch speichert zu
einem Zeitpunkt, wenn es nicht soll. Und das ist nicht fein.
Die Gatterlaufzeiten und damit die Länge der Glitches sind ausserdem
auch noch temperaturabhängig, was die ganze Sache nicht unbedingt
berechenbarer macht.
Deine Logik, da Du asynchronen Speicher ansprechen willst, müsstest Du
Dein Design auch asynchron machen, ist falsch.
Über ein Minenfeld zu laufen wird nicht dadurch sicherer, daß ich mir
einen Gurt mit Handgranaten umschnalle.
Hallo,
ich bin immer noch dabei alles synchron zu programmieren (jetzt ist das
nicht mehr so easy).
Eine kleine Frage haette ich aber diesbezueglich. Bei rising edge von
Clock fuehre ich ein Lese/Schreibzugriff aus. Die Daten werdem an die
Adresse 0 geschrieben oder von Adresse 0 gelesen. Ich wuerde gerne im
gleichen Taktzyklus die Adresse erhoehen. Kann ich das bei fallender
Flanke von Clock machen? oder kann ich den Adresscounter erst bei
naechster steigender Flanke von Clock erhoehen?
Bei der naechsten steigenden Flanke von Clock soll er damit gleich die
Adresse 1 lesen/schreiben.
Gruß,
Dirk