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
Hi, endlich Feierabend anbei das komplette Project (ISE7.1). Ich hoffe mir kann dann jemand weiterhelfen wieso ich keine Werte sehe. 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
Hi, ok danke. Der Kurzschluss kam sicherlich vom zuvielen rumprobieren gestern nacht. Teste es und melde mich ;) Gruß, Dirk
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, ja das war mir gestern abend erst wirklich bewusst geworden. :( jetzt fuege alles in andere Prozesse ein. Gruß, Dirk
PS.: eigentlich duerfte es nicht so schlimm sein weil des SRAM async. ist. Gruß, Dirk
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, danke Xenu.... dann werde ich den Code in Papierkorb packen und wieder bei 0 % anfangen Dirk
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
Ich denke, Du hast inzwischen rausbekommen, daß man den Adresszaehler in dem clock-Moment erhöhen kann, in dem mam ihn benutzt.
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.