www.mikrocontroller.net

Forum: FPGA, VHDL & Co. LaufendeLED??


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi an allen,

ich habe seid kurzem angefangen VHDL zu lernen, weiß aber nun nicht wie 
ich eine einfache LaufendeLED schreibe.

Will für anfang 3 LED mit unterschiedlichen Zeit (50Mhz) zum Laufen 
bringen. wie kriege ich dass nun ihn??

Danke

Autor: Stefanie B. (sbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was zur Hölle ist eine laufende LED?

Meinst du ein Lauflicht?

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorryy

ja ein Lauflicht

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist sehr einfach. Du nimmst zunächst einen Zähler um Dir ein Clockenable 
zu generieren. Der Zähler stellt eine Art "Teiler" für Dein Taktsignal 
von 50MHz dar. In dem LED-Prozess schreibst Du dann:
led_lau_reg: process(reset, clk)
begin
   if reset = '1' then
      --init
   elsif(rising_edge(clk))then
      if(clockenable = '1')then
         --tue was...
      end if;
   end if;
end process led_lauf_reg;

Das Lauflicht an sich kannst Du mit einer Statemachine oder einen 
einfachen schieberegister realisieren.
Schieberegister mit "001" initialisieren, und bei jedem clockenable um 
eins nach links schieben. Wenn Du "100" hast, einfach wieder auf "001" 
setzen...
Hoffe es hilft weiter...

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super danke
ich werde versuchen und hoffe dass ich es ihn bekomme

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie gehe ich vor? Was muss hier eintragen?? hepl please habe null 
ahnung:((
------------------------------------------------------------------------ 
----------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity lauf_licht is
end lauf_licht;

architecture Behavioral of lauf_licht is

begin


end Behavioral;

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder was muss hier eintragen??

ENTITY laufi IS
END laufi;

ARCHITECTURE behavior OF laufi IS

    -- Component Declaration for the Unit Under Test (UUT)

    COMPONENT lauf_licht
    PORT(
        );
    END COMPONENT;


BEGIN

  -- Instantiate the Unit Under Test (UUT)
   uut: lauf_licht PORT MAP (
        );

   -- No clocks detected in port list. Replace <clock> below with
   -- appropriate port name

   constant <clock>_period := 1ns;

   <clock>_process :process
   begin
    <clock> <= '0';
    wait for <clock>_period/2;
    <clock> <= '1';
    wait for <clock>_period/2;
   end process;


   -- Stimulus process
   stim_proc: process
   begin
      -- hold reset state for 100ms.
      wait for 100ms;

      wait for <clock>_period*10;

      -- insert stimulus here

      wait;
   end process;

END;

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es wäre super nett wenn mir jemand hilft ich komme einfach nicht 
vorwärts und versuch schon seid heute morgen

Danke

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als kurzen Tipp (habe gerade nicht viel Zeit): mach erstmal einen 
einzelnen Blinker... Das muss die entity so aussehen:
entity blinker is
 port( Reset: IN std_logic;
       Clk: IN std_logic;
       Led: OUT std_logic
     );
end entity;

Bei einem Lauflicht musste für die Entity aus dem Led ein 
std_logic_vector(2 downto 0) machen...

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einen einzelnen Blinker und ich krieg das nicht hin, was ist hier Falsch

entity Lauflicht is
    Port ( clk : in  STD_LOGIC;
           reset : in  STD_LOGIC;
           LED_out : out std_logic_vector(2 downto 0));
end Lauflicht;

architecture Behavioral of Lauflicht is

signal led: std_logic_vector(2 downto 0);

begin
Lauflicht: process(reset, clk)
begin
   if reset = '1' then
      --init
   elsif(rising_edge(clk))then
      if(clk = '1')then
         --tue was...
   end if;
   end if;
  end process;

end Behavioral;

Autor: Matthias F. (flint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe nichts Falsches. Ich sehe aber auch nichts richtiges. Dort wo 
"--init" oder "-- tue was" steht, muss Code hin, der etwas macht.

Versuche mal, Beispiele zu finden, zb eine Counterimplementierung, eine 
Flip-Flop Implementierung, ... (hauptsache kleine entities) und mit dem 
Simulator und Herumspielen in die Sprache rein zu finden. Von null 
beginnen kann gerade bei VHDL sehr frustrierend sein.

Autor: Michael Niegl (bigmike47)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich seh da schon einiges falsches. zumindest das:
   elsif(rising_edge(clk))then
      if(clk = '1')then
ist bloedsinn, das zweite if naemlich voellig unnoetig und 
wahrscheinlich unsynthetisierbar

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bin immer noch am rum spielen geht nicht, wie krieg dass dann nun 
hin damit es läuft. danke

Autor: Mike (2) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest schon genauer sagen was du probiert hast und was nicht geht. 
Ansonsten solltest du mal nachschauen wie man einem std_logic_vector 
Werte zuweist und wieder ausliest.

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gehe Schritt für Schritt vor. Baue erstmal einen Zähler mit dem Du ein 
passendes clk_enable generierst. Die Breite des Zählers hängt von Deiner 
Taktfrequenz und der Frequenz des Lauflichtes ab.
Als Beispiel:
signal clk_div: unsigned(15 downto 0);
signal clk_en: std_logic;

clk_div_reg: process(Reset, Clk)
begin
  if(Reset = '1')then
    clk_div <= (others => '0');
    clk_en <= '0';
  elsif(rising_edge(Clk))then
    clk_div <= clk_div + 1;
    if(clk_div = 2**16-1)then
      clk_en <= '1';
    else
      clk_en <= '0';
    end if;
  end if;

Das benutzt Du nun in Deinem Lauflichtprozess als clockenable.

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh das
end process clk_div_reg; 
vergessen ;)

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.