mikrocontroller.net

Forum: FPGA, VHDL & Co. Modelsim Probleme


Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Dirk (Gast)
Datum:
Angehängte Dateien:
  • sm.zip (811 KB, 26 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Hi,

endlich Feierabend anbei das komplette Project (ISE7.1).

Ich hoffe mir kann dann jemand weiterhelfen wieso ich keine Werte
sehe.


Gruß,

Dirk

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich dachte, Du wolltest ein Bild anhängen. Oder sollen wir hier alles
herunterladen? :-o

Troubleshooting:
- hineinzoomen
- hineinzoomen
- hineinzoomen

Kest

Autor: Dirk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi an der Cursorposi sollte adressout 3 sein .

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ok danke. Der Kurzschluss kam sicherlich vom zuvielen rumprobieren
gestern nacht.

Teste es und melde mich ;)

Gruß,
Dirk

Autor: Dirk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ja das war mir gestern abend erst wirklich bewusst geworden. :( jetzt
fuege alles in andere Prozesse ein.

Gruß,
Dirk

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS.: eigentlich duerfte es nicht so schlimm sein weil des SRAM async.
ist.

Gruß,
Dirk

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke Xenu.... dann werde ich den Code in Papierkorb packen und wieder
bei 0 % anfangen

Dirk

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mentorwürger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke, Du hast inzwischen rausbekommen, daß man den Adresszaehler in 
dem clock-Moment erhöhen kann, in dem mam ihn benutzt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.