Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1.  
  2. library ieee;
  3. use ieee.std_logic_1164.all;
  4. use ieee.numeric_std.all;
  5. use ieee.std_logic_unsigned.ALL;
  6. use ieee.std_logic_arith.all;
  7. library ieee;
  8. use ieee.std_logic_1164.all;
  9. entity half_adder is
  10. port(i_1 : in STD_LOGIC;
  11. i_2 : in STD_LOGIC;
  12. o_sum : out STD_LOGIC;
  13. o_carry : out STD_LOGIC);
  14. end half_adder;
  15. architecture DATAFLOW of half_adder is
  16. begin
  17. o_carry<=i_1 and i_2;
  18. o_sum<=i_1 xor i_2;
  19. end DATAFLOW;
  20. library ieee;
  21. use ieee.std_logic_1164.all;
  22. entity full_adder is
  23. port( i_carry: in STD_LOGIC;
  24. i_1 : in STD_LOGIC;
  25. i_2 : in STD_LOGIC;
  26. o_sum : out STD_LOGIC;
  27. o_carry : out STD_LOGIC);
  28. end full_adder;
  29.  
  30. architecture STRUCTURAL of full_adder is
  31. component half_adder is
  32. port(a : in STD_LOGIC;
  33. b : in STD_LOGIC;
  34. s : out STD_LOGIC;
  35. c : out STD_LOGIC);
  36. end component;
  37. signal t1,t2,t3: STD_LOGIC;
  38. begin
  39. m1: half_adder port map(a=>i_1,b=>i_2,s=>t1,c=>t2);
  40. m2: half_adder port map(a=>t1,b=>i_carry,s=>o_sum,c=>t3);
  41. o_carry<= t2 or t3;
  42. end STRUCTURAL;
  43. library ieee;
  44. use ieee.std_logic_1164.all;
  45.  
  46. entity ripple_adder is
  47. port( input_1 : in STD_LOGIC_VECTOR(3 downto 0);
  48. input_2 : in STD_LOGIC_VECTOR(3 downto 0);
  49. o_sum : out STD_LOGIC_VECTOR(3 downto 0);
  50. o_carry : out STD_LOGIC);
  51. end ripple_adder;
  52. architecture STRUCTURAL of ripple_adder is
  53. component full_adder is
  54. port( i_carry: in STD_LOGIC;
  55. i_1 : in STD_LOGIC;
  56. i_2 : in STD_LOGIC;
  57. o_sum : out STD_LOGIC;
  58. c : out STD_LOGIC);
  59. end component;
  60. signal t1,t2,t3,t4: STD_LOGIC;
  61.  
  62. begin
  63. m1: full_adder port map(i_1=>input_1(0),i_2=>input_2(0),i_carry=>'0',o_sum=>o_sum(0),c=>t1);
  64. m2: full_adder port map(i_1=>input_1(1),i_2=>input_2(1),i_carry=>t1,o_sum=>o_sum(1),c=>t2);
  65. m3: full_adder port map(i_1=>input_1(2),i_2=>input_1(2),i_carry=>t2,o_sum=>o_sum(2),c=>t3);
  66. m4: full_adder port map(i_1=>input_1(3),i_2=>input_1(3),i_carry=>t3,o_sum=>o_sum(3),c=>t4);
  67. o_carry<=t4;
  68.  
  69. end STRUCTURAL;
  70.  
  71.  
  72. entity lab_tb is
  73. end lab_tb;
  74.  
  75. architecture TESTBENCH of lab_tb is
  76. signal input_1: STD_LOGIC_VECTOR(3 downto 0):="0000";
  77. signal input_2: STD_LOGIC_VECTOR(3 downto 0):="0000";
  78. signal sum: STD_LOGIC_VECTOR(3 downto 0):="0000";
  79. signal carry: STD_LOGIC:='0';
  80. signal validate: STD_LOGIC_VECTOR(4 downto 0):="00000";
  81. signal asserted: STD_LOGIC :='0';
  82. component ripple_adder is
  83. port( input_1 : in STD_LOGIC_VECTOR(3 downto 0);
  84. input_2 : in STD_LOGIC_VECTOR(3 downto 0);
  85. o_sum : out STD_LOGIC_VECTOR(3 downto 0);
  86. o_carry : out STD_LOGIC);
  87. end component;
  88. begin
  89. ADDER_MAP: ripple_adder port map( input_1=>input_1, input_2=>input_2,o_sum=>sum,o_carry=>carry);
  90. validate(3 downto 0) <= conv_std_logic_vector
  91. (to_integer(ieee.numeric_std.unsigned(input_1))
  92. + to_integer(ieee.numeric_std.unsigned(input_2)), sum'length) xor sum;
  93. validate(4) <= carry when
  94. (to_integer(ieee.numeric_std.unsigned(input_1))
  95. + to_integer(ieee.numeric_std.unsigned(input_2)) < 16)
  96. else (not carry);
  97. asserted <= '0' when validate=0 else '1' ;
  98. process
  99. begin
  100. --trivial input
  101. input_1<="0010";
  102. input_2<="0101";
  103. wait for 10 ns;
  104. -- a+b = b+a
  105. input_1<="0101";
  106. input_2<="0010";
  107. wait for 10 ns;
  108. --zero input
  109. input_1<="0000";
  110. input_2<="0000";
  111. wait for 10 ns;
  112. --1 step carry
  113. input_1<="0001";
  114. input_2<="0001";
  115. wait for 10 ns;
  116. --carry sum input
  117. input_1<="0001";
  118. input_2<="0011";
  119. wait for 10 ns;
  120. --ripple carry
  121. input_1<="0111";
  122. input_2<="0011";
  123. wait for 10 ns;
  124. --overflow
  125. input_1<="1111";
  126. input_2<="0001";
  127. wait for 10 ns;
  128. end process;
  129. end TESTBENCH;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement