mikrocontroller.net

Forum: FPGA, VHDL & Co. Lauflicht mit VHDL


Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

ich bin VHDL Anfänger und versuche mich gerade an einem einfachen
Lauflicht. Leider sind meine bisherigen Versuche(*) gescheitert. :-(

Vielleicht wäre jemand mal so nett mich auf den richtigen Zug zu
setzen.

Danke

(*)
- rol/ror
- led <= led(6 downto 0) & led(7);

Autor: Jörn (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

schau dir mal den angehängten Code an.

Gruss Jörn

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo kann mir mal jemand das mit dem led<=led(6 downto0) & led(7)
erklären?

LEDSTATE:process(tick,reset)
    begin

     if reset='1' then
  led<="00000001";
     elsif(tick'event and tick = true) then
  led<=led(6 downto 0) & led(7);
        if led(7)='1' then
        led<="00000001";
        end if;
     end if;
end process;

mfg mathias

Autor: :::: (quad colon) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LEDSTATE:process(tick,reset)
begin
   if reset='1' then                 -- Bei anligendem Reset
      led <= "00000001";             -- auf Ausgangszustand
zurücksetzen
   elsif(tick'event and tick = true) then -- alternativ bei steigende

                                          -- Flanke von tick
                                     -- Bitzuweiszung
      led<=led(6 downto 0) & led(7); -- |76543210| <- |65432107|
      if led(7)='1' then             -- wenn höchstwertige LED an,
dann
         led<="00000001";            -- auf Ausgangszustand
zurücksetzen
      end if;
   end if;
end process; 

:::: (quad colon)

Autor: Henrik K. (henrik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorsicht, falls "tick" ein Signal und kein eigens def. Aufzählungtyp
ist: "true" ist weder zwingend eine 0 noch eine 1! Es hängt vom
Synthesetool ab, wie das interpretiert wird.

Gruss Henrik

Autor: undercover (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Wie könnte ich denn die Geschwindigkeit des Lauflichts beeinflussen ???

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Durch den Takt, der am Takteingang des CPLD anliegt, oder durch einen 
vorgeschalteten Teiler (Binärzähler aus Flipflops).

Autor: undercover (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
genau, und wie könnte ich den takt z.b teilen ? muss ich da ein extra 
taktteiler programm schreiben ? oder gibt es eine möglichkeit den takt 
der cpld schon im vorhinein zu teilen ?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einerseits kann man natürlich einen Teiler in die Taktversorgung des 
CPLD schalten. Hardwarelösung sozusagen. Wenn man aber noch Ressourcen 
frei hat, ist es sicher möglich, einen mehrstufigen Binärzähler in VHDL 
zu beschreiben sowie einen Multiplexer, der das Taktsignal für den 
"LEDSTATE" Prozeß ("tick") auf den gewünschten Ausgang des Binärzählers 
schaltet. Dann hat man einen einstellbaren Vorteiler in binären 
Schritten (:2, :4, :8 usw).
VHDL-Code dazu kann ich leider nicht liefern. Aber es sollte gehen.

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
library ieee;
use ieee.std_logic_1164.all;
use work.all;

entity SR8 is
  port (
  RD, CLK: in std_logic;
  A: in std_logic_vector (1 downto 0);
  D: out std_logic_vector (1 to 8)
  );
end entity SR8;

architecture behavior of SR8 is
signal Qn: std_logic_vector (7 downto 0);
signal Q: std_logic_vector (7 downto 0); 
signal X: std_logic_vector (7 downto 0);

begin
 
  SR: process (RD, CLK) is
  begin
    
    if (Qn = "00000000") then
    X(1) <= '1';
    else
    X(1) <= '0';
    end if;
    
    if RD = '1' then
      Qn <= "00000000";
        
        
        
      else 
      if CLK'event and CLK = '1' then
        if (A(0)='1') then        
        Qn <= X(1) & Qn(7 downto 1);
        end if;
        if (A(0) = '0') then
        Qn <= Qn(6 downto 0) & X(1);
        end if;
      end if;
      end if;
      
      
      
--  Ausgabe    
    if (A= "10") then
    Q <= (not (Qn));
    D(1) <= Q(7);
    D(2) <= Q(6);
    D(3) <= Q(5);
    D(4) <= Q(4);
    D(5) <= Q(3);
    D(6) <= Q(2);  
    D(7) <= Q(1);
    D(8) <= Q(0);
    else
    if (A = "00") then
      D(1) <= Qn(7);
      D(2) <= Qn(6);
      D(3) <= Qn(5);
      D(4) <= Qn(4);
      D(5) <= Qn(3);
      D(6) <= Qn(2);  
      D(7) <= Qn(1);
      D(8) <= Qn(0);
      else
      if (A = "11") then
        Q <= (not (Qn));
        D(1) <= Q(7);
        D(2) <= Q(6);
        D(3) <= Q(5);
        D(4) <= Q(4);
        D(5) <= Q(3);
        D(6) <= Q(2);  
        D(7) <= Q(1);
        D(8) <= Q(0);
        else  
          D(1) <= Qn(7);
          D(2) <= Qn(6);
          D(3) <= Qn(5);
          D(4) <= Qn(4);
          D(5) <= Qn(3);
          D(6) <= Qn(2);  
          D(7) <= Qn(1);
          D(8) <= Qn(0);
        end if;
      end if;
    end if;

end process SR;
end architecture behavior;


hier meine Ausführung das mit der Ausgabe geht noch einfacher nur komme 
ich nicht drauf :(

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

Bewertung
0 lesenswert
nicht lesenswert
Marcel schrieb:
> geht noch einfacher nur komme ich nicht drauf
Und warum zerrst du für diese Feststellung einen uralten Thread ans 
Tageslicht? Oder soll das eine Frage sein? Dann fehlt die eigentliche 
Aufgabe...


BTW: 1. man macht keine solchen seltsamen kombinatorisch-getakteten 
Prozesse.
2. die Sensitivliste des Prozesses ist unvollständig: Qn fehlt.

Und zum Thema Lauflicht:
http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html

: Bearbeitet durch Moderator

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.