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


von Christian P. (kron)


Lesenswert?

Hallo,

ich hab ein Projekt synthetisiert, und bekomme für diese Statemachine:
1
Analyzing FSM <FSM_2> for best encoding.
2
Optimizing FSM <Inst_ADRDEC_V/state> on signal <state[1:5]> with one-hot encoding.
3
-------------------
4
 State | Encoding
5
-------------------
6
 idle  | 00001
7
 r1    | 00100
8
 r2    | 01000
9
 w1    | 00010
10
 w2    | 10000
eine ganz normale Statemachine halt, diese Infos:
1
Synthesizing (advanced) Unit <FSM_2>.
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.
3
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.
4
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. :)

von Falk (Gast)


Lesenswert?

@ 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

von Jan M. (mueschel)


Lesenswert?

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.

von Christian P. (kron)


Lesenswert?

Hallo,

also die SM sieht so aus:
1
if(H1'event and H1 = '1') then    -- steigende Flanke
2
      
3
 case state is 
4
   when idle =>
5
     if (RW='1' and PAGE2='0' and ADDR="10") then
6
      UART_CS <= '0';
7
      state <= R1;    
8
     elsif (RW='0' and PAGE2='0' and ADDR="10") then
9
      UART_CS  <= '0';
10
      state <= W1;    
11
     else
12
      state <= idle;                       
13
     end if;                                           
14
   when R1 =>
15
    UART_RD <= '0';
16
    state <= R2;                                
17
   when R2 =>                    
18
    UART_CS <= '1';                  
19
    state <= R3;                                  
20
   when R3 =>
21
    state <= R4;
22
   when R4 =>                    
23
    UART_RD <= '1';              
24
    state <= R5;                                    
25
   when R5 =>                    
26
    state <= R6;                                       
27
   when R6 =>            
28
    state <= R7;          
29
   when R7 =>            
30
    state <= idle;                  
31
   when W1 =>                    
32
    state <= W2;
33
   when W2 =>
34
    UART_CS <= '1';
35
    state <= W3;
36
   when W3 =>
37
    state <= W4; 
38
   when W4 =>
39
    UART_WR <= '1';
40
    state <= W5;
41
   when W5 =>
42
    state <= W6; 
43
   when W6 =>
44
    state <= W7; 
45
   when W7 =>
46
    state <=  idle;  
47
   when others =>
48
    state <= idle;
49
  end case;
50
end if;

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

von Johnsn (Gast)


Lesenswert?

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

von Falk (Gast)


Lesenswert?

>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

von Christian P. (kron)


Lesenswert?

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.

von Falk (Gast)


Lesenswert?

@  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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.