Forum: FPGA, VHDL & Co. FSM verliert aktiven zustand


von Michael (Gast)


Lesenswert?

Hi,
Ich habe einen UART Core in VHDL geschrieben. Er arbeitet mit einem 
Zustandsautomaten. Zeitweise funktioniert der Automat einwandfrei, doch 
sporadisch verliert er seinen Zustand. Dann ist kein Zustand mehr aktiv.
Es scheint mir so als wenn das abhänig davon ist wie Quartus das Design 
"gefittert" hat. Denn in manchmal funktioniert es ganz gut, und wenn man 
neu fittert geht es mal wieder nicht. Fehler werden keine Angezeit! In 
der "funktion simulation" funktioniert es.
Habt ihr eine Idee woran es liegen kann?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Habt ihr eine Idee woran es liegen kann?
Das ist eine Timing-Verletzung, partieller Reset...

Auf welche Zielplattform wurde das Design "gefittet" (FPGA, CPLD, 
welches)?
Gehst du mit deinem Reset-Pin direkt aufs Reset-Netzwerk?
Hast du Kombinatorik im Reset?
Lass doch mal deinen Code sehen.

von Michael (Gast)


Lesenswert?

Das ganze soll auf einen FPGA. Der Reset ist zusammgeführt und geht nur 
auf 2 Register um in zu Synchronisieren. Tue ich das nicht, meckert der 
Design Assistent in Quartus auch.
Mir ist grad eingefallen das ich rxd nicht synchronisiert hab, kann das 
einfluss haben?

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

ups, vergessen

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Das ganze soll auf einen FPGA.
Nur auf CPLDs wird gefittet, nicht auf FPGAs ;-)

> Mir ist grad eingefallen das ich rxd nicht synchronisiert hab, kann das
> einfluss haben?
Ja, was denn sonst?
Jedes Signal, das für das Weiterschalten einer SM zuständig ist, kann 
sie auch durcheinander bringen. Und dein RXD ist extensiv dafür 
verwendet:
1
    when Z8 => if rxd = '1' then -- warten bis Treiber freigeschaltet hat!
2
                  zustand <= Z1; -- senden fertig
3
               else
4
                  zustand <= Z8;
5
               end if;
Also: zwischen Eingangspin und SM mindestens 2 FFs.

BTW:
Woher kommt der clrn ?
Ist das der einsynchronisierte Reset?

EDIT:
Bei Xilinx enden VHDL-Files mit .vhd
Nimm für den Dateianhang auch diese Endung, dann kann der 
Dateibetrachter hier im Forum den Code schön formatieren.

von Michael (Gast)


Lesenswert?

jo danke, lag am rxd ;-)

clrn, ist der Reset.

Warum wird beim FPGA nicht gefittert. Im Quartus gibt es doch den 
Compilepunkt Fitter(Place & Route).

von DI UV (Gast)


Lesenswert?

Xilinx unterscheidet da streng:
 #das Tool für Place&Route heis par und läuft nicht mit Designs für 
(Xilinx-)CPLD's
 #für CPLDs hat Xilinx ein Tool namens cpldfit (?) (was nicht für 
FPGA-Design läuft).

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Im Quartus gibt es doch den Compilepunkt Fitter(Place & Route).
Man lernt nie aus   ;-)
Also ok, beim Quartus werden FPGAs gefittet (aber trotzdem ohne r)

Dann schau dir gleich noch die anderen Signale an (start, rd_wr...),
falls die von aussen kommen. Jedes davon kann dir solche Effekte
machen. Besonders, wenn es zum Umschalten einer SM verwendet wird.

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
Noch kein Account? Hier anmelden.