www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Statemaschine fehler!


Autor: Frank Stucke (Firma: Keine) (franks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, villeicht kann mir einer von euch helfen, ich habe ein ganz 
blöden Fehler in meiner Statemaschine.

Ich sende Daten von USB an einen FPGA, wenn Daten anliegen geht RXF_in 
auf GND, dann muss ich 4 Takte den Ausgang RD_out auf gnd legen und bei 
rd4 lese ich die USB Daten ein.

Soweit geht das auch alles, aber wenn ich bei VIEW RTL Schematic schaue, 
sind in einem Block nicht alle Gatters angeschlossen, das kann doch 
nicht sein das ISE hier mist baut.


versteht das einer ?

oberhalb
  type usb_stat_type is (
    idle, 
    ras1, ras2, ras3, ras4, ras5, 
    rd1, rd2, rd3, rd4); 

signal usb_stat, usb_next_stat : usb_stat_type; 


----
  process (clock, usb_stat)
  begin
    if (Reset = '0') then
        usb_stat <= idle; 
    elsif (clock'event and clock = '1') then
        usb_stat  <= usb_next_stat;
     end if;        
  end process;

  process (clock, usb_stat, RXF_in)
  begin
    case (usb_stat) is
      when idle => if (RXF_in = '0') then                  
                          usb_next_stat <= ras1;
                      else  
                          usb_next_stat <= idle;
                      end if;
      when ras1 => usb_next_stat <= rd2;
      when rd1  => usb_next_stat <= rd2;
      when rd2  => usb_next_stat <= rd3;
      when rd3  => usb_next_stat <= rd4;  
      when rd4  => usb_next_stat <= ras2;
      when ras2 => usb_next_stat <= ras3;
      when ras3 => usb_next_stat <= ras4;
      when ras4 => usb_next_stat <= ras5;    
      when ras5 => usb_next_stat <= idle;    
      when others =>  usb_next_stat <= idle;
    end case;
  end process;
  



  --  \_/  Daten einlesen
   RD_out <=  '0' when  (usb_stat=rd1) or (usb_stat=rd2) or (usb_stat=rd3) or (usb_stat=rd4)  else '1';




Gruß

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also, was mich auf den ersten blick ein wenig verwundert ist, dass du 
zwar das clock-signal bei der statemaschine mit in der 
sensitivitätsliste hast, aber keine flanke abfragst.
ich würde die statemaschine mit in den anderen process mit ins elsif 
eintragen. dann hast du ne schön synchron getaktete statemaschine.

kein plan ob das deinen fehler behebt, aber ist mir halt mal so 
aufgefallen.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne deinen Code jetzt durchgelesen zu haben: Darstellungsfehler im 
RTL-Viewer kommen ab und zu mal vor. Beliebt sind auch Leitungen, die 
schraeg ueber alles in die linke obere Ecke laufen oder eben nicht 
angeschlossene Gatter, weil der Algorithmus fuer die Darstellung 
irgendwo ins Leere laeuft.

@ Nephilim:
Die Clock in der sensitivity-list ist zwar zu viel, stoert aber auch 
nicht. Diese Zwei-Prozess-Schreibweise ist aber genauso erlaubt wie eine 
mit nur einem oder drei Prozessen.

Autor: Frank Stucke (Firma: Keine) (franks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das jetzt mal mit mit
(if (clock'event and clock = '1') then)
eingebunden, bis jetzt sehe ich keine Fehler in RTL Schematic.

Normal darf das doch so nicht sein, das müsste doch auch ohne clock 
gehen.
  process (clock, usb_stat, RXF_in)
  begin
  if (clock'event and clock = '1') then
    case (usb_stat) is
      when idle => if (RXF_in = '0') then                  
                          usb_next_stat <= ras1;
                      else  
                          usb_next_stat <= idle;
                      end if;
      when ras1 => usb_next_stat <= rd1;                   
      when rd1  => usb_next_stat <= rd2;
      when rd2  => usb_next_stat <= rd3;
      when rd3  => usb_next_stat <= rd4;  
      when rd4  => usb_next_stat <= ras2;
      when ras2 => usb_next_stat <= ras3;
      when ras3 => usb_next_stat <= ras4;
      when ras4 => usb_next_stat <= ras5;    
      when ras5 => usb_next_stat <= idle;    
      when others =>  usb_next_stat <= idle;
    end case;
  end if;   
  end process;




Gruß

Autor: Sym (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mache mal eine synchrones Design draus (Nur Clk und Reset in sensitivity 
list). Willst du einen Mealy oder Moore-Automaten haben?

Autor: Frank Stucke (Firma: Keine) (franks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sym wrote:
> Willst du einen Mealy oder Moore-Automaten haben?



Hallo Sym,

ähhmmmm was ist denn das ? Mealy sagt mir nichts



gruß

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist kein Fehler im urspruenglichen Code. (Ausser, dass du zweimal 
rd2 schreibst, aber rd1 vergessen hast). In ISE 9.1/Linux ist der 
RTL-View vollkommen in Ordnung. Es handelt sich bei Frank anscheinend 
lediglich um einen Darstellungsfehler.

Mealy und Moore sind zwei theoretische Modelle fuer Zustandsautomaten. 
Sollte man kennen - einfach mal googlen. Mit deinem Problem hat es aber 
nichts zu tun.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zitat VHDL Grundregeln:
Es darf nur zwei Arten von Prozessen geben:

1. Rein kombinatorische Prozesse (keine Zustandsspeicher):
 Alle Signale die im Prozess gelesen werden in die sensitivity list 
eintragen
 ...
2. Rein getaktete Prozesse (Flip-Flops als Zustandsspeicher):
 Nur Clk und asynchroner Reset in die sensitivity list

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas Schwarz (andreas),

bin nur Hobbyist, aber gehören zu 2. nicht auch alle im Prozess zu
lesenden Signale in die Sen.List? Bei mir (unter Xilinx WebPack)
motzt er jedenfalls und will diese Signale.

Gruss

Jörg

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, ISE schreit immer nach diesen Signalen, aber wenn man ein schönes 
synchrones Design haben will hängt alles nur am Clock-Signal, also 
reicht das in der Liste. Bei asynchronem Reset gehört dann auch das dort 
mit rein, aber mehr muss nicht. Ist auch beim durchdenken der 
Statemaschine, was wann passiert, am besten. Wenn man so viele Signale 
in der Sensitivitätsliste hat und es dann auch noch nicht durch eine 
Clock-Flanke gesteuert wird, dann kommt man schnell durcheinander und es 
kann schonmal passieren, dass das falsche Signal einen Zustandswechsel 
hervorruft.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der synchronen Statemachine dürfen NUR synchrone signale verarbeitet 
werden-> sonst gibbet murx.

Autor: Frank Stucke (Firma: Keine) (franks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten morgen,

also ich habe mal meinen code einen Kumpel gegeben der mit ISE 9.1 
Arbeitet,
bei dem war alles ok. Es wurde ein gleiches RTL Schematic Sheet 
erstellt, aber bei ihm waren alle Leitungen an den Gatters.


Soviel zu dem neuen ISE10.1


Gruß

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ebenfalls Guten Morgen,

mit Rummosern (von 10.1) sind nur Warnings gemeint (keine Errors),
für die Synthese spielt das keine Rolle.

Gruss und frohes Schaffen

Jörg

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.