synth/first/adder.vhdl

58 lines
1.1 KiB
VHDL
Raw Normal View History

2021-02-17 21:20:30 +00:00
library IEEE;
use IEEE.std_logic_1164.all;
entity adder is
port(
a : in std_logic;
b : in std_logic;
c_in : in std_logic;
q : out std_logic;
c_out : out std_logic
);
end entity adder;
architecture behavior of adder is
begin
q <= (a xor b) xor c_in;
c_out <= (a and b) or (a and c_in) or (b and c_in);
end architecture behavior;
---
library IEEE;
use IEEE.std_logic_1164.all;
entity vect_adder is
generic(SIZE: natural := 16);
port(
a : in std_logic_vector(SIZE-1 downto 0);
b : in std_logic_vector(SIZE-1 downto 0);
c_in : in std_logic;
q : out std_logic_vector(SIZE-1 downto 0);
c_out : out std_logic
);
end entity vect_adder;
architecture behavior of vect_adder is
component adder port(a, b, c_in: in std_logic; q, c_out: out std_logic);
end component;
signal carry: std_logic_vector(SIZE downto 0);
begin
adders:
for i in 0 to SIZE-1 generate
addx: adder port map(a(i), b(i), carry(i), q(i), carry(i + 1));
end generate adders;
carry(0) <= c_in;
c_out <= carry(SIZE);
end architecture behavior;