www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Komische Info von ISE

Autor: Christian Peters (kron)
Datum:

Hallo,

ich hab ein Projekt synthetisiert, und bekomme für diese Statemachine:
Analyzing FSM <FSM_2> for best encoding.
Optimizing FSM <Inst_ADRDEC_V/state> on signal <state[1:5]> with one-hot encoding.
-------------------
 State | Encoding
-------------------
 idle  | 00001
 r1    | 00100
 r2    | 01000
 w1    | 00010
 w2    | 10000
eine ganz normale Statemachine halt, diese Infos:
Synthesizing (advanced) Unit <FSM_2>.
INFO:Xst:2387 - HDL ADVISOR - A 2-bit shift register was found for signal <FFd1> and currently occupies 2 logic cells (1 slices). Removing the set/reset logic would take advantage of SRL16 (and derived) primitives and reduce this to 1 logic cells (1 slices). Evaluate if the set/reset can be removed for this simple shift register. The majority of simple pipeline structures do not need to be set/reset operationally.
INFO:Xst:2387 - HDL ADVISOR - A 2-bit shift register was found for signal <FFd2> and currently occupies 2 logic cells (1 slices). Removing the set/reset logic would take advantage of SRL16 (and derived) primitives and reduce this to 1 logic cells (1 slices). Evaluate if the set/reset can be removed for this simple shift register. The majority of simple pipeline structures do not need to be set/reset operationally.
Unit <FSM_2> synthesized (advanced).

Diese Machine fragt im Idlezustand drei Signale ab,
und wenn die eine von zwei möglichen Konstellationen haben,
geht sie (die Machine) durch 2 fast und einen ganz leeren State,
Waitstates,
und dann wieder zu idle.

Könnte diese Info von den leeren States kommen?
Ich weiß, dass die Infos nichts dramatisches sind,
aber es kneift mich trotzdem und ich möchte es gern verstehen. :)
Autor: Falk (Gast)
Datum:

@ Christian Peters (kron)

>ich hab ein Projekt synthetisiert, und bekomme für diese Statemachine:

>Könnte diese Info von den leeren States kommen?

Nein, es ist, wie man lesen kann, ein asynchrones Reset, das den
Synthesizer stört. Mach den mal ausd einem Code und schau was passiert.

Mfg
Falk
Autor: Jan M. (mueschel)
Datum:

Ja, die beiden waitstates wird von der Synthese als 2Bit-Schieberegister
ausgeführt: Vorne eine eins rein, und wenn sie hinten wieder rauskommt,
sind die beiden Takte rum. Das ist so kompakter und lässt sich in ein
einziges Slice packen. Bei so einem Schieberegister ist aber kein Reset
möglich, weder synchron noch asynchron.
Autor: Christian Peters (kron)
Datum:

Hallo,

also die SM sieht so aus:
if(H1'event and H1 = '1') then    -- steigende Flanke
      
 case state is 
   when idle =>
     if (RW='1' and PAGE2='0' and ADDR="10") then
      UART_CS <= '0';
      state <= R1;    
     elsif (RW='0' and PAGE2='0' and ADDR="10") then
      UART_CS  <= '0';
      state <= W1;    
     else
      state <= idle;                       
     end if;                                           
   when R1 =>
    UART_RD <= '0';
    state <= R2;                                
   when R2 =>                    
    UART_CS <= '1';                  
    state <= R3;                                  
   when R3 =>
    state <= R4;
   when R4 =>                    
    UART_RD <= '1';              
    state <= R5;                                    
   when R5 =>                    
    state <= R6;                                       
   when R6 =>            
    state <= R7;          
   when R7 =>            
    state <= idle;                  
   when W1 =>                    
    state <= W2;
   when W2 =>
    UART_CS <= '1';
    state <= W3;
   when W3 =>
    state <= W4; 
   when W4 =>
    UART_WR <= '1';
    state <= W5;
   when W5 =>
    state <= W6; 
   when W6 =>
    state <= W7; 
   when W7 =>
    state <=  idle;  
   when others =>
    state <= idle;
  end case;
end if;

Ich habe den RESET-Zweig schonmal entfernt,
die Meldung bleibt die gleiche, also das RESET ist offensichtlich
nicht das Problem.
Autor: Johnsn (Gast)
Datum:

Hast du den Reset auch von der Sensitivity List entfernt?

Prinzipiell ist die gewünschte Funktion schon gegeben, aber die
Ausführung geschieht halt nicht mit Primitives, sondern Logikzellen, was
wahrscheinlich mehr Platz braucht.

Gruß,
Johnsn
Autor: Falk (Gast)
Datum:

>Ich habe den RESET-Zweig schonmal entfernt,
>die Meldung bleibt die gleiche, also das RESET ist offensichtlich
>nicht das Problem.

Glaub ich nciht. Poste mal den KOMPLETTEN Quelltext.

MFg
Falk
Autor: Christian Peters (kron)
Datum:

Was soll das heißen, glaubst du nicht?
Stell dir vor dem geposteten Text noch ein process (H1) vor,
dann hast du ihn KOMPLETT.

Auch das Entfernen von der Sensivity-List hat übrigens nichts geändert.
Autor: Falk (Gast)
Datum:

@  Christian Peters (kron)

>Auch das Entfernen von der Sensivity-List hat übrigens nichts geändert.

Naja, dann ist es eben so. Manchmal sind die Warnungen von ISE nicht so
100%ig logisch.
Was solls, deine FSM wird trotzdem gut und schnell laufen.

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net