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


von Summy L. (mightyright)


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;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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:
1
  leds    <=   leds(4) & leds(7 downto 5)     &     leds(2 downto 0) & leds(3);
2
              das hier schiebt nach rechts          und das hier nach links
Und heraus kommt ein Lauflicht...

von Summy L. (mightyright)


Lesenswert?

Vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.