Advertisement
Guest User

Lab #2 - Dean Nguyen

a guest
Sep 19th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 4.24 KB | None | 0 0
  1. --Lab #2: XOR_Gate (Dean Nguyen)--
  2.  
  3. --Libraries--
  4. LIBRARY IEEE;
  5. USE IEEE.STD_LOGIC_1164.ALL;
  6. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  7. USE IEEE.NUMERIC_STD.ALL;
  8.  
  9. --Entity--
  10. ENTITY XOR_Gate IS
  11.     GENERIC (   SIZE        : INTEGER   := 8); --Generic with default value
  12.     PORT        (   INPUT       : IN STD_LOGIC_VECTOR((SIZE - 1) DOWNTO 0); --Input by # of inputs
  13.                     OUTPUT  : OUT STD_LOGIC); --Output
  14. END XOR_Gate;
  15.  
  16. --Archtiecture--
  17. ARCHITECTURE behavioral OF XOR_Gate IS
  18.     SIGNAL xor_sig : STD_LOGIC; --Signal to copy output of each loop to
  19.     SIGNAL xor_init: STD_LOGIC; --Signal to copy output of each loop to
  20. BEGIN
  21.    
  22.     xor_proc    : PROCESS(xor_sig, xor_init)
  23.    
  24.     BEGIN
  25.    
  26.         xor_sig <= INPUT(0) XOR INPUT(1); --Start XORing the first two bits
  27.         IF (SIZE > 2) THEN--If more than 2 bits
  28.             FOR i IN 1 TO (SIZE - 1) LOOP --Loop
  29.                 xor_init <= xor_sig; --Set sig to another placeholder sig
  30.                 xor_sig <= INPUT(i) XOR xor_init; --Set sig to XOR of specific input bit and placeholder sig
  31.             END LOOP;
  32.         ELSE
  33.             NEXT;
  34.         END IF;
  35.        
  36.     END PROCESS;
  37.    
  38.     OUTPUT <= xor_sig; --Set output to sig
  39.    
  40. END behavioral;
  41.  
  42. ---------------------------------------------------------------------------
  43.  
  44. --Lab #2: Shift_Reg (Dean Nguyen)--
  45.  
  46. --Libraries--
  47. LIBRARY IEEE;
  48. USE IEEE.STD_LOGIC_1164.ALL;
  49. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  50. USE IEEE.NUMERIC_STD.ALL;
  51.  
  52. --Entity--
  53. ENTITY Shift_Reg IS
  54.     GENERIC (   SIZE                                    : INTEGER   := 8); --Generic with default value
  55.     PORT        (   CLK, RESET_N, LOAD, SERIAL_IN   : IN STD_LOGIC; --Clock, reset, load, serial_in from XOR
  56.                     SEED                                    : IN STD_LOGIC_VECTOR((SIZE - 1) DOWNTO 0); --Random seed input
  57.                     PARALLEL_OUT                        : OUT STD_LOGIC_VECTOR((SIZE - 1) DOWNTO 0)); --Output
  58. END Shift_Reg;
  59.  
  60. --Architecture--
  61. ARCHITECTURE behavioral OF Shift_Reg IS
  62.     SIGNAL SHIFT    : STD_LOGIC_VECTOR((SIZE - 1) DOWNTO 0); --Signal to copy input to
  63. BEGIN
  64.  
  65.     shifter : PROCESS(CLK, RESET_N) --Process where clock and reset changes
  66.    
  67.     BEGIN
  68.    
  69.         IF (RESET_N = '0') THEN --If reset on
  70.             SHIFT <= (OTHERS => '0'); --Shift is 0
  71.         ELSIF (RISING_EDGE(CLK)) THEN --For every clock's rising edge
  72.             IF (LOAD = '1') THEN --If load on
  73.                 SHIFT <= SEED; --Load seed
  74.             ELSE
  75.                 SHIFT((SIZE - 1) DOWNTO 1) <= SHIFT((SIZE - 2) DOWNTO 0); --Shift
  76.                 SHIFT(0) <= SERIAL_IN; --Insert serial_in to LSB
  77.             END IF;
  78.         END IF;
  79.        
  80.     END PROCESS;
  81.    
  82.     PARALLEL_OUT <= SHIFT; --Output signal
  83.    
  84. END behavioral;
  85.  
  86. ---------------------------------------------------------------------------
  87.  
  88. --Lab #2: Shift_Reg_TB (Dean Nguyen)--
  89.  
  90. --Libraries--
  91. LIBRARY IEEE;
  92. USE IEEE.STD_LOGIC_1164.ALL;
  93. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  94. USE IEEE.NUMERIC_STD.ALL;
  95.  
  96. --Entity--
  97. ENTITY Shift_Reg_TB IS
  98. END Shift_Reg_TB;
  99.  
  100. --Architecture--
  101. ARCHITECTURE behavioral OF Shift_Reg_TB IS
  102.  
  103. --Components--
  104. COMPONENT Shift_Reg
  105.     GENERIC (   SIZE                                    : INTEGER   := 8); --Generic with default value
  106.     PORT        (   CLK, RESET_N, LOAD, SERIAL_IN   : IN STD_LOGIC; --Clock, reset, load, serial_in from XOR
  107.                     SEED                                    : IN STD_LOGIC_VECTOR((SIZE - 1) DOWNTO 0); --Random seed input
  108.                     PARALLEL_OUT                        : OUT STD_LOGIC_VECTOR((SIZE - 1) DOWNTO 0)); --Output
  109. END COMPONENT;
  110.  
  111. --Inputs--
  112. SIGNAL CLK_TB           : STD_LOGIC := '0';
  113. SIGNAL RESET_N_TB       : STD_LOGIC := '0';
  114. SIGNAL LOAD_TB          : STD_LOGIC := '0';
  115. SIGNAL SERIAL_IN_TB : STD_LOGIC := '0';
  116. SIGNAL SEED_TB          : STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
  117.  
  118. --Outputs--
  119. SIGNAL PARALLEL_OUT_TB  : STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
  120.  
  121. --Constants--
  122. CONSTANT period     : TIME := 20ns;
  123.  
  124. BEGIN
  125.  
  126. --Clock Process--
  127. clock : PROCESS
  128.  
  129.     BEGIN
  130.    
  131.         CLK_TB <= NOT CLK_TB;
  132.         WAIT FOR period/2;
  133.        
  134.     END PROCESS;
  135.    
  136. --Reset Process--
  137. reset : PROCESS
  138.  
  139.     BEGIN
  140.    
  141.         WAIT FOR 2*period;
  142.         RESET_N_TB <= '1';
  143.         WAIT;
  144.        
  145.     END PROCESS;
  146.  
  147.     uut: Shift_Reg
  148.         GENERIC MAP (
  149.             SIZE => 8)
  150.         PORT MAP (
  151.             CLK => CLK_TB,
  152.             RESET_N => RESET_N_TB,
  153.             LOAD => LOAD_TB,
  154.             SERIAL_IN => SERIAL_IN_TB,
  155.             SEED => SEED_TB,
  156.             PARALLEL_OUT => PARALLEL_OUT_TB);
  157.        
  158.     stimulus    : PROCESS
  159.     BEGIN
  160.        
  161.         SEED_TB <= "00001111";
  162.         SERIAL_IN_TB <= '1';
  163.         RESET_N_TB <= '0';
  164.         WAIT FOR 2*period;
  165.         RESET_N_TB <= '1';
  166.         LOAD_TB <= '1';
  167.         WAIT FOR 2*period;
  168.         FOR i IN 0 TO 9 LOOP
  169.             LOAD_TB <= '0';
  170.             WAIT FOR 2*period;
  171.         END LOOP;
  172.        
  173.     END PROCESS;
  174.    
  175. END behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement