mikrocontroller.net

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


Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.