Forum: FPGA, VHDL & Co. StateMachine - aber Warnung Gated Clock


von Andi (Gast)


Lesenswert?

Hallo zusammen,

ich brauche mal wieder Rat. Ich experimentiere gerade mit FPGAs herum
und verwende Xilinx WebPack ISE 6.3i.

Ich habe versucht eine StateMachine zu basteln, aber der Compiler
bringt folgende Warnung.


Netcheck: Gated Clock. Clock net _nXXX is sourced by a combinatorial
pin. Tihs is not good design practice. Use the CE pin to control the
loading of data into the flip-flop.


Mein Quellcode sieht wie folgt aus:

...
signal state, followingstate : integer range 4 downto 0;


process (clk, reset)
begin
  if (reset = '1') then
     state <= 0;
  elsif (rising_edge(clk)) then
     state <= followingstate;
  end if;
end process;

process (state)
begin
  followingstate <= state;

  case state is
    when 1 => ...
    when 2 => ...
    ...
    when others => ...
  end case;
end process;

Vielleicht kann mir ja jemand weiterhelfen und sagen was ich falsch
mache!

Vielen Dank im Voraus

Andi

von TheMason (Gast)


Lesenswert?

Hallo Andi,

ich seh zwar auch nicht direkt was da falsch läuft (bis auf vielleicht
das du im prozess in dem deine state-machine abgearbeitet wird
vielleicht noch ein "if rising_clk (clk) then ... end if" einbauen
solltest, aber bei wenn ich state-machines realisiere mache ich das in
der regel in einem prozess. das sieht dann so aus :

signal state : std_logic_vector (4 downto 0);


process (clk, reset)
begin
  if (reset = '1') then
     state <= "00000";
  elsif (rising_edge(clk)) then

    case state is
      when "00000" => ...
                      state <= "0001";
      when "00001" => ...
                      state <= ...
      when others => ...
                      state <= ...
    end case;
  end if;

end process;

statt einer signal-definition (x downto 0) kann man auch einen typ
definieren. z.b.

type all_states is (init, state_01, state_02, state_03, end_state,
...);

signal state : all_states;

weiß zwar nicht ob dir damit weitergeholfen ist, aber so baue ich die
state-machines immer auf und hab noch nie großartig probleme damit
gehabt.

gruß
rene

von Andi (Gast)


Lesenswert?

Hallo Rene,

danke für den Tipp! Warum 2 Prozesse wenn's auch mit einem geht!
Eigentlich sehr einfach. Und ich spar mir sogar noch die zweite
Variable 'followintstate'.

Probier ich sofort mal aus.


Gruß
Andi

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.