Forum: FPGA, VHDL & Co. Verzögerung mit Schieberegister in VHDL


von Sebastian (Gast)


Lesenswert?

Hallo,

Ich versuche gerade einen Verzögerer in VHDL zu bauen. Leider 
funktioniert das noch nicht.
1
ARCHITECTURE verzoegerung_architecture OF verzoegerung IS
2
  signal reg : std_logic_vector (3 downto 0);
3
  BEGIN
4
5
  verarbeitung: process(clk,dv)
6
  begin
7
    if clk'event and clk='1'then
8
      if rst = '1' then
9
        reg <= b"0000";
10
      end if;
11
      reg sll 1; 
12
      reg(0) <= dv;
13
      read_enable <= reg(2);      
14
    end if;    
15
  end process verarbeitung;
16
END verzoegerung_architecture;
Wo liegt mein Fehler? Es sieht so aus als würde er meine shiftoperation 
nicht mögen.

von Daniel R. (Gast)


Lesenswert?

Hallo!

Schreib anstatt:
reg sll 1;
reg(0) <= dv;

das hier:
reg <= reg(reg'length-2 downto 0) & dv;

von Sebastian (Gast)


Lesenswert?

Kannst du kurz erklären wie das funktioniert?

von Daniel R. (Gast)


Lesenswert?

reg <= reg(reg'length-2 downto 0) & dv;

wenn du dir das Register vorstellst:
reg = "3210" (wobei die Zahlen jetzt die Bitstellen symbolisieren)

reg(reg'length-2 downto 0) & dv;

d.h. die Stellen "210" werden vom alten Registerwert genommen und mit "& 
dv" wird dein neues Bit "0" hinzugefügt!
Bit 3 geht verloren (da linksschieben)

ergo: reg(neu) = unteren 3 Bits von reg_alt und das dv-Bit auf Stelle 0 
dazusetzen.

von Thomas Ulrich (Gast)


Lesenswert?

Soll das sll ein ShiftLeft werden ?

von Sebastian (Gast)


Lesenswert?

Ja, hatte ich so in verschiedenen VHDL Anleitungen gefunden.

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.