mikrocontroller.net

Forum: FPGA, VHDL & Co. Concatonation in VHDL "& Verkettung"


Autor: Summy Long (mightyright)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo! Kann mir jemand bitte einmal die concatonation in folgendem 
Beispiel erklären? Ich verstehe das nicht. Das Programm lässt acht 
nebeneinander liegende Leds (wie auf Nexys 2 oder Spartan 3 Starter 
Board) von außen nach innen laufen. Das Programm ist mir sonst klar, nur 
eben diese Verbindung mit den & Zeichen verstehe ich nicht. Ich weiß, 
dass man damit bit_vectoren verketten kann. Aber warum laufen die Leds, 
bzw. die bits so ab:
10000001
01000010
00100100
00011000
10000001 etc...

Programm:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity Helloworld is
    Port( CLK : in  std_logic;
          RST : in  std_logic;
          LD  : out std_logic_vector (7 downto 0)
        );
end Helloworld;


architecture Behavioral of Helloworld is

  signal divider : integer range 0 to 50000000;
  signal leds    : std_logic_vector(7 downto 0);     --aus mehreren 
Signalen bestehender Bus

begin

  LD <= leds;

  LedPatternProc: process (CLK, RST) is
  begin
    if RST = '1' then
        divider   <= 50000000;
        leds      <= "10000001";
    else
      if (CLK'event and CLK = '1') then
        if divider = 0 then
          divider <= 50000000;
          leds    <= leds(4) & leds(7 downto 5)   & leds(2 downto 0) & 
leds(3);                 --das hier verstehe ich nicht!
        else
          divider <= divider - 1;
        end if;
      end if;
    end if;
  end process;

end Behavioral;

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

Bewertung
0 lesenswert
nicht lesenswert
Summy Long schrieb:
> leds    <= leds(4) & leds(7 downto 5)   & leds(2 downto 0) & leds(3);
Hier wird einfach die Reihenfolge der LEDs im Vektor so umsortiert:
4 7 6 5 2 1 0 3

Und wenn wir jetzt mal annehmen, dass z.B. der Ausgangswert so 
ausgesehen hat:

1000 0001

dann ist der nächte Schritt der:
0100 0010

Und der nächste:
0010 0100

Und der nächste:
0001 1000

Und dann:
1000 0001

Und schon sieht man, dass da das Bitmuster durchgeschoben wird.
Diese Beschreibung sind also zwei 4-Bit Schieberegister:
  leds    <=   leds(4) & leds(7 downto 5)     &     leds(2 downto 0) & leds(3);
              das hier schiebt nach rechts          und das hier nach links
Und heraus kommt ein Lauflicht...

Autor: Summy Long (mightyright)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!

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.