www.mikrocontroller.net

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


Autor: Stefan K. (stefan82)
Datum:

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

Autor: Stefan K. (stefan82)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
und da war der Anhang wieder wech? .. Anhang zu ^^

Greets,

Stefan

Autor: Falk Brunner (falk)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

EDIT:
Das hier
  if (TxS = '1') then                  -- Reset  --> naja, ok
    SMStart <= '0';
  elsif (falling_edge(RxD)) then       -- Takt   --> naja, ok
    SMStart <= '1';     
  else
    NULL;                        -- was soll denn das hier?
  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
   Design cannot be synthesized, bad description.
lauten ;-)

Autor: D. I. (Gast)
Datum:

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

Autor: Stefan K. (stefan82)
Datum:

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

Autor: Stefan K. (stefan82)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

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.