---------------------------------------------------------------------------------- -- Company: -- Engineer: -- -- Create Date: -- Design Name: -- Module Name: REBELController - Behavioral -- Project Name: -- Target Devices: -- Tool versions: -- Description: -- -- Dependencies: -- -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------------- -- ===================================================================================== -- ===================================================================================== library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.all; -- The REBEL controller is responsible for scanning in the configuration information and -- scanning out the results from the launch capture test. This path is always configured -- in path insertion mode -- (11) followed by a 0 (if leftmost FF is insertion point) or a -- 1 otherwise. The parameter 'insertion point' identifies the PUT output to be monitored -- FFs are numbered from left to right in the design, starting at REBEL_LENGTH_NB-1 on the -- left. So insertion point 0 refers to rightmost PUT. entity REBELController is Generic( DESIGN_WIDTH_LB: integer := 8; DESIGN_WIDTH_NB: integer := 256; REBEL_LENGTH_LB: integer := 9; REBEL_LENGTH_NB: integer := 272); port( Clk: in std_logic; RESET: in std_logic; do_config: in std_logic; insertion_point: in std_logic_vector(REBEL_LENGTH_LB-1 downto 0); ready: out std_logic; REBEL_load: out std_logic; REBEL_ConfigIns: out std_logic_vector(REBEL_LENGTH_NB+2 downto 0) ); end REBELController; architecture beh of REBELController is type state_type is (idle, load); signal state_reg, state_next: state_type; signal ready_reg, ready_next: std_logic; signal REBEL_g1_Ds: std_logic_vector(79 downto 0); signal REBEL_g2_Ds: std_logic_vector(63 downto 0); signal REBEL_g3_Ds: std_logic_vector(63 downto 0); signal REBEL_g4_Ds: std_logic_vector(66 downto 0); begin REBEL_ConfigIns <= REBEL_g4_Ds & REBEL_g3_Ds & REBEL_g2_Ds & REBEL_g1_Ds; with ( insertion_point ) select REBEL_g1_Ds <= "11111111111111111111111111111111111111111111111111111111111111011111111111111111" when "000000000", "11111111111111111111111111111111111111111111111111111111111110111111111111111111" when "000000001", "11111111111111111111111111111111111111111111111111111111111101111111111111111111" when "000000010", "11111111111111111111111111111111111111111111111111111111111011111111111111111111" when "000000011", "11111111111111111111111111111111111111111111111111111111110111111111111111111111" when "000000100", "11111111111111111111111111111111111111111111111111111111101111111111111111111111" when "000000101", "11111111111111111111111111111111111111111111111111111111011111111111111111111111" when "000000110", "11111111111111111111111111111111111111111111111111111110111111111111111111111111" when "000000111", "11111111111111111111111111111111111111111111111111111101111111111111111111111111" when "000001000", "11111111111111111111111111111111111111111111111111111011111111111111111111111111" when "000001001", "11111111111111111111111111111111111111111111111111110111111111111111111111111111" when "000001010", "11111111111111111111111111111111111111111111111111101111111111111111111111111111" when "000001011", "11111111111111111111111111111111111111111111111111011111111111111111111111111111" when "000001100", "11111111111111111111111111111111111111111111111110111111111111111111111111111111" when "000001101", "11111111111111111111111111111111111111111111111101111111111111111111111111111111" when "000001110", "11111111111111111111111111111111111111111111111011111111111111111111111111111111" when "000001111", "11111111111111111111111111111111111111111111110111111111111111111111111111111111" when "000010000", "11111111111111111111111111111111111111111111101111111111111111111111111111111111" when "000010001", "11111111111111111111111111111111111111111111011111111111111111111111111111111111" when "000010010", "11111111111111111111111111111111111111111110111111111111111111111111111111111111" when "000010011", "11111111111111111111111111111111111111111101111111111111111111111111111111111111" when "000010100", "11111111111111111111111111111111111111111011111111111111111111111111111111111111" when "000010101", "11111111111111111111111111111111111111110111111111111111111111111111111111111111" when "000010110", "11111111111111111111111111111111111111101111111111111111111111111111111111111111" when "000010111", "11111111111111111111111111111111111111011111111111111111111111111111111111111111" when "000011000", "11111111111111111111111111111111111110111111111111111111111111111111111111111111" when "000011001", "11111111111111111111111111111111111101111111111111111111111111111111111111111111" when "000011010", "11111111111111111111111111111111111011111111111111111111111111111111111111111111" when "000011011", "11111111111111111111111111111111110111111111111111111111111111111111111111111111" when "000011100", "11111111111111111111111111111111101111111111111111111111111111111111111111111111" when "000011101", "11111111111111111111111111111111011111111111111111111111111111111111111111111111" when "000011110", "11111111111111111111111111111110111111111111111111111111111111111111111111111111" when "000011111", "11111111111111111111111111111101111111111111111111111111111111111111111111111111" when "000100000", "11111111111111111111111111111011111111111111111111111111111111111111111111111111" when "000100001", "11111111111111111111111111110111111111111111111111111111111111111111111111111111" when "000100010", "11111111111111111111111111101111111111111111111111111111111111111111111111111111" when "000100011", "11111111111111111111111111011111111111111111111111111111111111111111111111111111" when "000100100", "11111111111111111111111110111111111111111111111111111111111111111111111111111111" when "000100101", "11111111111111111111111101111111111111111111111111111111111111111111111111111111" when "000100110", "11111111111111111111111011111111111111111111111111111111111111111111111111111111" when "000100111", "11111111111111111111110111111111111111111111111111111111111111111111111111111111" when "000101000", "11111111111111111111101111111111111111111111111111111111111111111111111111111111" when "000101001", "11111111111111111111011111111111111111111111111111111111111111111111111111111111" when "000101010", "11111111111111111110111111111111111111111111111111111111111111111111111111111111" when "000101011", "11111111111111111101111111111111111111111111111111111111111111111111111111111111" when "000101100", "11111111111111111011111111111111111111111111111111111111111111111111111111111111" when "000101101", "11111111111111110111111111111111111111111111111111111111111111111111111111111111" when "000101110", "11111111111111101111111111111111111111111111111111111111111111111111111111111111" when "000101111", "11111111111111011111111111111111111111111111111111111111111111111111111111111111" when "000110000", "11111111111110111111111111111111111111111111111111111111111111111111111111111111" when "000110001", "11111111111101111111111111111111111111111111111111111111111111111111111111111111" when "000110010", "11111111111011111111111111111111111111111111111111111111111111111111111111111111" when "000110011", "11111111110111111111111111111111111111111111111111111111111111111111111111111111" when "000110100", "11111111101111111111111111111111111111111111111111111111111111111111111111111111" when "000110101", "11111111011111111111111111111111111111111111111111111111111111111111111111111111" when "000110110", "11111110111111111111111111111111111111111111111111111111111111111111111111111111" when "000110111", "11111101111111111111111111111111111111111111111111111111111111111111111111111111" when "000111000", "11111011111111111111111111111111111111111111111111111111111111111111111111111111" when "000111001", "11110111111111111111111111111111111111111111111111111111111111111111111111111111" when "000111010", "11101111111111111111111111111111111111111111111111111111111111111111111111111111" when "000111011", "11011111111111111111111111111111111111111111111111111111111111111111111111111111" when "000111100", "10111111111111111111111111111111111111111111111111111111111111111111111111111111" when "000111101", "01111111111111111111111111111111111111111111111111111111111111111111111111111111" when "000111110", "11111111111111111111111111111111111111111111111111111111111111111111111111111111" when others; with ( insertion_point ) select REBEL_g2_Ds <= "1111111111111111111111111111111111111111111111111111111111111110" when "000111111", "1111111111111111111111111111111111111111111111111111111111111101" when "001000000", "1111111111111111111111111111111111111111111111111111111111111011" when "001000001", "1111111111111111111111111111111111111111111111111111111111110111" when "001000010", "1111111111111111111111111111111111111111111111111111111111101111" when "001000011", "1111111111111111111111111111111111111111111111111111111111011111" when "001000100", "1111111111111111111111111111111111111111111111111111111110111111" when "001000101", "1111111111111111111111111111111111111111111111111111111101111111" when "001000110", "1111111111111111111111111111111111111111111111111111111011111111" when "001000111", "1111111111111111111111111111111111111111111111111111110111111111" when "001001000", "1111111111111111111111111111111111111111111111111111101111111111" when "001001001", "1111111111111111111111111111111111111111111111111111011111111111" when "001001010", "1111111111111111111111111111111111111111111111111110111111111111" when "001001011", "1111111111111111111111111111111111111111111111111101111111111111" when "001001100", "1111111111111111111111111111111111111111111111111011111111111111" when "001001101", "1111111111111111111111111111111111111111111111110111111111111111" when "001001110", "1111111111111111111111111111111111111111111111101111111111111111" when "001001111", "1111111111111111111111111111111111111111111111011111111111111111" when "001010000", "1111111111111111111111111111111111111111111110111111111111111111" when "001010001", "1111111111111111111111111111111111111111111101111111111111111111" when "001010010", "1111111111111111111111111111111111111111111011111111111111111111" when "001010011", "1111111111111111111111111111111111111111110111111111111111111111" when "001010100", "1111111111111111111111111111111111111111101111111111111111111111" when "001010101", "1111111111111111111111111111111111111111011111111111111111111111" when "001010110", "1111111111111111111111111111111111111110111111111111111111111111" when "001010111", "1111111111111111111111111111111111111101111111111111111111111111" when "001011000", "1111111111111111111111111111111111111011111111111111111111111111" when "001011001", "1111111111111111111111111111111111110111111111111111111111111111" when "001011010", "1111111111111111111111111111111111101111111111111111111111111111" when "001011011", "1111111111111111111111111111111111011111111111111111111111111111" when "001011100", "1111111111111111111111111111111110111111111111111111111111111111" when "001011101", "1111111111111111111111111111111101111111111111111111111111111111" when "001011110", "1111111111111111111111111111111011111111111111111111111111111111" when "001011111", "1111111111111111111111111111110111111111111111111111111111111111" when "001100000", "1111111111111111111111111111101111111111111111111111111111111111" when "001100001", "1111111111111111111111111111011111111111111111111111111111111111" when "001100010", "1111111111111111111111111110111111111111111111111111111111111111" when "001100011", "1111111111111111111111111101111111111111111111111111111111111111" when "001100100", "1111111111111111111111111011111111111111111111111111111111111111" when "001100101", "1111111111111111111111110111111111111111111111111111111111111111" when "001100110", "1111111111111111111111101111111111111111111111111111111111111111" when "001100111", "1111111111111111111111011111111111111111111111111111111111111111" when "001101000", "1111111111111111111110111111111111111111111111111111111111111111" when "001101001", "1111111111111111111101111111111111111111111111111111111111111111" when "001101010", "1111111111111111111011111111111111111111111111111111111111111111" when "001101011", "1111111111111111110111111111111111111111111111111111111111111111" when "001101100", "1111111111111111101111111111111111111111111111111111111111111111" when "001101101", "1111111111111111011111111111111111111111111111111111111111111111" when "001101110", "1111111111111110111111111111111111111111111111111111111111111111" when "001101111", "1111111111111101111111111111111111111111111111111111111111111111" when "001110000", "1111111111111011111111111111111111111111111111111111111111111111" when "001110001", "1111111111110111111111111111111111111111111111111111111111111111" when "001110010", "1111111111101111111111111111111111111111111111111111111111111111" when "001110011", "1111111111011111111111111111111111111111111111111111111111111111" when "001110100", "1111111110111111111111111111111111111111111111111111111111111111" when "001110101", "1111111101111111111111111111111111111111111111111111111111111111" when "001110110", "1111111011111111111111111111111111111111111111111111111111111111" when "001110111", "1111110111111111111111111111111111111111111111111111111111111111" when "001111000", "1111101111111111111111111111111111111111111111111111111111111111" when "001111001", "1111011111111111111111111111111111111111111111111111111111111111" when "001111010", "1110111111111111111111111111111111111111111111111111111111111111" when "001111011", "1101111111111111111111111111111111111111111111111111111111111111" when "001111100", "1011111111111111111111111111111111111111111111111111111111111111" when "001111101", "0111111111111111111111111111111111111111111111111111111111111111" when "001111110", "1111111111111111111111111111111111111111111111111111111111111111" when others; with ( insertion_point ) select REBEL_g3_Ds <= "1111111111111111111111111111111111111111111111111111111111111110" when "001111111", "1111111111111111111111111111111111111111111111111111111111111101" when "010000000", "1111111111111111111111111111111111111111111111111111111111111011" when "010000001", "1111111111111111111111111111111111111111111111111111111111110111" when "010000010", "1111111111111111111111111111111111111111111111111111111111101111" when "010000011", "1111111111111111111111111111111111111111111111111111111111011111" when "010000100", "1111111111111111111111111111111111111111111111111111111110111111" when "010000101", "1111111111111111111111111111111111111111111111111111111101111111" when "010000110", "1111111111111111111111111111111111111111111111111111111011111111" when "010000111", "1111111111111111111111111111111111111111111111111111110111111111" when "010001000", "1111111111111111111111111111111111111111111111111111101111111111" when "010001001", "1111111111111111111111111111111111111111111111111111011111111111" when "010001010", "1111111111111111111111111111111111111111111111111110111111111111" when "010001011", "1111111111111111111111111111111111111111111111111101111111111111" when "010001100", "1111111111111111111111111111111111111111111111111011111111111111" when "010001101", "1111111111111111111111111111111111111111111111110111111111111111" when "010001110", "1111111111111111111111111111111111111111111111101111111111111111" when "010001111", "1111111111111111111111111111111111111111111111011111111111111111" when "010010000", "1111111111111111111111111111111111111111111110111111111111111111" when "010010001", "1111111111111111111111111111111111111111111101111111111111111111" when "010010010", "1111111111111111111111111111111111111111111011111111111111111111" when "010010011", "1111111111111111111111111111111111111111110111111111111111111111" when "010010100", "1111111111111111111111111111111111111111101111111111111111111111" when "010010101", "1111111111111111111111111111111111111111011111111111111111111111" when "010010110", "1111111111111111111111111111111111111110111111111111111111111111" when "010010111", "1111111111111111111111111111111111111101111111111111111111111111" when "010011000", "1111111111111111111111111111111111111011111111111111111111111111" when "010011001", "1111111111111111111111111111111111110111111111111111111111111111" when "010011010", "1111111111111111111111111111111111101111111111111111111111111111" when "010011011", "1111111111111111111111111111111111011111111111111111111111111111" when "010011100", "1111111111111111111111111111111110111111111111111111111111111111" when "010011101", "1111111111111111111111111111111101111111111111111111111111111111" when "010011110", "1111111111111111111111111111111011111111111111111111111111111111" when "010011111", "1111111111111111111111111111110111111111111111111111111111111111" when "010100000", "1111111111111111111111111111101111111111111111111111111111111111" when "010100001", "1111111111111111111111111111011111111111111111111111111111111111" when "010100010", "1111111111111111111111111110111111111111111111111111111111111111" when "010100011", "1111111111111111111111111101111111111111111111111111111111111111" when "010100100", "1111111111111111111111111011111111111111111111111111111111111111" when "010100101", "1111111111111111111111110111111111111111111111111111111111111111" when "010100110", "1111111111111111111111101111111111111111111111111111111111111111" when "010100111", "1111111111111111111111011111111111111111111111111111111111111111" when "010101000", "1111111111111111111110111111111111111111111111111111111111111111" when "010101001", "1111111111111111111101111111111111111111111111111111111111111111" when "010101010", "1111111111111111111011111111111111111111111111111111111111111111" when "010101011", "1111111111111111110111111111111111111111111111111111111111111111" when "010101100", "1111111111111111101111111111111111111111111111111111111111111111" when "010101101", "1111111111111111011111111111111111111111111111111111111111111111" when "010101110", "1111111111111110111111111111111111111111111111111111111111111111" when "010101111", "1111111111111101111111111111111111111111111111111111111111111111" when "010110000", "1111111111111011111111111111111111111111111111111111111111111111" when "010110001", "1111111111110111111111111111111111111111111111111111111111111111" when "010110010", "1111111111101111111111111111111111111111111111111111111111111111" when "010110011", "1111111111011111111111111111111111111111111111111111111111111111" when "010110100", "1111111110111111111111111111111111111111111111111111111111111111" when "010110101", "1111111101111111111111111111111111111111111111111111111111111111" when "010110110", "1111111011111111111111111111111111111111111111111111111111111111" when "010110111", "1111110111111111111111111111111111111111111111111111111111111111" when "010111000", "1111101111111111111111111111111111111111111111111111111111111111" when "010111001", "1111011111111111111111111111111111111111111111111111111111111111" when "010111010", "1110111111111111111111111111111111111111111111111111111111111111" when "010111011", "1101111111111111111111111111111111111111111111111111111111111111" when "010111100", "1011111111111111111111111111111111111111111111111111111111111111" when "010111101", "0111111111111111111111111111111111111111111111111111111111111111" when "010111110", "1111111111111111111111111111111111111111111111111111111111111111" when others; with ( insertion_point ) select REBEL_g4_Ds <= "1111111111111111111111111111111111111111111111111111111111111111110" when "010111111", "1111111111111111111111111111111111111111111111111111111111111111101" when "011000000", "1111111111111111111111111111111111111111111111111111111111111111011" when "011000001", "1111111111111111111111111111111111111111111111111111111111111110111" when "011000010", "1111111111111111111111111111111111111111111111111111111111111101111" when "011000011", "1111111111111111111111111111111111111111111111111111111111111011111" when "011000100", "1111111111111111111111111111111111111111111111111111111111110111111" when "011000101", "1111111111111111111111111111111111111111111111111111111111101111111" when "011000110", "1111111111111111111111111111111111111111111111111111111111011111111" when "011000111", "1111111111111111111111111111111111111111111111111111111110111111111" when "011001000", "1111111111111111111111111111111111111111111111111111111101111111111" when "011001001", "1111111111111111111111111111111111111111111111111111111011111111111" when "011001010", "1111111111111111111111111111111111111111111111111111110111111111111" when "011001011", "1111111111111111111111111111111111111111111111111111101111111111111" when "011001100", "1111111111111111111111111111111111111111111111111111011111111111111" when "011001101", "1111111111111111111111111111111111111111111111111110111111111111111" when "011001110", "1111111111111111111111111111111111111111111111111101111111111111111" when "011001111", "1111111111111111111111111111111111111111111111111011111111111111111" when "011010000", "1111111111111111111111111111111111111111111111110111111111111111111" when "011010001", "1111111111111111111111111111111111111111111111101111111111111111111" when "011010010", "1111111111111111111111111111111111111111111111011111111111111111111" when "011010011", "1111111111111111111111111111111111111111111110111111111111111111111" when "011010100", "1111111111111111111111111111111111111111111101111111111111111111111" when "011010101", "1111111111111111111111111111111111111111111011111111111111111111111" when "011010110", "1111111111111111111111111111111111111111110111111111111111111111111" when "011010111", "1111111111111111111111111111111111111111101111111111111111111111111" when "011011000", "1111111111111111111111111111111111111111011111111111111111111111111" when "011011001", "1111111111111111111111111111111111111110111111111111111111111111111" when "011011010", "1111111111111111111111111111111111111101111111111111111111111111111" when "011011011", "1111111111111111111111111111111111111011111111111111111111111111111" when "011011100", "1111111111111111111111111111111111110111111111111111111111111111111" when "011011101", "1111111111111111111111111111111111101111111111111111111111111111111" when "011011110", "1111111111111111111111111111111111011111111111111111111111111111111" when "011011111", "1111111111111111111111111111111110111111111111111111111111111111111" when "011100000", "1111111111111111111111111111111101111111111111111111111111111111111" when "011100001", "1111111111111111111111111111111011111111111111111111111111111111111" when "011100010", "1111111111111111111111111111110111111111111111111111111111111111111" when "011100011", "1111111111111111111111111111101111111111111111111111111111111111111" when "011100100", "1111111111111111111111111111011111111111111111111111111111111111111" when "011100101", "1111111111111111111111111110111111111111111111111111111111111111111" when "011100110", "1111111111111111111111111101111111111111111111111111111111111111111" when "011100111", "1111111111111111111111111011111111111111111111111111111111111111111" when "011101000", "1111111111111111111111110111111111111111111111111111111111111111111" when "011101001", "1111111111111111111111101111111111111111111111111111111111111111111" when "011101010", "1111111111111111111111011111111111111111111111111111111111111111111" when "011101011", "1111111111111111111110111111111111111111111111111111111111111111111" when "011101100", "1111111111111111111101111111111111111111111111111111111111111111111" when "011101101", "1111111111111111111011111111111111111111111111111111111111111111111" when "011101110", "1111111111111111110111111111111111111111111111111111111111111111111" when "011101111", "1111111111111111101111111111111111111111111111111111111111111111111" when "011110000", "1111111111111111011111111111111111111111111111111111111111111111111" when "011110001", "1111111111111110111111111111111111111111111111111111111111111111111" when "011110010", "1111111111111101111111111111111111111111111111111111111111111111111" when "011110011", "1111111111111011111111111111111111111111111111111111111111111111111" when "011110100", "1111111111110111111111111111111111111111111111111111111111111111111" when "011110101", "1111111111101111111111111111111111111111111111111111111111111111111" when "011110110", "1111111111011111111111111111111111111111111111111111111111111111111" when "011110111", "1111111110111111111111111111111111111111111111111111111111111111111" when "011111000", "1111111101111111111111111111111111111111111111111111111111111111111" when "011111001", "1111111011111111111111111111111111111111111111111111111111111111111" when "011111010", "1111110111111111111111111111111111111111111111111111111111111111111" when "011111011", "1111101111111111111111111111111111111111111111111111111111111111111" when "011111100", "1111011111111111111111111111111111111111111111111111111111111111111" when "011111101", "1110111111111111111111111111111111111111111111111111111111111111111" when "011111110", "1101111111111111111111111111111111111111111111111111111111111111111" when "011111111", "1111111111111111111111111111111111111111111111111111111111111111111" when others; -- state and register logic process(Clk, RESET) begin if (RESET = '1') then state_reg <= idle; ready_reg <= '1'; elsif (Clk'event and Clk = '1') then state_reg <= state_next; ready_reg <= ready_next; end if; end process; -- Combo logic for state machine, iteration cnter and shift operations in data path process (state_reg, do_config, ready_reg) begin ready_next <= ready_reg; state_next <= state_reg; REBEL_load <= '0'; -- ===================== case state_reg is when idle => if ( do_config = '1' ) then ready_next <= '0'; state_next <= load; end if; when load => REBEL_load <= '1'; ready_next <= '1'; state_next <= idle; end case; end process; ready <= ready_reg; end beh;