LED blinken FPGA

OP #1776230
Lesenswert?
• ▲
▼
Hi,
ich habe seit paar Tage ein FPGA ED0 bekommen, ich möchte als Anfang ein 
LED blinken lassen.
beim Kompileren kein Fehler, aber nach der Configuration bleibt der LED 
aus:


LIBRARY ieee ;
USE ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;







ENTITY led1 IS
    PORT (
    CLCK :  in std_logic;
    LED  :  out std_logic );
END led1;


ARCHITECTURE blinken OF led1 IS

  signal valeur : std_logic_vector(10 downto 0):="00000000000";
  BEGIN
CLOCKGEN: process (CLCK)
variable cont : natural;



begin

  if rising_edge (CLCK) then

    if cont<1000000 then
      cont := cont + 1;
    else
      cont:=0;
      valeur <=valeur +'1';
      LED<= valeur(0);
    end if;

  end if;
end process CLOCKGEN;



  END blinken;
#1776368
Lesenswert?
• ▲
▼
Hm auf den ersten Blick kann ich keinen Fehler in deinem Code erkennen. 
Bin aber selbst noch recht neu in der Materie :-D. Ich bekam hier den 
Tip Variablen (erstmal) nicht zu nutzen...

Für deinen Counter würde ich einen integer nehmen...
Hab leider kein Board da zum Testen aber ich würde mal folgendes 
probieren...

Hast du auch die Pins des FPGAs richtig verbunden?
Kannst du die LED mit dem FPGA einfach nur einschalten.???

LIBRARY ieee ;
USE ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY led1 IS
    PORT (
    CLCK :  in std_logic;
    LED  :  out std_logic );
END led1;


ARCHITECTURE blinken OF led1 IS
begin
LED <= '1';
end blinken;

Gruß
balou
#1776392
Lesenswert?
• ▲
▼
Ich kenne dein Board nicht.... und den FPGA nicht.....
Meist gibt es mehrere Takteingänge...
Wenn ich raten müsste würde ich den CLK0 nehmen...
Wieviel MHz hat der Quarz?

Warte ich schreibe mal schnell ein paar Zeilen, wie ich meine, dass es 
funktionieren müsste.... (aber wie gesagt ungetestet, habe keine 
Hardware hier)
#1776397
Lesenswert?
• ▲
▼
Was ich noch vergessen habe:

Die Zuweisung "LED <= valeur;" sollte dann ausserhalb des Prozesses 
stehen.


Fuer den Taktteiler wuerde ich eventuell eine FSM aufbauen, das ist dann 
allerdings etwas komplizierter. Mit den Variablen hab ich jetzt selbst 
noch nicht gross gearbeitet und kenn deshalb die Fallstricke dabei auch 
nicht so genau.


Edit:

Fuer meine Variante sollte valeur natuerlich auch erstmal mit 0 
initialisiert werden. Ich wuerde dir auch raten dir einen Simulator wie 
z.B. Modelsim zuzulegen, der hilft bei solchen Problemen oft weiter.
#1776399
Lesenswert?
• ▲
▼
--------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;



entity test is
    Port ( LED : out  STD_LOGIC;
           CLK : in  STD_LOGIC);
end test;

architecture Behavioral of test is
constant XTAL : integer := 50000000; --hier Frequenz des Quarzes 
eintragen
signal COUNTER : integer := 0;  --eventuell noch range 0 to xxx := 0;
signal LED_STATE : std_logic := '0';

begin
BLINKEN : process
begin

wait until rising_edge(CLK);
  if (COUNTER = XTAL -1) then
    COUNTER <= 0;
          LED_STATE <= not LED_STATE;
   else
    COUNTER <= COUNTER + 1;
  end if;
end process BLINKEN;
LED <= LED_STATE;

end Behavioral;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren