VHDL的GENERATE语句实现四位全加器

1位全加器

VHDL的GENERATE语句实现四位全加器_第1张图片  1位全加器接口如上图所示,A为被加数输入端,B为加数输入端,C为进位输入端,CO为进位输出端,S为和数输出端。1位全加器表达式如下: S = A ⨁ B ⨁ C S =A \bigoplus B\bigoplus C S=ABC C O = ( A ⋅ B ) + ( A ⋅ C ) + ( B ⋅ C ) CO =(A \cdot B)+(A \cdot C)+(B \cdot C) CO=(AB)+(AC)+(BC)
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图如下图所示:
VHDL的GENERATE语句实现四位全加器_第2张图片
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;

功能仿真波形:
VHDL的GENERATE语句实现四位全加器_第3张图片

你可能感兴趣的:(FPGA,fpga,vhdl)