Forum: FPGA, VHDL & Co. bad synchronous description Wo?


von Stefan K. (stefan82)


Lesenswert?

Hallo zusammen, ...

um meine selbst erstellte simpelst UART Schnittstelle im Chip zu testen 
habe ich versucht diese in einen Kern einzubauen der dafür sorgt das der 
FPGA mir auf eine Eingabe immer ein echo zurück schickt. Den UART Kern 
kann ich sowohl simulieren als auch synthetisieren ... er schein (laut 
Simulation) auch einwandfrei zu funktionieren.

Aber der Core drumherum der für die Echo Ausgabe sorgen soll 
funktioniert nur in der Simulation ... ich bekomme ihn nicht 
synthetisiert weil hierbei immer ein Abbruch mit der Meldung:
1
 "Signal TXEn cannot be synthesized, bad synchronous description.
erfolgt.

Der Fehlermarker zeigt in der ISE 10.1 danach auf die Erste Zeile der 
Statemachine ... also auf die Sense Liste des Prozesses.

Habe hier schon einige Bad sync. Threads im Forum gelesen ... aber warum 
meine Beschreibung nun nicht synthetisiert werden kann habe ich dabei 
leider immer noch nicht verstanden.

Kann mir da jemand bei der Fehlersuche helfen?

Gruß,

Stefan

von Stefan K. (stefan82)


Angehängte Dateien:

Lesenswert?

und da war der Anhang wieder wech? .. Anhang zu ^^

Greets,

Stefan

von Falk B. (falk)


Lesenswert?

Ganz einfach, für TXEn wird ein Latch erzeugt, weil es in deinem letzten 
Prozess nur in einem Zweig eine Zuweisung erhält. Du musst aber ÜBERALL 
eine Zuweisung machen. Oder gleich die Zwei-Prozess Methode in die Tonne 
treten, dann passiert sowas nicht.

MFG
Falk

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


Lesenswert?

1
      when S3 =>
2
        StateTest <= x"3";   
3
        if (rising_edge(TXS)) then ------ AUTSCH
4
          SMRun <= '1';
5
          TXEn <= '0';
Du kannst nicht in einem kombinatorischen Prozess einen Takt enfügen... 
:-o

EDIT:
Das hier
1
  if (TxS = '1') then                  -- Reset  --> naja, ok
2
    SMStart <= '0';
3
  elsif (falling_edge(RxD)) then       -- Takt   --> naja, ok
4
    SMStart <= '1';     
5
  else
6
    NULL;                        -- was soll denn das hier?
7
  end if;
findest du in keinem Buch. :-/
Du hast zuviele Takte in deinem Design. Das am einfachsten unter 
Kontrolle zu behaltende FPGA-Design hat genau 1 Takt.

Eigentlich müsste die Fehlermeldung
1
   Design cannot be synthesized, bad description.
lauten ;-)

von D. I. (Gast)


Lesenswert?

Falk Brunner wrote:
> Oder gleich die Zwei-Prozess Methode in die Tonne
> treten, dann passiert sowas nicht.

Was spricht gegen die 2-Prozessmethode? Ich habe damit eigentlich immer 
recht gute Erfahrungen gemacht

von Stefan K. (stefan82)


Lesenswert?

Falk Brunner wrote:
> Ganz einfach, für TXEn wird ein Latch erzeugt, weil es in deinem letzten
> Prozess nur in einem Zweig eine Zuweisung erhält.

Hoffe ich habe dich richtig verstanden ... aber ein hinzufügen einer 
Zuweisung für TXEn in den else Zweig des Prozesses ändert leider nichts 
an der Fehlermeldung.

> Oder gleich die Zwei-Prozess Methode in die Tonne
> treten, dann passiert sowas nicht.

Meinst du damit die beiden Prozesse State Machine Drive und die State 
Machine selbst in einen Prozess zu integrieren oder insgesamt alles in 
einen Prozess zu bauen? ...

Bin mir grad über die Folgen in der Funktionsweise unsicher aber werd 
gleich beides einmal ausprobieren ...

von Stefan K. (stefan82)


Lesenswert?

Hi Lothar, ...

geb ja zu ... meine Syntax ist vermutlich nicht die Beste ...
(um nicht das Böse Wort mit Sch am Anfang zu nutzen) ...

Bei den Signalen RXD und TXS handelt es sich nicht um Clk Takte... habe 
halt nur Versucht auf diese Weise die Flanken an diesen Signalen zu 
erkennen um dann darauf reagieren zu können... les mich aber grad durch 
deine wunderbare Website ... und versuche zu verstehen wie das auch 
anders gehen könnte :)

Edit:

... bei genauerer Überlegung sind mir die Flanken ja aber eigentlich 
egal von interesse sind ja nur die Signalzustände zum Taktzeitpunkt ...
werd das "mal eben" umbauen ...

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


Lesenswert?

> Bei den Signalen RXD und TXS handelt es sich nicht um Clk Takte...
Doch, genauso wird der Synthesizer diese Signale interpretieren.
Du kannst nicht sagen:
"Fahr bitte links....... Nein, nein, ich meinte das andere Links".

> Was spricht gegen die 2-Prozessmethode?
Vergiss z.B. einfach mal ein Signal in der Sens-List des kombinatrischen 
Teils. Da tut die Simulation irgendwas und die Hardware irgendwas 
anderes.
Oder bau dir eine Schleife in diesen kombinatorischen Teil, wie z.B. im 
Beitrag "warning beim Implementieren einer State Machine" oder im 
Beitrag "Re: Fehler bei Synthese" oder (ganz aktuell) 
im http://www.mikrocontroller.net/topic/136001
> Ich habe damit eigentlich immer recht gute Erfahrungen gemacht...
Glück gehabt, oder gut aufgepasst.

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.