FSM mit taktflankengesteuerten Zustandsübergängen

Gast #620897
Hallo....

Ich müsste eine FSM mit taktflankengesteuerten Zustandsübergängen 
realisieren. Der Zustand soll nur bei der fallenden Flanke erkannt 
werden.

Der Code muss synthetisierbar auf einem Lattice MachXO sein.

Wenn ich die flanken mit
1
VAR='1' and VAR'event
 abfrage, dann minimiert der Syntetisierer (Synplify) das Signal weg...
Der Precision sagt, das nur ein Takt verwendet werden darf.

Hat dazu jemand einen Idee?

Vielen DANK
MARK
#620906
@ MARK (Gast)

>Ich müsste eine FSM mit taktflankengesteuerten Zustandsübergängen
>realisieren. Der Zustand soll nur bei der fallenden Flanke erkannt
>werden.

Ja und?

>Hat dazu jemand einen Idee?

Du solltest dich mal mit den Grundlagen von VHDL und digitalem Entwurf 
befassen.

Ne FSM ist einen Standardsache, die JEDER, der die Grundlagen HALBWEGS 
beherrscht problemlos hinschreiben kann. Etwa so.

process(clk)
begin
  if falling_edge(clk) then
    case state is
      when warten => if taste='1' then
                       state = Z1;
                     end if;

      when z1     => state = Z2;

      when z2     => if code="111" then
                       state <= warten;
                     else
                       state <= Z1;
                     end if;

      when others => state <= warten;
    end case;
  end if;
end process;

MFG
Falk
#620908
Mit dieser Syntax kannst du nur bei einem Taktsignal arbeiten. Und davon 
gibt es pro Fliflop bzw. Slice nur genau eines. Möchtest du an einem 
anderen Signal eine Flanke erkennen, brauchst du nur das aktuelle Signal 
mit dem um einen (System-)Takt verzögerten Signal zu vergleichen:
if signal = '0' and last_signal = '1' then
Gast #620916
DAnke der schnellen Antworten.

Die Lösung von Falk ist ja quasi ein Workaround. Kann ich die syntax
1
var='0' and var'last_value='1'
 nutzen?

Ich habe dabei das gleiche problem festgestellt!!
#620933
@ MARK (Gast)

>Die Lösung von Falk ist ja quasi ein Workaround. Kann ich die syntax

Bitte? Das IST der richtige Weg.

Befasse  dich mal ernsthaft mit den Grundlagen und lass das Rumgedokere 
mit deinem Halbwissen!

>Ich habe dabei das gleiche problem festgestellt!!

Ja, du weisst nicht was tu tust.

MfG
Falk
Gast #621007
@Falk:

nun mal langsam, Falk. Du hättest Recht, wenn im ersten Posting was 
von der fallenden _Takt_flanke stünde. Da wurde aber nur von der 
fallenden Flanke was die Rede :-)

Also muss zunächst die fallende Flanke erkannt werden

if rising_edge(clk) then
  ff1 <= VAR;
end if;

falling <= not VAR and ff1;

und dann "falling"-Signal als enable Signal für die Statemaschine 
verwenden.


if falling_edge(clk) then
   if falling='1' then
    case state is
      when warten => if taste='1' then
                       state = Z1;
                     end if;

      when z1     => state = Z2;

      when z2     => if code="111" then
                       state <= warten;
                     else
                       state <= Z1;
                     end if;

      when others => state <= warten;
    end case;
   end if;
  end if;

Grüße,

Kest

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.