Arrays vergleichen

Gast #1533074
Lesenswert?
• ▲
▼
Hallo

ich habe mir etwas zusammengeschrieben das eine beliebige Anzahl an 
Eingängen entprellen soll. Der Ansatz läuft über ein Schieberegister.
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.Numeric_std.ALL;
4

5
entity debouncer is
6
   Generic( width : natural :=8);
7
    Port ( Input : in  STD_LOGIC_VECTOR (width-1 downto 0);
8
           Output : out  STD_LOGIC_VECTOR (width-1 downto 0);
9
           CLK : in  STD_LOGIC);
10
end debouncer;
11

12
architecture Behavioral of debouncer is
13
  type RegTyp is array (3 downto 0) of std_logic_vector(width-1 downto 0);
14
  signal ShiftReg : RegTyp := (others=> (others => '0'));
15
  begin
16
   process(CLK) begin
17
    if rising_edge(CLK) then
18
      ShiftReg <= ShiftReg(2 downto 0) & Input;
19
      if (ShiftReg(3)=ShifReg(2)) and (ShiftReg(2)=ShiftReg(1)) and (ShiftReg(1)=Shiftreg(0)) then
20
        Output<=Shiftreg(0);
21
      end if;
22
    end if;
23
   end process;
24
  end Behavioral;

Ich bekomme jetzt den Fehler: HDLParsers:808 - xxx Line 45. = can not 
have such operands in this context.

Wieso kann ich denn nicht 2 Arrays auf Gleichheit überprüfen? Was 
überseh ich?

Danke schon mal
#1533140
Lesenswert?
• ▲
▼
Du übersiehst einen Schreibfehler.
Beim 2ten "shiftreg" fehlt das t -> shifreg

Die Fehlermeldung ist diesbezüglich natürlich sehr tückisch.

Ich empfehle bei sowas modelsim, die Meldungen dort sind meist recht 
gut. In dem Fall war es :

Unknown identifier "shifreg"

So kommt man leicht auf die Lösung ;)


Quartus beherrscht auch brauchbare Fehlermeldungen :

Error (10482): VHDL error at debouncer.vhd(19): object "ShifReg" is used 
but not declared.
Gast #1533147
Lesenswert?
• ▲
▼
Vielen Dank Iulius.
Sowas ist echt doof. War natürlich das erste mal das ich was mit Arrays 
zu tun hatte und dann so ein Fehler, der bringt einen dann aus dem 
Konzept. Ich hab den Typo einfach nicht gesehen.
Danke
Dirk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren