Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3.  
  4. -- Uncomment the following library declaration if using
  5. -- arithmetic functions with Signed or Unsigned values
  6. --use IEEE.NUMERIC_STD.ALL;
  7.  
  8. -- Uncomment the following library declaration if instantiating
  9. -- any Xilinx primitives in this code.
  10. --library UNISIM;
  11. --use UNISIM.VComponents.all;
  12.  
  13. entity m9_adder is
  14.  
  15. generic (width : positive := 5);
  16. port (
  17. cin : in std_logic;
  18. a, b : in std_logic_vector (width - 1 downto 0);
  19. sum_ergebnis : inout std_logic_vector (width - 1 downto 0);
  20. cout : inout std_logic);
  21.  
  22. end m9_adder;
  23.  
  24. architecture Behavioral of m9_adder is
  25.  
  26. component m9_fulladd
  27. port (a, b, cin : in std_logic;
  28. sum , cout : out std_logic);
  29.  
  30. end component;
  31.  
  32.  
  33.  
  34. signal s_null, s_eins, cnext : std_logic_vector (width -1 downto 0);
  35. signal cout_null, cout_eins : std_logic_vector (width -1 downto 0);
  36.  
  37.  
  38. begin
  39.  
  40. -- cnext <= '0';
  41.  
  42. GEN:
  43.  
  44. for i in 0 to width-1 generate
  45.  
  46. genlsb : if i = 0 generate
  47.  
  48. fazero: m9_fulladd
  49.  
  50. port map (
  51. cin => '0',
  52. a => a(i),
  53. b => b(i),
  54. cout => cout_null(i),
  55. sum => s_null(i)
  56. );
  57.  
  58. faone: m9_fulladd
  59. port map (
  60. cin => '1',
  61. a => a(i),
  62. b => b(i),
  63. cout => cout_eins(i),
  64. sum => s_eins(i)
  65. );
  66.  
  67. cnext(i) <= cout_null(i) when cin = '0' else cout_eins(i);
  68.  
  69. sum_ergebnis(i) <= s_null(i) when cin = '0' else s_eins(i);
  70.  
  71.  
  72.  
  73. end generate;
  74.  
  75. genmid: if (i > 0) and (i < width -1)
  76.  
  77. generate
  78.  
  79. fazero: m9_fulladd
  80.  
  81. port map (
  82. cin => '0',
  83. a => a(i),
  84. b => b(i),
  85. cout => cout_null(I),
  86. sum => s_null(i)
  87. );
  88.  
  89. faone: m9_fulladd
  90. port map (
  91. cin => '1',
  92. a => a(i),
  93. b => b(i),
  94. cout => cout_eins(i),
  95. sum => s_eins(i)
  96. );
  97.  
  98. cnext(i) <= cout_null(i) when cnext(i-1) = '0' else cout_eins(i);
  99.  
  100. sum_ergebnis(i) <= s_null(i) when cnext(i-1) = '0' else s_eins(i);
  101.  
  102. end generate;
  103.  
  104. genmsb: if i = (width -1)
  105.  
  106. generate
  107.  
  108. fazero: m9_fulladd
  109.  
  110. port map (
  111. cin => '0',
  112. a => a(i),
  113. b => b(i),
  114. cout => cout_null(i),
  115. sum => s_null(i)
  116. );
  117.  
  118. faone: m9_fulladd
  119. port map (
  120. cin => '1',
  121. a => a(i),
  122. b => b(i),
  123. cout => cout_eins(i),
  124. sum => s_eins(i)
  125. );
  126.  
  127. cout <= cout_null(i) when cnext(i-1) = '0' else cout_eins(i);
  128.  
  129. sum_ergebnis(i) <= s_null(i) when cnext(i-1) = '0' else s_eins(i);
  130.  
  131.  
  132. end generate;
  133.  
  134.  
  135.  
  136.  
  137. --cnext <= cout_null when cnext = '0' else cout_eins;
  138.  
  139. -- sum_ergebnis <= s_null when cnext = '0' else s_eins;
  140.  
  141.  
  142.  
  143.  
  144.  
  145. end generate;
  146.  
  147.  
  148.  
  149.  
  150. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement