mikrocontroller.net

Forum: FPGA, VHDL & Co. Statemachine Asynchron


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab' grad ein kleines CPLD-Projekt. Hauptbestandteil ist eine 
Statemachine. Mit folgenden prinzipiellen Ablauf:

S1: Setze Out-Pins -- Sicherheitsschaltung stimulieren
S2: Teste In-Pins  -- Sicherheitsschaltung prüfen

Jetzt habe ich folgendes Problem, wenn ich in S1 bin setze ich dort die 
Output-Pins, leider werden diese aber erst im nächsten Takt am Ausgang 
tatsächlich gesetzt.
Mir wäre es viel, viel lieber wenn diese Outputpin sofort gesetzt 
würden, wenn ich in den S1 State komme.

Hier mal ein Snippet
(count_outi ist zu testzwecken mein Outputpin)

when OPIN_P1 =>
   count_outi := "001";  --> erscheint erst mit nächsten Takt am Ausgang
   state <= IPIN_P1;

when IPIN_P1 =>            --> Also hier werden Ausgänge erst gesetzt
   if SPG_TR1 = '0' then   --> Hier wird aber dann schon Input-pin 
getestet
     state <= OPIN_P2;
   else
     state <= ERR;
   end if;
   count_outi := "000";

Klar ich könnte jetzt noch einen zwischen State einführen. Ist aber 
nicht sehr elegant und verschwenderisch. Wie kann ich erreichen dass 
unter OPIN_P1 sofort der Ausgang gesetzt wird.

Im RTL sieht man auch ganz schön das der Ausgang über die Clock geführt 
wird. Genau das will ich aber nicht.

Im Anhang ist mein reduzierter Code. Ich freue mich auf Eure Vorschläge.
Sebastian.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Sebastian (Gast)

>Jetzt habe ich folgendes Problem, wenn ich in S1 bin setze ich dort die
>Output-Pins, leider werden diese aber erst im nächsten Takt am Ausgang
>tatsächlich gesetzt.

Dann setze die Pis schon beim Übergang.
Und lass den Murks mit der Variable!

>Klar ich könnte jetzt noch einen zwischen State einführen. Ist aber
>nicht sehr elegant und verschwenderisch. Wie kann ich erreichen dass
>unter OPIN_P1 sofort der Ausgang gesetzt wird.

Alle Verzeigungen ZU OPIN_P1 setzen gleichzeitig den Ausgang.

MFG
Falk

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich haette keine kruze Frage dazu, wenn die Statemaschine erst zum 
nächsten Takt die I/Os setzt, dann ist es immer noch synchron oder 
nicht?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dann setze die Pis schon beim Übergang.
>Und lass den Murks mit der Variable!

Ja da ran habe ich auch schon gedacht. Aber ich finde es sieht irgendwie 
unübersichtlicher im Code aus. Wenn ich Aktionen im vorherigen State 
schon starte.

Obwohl eigentlich ist es logisch, wenn man im OPIN_P1 State ist müssen 
schon alle Pins gesetzt sein. Somit muss der Anstoss des Setzens im 
vorherigen State passieren. Und bei der Transition in den OPIN_P1 
passieren.

Trotzdem unübersichtlicher, aber logisch.

Danke für die Denkanstösse.

Sebastian

PS: Asynchron ist natürlich verkehrt. Diese Statemachine kann nur 
synchron sein.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Sebastian (Gast)

>Ja da ran habe ich auch schon gedacht. Aber ich finde es sieht irgendwie
>unübersichtlicher im Code aus. Wenn ich Aktionen im vorherigen State
>schon starte.

Der einzig Ausweg wäre, die Ausgänge kombinatorisch aus dem State zu 
dekodieren. Das geht in den meisten Fällen. Aber nicht bei 
Taktausgängen, Strobes, etc.

Taktung FPGA/CPLD

MFG
Falk

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, ne kleine Anekdote aus dem Nähkästchen.

Die Worte "Statemachine" und "Asynchron" in einem Atemzug zu nennen ist 
KEINE gute Idee. Das hat mich damals bei meinem Prof unbeliebt gemacht. 
Er hat mir dann sogar ne Diplomarbeit verweigert (Ok, das war am Ende 
nur der Tropfen, der das Fass zum Überlaufen brachte). 8-0

MFG
Falk

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.