library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity FM is port(CLK2,RESET : in std_logic; CLK : buffer std_logic; FMIN : buffer std_logic_vector(7 downto 0); FMOD : out std_logic_vector(11 downto 0)); end FM; architecture RTL of FM is -- clock osc signal sub_count : std_logic_vector(2 downto 0); signal SIN,COS : std_logic; -- local osc count signal COUNT : std_logic_vector(3 downto 0); -- extend signal FMIN9 : std_logic_vector(8 downto 0); -- mpx signal M1 : std_logic_vector(8 downto 0); signal M2 : std_logic_vector(8 downto 0); -- div signal xy : std_logic_vector(2 downto 0); signal xy2 : std_logic_vector(2 downto 0); signal A111 : std_logic_vector(7 downto 0); signal A211 : std_logic_vector(7 downto 0); -- 1 stage signed signal xy1 : std_logic_vector(2 downto 0); signal A11 : std_logic_vector(7 downto 0); signal A21 : std_logic_vector(7 downto 0); -- 2 stage cmp signal my_cmp_f : std_logic; -- 3 stage chg signal A121 : std_logic_vector(7 downto 0); signal A221 : std_logic_vector(7 downto 0); -- 4,5,6,7 stage DIV signal div_m1 : std_logic_vector(15 downto 0); signal div_m2 : std_logic_vector(16 downto 0); signal div_m0 : std_logic_vector(15 downto 0); signal div_m01 : std_logic_vector(15 downto 0); signal a0 : std_logic_vector(8 downto 0); signal a2 : std_logic_vector(8 downto 0); signal div_y0 : std_logic_vector(15 downto 0); -- 8,9,10,11,12 stage DIV signal div_m21 : std_logic_vector(15 downto 0); signal div_m22 : std_logic_vector(16 downto 0); signal div_m20 : std_logic_vector(15 downto 0); signal div_m201 : std_logic_vector(15 downto 0); signal a20 : std_logic_vector(8 downto 0); signal a22 : std_logic_vector(8 downto 0); signal y : std_logic_vector(8 downto 0); -- atan signal atan_y : std_logic_vector(13 downto 0); -- sub signal fmod0 : std_logic_vector(13 downto 0); begin -- clock osc CLK2=8CLK process(RESET,CLK2) variable t : std_logic_vector(2 downto 0); begin if(RESET='1') then t:="000"; sub_count<=t; CLK<=sub_count(2); elsif(CLK2'event and CLK2='1') then t:=t+'1'; sub_count<=t; CLK<=sub_count(2); end if; end process; -- Frequency Modulation DATA MAKE process(RESET,CLK) variable sub_count2 : std_logic_vector(9 downto 0); begin if(RESET='1') then sub_count2:="0000000000"; FMIN<="00000000"; elsif(CLK'event and CLK='0') then sub_count2:=sub_count2+1; case sub_count2 is when "0000000000" => FMIN<="01111111"; when "0000000001" => FMIN<="01110110"; when "0000000010" => FMIN<="01011011"; when "0000000011" => FMIN<="00110010"; when "0000000100" => FMIN<="00000010"; when "0000000101" => FMIN<="11010001"; when "0000000110" => FMIN<="10101000"; when "0000000111" => FMIN<="10001011"; when "0000001000" => FMIN<="10000000"; when "0000001001" => FMIN<="10001000"; when "0000001010" => FMIN<="10100010"; when "0000001011" => FMIN<="11001010"; when "0000001100" => FMIN<="11111010"; when "0000001101" => FMIN<="00101011"; when "0000001110" => FMIN<="01010110"; when "0000001111" => FMIN<="01110011"; when "0000010000" => FMIN<="01111111"; when "0000010001" => FMIN<="01111001"; when "0000010010" => FMIN<="01100000"; when "0000010011" => FMIN<="00111001"; when "0000010100" => FMIN<="00001001"; when "0000010101" => FMIN<="11011000"; when "0000010110" => FMIN<="10101101"; when "0000010111" => FMIN<="10001110"; when "0000011000" => FMIN<="10000000"; when "0000011001" => FMIN<="10000110"; when "0000011010" => FMIN<="10011110"; when "0000011011" => FMIN<="11000100"; when "0000011100" => FMIN<="11110100"; when "0000011101" => FMIN<="00100101"; when "0000011110" => FMIN<="01010001"; when "0000011111" => FMIN<="01110001"; when "0000100000" => FMIN<="01111111"; when "0000100001" => FMIN<="01111011"; when "0000100010" => FMIN<="01100100"; when "0000100011" => FMIN<="00111110"; when "0000100100" => FMIN<="00001111"; when "0000100101" => FMIN<="11011101"; when "0000100110" => FMIN<="10110001"; when "0000100111" => FMIN<="10010001"; when "0000101000" => FMIN<="10000001"; when "0000101001" => FMIN<="10000100"; when "0000101010" => FMIN<="10011010"; when "0000101011" => FMIN<="11000000"; when "0000101100" => FMIN<="11101111"; when "0000101101" => FMIN<="00100000"; when "0000101110" => FMIN<="01001101"; when "0000101111" => FMIN<="01101110"; when "0000110000" => FMIN<="01111111"; when "0000110001" => FMIN<="01111100"; when "0000110010" => FMIN<="01100111"; when "0000110011" => FMIN<="01000010"; when "0000110100" => FMIN<="00010011"; when "0000110101" => FMIN<="11100010"; when "0000110110" => FMIN<="10110101"; when "0000110111" => FMIN<="10010011"; when "0000111000" => FMIN<="10000010"; when "0000111001" => FMIN<="10000011"; when "0000111010" => FMIN<="10011000"; when "0000111011" => FMIN<="10111100"; when "0000111100" => FMIN<="11101011"; when "0000111101" => FMIN<="00011101"; when "0000111110" => FMIN<="01001010"; when "0000111111" => FMIN<="01101100"; when "0001000000" => FMIN<="01111110"; when "0001000001" => FMIN<="01111101"; when "0001000010" => FMIN<="01101001"; when "0001000011" => FMIN<="01000101"; when "0001000100" => FMIN<="00010111"; when "0001000101" => FMIN<="11100101"; when "0001000110" => FMIN<="10110111"; when "0001000111" => FMIN<="10010101"; when "0001001000" => FMIN<="10000010"; when "0001001001" => FMIN<="10000011"; when "0001001010" => FMIN<="10010110"; when "0001001011" => FMIN<="10111010"; when "0001001100" => FMIN<="11101000"; when "0001001101" => FMIN<="00011010"; when "0001001110" => FMIN<="01001000"; when "0001001111" => FMIN<="01101011"; when "0001010000" => FMIN<="01111110"; when "0001010001" => FMIN<="01111101"; when "0001010010" => FMIN<="01101010"; when "0001010011" => FMIN<="01000111"; when "0001010100" => FMIN<="00011001"; when "0001010101" => FMIN<="11100111"; when "0001010110" => FMIN<="10111001"; when "0001010111" => FMIN<="10010101"; when "0001011000" => FMIN<="10000010"; when "0001011001" => FMIN<="10000010"; when "0001011010" => FMIN<="10010110"; when "0001011011" => FMIN<="10111001"; when "0001011100" => FMIN<="11100111"; when "0001011101" => FMIN<="00011001"; when "0001011110" => FMIN<="01000111"; when "0001011111" => FMIN<="01101010"; when "0001100000" => FMIN<="01111110"; when "0001100001" => FMIN<="01111110"; when "0001100010" => FMIN<="01101011"; when "0001100011" => FMIN<="01000111"; when "0001100100" => FMIN<="00011001"; when "0001100101" => FMIN<="11100111"; when "0001100110" => FMIN<="10111001"; when "0001100111" => FMIN<="10010110"; when "0001101000" => FMIN<="10000011"; when "0001101001" => FMIN<="10000010"; when "0001101010" => FMIN<="10010101"; when "0001101011" => FMIN<="10111001"; when "0001101100" => FMIN<="11100111"; when "0001101101" => FMIN<="00011001"; when "0001101110" => FMIN<="01000111"; when "0001101111" => FMIN<="01101010"; when "0001110000" => FMIN<="01111110"; when "0001110001" => FMIN<="01111110"; when "0001110010" => FMIN<="01101010"; when "0001110011" => FMIN<="01000111"; when "0001110100" => FMIN<="00011001"; when "0001110101" => FMIN<="11100111"; when "0001110110" => FMIN<="10111000"; when "0001110111" => FMIN<="10010101"; when "0001111000" => FMIN<="10000010"; when "0001111001" => FMIN<="10000011"; when "0001111010" => FMIN<="10010110"; when "0001111011" => FMIN<="10111010"; when "0001111100" => FMIN<="11101000"; when "0001111101" => FMIN<="00011010"; when "0001111110" => FMIN<="01001000"; when "0001111111" => FMIN<="01101011"; when "0010000000" => FMIN<="01111110"; when "0010000001" => FMIN<="01111101"; when "0010000010" => FMIN<="01101001"; when "0010000011" => FMIN<="01000101"; when "0010000100" => FMIN<="00010111"; when "0010000101" => FMIN<="11100101"; when "0010000110" => FMIN<="10110111"; when "0010000111" => FMIN<="10010100"; when "0010001000" => FMIN<="10000010"; when "0010001001" => FMIN<="10000011"; when "0010001010" => FMIN<="10010111"; when "0010001011" => FMIN<="10111100"; when "0010001100" => FMIN<="11101011"; when "0010001101" => FMIN<="00011101"; when "0010001110" => FMIN<="01001010"; when "0010001111" => FMIN<="01101101"; when "0010010000" => FMIN<="01111110"; when "0010010001" => FMIN<="01111101"; when "0010010010" => FMIN<="01101000"; when "0010010011" => FMIN<="01000011"; when "0010010100" => FMIN<="00010100"; when "0010010101" => FMIN<="11100010"; when "0010010110" => FMIN<="10110100"; when "0010010111" => FMIN<="10010010"; when "0010011000" => FMIN<="10000001"; when "0010011001" => FMIN<="10000100"; when "0010011010" => FMIN<="10011010"; when "0010011011" => FMIN<="10111111"; when "0010011100" => FMIN<="11101110"; when "0010011101" => FMIN<="00100001"; when "0010011110" => FMIN<="01001110"; when "0010011111" => FMIN<="01101111"; when "0010100000" => FMIN<="01111111"; when "0010100001" => FMIN<="01111011"; when "0010100010" => FMIN<="01100101"; when "0010100011" => FMIN<="00111111"; when "0010100100" => FMIN<="00001111"; when "0010100101" => FMIN<="11011101"; when "0010100110" => FMIN<="10110000"; when "0010100111" => FMIN<="10010000"; when "0010101000" => FMIN<="10000001"; when "0010101001" => FMIN<="10000101"; when "0010101010" => FMIN<="10011101"; when "0010101011" => FMIN<="11000011"; when "0010101100" => FMIN<="11110011"; when "0010101101" => FMIN<="00100110"; when "0010101110" => FMIN<="01010010"; when "0010101111" => FMIN<="01110001"; when "0010110000" => FMIN<="01111111"; when "0010110001" => FMIN<="01111010"; when "0010110010" => FMIN<="01100001"; when "0010110011" => FMIN<="00111010"; when "0010110100" => FMIN<="00001001"; when "0010110101" => FMIN<="11011000"; when "0010110110" => FMIN<="10101100"; when "0010110111" => FMIN<="10001101"; when "0010111000" => FMIN<="10000000"; when "0010111001" => FMIN<="10000111"; when "0010111010" => FMIN<="10100001"; when "0010111011" => FMIN<="11001001"; when "0010111100" => FMIN<="11111010"; when "0010111101" => FMIN<="00101100"; when "0010111110" => FMIN<="01010111"; when "0010111111" => FMIN<="01110100"; when "0011000000" => FMIN<="01111111"; when "0011000001" => FMIN<="01111000"; when "0011000010" => FMIN<="01011101"; when "0011000011" => FMIN<="00110100"; when "0011000100" => FMIN<="00000010"; when "0011000101" => FMIN<="11010001"; when "0011000110" => FMIN<="10100111"; when "0011000111" => FMIN<="10001010"; when "0011001000" => FMIN<="10000000"; when "0011001001" => FMIN<="10001010"; when "0011001010" => FMIN<="10100110"; when "0011001011" => FMIN<="11010000"; when "0011001100" => FMIN<="00000001"; when "0011001101" => FMIN<="00110011"; when "0011001110" => FMIN<="01011100"; when "0011001111" => FMIN<="01110111"; when "0011010000" => FMIN<="01111111"; when "0011010001" => FMIN<="01110101"; when "0011010010" => FMIN<="01010111"; when "0011010011" => FMIN<="00101101"; when "0011010100" => FMIN<="11111011"; when "0011010101" => FMIN<="11001010"; when "0011010110" => FMIN<="10100001"; when "0011010111" => FMIN<="10000111"; when "0011011000" => FMIN<="10000000"; when "0011011001" => FMIN<="10001101"; when "0011011010" => FMIN<="10101011"; when "0011011011" => FMIN<="11010111"; when "0011011100" => FMIN<="00001001"; when "0011011101" => FMIN<="00111001"; when "0011011110" => FMIN<="01100001"; when "0011011111" => FMIN<="01111010"; when "0011100000" => FMIN<="01111111"; when "0011100001" => FMIN<="01110010"; when "0011100010" => FMIN<="01010010"; when "0011100011" => FMIN<="00100110"; when "0011100100" => FMIN<="11110100"; when "0011100101" => FMIN<="11000100"; when "0011100110" => FMIN<="10011101"; when "0011100111" => FMIN<="10000101"; when "0011101000" => FMIN<="10000001"; when "0011101001" => FMIN<="10010000"; when "0011101010" => FMIN<="10110000"; when "0011101011" => FMIN<="11011100"; when "0011101100" => FMIN<="00001110"; when "0011101101" => FMIN<="00111110"; when "0011101110" => FMIN<="01100101"; when "0011101111" => FMIN<="01111011"; when "0011110000" => FMIN<="01111111"; when "0011110001" => FMIN<="01101111"; when "0011110010" => FMIN<="01001110"; when "0011110011" => FMIN<="00100001"; when "0011110100" => FMIN<="11101111"; when "0011110101" => FMIN<="11000000"; when "0011110110" => FMIN<="10011010"; when "0011110111" => FMIN<="10000100"; when "0011111000" => FMIN<="10000001"; when "0011111001" => FMIN<="10010010"; when "0011111010" => FMIN<="10110011"; when "0011111011" => FMIN<="11100001"; when "0011111100" => FMIN<="00010011"; when "0011111101" => FMIN<="01000010"; when "0011111110" => FMIN<="01100111"; when "0011111111" => FMIN<="01111100"; when "0100000000" => FMIN<="01111110"; when "0100000001" => FMIN<="01101101"; when "0100000010" => FMIN<="01001011"; when "0100000011" => FMIN<="00011101"; when "0100000100" => FMIN<="11101011"; when "0100000101" => FMIN<="10111100"; when "0100000110" => FMIN<="10011000"; when "0100000111" => FMIN<="10000011"; when "0100001000" => FMIN<="10000010"; when "0100001001" => FMIN<="10010100"; when "0100001010" => FMIN<="10110110"; when "0100001011" => FMIN<="11100100"; when "0100001100" => FMIN<="00010110"; when "0100001101" => FMIN<="01000101"; when "0100001110" => FMIN<="01101001"; when "0100001111" => FMIN<="01111101"; when "0100010000" => FMIN<="01111110"; when "0100010001" => FMIN<="01101100"; when "0100010010" => FMIN<="01001001"; when "0100010011" => FMIN<="00011011"; when "0100010100" => FMIN<="11101001"; when "0100010101" => FMIN<="10111010"; when "0100010110" => FMIN<="10010110"; when "0100010111" => FMIN<="10000011"; when "0100011000" => FMIN<="10000010"; when "0100011001" => FMIN<="10010101"; when "0100011010" => FMIN<="10111000"; when "0100011011" => FMIN<="11100110"; when "0100011100" => FMIN<="00011000"; when "0100011101" => FMIN<="01000110"; when "0100011110" => FMIN<="01101010"; when "0100011111" => FMIN<="01111101"; when "0100100000" => FMIN<="01111110"; when "0100100001" => FMIN<="01101011"; when "0100100010" => FMIN<="01001000"; when "0100100011" => FMIN<="00011001"; when "0100100100" => FMIN<="11100111"; when "0100100101" => FMIN<="10111001"; when "0100100110" => FMIN<="10010110"; when "0100100111" => FMIN<="10000011"; when "0100101000" => FMIN<="10000010"; when "0100101001" => FMIN<="10010101"; when "0100101010" => FMIN<="10111001"; when "0100101011" => FMIN<="11100111"; when "0100101100" => FMIN<="00011001"; when "0100101101" => FMIN<="01000111"; when "0100101110" => FMIN<="01101010"; when "0100101111" => FMIN<="01111101"; when "0100110000" => FMIN<="01111110"; when "0100110001" => FMIN<="01101011"; when "0100110010" => FMIN<="01000111"; when "0100110011" => FMIN<="00011001"; when "0100110100" => FMIN<="11100111"; when "0100110101" => FMIN<="10111001"; when "0100110110" => FMIN<="10010110"; when "0100110111" => FMIN<="10000011"; when "0100111000" => FMIN<="10000010"; when "0100111001" => FMIN<="10010101"; when "0100111010" => FMIN<="10111000"; when "0100111011" => FMIN<="11100110"; when "0100111100" => FMIN<="00011000"; when "0100111101" => FMIN<="01000110"; when "0100111110" => FMIN<="01101010"; when "0100111111" => FMIN<="01111101"; when "0101000000" => FMIN<="01111110"; when "0101000001" => FMIN<="01101011"; when "0101000010" => FMIN<="01001000"; when "0101000011" => FMIN<="00011010"; when "0101000100" => FMIN<="11101001"; when "0101000101" => FMIN<="10111010"; when "0101000110" => FMIN<="10010111"; when "0101000111" => FMIN<="10000011"; when "0101001000" => FMIN<="10000010"; when "0101001001" => FMIN<="10010100"; when "0101001010" => FMIN<="10110111"; when "0101001011" => FMIN<="11100100"; when "0101001100" => FMIN<="00010110"; when "0101001101" => FMIN<="01000101"; when "0101001110" => FMIN<="01101001"; when "0101001111" => FMIN<="01111101"; when "0101010000" => FMIN<="01111110"; when "0101010001" => FMIN<="01101100"; when "0101010010" => FMIN<="01001010"; when "0101010011" => FMIN<="00011101"; when "0101010100" => FMIN<="11101011"; when "0101010101" => FMIN<="10111101"; when "0101010110" => FMIN<="10011000"; when "0101010111" => FMIN<="10000011"; when "0101011000" => FMIN<="10000010"; when "0101011001" => FMIN<="10010011"; when "0101011010" => FMIN<="10110100"; when "0101011011" => FMIN<="11100001"; when "0101011100" => FMIN<="00010011"; when "0101011101" => FMIN<="01000010"; when "0101011110" => FMIN<="01100111"; when "0101011111" => FMIN<="01111100"; when "0101100000" => FMIN<="01111111"; when "0101100001" => FMIN<="01101110"; when "0101100010" => FMIN<="01001101"; when "0101100011" => FMIN<="00100000"; when "0101100100" => FMIN<="11101111"; when "0101100101" => FMIN<="11000000"; when "0101100110" => FMIN<="10011011"; when "0101100111" => FMIN<="10000100"; when "0101101000" => FMIN<="10000001"; when "0101101001" => FMIN<="10010001"; when "0101101010" => FMIN<="10110001"; when "0101101011" => FMIN<="11011101"; when "0101101100" => FMIN<="00001111"; when "0101101101" => FMIN<="00111110"; when "0101101110" => FMIN<="01100100"; when "0101101111" => FMIN<="01111011"; when "0101110000" => FMIN<="01111111"; when "0101110001" => FMIN<="01110001"; when "0101110010" => FMIN<="01010001"; when "0101110011" => FMIN<="00100101"; when "0101110100" => FMIN<="11110100"; when "0101110101" => FMIN<="11000100"; when "0101110110" => FMIN<="10011110"; when "0101110111" => FMIN<="10000110"; when "0101111000" => FMIN<="10000000"; when "0101111001" => FMIN<="10001110"; when "0101111010" => FMIN<="10101101"; when "0101111011" => FMIN<="11011000"; when "0101111100" => FMIN<="00001001"; when "0101111101" => FMIN<="00111001"; when "0101111110" => FMIN<="01100000"; when "0101111111" => FMIN<="01111001"; when "0110000000" => FMIN<="01111111"; when "0110000001" => FMIN<="01110011"; when "0110000010" => FMIN<="01010110"; when "0110000011" => FMIN<="00101011"; when "0110000100" => FMIN<="11111010"; when "0110000101" => FMIN<="11001010"; when "0110000110" => FMIN<="10100010"; when "0110000111" => FMIN<="10001000"; when "0110001000" => FMIN<="10000000"; when "0110001001" => FMIN<="10001011"; when "0110001010" => FMIN<="10101000"; when "0110001011" => FMIN<="11010001"; when "0110001100" => FMIN<="00000010"; when "0110001101" => FMIN<="00110010"; when "0110001110" => FMIN<="01011011"; when "0110001111" => FMIN<="01110110"; when "0110010000" => FMIN<="01111111"; when "0110010001" => FMIN<="01110110"; when "0110010010" => FMIN<="01011011"; when "0110010011" => FMIN<="00110010"; when "0110010100" => FMIN<="00000010"; when "0110010101" => FMIN<="11010001"; when "0110010110" => FMIN<="10101000"; when "0110010111" => FMIN<="10001011"; when "0110011000" => FMIN<="10000000"; when "0110011001" => FMIN<="10001000"; when "0110011010" => FMIN<="10100010"; when "0110011011" => FMIN<="11001010"; when "0110011100" => FMIN<="11111010"; when "0110011101" => FMIN<="00101011"; when "0110011110" => FMIN<="01010110"; when "0110011111" => FMIN<="01110011"; when "0110100000" => FMIN<="01111111"; when "0110100001" => FMIN<="01111001"; when "0110100010" => FMIN<="01100000"; when "0110100011" => FMIN<="00111001"; when "0110100100" => FMIN<="00001001"; when "0110100101" => FMIN<="11011000"; when "0110100110" => FMIN<="10101101"; when "0110100111" => FMIN<="10001110"; when "0110101000" => FMIN<="10000000"; when "0110101001" => FMIN<="10000110"; when "0110101010" => FMIN<="10011110"; when "0110101011" => FMIN<="11000100"; when "0110101100" => FMIN<="11110100"; when "0110101101" => FMIN<="00100101"; when "0110101110" => FMIN<="01010001"; when "0110101111" => FMIN<="01110001"; when "0110110000" => FMIN<="01111111"; when "0110110001" => FMIN<="01111011"; when "0110110010" => FMIN<="01100100"; when "0110110011" => FMIN<="00111110"; when "0110110100" => FMIN<="00001111"; when "0110110101" => FMIN<="11011101"; when "0110110110" => FMIN<="10110001"; when "0110110111" => FMIN<="10010001"; when "0110111000" => FMIN<="10000001"; when "0110111001" => FMIN<="10000100"; when "0110111010" => FMIN<="10011010"; when "0110111011" => FMIN<="11000000"; when "0110111100" => FMIN<="11101111"; when "0110111101" => FMIN<="00100000"; when "0110111110" => FMIN<="01001101"; when "0110111111" => FMIN<="01101110"; when "0111000000" => FMIN<="01111111"; when "0111000001" => FMIN<="01111100"; when "0111000010" => FMIN<="01100111"; when "0111000011" => FMIN<="01000010"; when "0111000100" => FMIN<="00010011"; when "0111000101" => FMIN<="11100010"; when "0111000110" => FMIN<="10110101"; when "0111000111" => FMIN<="10010011"; when "0111001000" => FMIN<="10000010"; when "0111001001" => FMIN<="10000011"; when "0111001010" => FMIN<="10011000"; when "0111001011" => FMIN<="10111100"; when "0111001100" => FMIN<="11101011"; when "0111001101" => FMIN<="00011101"; when "0111001110" => FMIN<="01001010"; when "0111001111" => FMIN<="01101100"; when "0111010000" => FMIN<="01111110"; when "0111010001" => FMIN<="01111101"; when "0111010010" => FMIN<="01101001"; when "0111010011" => FMIN<="01000101"; when "0111010100" => FMIN<="00010111"; when "0111010101" => FMIN<="11100101"; when "0111010110" => FMIN<="10110111"; when "0111010111" => FMIN<="10010101"; when "0111011000" => FMIN<="10000010"; when "0111011001" => FMIN<="10000011"; when "0111011010" => FMIN<="10010110"; when "0111011011" => FMIN<="10111010"; when "0111011100" => FMIN<="11101000"; when "0111011101" => FMIN<="00011010"; when "0111011110" => FMIN<="01001000"; when "0111011111" => FMIN<="01101011"; when "0111100000" => FMIN<="01111110"; when "0111100001" => FMIN<="01111101"; when "0111100010" => FMIN<="01101010"; when "0111100011" => FMIN<="01000111"; when "0111100100" => FMIN<="00011001"; when "0111100101" => FMIN<="11100111"; when "0111100110" => FMIN<="10111001"; when "0111100111" => FMIN<="10010101"; when "0111101000" => FMIN<="10000010"; when "0111101001" => FMIN<="10000010"; when "0111101010" => FMIN<="10010110"; when "0111101011" => FMIN<="10111001"; when "0111101100" => FMIN<="11100111"; when "0111101101" => FMIN<="00011001"; when "0111101110" => FMIN<="01000111"; when "0111101111" => FMIN<="01101010"; when "0111110000" => FMIN<="01111110"; when "0111110001" => FMIN<="01111110"; when "0111110010" => FMIN<="01101011"; when "0111110011" => FMIN<="01000111"; when "0111110100" => FMIN<="00011001"; when "0111110101" => FMIN<="11100111"; when "0111110110" => FMIN<="10111001"; when "0111110111" => FMIN<="10010110"; when "0111111000" => FMIN<="10000011"; when "0111111001" => FMIN<="10000010"; when "0111111010" => FMIN<="10010101"; when "0111111011" => FMIN<="10111001"; when "0111111100" => FMIN<="11100111"; when "0111111101" => FMIN<="00011001"; when "0111111110" => FMIN<="01000111"; when "0111111111" => FMIN<="01101010"; when "1000000000" => FMIN<="01111110"; when "1000000001" => FMIN<="01111110"; when "1000000010" => FMIN<="01101010"; when "1000000011" => FMIN<="01000111"; when "1000000100" => FMIN<="00011001"; when "1000000101" => FMIN<="11100111"; when "1000000110" => FMIN<="10111000"; when "1000000111" => FMIN<="10010101"; when "1000001000" => FMIN<="10000010"; when "1000001001" => FMIN<="10000011"; when "1000001010" => FMIN<="10010110"; when "1000001011" => FMIN<="10111010"; when "1000001100" => FMIN<="11101000"; when "1000001101" => FMIN<="00011010"; when "1000001110" => FMIN<="01001000"; when "1000001111" => FMIN<="01101011"; when "1000010000" => FMIN<="01111110"; when "1000010001" => FMIN<="01111101"; when "1000010010" => FMIN<="01101001"; when "1000010011" => FMIN<="01000101"; when "1000010100" => FMIN<="00010111"; when "1000010101" => FMIN<="11100101"; when "1000010110" => FMIN<="10110111"; when "1000010111" => FMIN<="10010100"; when "1000011000" => FMIN<="10000010"; when "1000011001" => FMIN<="10000011"; when "1000011010" => FMIN<="10010111"; when "1000011011" => FMIN<="10111100"; when "1000011100" => FMIN<="11101011"; when "1000011101" => FMIN<="00011101"; when "1000011110" => FMIN<="01001010"; when "1000011111" => FMIN<="01101101"; when "1000100000" => FMIN<="01111110"; when "1000100001" => FMIN<="01111101"; when "1000100010" => FMIN<="01101000"; when "1000100011" => FMIN<="01000011"; when "1000100100" => FMIN<="00010100"; when "1000100101" => FMIN<="11100010"; when "1000100110" => FMIN<="10110100"; when "1000100111" => FMIN<="10010010"; when "1000101000" => FMIN<="10000001"; when "1000101001" => FMIN<="10000100"; when "1000101010" => FMIN<="10011010"; when "1000101011" => FMIN<="10111111"; when "1000101100" => FMIN<="11101110"; when "1000101101" => FMIN<="00100001"; when "1000101110" => FMIN<="01001110"; when "1000101111" => FMIN<="01101111"; when "1000110000" => FMIN<="01111111"; when "1000110001" => FMIN<="01111011"; when "1000110010" => FMIN<="01100101"; when "1000110011" => FMIN<="00111111"; when "1000110100" => FMIN<="00001111"; when "1000110101" => FMIN<="11011101"; when "1000110110" => FMIN<="10110000"; when "1000110111" => FMIN<="10010000"; when "1000111000" => FMIN<="10000001"; when "1000111001" => FMIN<="10000101"; when "1000111010" => FMIN<="10011101"; when "1000111011" => FMIN<="11000011"; when "1000111100" => FMIN<="11110011"; when "1000111101" => FMIN<="00100110"; when "1000111110" => FMIN<="01010010"; when "1000111111" => FMIN<="01110001"; when "1001000000" => FMIN<="01111111"; when "1001000001" => FMIN<="01111010"; when "1001000010" => FMIN<="01100001"; when "1001000011" => FMIN<="00111010"; when "1001000100" => FMIN<="00001001"; when "1001000101" => FMIN<="11011000"; when "1001000110" => FMIN<="10101100"; when "1001000111" => FMIN<="10001101"; when "1001001000" => FMIN<="10000000"; when "1001001001" => FMIN<="10000111"; when "1001001010" => FMIN<="10100001"; when "1001001011" => FMIN<="11001001"; when "1001001100" => FMIN<="11111010"; when "1001001101" => FMIN<="00101100"; when "1001001110" => FMIN<="01010111"; when "1001001111" => FMIN<="01110100"; when "1001010000" => FMIN<="01111111"; when "1001010001" => FMIN<="01111000"; when "1001010010" => FMIN<="01011101"; when "1001010011" => FMIN<="00110100"; when "1001010100" => FMIN<="00000010"; when "1001010101" => FMIN<="11010001"; when "1001010110" => FMIN<="10100111"; when "1001010111" => FMIN<="10001010"; when "1001011000" => FMIN<="10000000"; when "1001011001" => FMIN<="10001010"; when "1001011010" => FMIN<="10100110"; when "1001011011" => FMIN<="11010000"; when "1001011100" => FMIN<="00000001"; when "1001011101" => FMIN<="00110011"; when "1001011110" => FMIN<="01011100"; when "1001011111" => FMIN<="01110111"; when "1001100000" => FMIN<="01111111"; when "1001100001" => FMIN<="01110101"; when "1001100010" => FMIN<="01010111"; when "1001100011" => FMIN<="00101101"; when "1001100100" => FMIN<="11111011"; when "1001100101" => FMIN<="11001010"; when "1001100110" => FMIN<="10100001"; when "1001100111" => FMIN<="10000111"; when "1001101000" => FMIN<="10000000"; when "1001101001" => FMIN<="10001101"; when "1001101010" => FMIN<="10101011"; when "1001101011" => FMIN<="11010111"; when "1001101100" => FMIN<="00001001"; when "1001101101" => FMIN<="00111001"; when "1001101110" => FMIN<="01100001"; when "1001101111" => FMIN<="01111010"; when "1001110000" => FMIN<="01111111"; when "1001110001" => FMIN<="01110010"; when "1001110010" => FMIN<="01010010"; when "1001110011" => FMIN<="00100110"; when "1001110100" => FMIN<="11110100"; when "1001110101" => FMIN<="11000100"; when "1001110110" => FMIN<="10011101"; when "1001110111" => FMIN<="10000101"; when "1001111000" => FMIN<="10000001"; when "1001111001" => FMIN<="10010000"; when "1001111010" => FMIN<="10110000"; when "1001111011" => FMIN<="11011100"; when "1001111100" => FMIN<="00001110"; when "1001111101" => FMIN<="00111110"; when "1001111110" => FMIN<="01100101"; when "1001111111" => FMIN<="01111011"; when "1010000000" => FMIN<="01111111"; when "1010000001" => FMIN<="01101111"; when "1010000010" => FMIN<="01001110"; when "1010000011" => FMIN<="00100001"; when "1010000100" => FMIN<="11101111"; when "1010000101" => FMIN<="11000000"; when "1010000110" => FMIN<="10011010"; when "1010000111" => FMIN<="10000100"; when "1010001000" => FMIN<="10000001"; when "1010001001" => FMIN<="10010010"; when "1010001010" => FMIN<="10110011"; when "1010001011" => FMIN<="11100001"; when "1010001100" => FMIN<="00010011"; when "1010001101" => FMIN<="01000010"; when "1010001110" => FMIN<="01100111"; when "1010001111" => FMIN<="01111100"; when "1010010000" => FMIN<="01111110"; when "1010010001" => FMIN<="01101101"; when "1010010010" => FMIN<="01001011"; when "1010010011" => FMIN<="00011101"; when "1010010100" => FMIN<="11101011"; when "1010010101" => FMIN<="10111100"; when "1010010110" => FMIN<="10011000"; when "1010010111" => FMIN<="10000011"; when "1010011000" => FMIN<="10000010"; when "1010011001" => FMIN<="10010100"; when "1010011010" => FMIN<="10110110"; when "1010011011" => FMIN<="11100100"; when "1010011100" => FMIN<="00010110"; when "1010011101" => FMIN<="01000101"; when "1010011110" => FMIN<="01101001"; when "1010011111" => FMIN<="01111101"; when "1010100000" => FMIN<="01111110"; when "1010100001" => FMIN<="01101100"; when "1010100010" => FMIN<="01001001"; when "1010100011" => FMIN<="00011011"; when "1010100100" => FMIN<="11101001"; when "1010100101" => FMIN<="10111010"; when "1010100110" => FMIN<="10010110"; when "1010100111" => FMIN<="10000011"; when "1010101000" => FMIN<="10000010"; when "1010101001" => FMIN<="10010101"; when "1010101010" => FMIN<="10111000"; when "1010101011" => FMIN<="11100110"; when "1010101100" => FMIN<="00011000"; when "1010101101" => FMIN<="01000110"; when "1010101110" => FMIN<="01101010"; when "1010101111" => FMIN<="01111101"; when "1010110000" => FMIN<="01111110"; when "1010110001" => FMIN<="01101011"; when "1010110010" => FMIN<="01001000"; when "1010110011" => FMIN<="00011001"; when "1010110100" => FMIN<="11100111"; when "1010110101" => FMIN<="10111001"; when "1010110110" => FMIN<="10010110"; when "1010110111" => FMIN<="10000011"; when "1010111000" => FMIN<="10000010"; when "1010111001" => FMIN<="10010101"; when "1010111010" => FMIN<="10111001"; when "1010111011" => FMIN<="11100111"; when "1010111100" => FMIN<="00011001"; when "1010111101" => FMIN<="01000111"; when "1010111110" => FMIN<="01101010"; when "1010111111" => FMIN<="01111101"; when "1011000000" => FMIN<="01111110"; when "1011000001" => FMIN<="01101011"; when "1011000010" => FMIN<="01000111"; when "1011000011" => FMIN<="00011001"; when "1011000100" => FMIN<="11100111"; when "1011000101" => FMIN<="10111001"; when "1011000110" => FMIN<="10010110"; when "1011000111" => FMIN<="10000011"; when "1011001000" => FMIN<="10000010"; when "1011001001" => FMIN<="10010101"; when "1011001010" => FMIN<="10111000"; when "1011001011" => FMIN<="11100110"; when "1011001100" => FMIN<="00011000"; when "1011001101" => FMIN<="01000110"; when "1011001110" => FMIN<="01101010"; when "1011001111" => FMIN<="01111101"; when "1011010000" => FMIN<="01111110"; when "1011010001" => FMIN<="01101011"; when "1011010010" => FMIN<="01001000"; when "1011010011" => FMIN<="00011010"; when "1011010100" => FMIN<="11101001"; when "1011010101" => FMIN<="10111010"; when "1011010110" => FMIN<="10010111"; when "1011010111" => FMIN<="10000011"; when "1011011000" => FMIN<="10000010"; when "1011011001" => FMIN<="10010100"; when "1011011010" => FMIN<="10110111"; when "1011011011" => FMIN<="11100100"; when "1011011100" => FMIN<="00010110"; when "1011011101" => FMIN<="01000101"; when "1011011110" => FMIN<="01101001"; when "1011011111" => FMIN<="01111101"; when "1011100000" => FMIN<="01111110"; when "1011100001" => FMIN<="01101100"; when "1011100010" => FMIN<="01001010"; when "1011100011" => FMIN<="00011101"; when "1011100100" => FMIN<="11101011"; when "1011100101" => FMIN<="10111101"; when "1011100110" => FMIN<="10011000"; when "1011100111" => FMIN<="10000011"; when "1011101000" => FMIN<="10000010"; when "1011101001" => FMIN<="10010011"; when "1011101010" => FMIN<="10110100"; when "1011101011" => FMIN<="11100001"; when "1011101100" => FMIN<="00010011"; when "1011101101" => FMIN<="01000010"; when "1011101110" => FMIN<="01100111"; when "1011101111" => FMIN<="01111100"; when "1011110000" => FMIN<="01111111"; when "1011110001" => FMIN<="01101110"; when "1011110010" => FMIN<="01001101"; when "1011110011" => FMIN<="00100000"; when "1011110100" => FMIN<="11101111"; when "1011110101" => FMIN<="11000000"; when "1011110110" => FMIN<="10011011"; when "1011110111" => FMIN<="10000100"; when "1011111000" => FMIN<="10000001"; when "1011111001" => FMIN<="10010001"; when "1011111010" => FMIN<="10110001"; when "1011111011" => FMIN<="11011101"; when "1011111100" => FMIN<="00001111"; when "1011111101" => FMIN<="00111110"; when "1011111110" => FMIN<="01100100"; when "1011111111" => FMIN<="01111011"; when "1100000000" => FMIN<="01111111"; when "1100000001" => FMIN<="01110001"; when "1100000010" => FMIN<="01010001"; when "1100000011" => FMIN<="00100101"; when "1100000100" => FMIN<="11110100"; when "1100000101" => FMIN<="11000100"; when "1100000110" => FMIN<="10011110"; when "1100000111" => FMIN<="10000110"; when "1100001000" => FMIN<="10000000"; when "1100001001" => FMIN<="10001110"; when "1100001010" => FMIN<="10101101"; when "1100001011" => FMIN<="11011000"; when "1100001100" => FMIN<="00001001"; when "1100001101" => FMIN<="00111001"; when "1100001110" => FMIN<="01100000"; when "1100001111" => FMIN<="01111001"; when "1100010000" => FMIN<="01111111"; when "1100010001" => FMIN<="01110011"; when "1100010010" => FMIN<="01010110"; when "1100010011" => FMIN<="00101011"; when "1100010100" => FMIN<="11111010"; when "1100010101" => FMIN<="11001010"; when "1100010110" => FMIN<="10100010"; when "1100010111" => FMIN<="10001000"; when "1100011000" => FMIN<="10000000"; when "1100011001" => FMIN<="10001011"; when "1100011010" => FMIN<="10101000"; when "1100011011" => FMIN<="11010001"; when "1100011100" => FMIN<="00000010"; when "1100011101" => FMIN<="00110010"; when "1100011110" => FMIN<="01011011"; when "1100011111" => FMIN<="01110110"; when "1100100000" => FMIN<="01111111"; when "1100100001" => FMIN<="01110110"; when "1100100010" => FMIN<="01011011"; when "1100100011" => FMIN<="00110010"; when "1100100100" => FMIN<="00000010"; when "1100100101" => FMIN<="11010001"; when "1100100110" => FMIN<="10101000"; when "1100100111" => FMIN<="10001011"; when "1100101000" => FMIN<="10000000"; when "1100101001" => FMIN<="10001000"; when "1100101010" => FMIN<="10100010"; when "1100101011" => FMIN<="11001010"; when "1100101100" => FMIN<="11111010"; when "1100101101" => FMIN<="00101011"; when "1100101110" => FMIN<="01010110"; when "1100101111" => FMIN<="01110011"; when "1100110000" => FMIN<="01111111"; when "1100110001" => FMIN<="01111001"; when "1100110010" => FMIN<="01100000"; when "1100110011" => FMIN<="00111001"; when "1100110100" => FMIN<="00001001"; when "1100110101" => FMIN<="11011000"; when "1100110110" => FMIN<="10101101"; when "1100110111" => FMIN<="10001110"; when "1100111000" => FMIN<="10000000"; when "1100111001" => FMIN<="10000110"; when "1100111010" => FMIN<="10011110"; when "1100111011" => FMIN<="11000100"; when "1100111100" => FMIN<="11110100"; when "1100111101" => FMIN<="00100101"; when "1100111110" => FMIN<="01010001"; when "1100111111" => FMIN<="01110001"; when "1101000000" => FMIN<="01111111"; when "1101000001" => FMIN<="01111011"; when "1101000010" => FMIN<="01100100"; when "1101000011" => FMIN<="00111110"; when "1101000100" => FMIN<="00001111"; when "1101000101" => FMIN<="11011101"; when "1101000110" => FMIN<="10110001"; when "1101000111" => FMIN<="10010001"; when "1101001000" => FMIN<="10000001"; when "1101001001" => FMIN<="10000100"; when "1101001010" => FMIN<="10011010"; when "1101001011" => FMIN<="11000000"; when "1101001100" => FMIN<="11101111"; when "1101001101" => FMIN<="00100000"; when "1101001110" => FMIN<="01001101"; when "1101001111" => FMIN<="01101110"; when "1101010000" => FMIN<="01111111"; when "1101010001" => FMIN<="01111100"; when "1101010010" => FMIN<="01100111"; when "1101010011" => FMIN<="01000010"; when "1101010100" => FMIN<="00010011"; when "1101010101" => FMIN<="11100010"; when "1101010110" => FMIN<="10110101"; when "1101010111" => FMIN<="10010011"; when "1101011000" => FMIN<="10000010"; when "1101011001" => FMIN<="10000011"; when "1101011010" => FMIN<="10011000"; when "1101011011" => FMIN<="10111100"; when "1101011100" => FMIN<="11101011"; when "1101011101" => FMIN<="00011101"; when "1101011110" => FMIN<="01001010"; when "1101011111" => FMIN<="01101100"; when "1101100000" => FMIN<="01111110"; when "1101100001" => FMIN<="01111101"; when "1101100010" => FMIN<="01101001"; when "1101100011" => FMIN<="01000101"; when "1101100100" => FMIN<="00010111"; when "1101100101" => FMIN<="11100101"; when "1101100110" => FMIN<="10110111"; when "1101100111" => FMIN<="10010101"; when "1101101000" => FMIN<="10000010"; when "1101101001" => FMIN<="10000011"; when "1101101010" => FMIN<="10010110"; when "1101101011" => FMIN<="10111010"; when "1101101100" => FMIN<="11101000"; when "1101101101" => FMIN<="00011010"; when "1101101110" => FMIN<="01001000"; when "1101101111" => FMIN<="01101011"; when "1101110000" => FMIN<="01111110"; when "1101110001" => FMIN<="01111101"; when "1101110010" => FMIN<="01101010"; when "1101110011" => FMIN<="01000111"; when "1101110100" => FMIN<="00011001"; when "1101110101" => FMIN<="11100111"; when "1101110110" => FMIN<="10111001"; when "1101110111" => FMIN<="10010101"; when "1101111000" => FMIN<="10000010"; when "1101111001" => FMIN<="10000010"; when "1101111010" => FMIN<="10010110"; when "1101111011" => FMIN<="10111001"; when "1101111100" => FMIN<="11100111"; when "1101111101" => FMIN<="00011001"; when "1101111110" => FMIN<="01000111"; when "1101111111" => FMIN<="01101010"; when "1110000000" => FMIN<="01111110"; when "1110000001" => FMIN<="01111110"; when "1110000010" => FMIN<="01101011"; when "1110000011" => FMIN<="01000111"; when "1110000100" => FMIN<="00011001"; when "1110000101" => FMIN<="11100111"; when "1110000110" => FMIN<="10111001"; when "1110000111" => FMIN<="10010110"; when "1110001000" => FMIN<="10000011"; when "1110001001" => FMIN<="10000010"; when "1110001010" => FMIN<="10010101"; when "1110001011" => FMIN<="10111001"; when "1110001100" => FMIN<="11100111"; when "1110001101" => FMIN<="00011001"; when "1110001110" => FMIN<="01000111"; when "1110001111" => FMIN<="01101010"; when "1110010000" => FMIN<="01111110"; when "1110010001" => FMIN<="01111110"; when "1110010010" => FMIN<="01101010"; when "1110010011" => FMIN<="01000111"; when "1110010100" => FMIN<="00011001"; when "1110010101" => FMIN<="11100111"; when "1110010110" => FMIN<="10111000"; when "1110010111" => FMIN<="10010101"; when "1110011000" => FMIN<="10000010"; when "1110011001" => FMIN<="10000011"; when "1110011010" => FMIN<="10010110"; when "1110011011" => FMIN<="10111010"; when "1110011100" => FMIN<="11101000"; when "1110011101" => FMIN<="00011010"; when "1110011110" => FMIN<="01001000"; when "1110011111" => FMIN<="01101011"; when "1110100000" => FMIN<="01111110"; when "1110100001" => FMIN<="01111101"; when "1110100010" => FMIN<="01101001"; when "1110100011" => FMIN<="01000101"; when "1110100100" => FMIN<="00010111"; when "1110100101" => FMIN<="11100101"; when "1110100110" => FMIN<="10110111"; when "1110100111" => FMIN<="10010100"; when "1110101000" => FMIN<="10000010"; when "1110101001" => FMIN<="10000011"; when "1110101010" => FMIN<="10010111"; when "1110101011" => FMIN<="10111100"; when "1110101100" => FMIN<="11101011"; when "1110101101" => FMIN<="00011101"; when "1110101110" => FMIN<="01001010"; when "1110101111" => FMIN<="01101101"; when "1110110000" => FMIN<="01111110"; when "1110110001" => FMIN<="01111101"; when "1110110010" => FMIN<="01101000"; when "1110110011" => FMIN<="01000011"; when "1110110100" => FMIN<="00010100"; when "1110110101" => FMIN<="11100010"; when "1110110110" => FMIN<="10110100"; when "1110110111" => FMIN<="10010010"; when "1110111000" => FMIN<="10000001"; when "1110111001" => FMIN<="10000100"; when "1110111010" => FMIN<="10011010"; when "1110111011" => FMIN<="10111111"; when "1110111100" => FMIN<="11101110"; when "1110111101" => FMIN<="00100001"; when "1110111110" => FMIN<="01001110"; when "1110111111" => FMIN<="01101111"; when "1111000000" => FMIN<="01111111"; when "1111000001" => FMIN<="01111011"; when "1111000010" => FMIN<="01100101"; when "1111000011" => FMIN<="00111111"; when "1111000100" => FMIN<="00001111"; when "1111000101" => FMIN<="11011101"; when "1111000110" => FMIN<="10110000"; when "1111000111" => FMIN<="10010000"; when "1111001000" => FMIN<="10000001"; when "1111001001" => FMIN<="10000101"; when "1111001010" => FMIN<="10011101"; when "1111001011" => FMIN<="11000011"; when "1111001100" => FMIN<="11110011"; when "1111001101" => FMIN<="00100110"; when "1111001110" => FMIN<="01010010"; when "1111001111" => FMIN<="01110001"; when "1111010000" => FMIN<="01111111"; when "1111010001" => FMIN<="01111010"; when "1111010010" => FMIN<="01100001"; when "1111010011" => FMIN<="00111010"; when "1111010100" => FMIN<="00001001"; when "1111010101" => FMIN<="11011000"; when "1111010110" => FMIN<="10101100"; when "1111010111" => FMIN<="10001101"; when "1111011000" => FMIN<="10000000"; when "1111011001" => FMIN<="10000111"; when "1111011010" => FMIN<="10100001"; when "1111011011" => FMIN<="11001001"; when "1111011100" => FMIN<="11111010"; when "1111011101" => FMIN<="00101100"; when "1111011110" => FMIN<="01010111"; when "1111011111" => FMIN<="01110100"; when "1111100000" => FMIN<="01111111"; when "1111100001" => FMIN<="01111000"; when "1111100010" => FMIN<="01011101"; when "1111100011" => FMIN<="00110100"; when "1111100100" => FMIN<="00000010"; when "1111100101" => FMIN<="11010001"; when "1111100110" => FMIN<="10100111"; when "1111100111" => FMIN<="10001010"; when others => FMIN<="00000000"; end case; end if; end process; -- Local Oscillator H17.2.19 AM8:27 process(RESET,CLK) begin if(RESET='1') then COUNT <= "0000"; SIN<='0'; COS<='1'; elsif(CLK'event and CLK='1') then case COUNT(3 downto 2) is when "00" => SIN <= '0'; when "01" => SIN <= '0'; when "10" => SIN <= '1'; when "11" => SIN <= '1'; end case; case COUNT(3 downto 2) is when "00" => COS <= '0'; when "01" => COS <= '1'; when "10" => COS <= '1'; when "11" => COS <= '0'; end case; COUNT <= COUNT + '1'; end if; end process; -- 8bit signed -> 9bit signed H17.2.19 AM8:10 process(RESET,CLK) begin if(RESET='1') then FMIN9 <= "000000000"; elsif(CLK'event and CLK='1') then FMIN9(7 downto 0)<=FMIN; FMIN9(8)<=FMIN(7); end if; end process; -- MPX H17.2.19 AM8:27 process(RESET,CLK) variable M1_tmp : std_logic_vector(8 downto 0); variable M2_tmp : std_logic_vector(8 downto 0); variable FMIN_tmp : std_logic_vector(8 downto 0); begin if(RESET='1') then M1_tmp := "000000000"; M2_tmp := "000000000"; elsif(CLK'event and CLK='0') then FMIN_tmp:=FMIN9; if(SIN='1') then M1_tmp:=(NOT FMIN_tmp)+1; else M1_tmp:=FMIN_tmp; end if; if(COS='1') then M2_tmp:=(NOT FMIN_tmp)+1; else M2_tmp:=FMIN_tmp; end if; M1<=M1_tmp; M2<=M2_tmp; end if; end process; -- average1 H17.2.19 AM9:10 process(RESET,CLK,M1) variable M1_00 : std_logic_vector(12 downto 0); variable M1_01 : std_logic_vector(12 downto 0); variable M1_02 : std_logic_vector(12 downto 0); variable M1_03 : std_logic_vector(12 downto 0); variable M1_04 : std_logic_vector(12 downto 0); variable M1_05 : std_logic_vector(12 downto 0); variable M1_06 : std_logic_vector(12 downto 0); variable M1_07 : std_logic_vector(12 downto 0); variable M1_08 : std_logic_vector(12 downto 0); variable M1_09 : std_logic_vector(12 downto 0); variable M1_10 : std_logic_vector(12 downto 0); variable M1_11 : std_logic_vector(12 downto 0); variable M1_12 : std_logic_vector(12 downto 0); variable M1_13 : std_logic_vector(12 downto 0); variable M1_14 : std_logic_vector(12 downto 0); variable M1_15 : std_logic_vector(12 downto 0); variable M1_SUM : std_logic_vector(12 downto 0); begin if(RESET='1') then M1_15:="0000000000000"; M1_14:="0000000000000"; M1_13:="0000000000000"; M1_12:="0000000000000"; M1_11:="0000000000000"; M1_10:="0000000000000"; M1_09:="0000000000000"; M1_08:="0000000000000"; M1_07:="0000000000000"; M1_06:="0000000000000"; M1_05:="0000000000000"; M1_04:="0000000000000"; M1_03:="0000000000000"; M1_02:="0000000000000"; M1_01:="0000000000000"; M1_00:="0000000000000"; A111<= "00000000"; elsif(CLK'event and CLK='1') then M1_15:=M1_14; M1_14:=M1_13; M1_13:=M1_12; M1_12:=M1_11; M1_11:=M1_10; M1_10:=M1_09; M1_09:=M1_08; M1_08:=M1_07; M1_07:=M1_06; M1_06:=M1_05; M1_05:=M1_04; M1_04:=M1_03; M1_03:=M1_02; M1_02:=M1_01; M1_01:=M1_00; M1_00:=M1(8) & M1(8) & M1(8) & M1(8) & M1; M1_SUM:=M1_00; M1_SUM:=M1_SUM+M1_01; M1_SUM:=M1_SUM+M1_02; M1_SUM:=M1_SUM+M1_03; M1_SUM:=M1_SUM+M1_04; M1_SUM:=M1_SUM+M1_05; M1_SUM:=M1_SUM+M1_06; M1_SUM:=M1_SUM+M1_07; M1_SUM:=M1_SUM+M1_08; M1_SUM:=M1_SUM+M1_09; M1_SUM:=M1_SUM+M1_10; M1_SUM:=M1_SUM+M1_11; M1_SUM:=M1_SUM+M1_12; M1_SUM:=M1_SUM+M1_13; M1_SUM:=M1_SUM+M1_14; M1_SUM:=M1_SUM+M1_15; A111<=M1_SUM(12 downto 5); end if; end process; -- average2 H17.2.19 AM10:28 process(CLK,M2) variable M2_00 : std_logic_vector(12 downto 0); variable M2_01 : std_logic_vector(12 downto 0); variable M2_02 : std_logic_vector(12 downto 0); variable M2_03 : std_logic_vector(12 downto 0); variable M2_04 : std_logic_vector(12 downto 0); variable M2_05 : std_logic_vector(12 downto 0); variable M2_06 : std_logic_vector(12 downto 0); variable M2_07 : std_logic_vector(12 downto 0); variable M2_08 : std_logic_vector(12 downto 0); variable M2_09 : std_logic_vector(12 downto 0); variable M2_10 : std_logic_vector(12 downto 0); variable M2_11 : std_logic_vector(12 downto 0); variable M2_12 : std_logic_vector(12 downto 0); variable M2_13 : std_logic_vector(12 downto 0); variable M2_14 : std_logic_vector(12 downto 0); variable M2_15 : std_logic_vector(12 downto 0); variable M2_SUM : std_logic_vector(12 downto 0); begin if(RESET='1') then M2_15:="0000000000000"; M2_14:="0000000000000"; M2_13:="0000000000000"; M2_12:="0000000000000"; M2_11:="0000000000000"; M2_10:="0000000000000"; M2_09:="0000000000000"; M2_08:="0000000000000"; M2_07:="0000000000000"; M2_06:="0000000000000"; M2_05:="0000000000000"; M2_04:="0000000000000"; M2_03:="0000000000000"; M2_02:="0000000000000"; M2_01:="0000000000000"; M2_00:="0000000000000"; A211<= "00000000"; elsif(CLK'event and CLK='1') then M2_15:=M2_14; M2_14:=M2_13; M2_13:=M2_12; M2_12:=M2_11; M2_11:=M2_10; M2_10:=M2_09; M2_09:=M2_08; M2_08:=M2_07; M2_07:=M2_06; M2_06:=M2_05; M2_05:=M2_04; M2_04:=M2_03; M2_03:=M2_02; M2_02:=M2_01; M2_01:=M2_00; M2_00:=M2(8) & M2(8) & M2(8) & M2(8) & M2; M2_SUM:=M2_00; M2_SUM:=M2_SUM+M2_01; M2_SUM:=M2_SUM+M2_02; M2_SUM:=M2_SUM+M2_03; M2_SUM:=M2_SUM+M2_04; M2_SUM:=M2_SUM+M2_05; M2_SUM:=M2_SUM+M2_06; M2_SUM:=M2_SUM+M2_07; M2_SUM:=M2_SUM+M2_08; M2_SUM:=M2_SUM+M2_09; M2_SUM:=M2_SUM+M2_10; M2_SUM:=M2_SUM+M2_11; M2_SUM:=M2_SUM+M2_12; M2_SUM:=M2_SUM+M2_13; M2_SUM:=M2_SUM+M2_14; M2_SUM:=M2_SUM+M2_15; A211<=M2_SUM(12 downto 5); end if; end process; -- A111(8bit)<<8 / A211(8bit) -> y(8bit) H17.2.28 AM11:29 process(CLK2) -- 1 stage begin if(CLK2'event and CLK2='1') then if(sub_count=0)then if(A111(7)='1') then A11<=(not A111)+1; else A11<=A111; end if; xy1(2)<=A111(7); if(A211(7)='1') then A21<=(not A211)+1; else A21<=A211; end if; xy1(1)<=A211(7); end if; end if; end process; process(CLK2) -- 2 stage begin if(CLK2'event and CLK2='1') then if(sub_count=1)then if(A11>A21) then xy1(0)<='1'; my_cmp_f<='1'; else xy1(0)<='0'; my_cmp_f<='0'; end if; elsif(sub_count=7) then xy2<=xy1; end if; end if; end process; process(CLK2) -- 3 stage begin if(CLK2'event and CLK2='1') then if(sub_count=2) then if(my_cmp_f='1') then A221<=A11; A121<=A21; else A121<=A11; A221<=A21; end if; end if; end if; end process; process(CLK2,RESET) -- 4,5,6,7 stage variable m11 : std_logic_vector(15 downto 0); variable y11 : std_logic_vector(15 downto 0); variable a1 : std_logic_vector(8 downto 0); variable tm : std_logic_vector(2 downto 0); begin if(RESET='0') then if(CLK2'event and CLK2='1') then tm:=sub_count; if(tm=3) then m11:=A121 & "00000000"; y11:=A221 & "00000000"; a1:="000000000"; else a1:=a0; m11:=div_m0; end if; div_m1<=m11; div_m2<=("0" & m11)-("0" & y11); a2<=a1; y11:='0' & y11(15 downto 1); div_y0<=y11; end if; end if; end process; process(CLK2) variable m2 : std_logic_vector(16 downto 0); begin if(CLK2'event and CLK2='0') then if(div_m2(16)='0') then div_m0<=div_m2(15 downto 0); else div_m0<=div_m1; end if; a0<=a2(7 downto 0) & ( not div_m2(16)); end if; end process; process(CLK2,RESET) -- 8,9,10,11,12 stage variable m11 : std_logic_vector(15 downto 0); variable y11 : std_logic_vector(15 downto 0); variable a1 : std_logic_vector(8 downto 0); variable tm : std_logic_vector(2 downto 0); begin if(RESET='0') then if(CLK2'event and CLK2='1') then tm:=sub_count; if(tm=4) then y<="0" & a20(7 downto 0); xy<=xy2; end if; if(tm=7) then m11:=div_m0; y11:=div_y0; a1:=a0; else a1:=a20; m11:=div_m0; end if; div_m21<=m11; div_m22<=("0" & m11)-("0" & y11); a22<=a1; y11:='0' & y11(15 downto 1); end if; end if; end process; process(CLK2) variable m2 : std_logic_vector(16 downto 0); begin if(CLK2'event and CLK2='0') then if(div_m2(16)='0') then div_m20<=div_m22(15 downto 0); else div_m20<=div_m21; end if; a20<=a22(7 downto 0) & ( not div_m22(16)); end if; end process; -- atan H17.2.19 PM2:46 process(y) variable atan_a : std_logic_vector(11 downto 0); variable atan_b : std_logic_vector(9 downto 0); variable atan_t : std_logic_vector(20 downto 0); variable atan_t1 : std_logic_vector(11 downto 0); begin case y(7 downto 4) is when "0000" => atan_a := "101000101100"; when "0001" => atan_a := "101000011000"; when "0010" => atan_a := "100111110001"; when "0011" => atan_a := "100110111000"; when "0100" => atan_a := "100101110001"; when "0101" => atan_a := "100100011100"; when "0110" => atan_a := "100010111111"; when "0111" => atan_a := "100001011011"; when "1000" => atan_a := "011111110011"; when "1001" => atan_a := "011110001001"; when "1010" => atan_a := "011100100000"; when "1011" => atan_a := "011010111001"; when "1100" => atan_a := "011001010101"; when "1101" => atan_a := "010111110100"; when "1110" => atan_a := "010110011001"; when "1111" => atan_a := "010101000010"; end case; case y(7 downto 4) is when "0000" => atan_b := "0000000000"; when "0001" => atan_b := "0000000001"; when "0010" => atan_b := "0000000110"; when "0011" => atan_b := "0000010001"; when "0100" => atan_b := "0000100011"; when "0101" => atan_b := "0000111101"; when "0110" => atan_b := "0001100000"; when "0111" => atan_b := "0010001100"; when "1000" => atan_b := "0011000000"; when "1001" => atan_b := "0011111011"; when "1010" => atan_b := "0100111101"; when "1011" => atan_b := "0110000100"; when "1100" => atan_b := "0111001111"; when "1101" => atan_b := "1000011101"; when "1110" => atan_b := "1001101101"; when "1111" => atan_b := "1010111110"; end case; atan_t := atan_a * y; atan_t1 := atan_t(19 downto 8); atan_t1 := atan_t1 + ("00" & atan_b); if(xy="000") then -- 000-045 / atan_y <= "00" & atan_t1; elsif(xy="001") then -- 045-090 / atan_y <= 1024-("00" & atan_t1); elsif(xy="011") then -- 090-135 / atan_y <= 1024+("00" & atan_t1); elsif(xy="010") then -- 135-180 / atan_y <= 2048-("00" & atan_t1); elsif(xy="110") then -- 180-225 atan_y <= 2048+("00" & atan_t1); elsif(xy="111") then -- 225-270 atan_y <= 3072-("00" & atan_t1); elsif(xy="101") then -- 270-315 atan_y <= 3072+("00" & atan_t1); elsif(xy="100") then -- 315-360 atan_y <= 4096-("00" & atan_t1); end if; end process; -- Sub H17.2.19 PM0:40 process(RESET,CLK,atan_y) variable T0 : std_logic_vector(13 downto 0); variable SUB14 : std_logic_vector(13 downto 0); begin if(CLK'event and CLK='0') then SUB14:=atan_y-T0; FMOD0<=atan_y-T0; T0:=atan_y; end if; end process; -- average3 H17.2.20 PM2:11 process(RESET,CLK,atan_y) variable M3_00 : std_logic_vector(15 downto 0); variable M3_01 : std_logic_vector(15 downto 0); variable M3_02 : std_logic_vector(15 downto 0); variable M3_03 : std_logic_vector(15 downto 0); variable M3_04 : std_logic_vector(15 downto 0); variable M3_05 : std_logic_vector(15 downto 0); variable M3_06 : std_logic_vector(15 downto 0); variable M3_07 : std_logic_vector(15 downto 0); variable M3_08 : std_logic_vector(15 downto 0); variable M3_09 : std_logic_vector(15 downto 0); variable M3_10 : std_logic_vector(15 downto 0); variable M3_11 : std_logic_vector(15 downto 0); variable M3_12 : std_logic_vector(15 downto 0); variable M3_13 : std_logic_vector(15 downto 0); variable M3_14 : std_logic_vector(15 downto 0); variable M3_15 : std_logic_vector(15 downto 0); variable M3_SUM : std_logic_vector(15 downto 0); begin if(RESET='1') then M3_15:="0000000000000000"; M3_14:="0000000000000000"; M3_13:="0000000000000000"; M3_12:="0000000000000000"; M3_11:="0000000000000000"; M3_10:="0000000000000000"; M3_09:="0000000000000000"; M3_08:="0000000000000000"; M3_07:="0000000000000000"; M3_06:="0000000000000000"; M3_05:="0000000000000000"; M3_04:="0000000000000000"; M3_03:="0000000000000000"; M3_02:="0000000000000000"; M3_01:="0000000000000000"; M3_00:="0000000000000000"; FMOD<="000000000000"; elsif(CLK'event and CLK='1') then M3_15:=M3_14; M3_14:=M3_13; M3_13:=M3_12; M3_12:=M3_11; M3_11:=M3_10; M3_10:=M3_09; M3_09:=M3_08; M3_08:=M3_07; M3_07:=M3_06; M3_06:=M3_05; M3_05:=M3_04; M3_04:=M3_03; M3_03:=M3_02; M3_02:=M3_01; M3_01:=M3_00; M3_00:=FMOD0(11) & FMOD0(11) & FMOD0; M3_SUM:=M3_00; M3_SUM:=M3_SUM+M3_01; M3_SUM:=M3_SUM+M3_02; M3_SUM:=M3_SUM+M3_03; M3_SUM:=M3_SUM+M3_04; M3_SUM:=M3_SUM+M3_05; M3_SUM:=M3_SUM+M3_06; M3_SUM:=M3_SUM+M3_07; M3_SUM:=M3_SUM+M3_08; M3_SUM:=M3_SUM+M3_09; M3_SUM:=M3_SUM+M3_10; M3_SUM:=M3_SUM+M3_11; M3_SUM:=M3_SUM+M3_12; M3_SUM:=M3_SUM+M3_13; M3_SUM:=M3_SUM+M3_14; M3_SUM:=M3_SUM+M3_15; FMOD(10 downto 0)<=M3_SUM(10 downto 0); FMOD(11)<=M3_SUM(15); end if; end process; end RTL;