Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library ieee;
- use ieee.std_logic_1164.all;
- use ieee.numeric_std.all;
- entity akkumulator is
- port (
- d : in std_logic_vector(3 downto 0); -- Daten-Eingang
- ld : in std_logic; -- MUX Steuereingang: 0(gedrückt)=Ergebnis durchschalten, 1(nicht gedrückt)= Dateneingang durchschalten
- sub : in std_logic; -- 0=+, 1=-
- e : in std_logic; -- enable Auffangregister 0(gedrückt)= enabled
- clk : in std_logic; -- Takt
- c : out std_logic; -- LEDG(4) carry out
- q : out std_logic_vector(3 downto 0); -- LEDG(3..0) Daten-Ausgang
- -- debug pins:
- z_out : out std_logic_vector(4 downto 0) -- LEDR(4..0), z4 = carry
- );
- end entity akkumulator;
- architecture arch of akkumulator is
- signal q_int: unsigned(4 downto 0); -- internes Signal von q
- --signal mux_int: unsigned(3 downto 0); -- interner Ausgang des mux
- signal z_int: unsigned(3 downto 0); -- interner Ausgang der ALU
- begin
- p: process(clk)
- begin
- if (rising_edge(clk)) then -- bei steigender ckl Flanke
- if (e = '0') then -- nur etwas ändern wenn e aktiv ist
- if (ld = '1') then -- wenn load
- -- eingang ins Register laden mit carry = 0
- q_int <= '0' & unsigned(d);
- c <= '0';
- else
- if (sub = '0') then -- Addieren
- q_int <= ('0' & q_int(3 downto 0)) + unsigned(d); -- (q_int ohne carry) + eingang
- else -- Subtrahieren
- -- q_int <= ('0' & q_int(3 downto 0)) - unsigned(d); -- (q_int ohne carry) - eingang
- q_int <= ('0' & q_int(3 downto 0)) + ('0' & (not(unsigned(d)) + 1)); -- (q_int ohne carry) - eingang
- end if;
- end if;
- end if;
- end if;
- -- q_int an Ausgänge weiterleiten
- q <= std_logic_vector(q_int)(3 downto 0);
- c <= std_logic(q_int(4));
- end process p;
- end architecture arch;
- -- https://pastebin.com/496V8zwn
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement