LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY ADD16B IS PORT (AIN,BIN : INSTD_LOGIC_VECTOR(15DOWNTO0); CIN : INSTD_LOGIC ; COUT : OUTSTD_LOGIC; SUM : OUTSTD_LOGIC_VECTOR(15DOWNTO0) ); ENDENTITY ADD16B;
ARCHITECTURE ADD OF ADD16B IS SIGNAL DATA : STD_LOGIC_VECTOR (16DOWNTO0 ); BEGIN DATA <= ('0'& AIN) + ('0' & BIN) + (CONV_STD_LOGIC_VECTOR(0,16) & CIN); COUT <= DATA(16); SUM <= DATA(15DOWNTO0); ENDARCHITECTURE ADD;
LIBRARY ieee; USE ieee.std_logic_1164.all; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY ADD16B_vhd_tst IS END ADD16B_vhd_tst; ARCHITECTURE ADD16B_arch OF ADD16B_vhd_tst IS -- constants -- signals SIGNAL AIN : STD_LOGIC_VECTOR(15DOWNTO0) :=CONV_STD_LOGIC_VECTOR(12,16); SIGNAL BIN : STD_LOGIC_VECTOR(15DOWNTO0) :=CONV_STD_LOGIC_VECTOR(1,16); SIGNAL CIN : STD_LOGIC :='0'; SIGNAL COUT : STD_LOGIC ; SIGNAL SUM : STD_LOGIC_VECTOR(15DOWNTO0); COMPONENT ADD16B PORT ( AIN : INSTD_LOGIC_VECTOR(15DOWNTO0) ; BIN : INSTD_LOGIC_VECTOR(15DOWNTO0) ; CIN : INSTD_LOGIC; COUT : BUFFERSTD_LOGIC; SUM : BUFFERSTD_LOGIC_VECTOR(15DOWNTO0) ); ENDCOMPONENT; BEGIN
AIN <= CONV_STD_LOGIC_VECTOR(12,16), CONV_STD_LOGIC_VECTOR(13,16) AFTER100 NS, CONV_STD_LOGIC_VECTOR(51000,16) AFTER200 NS; BIN <= CONV_STD_LOGIC_VECTOR(1,16), CONV_STD_LOGIC_VECTOR(30,16) AFTER150 NS, CONV_STD_LOGIC_VECTOR(20000,16) AFTER200 NS; CIN <='0', '1'AFTER150 NS, '0'AFTER300 NS; U1 : ADD16B PORTMAP ( AIN => AIN, BIN => BIN, CIN => CIN, COUT => COUT, SUM => SUM ); END ADD16B_arch;
entity add4 is port(a,b:instd_logic_vector(3downto0); ci:instd_logic; s:outstd_logic_vector(3downto0); co:outstd_logic); endentity; architecture add_4 of add4 is SIGNAL c0,c1,c2:std_logic; begin s(0) <= a (0) xor b(0) xor ci; c0<= (a(0) and b(0)) or (a(0) and ci) or (b(0) and ci); s(1) <= a (1) xor b(1) xor c0; c1<= (a(1) and b(1)) or (a(1) and c0) or (b(1) and c0); s(2) <= a (2) xor b(2) xor c1; c2<= (a(2) and b(2)) or (a(2) and c1) or (b(2) and c1); s(3) <= a (3) xor b(3) xor c2; co<= (a(3) and b(3)) or (a(3) and c2) or (b(3) and c2); endarchitecture add_4;
LIBRARY IEEE; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity add8 is port(a8,b8:instd_logic_vector(7downto0); ci8:instd_logic; s8:outstd_logic_vector(7downto0); co8:outstd_logic); endentity; architecture add_8 of add8 is component add4 is port(a,b:instd_logic_vector(3downto0); ci:instd_logic; s:outstd_logic_vector(3downto0); co:outstd_logic); endcomponent; signal c:std_logic; begin
entity ADD16B_CM is PORT (AIN,BIN : INSTD_LOGIC_VECTOR(15DOWNTO0); CIN : INSTD_LOGIC ; COUT : OUTSTD_LOGIC; SUM : OUTSTD_LOGIC_VECTOR(15DOWNTO0) ); END ADD16B_CM; ARCHITECTURE BEHAV OF ADD16B_CM IS COMPONENT add8 port(a8,b8:instd_logic_vector(7downto0); ci8:instd_logic; s8:outstd_logic_vector(7downto0); co8:outstd_logic); ENDCOMPONENT;
SIGNAL DATA : STD_LOGIC_VECTOR(16DOWNTO0); SIGNAL C : STD_LOGIC; BEGIN add16_1: add8 portmap(a8=>AIN(7DOWNTO0),b8=>BIN(7downto0),s8=>SUM(7downto0),ci8=>CIN,co8=>C); add16_2:add8 portmap(a8=>AIN(15downto8),b8=>BIN(15downto8),s8=>SUM(15downto8),ci8=>C,co8=>COUT);
LIBRARY ieee; USE ieee.std_logic_1164.all; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY ADD16B_CMtb_vhd_tst IS END ADD16B_CMtb_vhd_tst; ARCHITECTURE ADD16B_CM_arch OF ADD16B_CMtb_vhd_tst IS SIGNAL AIN : STD_LOGIC_VECTOR(15DOWNTO0) :=CONV_STD_LOGIC_VECTOR(0,16); SIGNAL BIN : STD_LOGIC_VECTOR(15DOWNTO0) :=CONV_STD_LOGIC_VECTOR(0,16); SIGNAL CIN : STD_LOGIC :='0'; SIGNAL COUT : STD_LOGIC; SIGNAL SUM : STD_LOGIC_VECTOR(15DOWNTO0); COMPONENT ADD16B_CM PORT ( AIN : INSTD_LOGIC_VECTOR(15DOWNTO0); BIN : INSTD_LOGIC_VECTOR(15DOWNTO0); CIN : INSTD_LOGIC; COUT : OUTSTD_LOGIC; SUM : OUTSTD_LOGIC_VECTOR(15DOWNTO0) ); ENDCOMPONENT; BEGIN U1 : ADD16B_CM PORTMAP (
AIN => AIN, BIN => BIN, CIN => CIN, COUT => COUT, SUM => SUM );
AIN <= CONV_STD_LOGIC_VECTOR(12,16), CONV_STD_LOGIC_VECTOR(13,16) AFTER100 NS, CONV_STD_LOGIC_VECTOR(50000,16) AFTER200 NS; BIN <= CONV_STD_LOGIC_VECTOR(1,16), CONV_STD_LOGIC_VECTOR(30,16) AFTER150 NS, CONV_STD_LOGIC_VECTOR(20000,16) AFTER200 NS; CIN <='0', '1'AFTER150 NS, '0'AFTER300 NS; END ADD16B_CM_arch;