kurzer Code zum überprüfen BITTE

OP #832208
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;

#######################################################################
#832336
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.