--VHDL code for a 8 bit counter that counts in Gray code --Date Created: 8/16/2012 --Creator/copyright: Joanne E. DeGroat --Description: This counter starts at "00000000" amd counts -- in Gray Code with the count progressing on the rising edge -- of input signal clk. clk is the only input and the -- output is a 8-bit bit_vector in signal cnt. -- ENTITY cnt8 IS PORT(clk : IN bit; cnt : OUT bit_vector(7 downto 0)); END cnt8; ARCHITECTURE one OF cnt8 IS SIGNAL state,next_state : bit_vector(7 downto 0) := "00000000"; BEGIN --Latching logic specification PROCESS BEGIN WAIT UNTIL clk='1' AND clk'event; state <= next_state; END PROCESS; --Assign outputs cnt <= state; --Next State Logic PROCESS (state) BEGIN CASE state IS WHEN ("00000000") => next_state <= "00000001"; WHEN ("00000001") => next_state <= "00000011"; WHEN ("00000011") => next_state <= "00000010"; WHEN ("00000010") => next_state <= "00000110"; WHEN ("00000110") => next_state <= "00000111"; WHEN ("00000111") => next_state <= "00000101"; WHEN ("00000101") => next_state <= "00000100"; WHEN ("00000100") => next_state <= "00001100"; WHEN ("00001100") => next_state <= "00001101"; WHEN ("00001101") => next_state <= "00001111"; WHEN ("00001111") => next_state <= "00001110"; WHEN ("00001110") => next_state <= "00001010"; WHEN ("00001010") => next_state <= "00001011"; WHEN ("00001011") => next_state <= "00001001"; WHEN ("00001001") => next_state <= "00001000"; WHEN ("00001000") => next_state <= "00011000"; WHEN ("00011000") => next_state <= "00011001"; WHEN ("00011001") => next_state <= "00011011"; WHEN ("00011011") => next_state <= "00011010"; WHEN ("00011010") => next_state <= "00011110"; WHEN ("00011110") => next_state <= "00011111"; WHEN ("00011111") => next_state <= "00011101"; WHEN ("00011101") => next_state <= "00011100"; WHEN ("00011100") => next_state <= "00010100"; WHEN ("00010100") => next_state <= "00010101"; WHEN ("00010101") => next_state <= "00010111"; WHEN ("00010111") => next_state <= "00010110"; WHEN ("00010110") => next_state <= "00010010"; WHEN ("00010010") => next_state <= "00010011"; WHEN ("00010011") => next_state <= "00010001"; WHEN ("00010001") => next_state <= "00010000"; WHEN ("00010000") => next_state <= "00110000"; WHEN ("00110000") => next_state <= "00110001"; WHEN ("00110001") => next_state <= "00110011"; WHEN ("00110011") => next_state <= "00110010"; WHEN ("00110010") => next_state <= "00110110"; WHEN ("00110110") => next_state <= "00110111"; WHEN ("00110111") => next_state <= "00110101"; WHEN ("00110101") => next_state <= "00110100"; WHEN ("00110100") => next_state <= "00111100"; WHEN ("00111100") => next_state <= "00111101"; WHEN ("00111101") => next_state <= "00111111"; WHEN ("00111111") => next_state <= "00111110"; WHEN ("00111110") => next_state <= "00111010"; WHEN ("00111010") => next_state <= "00111011"; WHEN ("00111011") => next_state <= "00111001"; WHEN ("00111001") => next_state <= "00111000"; WHEN ("00111000") => next_state <= "00101000"; WHEN ("00101000") => next_state <= "00101001"; WHEN ("00101001") => next_state <= "00101011"; WHEN ("00101011") => next_state <= "00101010"; WHEN ("00101010") => next_state <= "00101110"; WHEN ("00101110") => next_state <= "00101111"; WHEN ("00101111") => next_state <= "00101101"; WHEN ("00101101") => next_state <= "00101100"; WHEN ("00101100") => next_state <= "00100100"; WHEN ("00100100") => next_state <= "00100101"; WHEN ("00100101") => next_state <= "00100111"; WHEN ("00100111") => next_state <= "00100110"; WHEN ("00100110") => next_state <= "00100010"; WHEN ("00100010") => next_state <= "00100011"; WHEN ("00100011") => next_state <= "00100001"; WHEN ("00100001") => next_state <= "00100000"; WHEN ("00100000") => next_state <= "01100000"; WHEN ("01100000") => next_state <= "01100001"; WHEN ("01100001") => next_state <= "01100011"; WHEN ("01100011") => next_state <= "01100010"; WHEN ("01100010") => next_state <= "01100110"; WHEN ("01100110") => next_state <= "01100111"; WHEN ("01100111") => next_state <= "01100101"; WHEN ("01100101") => next_state <= "01100100"; WHEN ("01100100") => next_state <= "01101100"; WHEN ("01101100") => next_state <= "01101101"; WHEN ("01101101") => next_state <= "01101111"; WHEN ("01101111") => next_state <= "01101110"; WHEN ("01101110") => next_state <= "01101010"; WHEN ("01101010") => next_state <= "01101011"; WHEN ("01101011") => next_state <= "01101001"; WHEN ("01101001") => next_state <= "01101000"; WHEN ("01101000") => next_state <= "01111000"; WHEN ("01111000") => next_state <= "01111001"; WHEN ("01111001") => next_state <= "01111011"; WHEN ("01111011") => next_state <= "01111010"; WHEN ("01111010") => next_state <= "01111110"; WHEN ("01111110") => next_state <= "01111111"; WHEN ("01111111") => next_state <= "01111101"; WHEN ("01111101") => next_state <= "01111100"; WHEN ("01111100") => next_state <= "01110100"; WHEN ("01110100") => next_state <= "01110101"; WHEN ("01110101") => next_state <= "01110111"; WHEN ("01110111") => next_state <= "01110110"; WHEN ("01110110") => next_state <= "01110010"; WHEN ("01110010") => next_state <= "01110011"; WHEN ("01110011") => next_state <= "01110001"; WHEN ("01110001") => next_state <= "01110000"; WHEN ("01110000") => next_state <= "01010000"; WHEN ("01010000") => next_state <= "01010001"; WHEN ("01010001") => next_state <= "01010011"; WHEN ("01010011") => next_state <= "01010010"; WHEN ("01010010") => next_state <= "01010110"; WHEN ("01010110") => next_state <= "01010111"; WHEN ("01010111") => next_state <= "01010101"; WHEN ("01010101") => next_state <= "01010100"; WHEN ("01010100") => next_state <= "01011100"; WHEN ("01011100") => next_state <= "01011101"; WHEN ("01011101") => next_state <= "01011111"; WHEN ("01011111") => next_state <= "01011110"; WHEN ("01011110") => next_state <= "01011010"; WHEN ("01011010") => next_state <= "01011011"; WHEN ("01011011") => next_state <= "01011001"; WHEN ("01011001") => next_state <= "01011000"; WHEN ("01011000") => next_state <= "01001000"; WHEN ("01001000") => next_state <= "01001001"; WHEN ("01001001") => next_state <= "01001011"; WHEN ("01001011") => next_state <= "01001010"; WHEN ("01001010") => next_state <= "01001110"; WHEN ("01001110") => next_state <= "01001111"; WHEN ("01001111") => next_state <= "01001101"; WHEN ("01001101") => next_state <= "01001100"; WHEN ("01001100") => next_state <= "01000100"; WHEN ("01000100") => next_state <= "01000101"; WHEN ("01000101") => next_state <= "01000111"; WHEN ("01000111") => next_state <= "01000110"; WHEN ("01000110") => next_state <= "01000010"; WHEN ("01000010") => next_state <= "01000011"; WHEN ("01000011") => next_state <= "01000001"; WHEN ("01000001") => next_state <= "01000000"; WHEN ("01000000") => next_state <= "11000000"; WHEN ("11000000") => next_state <= "11000001"; WHEN ("11000001") => next_state <= "11000011"; WHEN ("11000011") => next_state <= "11000010"; WHEN ("11000010") => next_state <= "11000110"; WHEN ("11000110") => next_state <= "11000111"; WHEN ("11000111") => next_state <= "11000101"; WHEN ("11000101") => next_state <= "11000100"; WHEN ("11000100") => next_state <= "11001100"; WHEN ("11001100") => next_state <= "11001101"; WHEN ("11001101") => next_state <= "11001111"; WHEN ("11001111") => next_state <= "11001110"; WHEN ("11001110") => next_state <= "11001010"; WHEN ("11001010") => next_state <= "11001011"; WHEN ("11001011") => next_state <= "11001001"; WHEN ("11001001") => next_state <= "11001000"; WHEN ("11001000") => next_state <= "11011000"; WHEN ("11011000") => next_state <= "11011001"; WHEN ("11011001") => next_state <= "11011011"; WHEN ("11011011") => next_state <= "11011010"; WHEN ("11011010") => next_state <= "11011110"; WHEN ("11011110") => next_state <= "11011111"; WHEN ("11011111") => next_state <= "11011101"; WHEN ("11011101") => next_state <= "11011100"; WHEN ("11011100") => next_state <= "11010100"; WHEN ("11010100") => next_state <= "11010101"; WHEN ("11010101") => next_state <= "11010111"; WHEN ("11010111") => next_state <= "11010110"; WHEN ("11010110") => next_state <= "11010010"; WHEN ("11010010") => next_state <= "11010011"; WHEN ("11010011") => next_state <= "11010001"; WHEN ("11010001") => next_state <= "11010000"; WHEN ("11010000") => next_state <= "11110000"; WHEN ("11110000") => next_state <= "11110001"; WHEN ("11110001") => next_state <= "11110011"; WHEN ("11110011") => next_state <= "11110010"; WHEN ("11110010") => next_state <= "11110110"; WHEN ("11110110") => next_state <= "11110111"; WHEN ("11110111") => next_state <= "11110101"; WHEN ("11110101") => next_state <= "11110100"; WHEN ("11110100") => next_state <= "11111100"; WHEN ("11111100") => next_state <= "11111101"; WHEN ("11111101") => next_state <= "11111111"; WHEN ("11111111") => next_state <= "11111110"; WHEN ("11111110") => next_state <= "11111010"; WHEN ("11111010") => next_state <= "11111011"; WHEN ("11111011") => next_state <= "11111001"; WHEN ("11111001") => next_state <= "11111000"; WHEN ("11111000") => next_state <= "11101000"; WHEN ("11101000") => next_state <= "11101001"; WHEN ("11101001") => next_state <= "11101011"; WHEN ("11101011") => next_state <= "11101010"; WHEN ("11101010") => next_state <= "11101110"; WHEN ("11101110") => next_state <= "11101111"; WHEN ("11101111") => next_state <= "11101101"; WHEN ("11101101") => next_state <= "11101100"; WHEN ("11101100") => next_state <= "11100100"; WHEN ("11100100") => next_state <= "11100101"; WHEN ("11100101") => next_state <= "11100111"; WHEN ("11100111") => next_state <= "11100110"; WHEN ("11100110") => next_state <= "11100010"; WHEN ("11100010") => next_state <= "11100011"; WHEN ("11100011") => next_state <= "11100001"; WHEN ("11100001") => next_state <= "11100000"; WHEN ("11100000") => next_state <= "10100000"; WHEN ("10100000") => next_state <= "10100001"; WHEN ("10100001") => next_state <= "10100011"; WHEN ("10100011") => next_state <= "10100010"; WHEN ("10100010") => next_state <= "10100110"; WHEN ("10100110") => next_state <= "10100111"; WHEN ("10100111") => next_state <= "10100101"; WHEN ("10100101") => next_state <= "10100100"; WHEN ("10100100") => next_state <= "10101100"; WHEN ("10101100") => next_state <= "10101101"; WHEN ("10101101") => next_state <= "10101111"; WHEN ("10101111") => next_state <= "10101110"; WHEN ("10101110") => next_state <= "10101010"; WHEN ("10101010") => next_state <= "10101011"; WHEN ("10101011") => next_state <= "10101001"; WHEN ("10101001") => next_state <= "10101000"; WHEN ("10101000") => next_state <= "10111000"; WHEN ("10111000") => next_state <= "10111001"; WHEN ("10111001") => next_state <= "10111011"; WHEN ("10111011") => next_state <= "10111010"; WHEN ("10111010") => next_state <= "10111110"; WHEN ("10111110") => next_state <= "10111111"; WHEN ("10111111") => next_state <= "10111101"; WHEN ("10111101") => next_state <= "10111100"; WHEN ("10111100") => next_state <= "10110100"; WHEN ("10110100") => next_state <= "10110101"; WHEN ("10110101") => next_state <= "10110111"; WHEN ("10110111") => next_state <= "10110110"; WHEN ("10110110") => next_state <= "10110010"; WHEN ("10110010") => next_state <= "10110011"; WHEN ("10110011") => next_state <= "10110001"; WHEN ("10110001") => next_state <= "10110000"; WHEN ("10110000") => next_state <= "10010000"; WHEN ("10010000") => next_state <= "10010001"; WHEN ("10010001") => next_state <= "10010011"; WHEN ("10010011") => next_state <= "10010010"; WHEN ("10010010") => next_state <= "10010110"; WHEN ("10010110") => next_state <= "10010111"; WHEN ("10010111") => next_state <= "10010101"; WHEN ("10010101") => next_state <= "10010100"; WHEN ("10010100") => next_state <= "10011100"; WHEN ("10011100") => next_state <= "10011101"; WHEN ("10011101") => next_state <= "10011111"; WHEN ("10011111") => next_state <= "10011110"; WHEN ("10011110") => next_state <= "10011010"; WHEN ("10011010") => next_state <= "10011011"; WHEN ("10011011") => next_state <= "10011001"; WHEN ("10011001") => next_state <= "10011000"; WHEN ("10011000") => next_state <= "10001000"; WHEN ("10001000") => next_state <= "10001001"; WHEN ("10001001") => next_state <= "10001011"; WHEN ("10001011") => next_state <= "10001010"; WHEN ("10001010") => next_state <= "10001110"; WHEN ("10001110") => next_state <= "10001111"; WHEN ("10001111") => next_state <= "10001101"; WHEN ("10001101") => next_state <= "10001100"; WHEN ("10001100") => next_state <= "10000100"; WHEN ("10000100") => next_state <= "10000101"; WHEN ("10000101") => next_state <= "10000111"; WHEN ("10000111") => next_state <= "10000110"; WHEN ("10000110") => next_state <= "10000010"; WHEN ("10000010") => next_state <= "10000011"; WHEN ("10000011") => next_state <= "10000001"; WHEN ("10000001") => next_state <= "10000000"; WHEN ("10000000") => next_state <= "00000000"; END CASE; END PROCESS; END one;