Advertisement
Guest User

Lab #1 - VHDL (Dean Nguyen)

a guest
Sep 12th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 5.61 KB | None | 0 0
  1. --Lab #1: Logical AND (Dean Nguyen)
  2. LIBRARY IEEE;
  3. USE IEEE.STD_LOGIC_1164.ALL;
  4. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  5. USE IEEE.NUMERIC_STD.ALL;
  6.  
  7. ENTITY logical_and IS
  8.     PORT(   a, b    : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  9.             z       : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  10. END logical_and;
  11.  
  12. ARCHITECTURE behavioral OF logical_and IS
  13. BEGIN
  14.     z <= a and b;
  15. END behavioral;
  16.  
  17. --Lab #1: Logical OR (Dean Nguyen)
  18. LIBRARY IEEE;
  19. USE IEEE.STD_LOGIC_1164.ALL;
  20. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  21. USE IEEE.NUMERIC_STD.ALL;
  22.  
  23. ENTITY logical_or IS
  24.     PORT(   a, b    : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  25.             z       : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  26. END logical_or;
  27.  
  28. ARCHITECTURE behavioral OF logical_or IS
  29. BEGIN
  30.     z <= a or b;
  31. END behavioral;
  32.  
  33. --Lab #1: Logical XOR (Dean Nguyen)
  34. LIBRARY IEEE;
  35. USE IEEE.STD_LOGIC_1164.ALL;
  36. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  37. USE IEEE.NUMERIC_STD.ALL;
  38.  
  39. ENTITY logical_xor IS
  40.     PORT(   a, b    : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  41.             z       : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  42. END logical_xor;
  43.  
  44. ARCHITECTURE behavioral OF logical_xor IS
  45. BEGIN
  46.     z <= a xor b;
  47. END behavioral;
  48.  
  49. --Lab #1: Shift Right Arithmetic (Dean Nguyen)
  50. LIBRARY IEEE;
  51. USE IEEE.STD_LOGIC_1164.ALL;
  52. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  53. USE IEEE.NUMERIC_STD.ALL;
  54.  
  55. ENTITY shift_right_arithmetic IS
  56.     PORT(   din : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  57.             numin   : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  58.             dout    : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  59. END shift_right_arithmetic;
  60.  
  61. ARCHITECTURE behavioral OF shift_right_arithmetic IS
  62. SIGNAL shift_signed_r   : SIGNED(3 DOWNTO 0);
  63. SIGNAL num_shift            : INTEGER;
  64. BEGIN
  65.     num_shift <= to_integer(unsigned(numin));
  66.     shift_signed_r <= shift_right(signed(din), num_shift);
  67.     dout <= std_logic_vector(shift_signed_r);
  68. END behavioral;
  69.  
  70. --Lab #1: Shift Right Logical (Dean Nguyen)
  71. LIBRARY IEEE;
  72. USE IEEE.STD_LOGIC_1164.ALL;
  73. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  74. USE IEEE.NUMERIC_STD.ALL;
  75.  
  76. ENTITY shift_right_logical IS
  77.     PORT(   din : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  78.             numin   : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  79.             dout    : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  80. END shift_right_logical;
  81.  
  82. ARCHITECTURE behavioral OF shift_right_logical IS
  83. SIGNAL shift_signed_r   : UNSIGNED(3 DOWNTO 0);
  84. SIGNAL num_shift            : INTEGER;
  85. BEGIN
  86.     num_shift <= to_integer(unsigned(numin));
  87.     shift_signed_r <= shift_right(unsigned(din), num_shift);
  88.     dout <= std_logic_vector(shift_signed_r);
  89. END behavioral;
  90.  
  91. --Lab #1: ALU (Dean Nguyen)
  92. LIBRARY IEEE;
  93. USE IEEE.STD_LOGIC_1164.ALL;
  94. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  95. USE IEEE.NUMERIC_STD.ALL;
  96.  
  97. ENTITY ALU IS
  98.     PORT( Operand1, Operand2, OPCODE    : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  99.             Result                          : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  100. END ALU;
  101.  
  102. ARCHITECTURE structural OF ALU IS
  103.  
  104. COMPONENT logical_and
  105.     PORT(   a, b    : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  106.             z       : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  107. END COMPONENT;
  108.  
  109. COMPONENT logical_or
  110.     PORT(   a, b    : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  111.             z       : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  112. END COMPONENT;
  113.  
  114. COMPONENT logical_xor
  115.     PORT(   a, b    : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  116.             z       : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  117. END COMPONENT;
  118.  
  119. COMPONENT shift_right_arithmetic
  120.     PORT(   din : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  121.             numin   : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  122.             dout    : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  123. END COMPONENT;
  124.  
  125. COMPONENT shift_right_logical
  126.     PORT(   din : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  127.             numin   : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  128.             dout    : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  129. END COMPONENT;
  130.  
  131. SIGNAL result_reg_and, result_reg_or, result_reg_xor, result_reg_srl, result_reg_sra    : STD_LOGIC_VECTOR(3 DOWNTO 0);
  132.  
  133. BEGIN
  134.  
  135. log_and     : logical_and   PORT MAP(   a => Operand1, b => Operand2, z => result_reg_and);
  136. log_or  : logical_or    PORT MAP(   a => Operand1, b => Operand2, z => result_reg_or);
  137. log_xor : logical_xor   PORT MAP(   a => Operand1, b => Operand2, z => result_reg_xor);
  138. s_ra        : shift_right_arithmetic    PORT MAP(   din => Operand1, numin => Operand2, dout => result_reg_sra);
  139. s_rl        : shift_right_logical       PORT MAP(   din => Operand1, numin => Operand2, dout => result_reg_srl);
  140.  
  141.     PROCESS(OPCODE)
  142.     BEGIN
  143.         CASE OPCODE IS
  144.             WHEN "1000" =>
  145.                 Result <= result_reg_or;
  146.             WHEN "1010" =>
  147.                 Result <= result_reg_and;
  148.             WHEN "1011" =>
  149.                 Result <= result_reg_xor;
  150.             WHEN "1101" =>
  151.                 Result <= result_reg_srl;
  152.             WHEN "1110" =>
  153.                 Result <= result_reg_sra;
  154.             WHEN OTHERS =>
  155.                 Result <= "0000";
  156.         END CASE;
  157.     END PROCESS;
  158. END structural;
  159.  
  160. --Lab #1: ALU_TB (Dean Nguyen)
  161. LIBRARY IEEE;
  162. USE IEEE.STD_LOGIC_1164.ALL;
  163. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  164. USE IEEE.NUMERIC_STD.ALL;
  165.  
  166. ENTITY ALU_TB IS
  167. END ALU_TB;
  168.  
  169. ARCHITECTURE behavioral OF ALU_TB IS
  170. COMPONENT ALU
  171.     PORT( Operand1, Operand2, OPCODE    : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  172.             Result                          : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
  173. END COMPONENT;
  174.  
  175. --Inputs--
  176. SIGNAL Op1_TB : STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0');
  177. SIGNAL Op2_TB : STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0');
  178. SIGNAL Code_TB : STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0');
  179. --Outputs--
  180. SIGNAL Result_TB : STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0');
  181.  
  182. BEGIN
  183.     uut: ALU PORT MAP (
  184.         Operand1 => Op1_TB,
  185.         Operand2 => Op2_TB,
  186.         OPCODE => Code_TB,
  187.         Result => Result_TB);
  188.    
  189.     stimulus : PROCESS
  190.     BEGIN
  191.         FOR i IN 0 TO 15 LOOP
  192.             Code_TB <= STD_LOGIC_VECTOR(to_unsigned(i, 4));
  193.             IF ((i = 8) or (i = 10) or (i = 11) or (i = 13) or (i = 14)) THEN
  194.                 FOR j IN 0 TO 15 LOOP
  195.                     Op1_TB <= STD_LOGIC_VECTOR(to_unsigned(j, 4));
  196.                         FOR k IN 0 TO 15 LOOP
  197.                             Op2_TB <= STD_LOGIC_VECTOR(to_unsigned(k, 4));
  198.                             WAIT for 100 ns;
  199.                         END LOOP;
  200.                 END LOOP;
  201.             ELSE
  202.                 NEXT;
  203.             END IF;
  204.         END LOOP;
  205.         WAIT;
  206.     END PROCESS;
  207. END behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement