www.mikrocontroller.net

Forum: FPGA, VHDL & Co. kurzer Code zum überprüfen BITTE


Autor: Gerhard L. (gerhard494)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe hier dieses kleine Programm geschrieben.
Es soll über einen Taster auf dem Actel Development Board
eine LED-Reihe zählen lassen. wir haben auf dem Board nur eine
25 MHz Quelle und diese hätte ich zum entprellen benutzt.
Dadurch musste ich sie sehr stark herunterteilen.
Dieses Programm funktioniert jedoch nicht.

Das einzige das Funktioniert ist der reset.
Hätte jmd ne idee was da falsch ist.
Bin kein vhdl Profi ;-)

########################################################

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;


entity ledrei is
port(leds: out std_logic_vector(7 downto 0);
     keyleft, reset, clk: in std_logic);
end ledrei;


architecture steuerung of ledrei is

signal x: std_logic_vector(7 downto 0) := (others=>'0');
signal cntres: std_logic_vector (2 downto 0);
signal clkslow: std_logic := '0';
signal cnt1: integer := 1;
signal cnt2: integer := 1;

begin
      leds <= x;

    clock: process (clk)
    begin

        if (clk'event and clk = '1') then
            if (cnt1 <= 0) then
                cnt2 <= cnt2 - 1;
                cnt1 <= 5;
            else
                cnt1 <= cnt1 - 1;
            end if;

            if (cnt2 <= 0) then
                cnt2 <= 5;
                clkslow <= '1';
            else
                clkslow <= '0';
            end if;
        end if;
    end process clock;


    entprellen: process (clkslow)
  begin

        if (reset = '1') then
            cntres <= (others =>'0');
        elsif (clkslow = '1' ) then
            cntres(2) <= cntres(1);
            cntres(1) <= cntres(0);
            cntres(0) <= keyleft;
        end if;


    end process entprellen;


    gleicherWert: process (clkslow)
    begin

    if (reset = '1') then
            x<= (others => '0');

    elsif (clkslow = '1') then

      if (cntres = "111") then
                x <= x + '1';
            end if;

        end if;

    end process gleicherWert;

    leds <= x;

end steuerung;

#######################################################################

Autor: Matthias F. (flint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin auch kein Profi aber ein, zwei Tipps kann ich dir geben:

Das keyleft ist ein asynchroner Eingang, das heißt, dass du ihn 
einsynchronisieren musst, damit es nicht zu Metastabilität kommen kann.

Du solltest dir auch anschauen, wie ein getakteter Prozess auszusehen 
hat, der gleicherWert macht nur getaktet Sinn, so wie er dasteht wird 
das Synthesetool das aber nicht erkennen und daraus kombinatorische 
Logik bauen.

Und eine eigene Clock sollte man auch nicht so erzeugen sondern 
stattdessen ein Clock Enable verwenden. Dazu gibts hier meines Wissens 
einen guten Artikel, der auch mir das Ganze damals begreifbar gemacht 
hat.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine "Entprelltimeout" ist wohl zu kurz, oder?

Autor: gerh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
könnte mir wer die linkd zu den Threads geben die oben beschrieben sind

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Taktung FPGA/CPLD

Grundsätzlich solltest du in diesem Fall dein gesamtes Design synchron 
machen.
Das heißt, du lässt alle Prozesse nur auf clk (und reset) reagieren, 
nicht auf clkslow. Diesen fragst du nur bei clk'event... ab.

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.