Forum: FPGA, VHDL & Co. BinärZähler: + Operand falsch


von Mark (Gast)


Lesenswert?

entity BinaryCounter is
    Port ( rst : in  STD_LOGIC;
           clk : in  STD_LOGIC;
           enable : in  STD_LOGIC;
           binout : out  STD_LOGIC_VECTOR (3 downto 0));
end BinaryCounter;

architecture Behavioral of BinaryCounter is
  signal x: STD_LOGIC_VECTOR (3 downto 0);
begin
  binout <= x;
   Count: process (clk, rst, enable) is
   begin
    if rst = '1' then
      x <= "0000";
    else
      if (clk'event and clk = '1') then
        if (enable = '1') then
          if(x = "1001") then
            x <= "0000";
          else
          x <= x + "0001";
          end if;
        end if;
      end if;
    end if;
  end process;

end Behavioral;


Ich bekomme immer den Fehler:
ERROR:HDLParsers:808 - "D:/VHDL/Zeahler/BinaryCounter.vhd" Line 53. + 
can not have such operands in this context.

Zeile 53 ist: x <= x + "0001";

Bei meinem Kommilitonen läuft das ohne Probleme. Ich sehe leider nicht 
was ich verändern muss

von Daniel M. (daniel__m)


Lesenswert?

Verändern musst du im Grunde nichts, nur ergänzen. Jedoch empfehle ich 
Rechnen in VHDL mal durchzulesen.

von Mark (Gast)


Lesenswert?

ist mir leider noch nicht so ganz klar geworden. muss ich das signal von 
vector auf signed umstellen? Und wie binde ich so ein Paket ein. Ich 
arbeite zum ersten mal mit vhdl...

von Daniel M. (daniel__m)


Lesenswert?

Paket ist evtl. der falsche Begriff dafür, eher Bibliothek. Schau mal 
nach den Schlüsselwörtern library und use.  Das 
Vhdl_Golden_Reference_Guide.pdf (googlen) könnte hilfreich sein.

Warum willst du mit Vorzeichen (signed) arbeiten? Was spricht gegen 
unsigned?

Grüße

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


Lesenswert?

Was steht in deinem Code vor dem ersten Wort "entity"?

Und dann noch das:
Mit std_logic rechnet man nicht.

Nimm die numeric_std und einen unsigned Vektor. Oder noch besser: einen 
eingeschränkten Integer.

von Mark (Gast)


Lesenswert?

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity BinaryCounter is
    Port ( rst : in  STD_LOGIC;
           clk : in  STD_LOGIC;
           enable : in  STD_LOGIC;
           binout : out  STD_LOGIC_VECTOR (3 downto 0));
end BinaryCounter;

architecture Behavioral of BinaryCounter is
  signal x: unsigned (3 downto 0);
begin
  binout <= std_logic_vector(unsigned(x));
   Count: process (clk, rst, enable) is
   begin
    if rst = '1' then
      x <= "0000";
    else
      if (clk'event and clk = '1') then
        if (enable = '1') then
          if(x = "1001") then
            x <= "0000";
          else
          x <= x + "0001";
          end if;
        end if;
      end if;
    end if;
  end process;

end Behavioral;

Hab es soabgeändert und bekomme keine Fehler mehr, testen kann ich es 
erst nächsten Donerstag.

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


Lesenswert?

Mark schrieb:
>           x <= x + "0001";
Da kannst du auch einfach +1 schreiben.

> testen kann ich es erst nächsten Donerstag.
Hast du keinen Simulator?
Falls doch, dann schreib eine kleine Testbench und fertig...

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.