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

VHDL/FPGA/Verilog

开发平台:

C/C++

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