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
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 ?
Oha, also ich hab den Code mal angehängt vielleicht findet ihr den Anfängerfehler g
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.
sorry, mit den Takten hatte ich mich verzählt. es sind natürlich 59 und bei 60 muss Unload aktiv werden
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.