www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Schieberegister


Autor: MarkusG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe folgendes Problem:

Ich habe ein Schiebregister mit Serieller Ein und Paralleler Ausgabe in
VHDL beschrieben. Im Simulator habe ich eine Zeichenfolge zur Seriellen
Eingabe mit Clocktakt erzeugt und das Shift Register arbeitet
einandfrei.

Nach der Synthese wird jedoch bei gleichen Eingangssignalen (wie bei
der Simulation) am Ende ein Bitmuster ausgegeben, das um eine Stelle
verschoben ist im vergleich zur simulation. Simulation und realität
passen also nicht. Was könnte denn da schief gelaufen sein ?

Grüsse

Markus

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Ursachen könnte sein:

Die erzeugten Stimuli in der Simulation entsprechen
nicht dem praktischen Betrieb.

In der praktischen Schaltung liegen die Daten
möglicherweise verzögert an?
Hast Du die Setup-Zeit berücksichtigt ?
(Daten müssen immer x ns vor der Taktflanke anliegen!
s. Datenblatt FPGA)

Wie werden die Daten denn praktisch generiert und
wie ist der Zeitpunkt zum Auslesen des SRG definiert?
Gibt es z.B. 8 aufeinanderfolgende Takte oder
gibt es noch ein Clock-Enable Signal ?

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

Bewertung
0 lesenswert
nicht lesenswert
Oha, also ich hab den Code mal angehängt vielleicht findet ihr den
Anfängerfehler g

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo MarkusG,

nimm mal tmp und Unload aus der Sensitivity-List
des Prozesses heraus, also so :

process(C, Reset)
...

und simuliere jetzt nochmal. Ich gehe mal davon aus, dass
Unload ein synchrones Übernahme-Signal zum Speichern
des tmp-Wertes in die Ausgaberegister ist, damit gehört
es nicht oben in die Liste.

Unload muss synchron zum Clock sein und genau 1 Takt
lang aktiv sein. Es darf aber erst 1 Takt nachdem das letzte
Bit eingeschoben wurde aktiviert werden !
Also mit der Taktflanke 58 wird das letzte Bit eingeschoben, dann
muss Unload im Takt 59 aktiv sein, sonst speicherst Du zu früh ab.
Wenn Du nicht sicherstellen kannst, dass Unload nur 1 Takt aktiv ist,
dann nimm die Ausgaberegister aus dem Prozess heraus und
schreibe einen 2. Prozess mit Unload als Clock :

process(Unload, Reset)
...

Jetzt können die Ausgaberegister mit steigender oder fallender
Flanke von Unload gesetzt werden, musst aber mit dem Timing
mehr aufpassen, da die Sache jetzt asynchron ist.

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, mit den Takten hatte ich mich verzählt.
es sind natürlich 59 und bei 60 muss Unload
aktiv werden

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.