-- IEEE Library LIBRARY ieee; USE ieee.std_logic_1164.all; use IEEE.std_logic_unsigned.all; ENTITY DCT_cos IS --generic value for the number of bits ofr the input and the output generic (n:integer :=16); --no of bits PORT( Clk : IN STD_LOGIC; -- Global Clk Reset : IN STD_LOGIC; -- Global Reset --in from the controller Cont_Reg_En :IN STD_LOGIC_VECTOR (7 downto 0); Cont_MUX2_Enable :IN STD_LOGIC_VECTOR (2 downto 0); Cont_MUX_Enable :IN STD_LOGIC_VECTOR (2 downto 0); --in to the Reg -- out of the mux Mux2_OUT : OUT STD_LOGIC_VECTOR (n-1 downto 0) ); END DCT_cos; architecture DCT_cos_arch of DCT_cos is -- signals i.e the output of the Reg signal cos1_sig :STD_LOGIC_VECTOR (n-1 downto 0):= (others => '0'); signal cos2_sig :STD_LOGIC_VECTOR (n-1 downto 0):=(others => '0'); signal cos3_sig :STD_LOGIC_VECTOR (n-1 downto 0):=(others => '0'); signal cos4_sig :STD_LOGIC_VECTOR (n-1 downto 0):=(others => '0'); signal cos5_sig :STD_LOGIC_VECTOR (n-1 downto 0):=(others => '0'); signal cos6_sig :STD_LOGIC_VECTOR (n-1 downto 0):=(others => '0'); signal cos7_sig :STD_LOGIC_VECTOR (n-1 downto 0):=(others => '0'); signal cos8_sig :STD_LOGIC_VECTOR (n-1 downto 0):=(others => '0'); --Component declaration of DCT_Reg COMPONENT DCT_Fofx PORT( Clk : IN STD_LOGIC; -- Global Clk Reset : IN STD_LOGIC; -- Global Reset --in from the controller Cont_Reg_En :IN STD_LOGIC_VECTOR (7 downto 0); Cont_MUX_Enable :IN STD_LOGIC_VECTOR (2 downto 0); --in to the Reg fx1 :IN STD_LOGIC_VECTOR (n-1 downto 0); fx2 :IN STD_LOGIC_VECTOR (n-1 downto 0); fx3 :IN STD_LOGIC_VECTOR (n-1 downto 0); fx4 :IN STD_LOGIC_VECTOR (n-1 downto 0); fx5 :IN STD_LOGIC_VECTOR (n-1 downto 0); fx6 :IN STD_LOGIC_VECTOR (n-1 downto 0); fx7 :IN STD_LOGIC_VECTOR (n-1 downto 0); fx8 :IN STD_LOGIC_VECTOR (n-1 downto 0); -- out of the mux Mux_OUT : OUT STD_LOGIC_VECTOR (n-1 downto 0) ); END COMPONENT; begin --Portmap DCT_Fofx_1:DCT_Fofx PORT MAP ( Clk => Clk, Reset => Reset, --in from the controller Cont_Reg_En => Cont_Reg_En, Cont_MUX_Enable => Cont_MUX_Enable, --in to the Reg fx1 => cos1_sig, fx2 => cos2_sig, fx3 => cos3_sig, fx4 => cos4_sig, fx5 => cos5_sig, fx6 => cos6_sig, fx7 => cos7_sig, fx8 => cos8_sig, -- out of the mux Mux_OUT => Mux2_OUT ); process(Cont_MUX2_Enable) begin --MUX which gives the needed output according to the Cont_MUX_Enable case Cont_MUX2_Enable is when "000" => cos1_sig <= "0000000000000001"; cos2_sig <= "0000000000000011"; cos3_sig <= "0000000000000111"; cos4_sig <= "1000000010001000"; cos5_sig <= "0000000000000000"; cos6_sig <= "0000001000001000"; cos7_sig <= "1000100000010000"; cos8_sig <= "0010000000000010"; when "001" => cos1_sig <= "0001000000000001"; cos2_sig <= "0000001000000001"; cos3_sig <= "0000000001000001"; cos4_sig <= "1000010000000010"; cos5_sig <= "0000000001000100"; cos6_sig <= "0000000100010000"; cos7_sig <= "0000010000100000"; cos8_sig <= "0000000001000000"; when "010" => cos1_sig <= "0101000000000000"; cos2_sig <= "0001100000000000"; cos3_sig <= "0000110000000000"; cos4_sig <= "0000100100000000"; cos5_sig <= "1000101000000000"; cos6_sig <= "0000100001000000"; cos7_sig <= "1000100000100000"; cos8_sig <= "0000000000000000"; when "011" => cos1_sig <= "0100010000001000"; cos2_sig <= "1000000000010000"; cos3_sig <= "0100000100000000"; cos4_sig <= "0000100000100010"; cos5_sig <= "1000000100001000"; cos6_sig <= "1000000000000001"; cos7_sig <= "1000000000000011"; cos8_sig <= "0110000000000000"; when "100" => cos1_sig <= "0001000010000000"; cos2_sig <= "0000100010000000"; cos3_sig <= "1000000100000000"; cos4_sig <= "0100000000000001"; cos5_sig <= "0010000000000010"; cos6_sig <= "1000010000000001"; cos7_sig <= "0000000100000001"; cos8_sig <= "0000000010001000"; when "101" => cos1_sig <= "0000001000000000"; cos2_sig <= "0000100000000000"; cos3_sig <= "0000000010000000"; cos4_sig <= "0000100000000000"; cos5_sig <= "0000000001000000"; cos6_sig <= "0000010000000000"; cos7_sig <= "0000000100000000"; cos8_sig <= "0000000010000000"; when "110" => cos1_sig <= "1000000001000000"; cos2_sig <= "0100000000000010"; cos3_sig <= "1000000000000001"; cos4_sig <= "1000000000001001"; cos5_sig <= "1000010000000000"; cos6_sig <= "0001000000000000"; cos7_sig <= "0000000001000000"; cos8_sig <= "0000010000000000"; when "111" => cos1_sig <= "0100000000001000"; cos2_sig <= "0000001001000000"; cos3_sig <= "0010000100000000"; cos4_sig <= "0000010000010000"; cos5_sig <= "0010000000000001"; cos6_sig <= "0000010000000100"; cos7_sig <= "1000000010000000"; cos8_sig <= "0000000000000000"; when others => cos1_sig <= "0000000000000000"; cos2_sig <= "0000000000000000"; cos3_sig <= "0000000000000000"; cos4_sig <= "0000000000000000"; cos5_sig <= "0000000000000000"; cos6_sig <= "0000000000000000"; cos7_sig <= "0000000000000000"; cos8_sig <= "0000000000000000"; end case; end process; end DCT_cos_arch;