Forum: FPGA, VHDL & Co. Inkrementierung nicht möglich?


von Franz Peter Zantis (Gast)


Lesenswert?

Ich möchte ein Monoflop kreieren. Leider wird die Zeile

counter1 <= counter1 + 1; angekmeckert mit der Bemerkung

+ can not have such operands in this context.

Ich verstehe nicht warum. Weiß es jemand?



begin

  monoflop1:  process (clk)
  begin
    if rising_edge(clk) then
      if clear1 = '0' then
        LED1 <= '0';
        counter1 <= counter1 + 1;
      end if;
    end if;
  end process monoflop1;

  trigger1proc: process(trigger1)
  begin
    if rising_edge(trigger1) then
      clear1 <= '0';
    end if;
  end process trigger1proc;

  clear1proc: process(counter1)
  begin
    if counter1 = x"FFFFFF" then
      clear1 <= '1';
      counter1 <= x"000000";
      LED1 <= '1';
    end if;
  end process clear1proc;


end Behavioral;

von Harray (Gast)


Lesenswert?

zeig doch mal die Signaldeklaration von counter1

von Harray (Gast)


Lesenswert?

Und die Bibliotheken, die du einbindest.

Also einfach mal das ganze Modul ;-')

von Christian R. (supachris)


Lesenswert?

Franz Peter Zantis schrieb:
> counter1 <= counter1 + 1; angekmeckert mit der Bemerkung
>
> + can not have such operands in this context.

Du benutzt wahrscheinlich std_logic_vector als Signal, dann geht das 
nicht. Benutze mal am besten Integer oder wenigstens unsigned dafür.

von Franz Peter Zantis (Gast)


Lesenswert?

Harry hatte den richtigen Hinweis! Ich habe die Bibliotheken
IEEE.STD_LOGIC_ARITH.ALL;
IEEE.STD_LOGIC_UNSIGNED.ALL;
eingebunden und damit geht es - bzw. jetzt wird etwas anderes bemängelt.

von Hokuspokus (Gast)


Lesenswert?

Du musst die Bibliothek ieee.numeric_std einbinden, den Vektor zu 
unsigned machen, inkrementieren, und wieder zurück zu std_logic_vector.

counter1 <= std_logic_vector(unsigned(counter1) + 1);

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


Lesenswert?

Franz Peter Zantis schrieb:
> IEEE.STD_LOGIC_ARITH.ALL; IEEE.STD_LOGIC_UNSIGNED.ALL;
> eingebunden und damit geht es
Siehe Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"


> bzw. jetzt wird etwas anderes bemängelt.
Ja klar: du darfst das Signal counter1 nicht aus 2 Prozessen 
treiben...
Sieh dir doch einfach mal an, wie andere sowas machen.

: Bearbeitet durch Moderator
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.