1位全加器
1位全加器接口如上圖所示,A爲被加數輸入端,B爲加數輸入端,C爲進位輸入端,CO爲進位輸出端,S爲和數輸出端。1位全加器表達式如下:
1位全加器VHDL代碼:
--ADD1.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADD1 IS
PORT(
A,B,C: IN STD_LOGIC;
S: OUT STD_LOGIC;
CO:OUT STD_LOGIC
);
END ADD1;
ARCHITECTURE BHV OF ADD1 IS
BEGIN
S <= A XOR B XOR C;
CO <= (A AND C)OR(B AND C)OR(A AND B);
END BHV;
4位全加器
4位全加器是將低位的1位全加器的CO端接高位的1位全加器的C端,最低位的1位全加器的C端作爲4位全加器的進位輸入端,最高位的1位全加器的CO端作爲1位全加器的進位輸出端,4個1位全加器的A端和B端分別作爲4位被加數和4位加數的輸入端。4位全加器的RTL圖如下圖所示:
4位全加器VHDL代碼:
--ADD_N.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADD_N IS
GENERIC(N : INTEGER:=4);--改這個N的值可以實現其他位數的全加器
PORT(
A,B: IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
CI: IN STD_LOGIC;
S: OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
CO: OUT STD_LOGIC
);
END ADD_N;
ARCHITECTURE RTL OF ADD_N IS
COMPONENT ADD1
PORT(
A,B,C: IN STD_LOGIC;
S: OUT STD_LOGIC;
CO:OUT STD_LOGIC
);
END COMPONENT;
SIGNAL TEMP: STD_LOGIC_VECTOR(N DOWNTO 0);
BEGIN
TEMP(0) <= CI;
CO <= TEMP(N);
G: FOR I IN 0 TO N-1 GENERATE
U: ADD1 PORT MAP(A=>A(I),B=>B(I),C=>TEMP(I),S=>S(I),CO=>TEMP(I+1));
END GENERATE;
END RTL;
功能仿真波形: