mikrocontroller.net

Forum: FPGA, VHDL & Co. LED blinken FPGA


Autor: Sabine Mühller (zizo)
Datum:

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

Autor: Alexis Sch. (seraptin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie waehre es wenn du

signal valeur : std_logic;

machst und in deiner Routine statt

>valeur <=valeur +'1';
>LED<= valeur(0);

valeur <= not valeur;
LED    <= valeur;

schreibst ?

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es hat leider nich gebracht..

Autor: Johannes D. (balou)
Datum:

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

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja der LED leuchtet

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CLCK habe ich zu CLK0 verbinden, ist das Richtig?

Autor: Johannes D. (balou)
Datum:

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

Autor: Alexis Sch. (seraptin)
Datum:

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

Autor: Johannes D. (balou)
Datum:

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

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
danke für deine Code, ich habe das getestet , aber es funktioniert 
nicht, LED bleibt aus. mein Board ist DE0 der CLCK habe ich mit PIN_G2 
verbunden.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> mein Board ist DE0 der CLCK habe ich mit PIN_G2 verbunden.
Hast du das ausgewürfelt oder geraten oder wie?
G2 ist eine Strippe des VGA-Ausgangs.... :-/
Die Doku sagt, der 50MHz-Oszillator sei an G21 und B12 angeschlossen.

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich habe nicht geraten, das steht im Pin Planner das G2 Clock0 ist. muss 
ich das G21 anschließen?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt den Takteingang verwenden, an dem tatsächlich ein Takt 
anliegt. Und das sind bei deinem DE0-Board (lies mal die Doku dazu) 
nun mal G21 (CLK4) und B12 (CLK9).

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
danke es hat geklappt TACKT auf G21 gelegt

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.