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
Verändern musst du im Grunde nichts, nur ergänzen. Jedoch empfehle ich Rechnen in VHDL mal durchzulesen.
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...
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.