加法器描述.txt
上传用户:easylife05
上传日期:2013-03-21
资源大小:42k
文件大小:3k
源码类别:

VHDL/FPGA/Verilog

开发平台:

C/C++

  1. -- A Variety of Adder Styles
  2. -- download from: www.fpga.com.cn & www.pld.com.cn
  3. ------------------------------------------------------------------------
  4. -- Single-bit adder
  5. ------------------------------------------------------------------------
  6. library IEEE;
  7. use IEEE.std_logic_1164.all;
  8. entity adder is
  9.     port (a    : in std_logic;
  10.           b    : in std_logic;
  11.           cin  : in std_logic;
  12.           sum  : out std_logic;
  13.           cout : out std_logic);
  14. end adder;
  15. -- description of adder using concurrent signal assignments
  16. architecture rtl of adder is
  17. begin
  18.     sum <= (a xor b) xor cin;
  19.     cout <= (a and b) or (cin and a) or (cin and b);
  20. end rtl;
  21. -- description of adder using component instantiation statements
  22. --Miscellaneous Logic Gates 
  23. use work.gates.all;
  24. architecture structural of adder is
  25.     signal xor1_out,
  26.            and1_out,
  27.            and2_out,
  28.            or1_out : std_logic;
  29. begin
  30.     xor1: xorg port map(
  31.                 in1  => a,
  32.                 in2  => b,
  33.                 out1 => xor1_out);
  34.     xor2: xorg port map(
  35.                 in1 => xor1_out,
  36.                 in2 => cin,
  37.                 out1 => sum);
  38.     and1: andg port map(
  39.                 in1 => a,
  40.                 in2 => b,
  41.                 out1   => and1_out);
  42.     or1: org port map(
  43.                 in1 => a,
  44.                 in2 => b,
  45.                 out1   => or1_out);
  46.     and2: andg port map(
  47.                 in1 => cin,
  48.                 in2 => or1_out,
  49.                 out1   => and2_out);
  50.     or2: org port map(
  51.                 in1 => and1_out,
  52.                 in2 => and2_out,
  53.                 out1   => cout);
  54. end structural;
  55. ------------------------------------------------------------------------
  56. -- N-bit adder
  57. -- The width of the adder is determined by generic N
  58. ------------------------------------------------------------------------
  59. library IEEE;
  60. use IEEE.std_logic_1164.all;
  61. entity adderN is
  62.     generic(N : integer := 16);
  63.     port (a    : in std_logic_vector(N downto 1);
  64.           b    : in std_logic_vector(N downto 1);
  65.           cin  : in std_logic;
  66.           sum  : out std_logic_vector(N downto 1);
  67.           cout : out std_logic);
  68. end adderN;
  69. -- structural implementation of the N-bit adder
  70. architecture structural of adderN is
  71.     component adder
  72.         port (a    : in std_logic;
  73.               b    : in std_logic;
  74.               cin  : in std_logic;
  75.               sum  : out std_logic;
  76.               cout : out std_logic);
  77.     end component;
  78.     signal carry : std_logic_vector(0 to N);
  79. begin
  80.     carry(0) <= cin;
  81.     cout <= carry(N);
  82.     -- instantiate a single-bit adder N times
  83.     gen: for I in 1 to N generate
  84.         add: adder port map(
  85.                 a => a(I),
  86.                 b => b(I),
  87.                 cin => carry(I - 1),
  88.                 sum => sum(I),
  89.                 cout => carry(I));
  90.    end generate;
  91. end structural;
  92. -- behavioral implementation of the N-bit adder
  93. architecture behavioral of adderN is
  94. begin
  95.     p1: process(a, b, cin)
  96.         variable vsum : std_logic_vector(N downto 1);
  97.         variable carry : std_logic;
  98.     begin
  99.         carry := cin;
  100.         for i in 1 to N loop
  101.             vsum(i) := (a(i) xor b(i)) xor carry;
  102.             carry := (a(i) and b(i)) or (carry and (a(i) or b(i)));
  103.         end loop;
  104.         sum <= vsum;
  105.         cout <= carry;
  106.     end process p1;
  107. end behavioral;