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; #######################################################################
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.
könnte mir wer die linkd zu den Threads geben die oben beschrieben sind
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.