----------------------------------------------------------------- -- ascii_to_vector.vhd -- Christopher Kowalski -- -- ASCII converter from a recieved ASCII value to an encoded bit -- Vector -- -- Following the code is a table containing the ASCII conversion. -- library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity ascii_to_vector is port(ascii : in std_logic_vector(6 downto 0); reset, clock, transfer : in std_logic; done : out std_logic; vector : out std_logic_vector(4 downto 0)); end ascii_to_vector; architecture behavioural of ascii_to_vector is -- declare internal signals begin convert : process (clock) is -- process variable variable count:natural range 0 to 2; begin if rising_edge(clock) then if reset = '1' then vector <= (others => '0'); count := 0; done <= '0'; elsif transfer = '1' then -- a load signal if count = 2 then -- this gives the circuit time to have the done <= '1'; -- correct value at it's output else case ascii is when "0000000" => vector <= "00000"; when "0100000" => vector <= "00001"; when "0101110" => vector <= "00010"; when "0110000" => vector <= "00011"; when "0110001" => vector <= "00100"; when "0110010" => vector <= "00101"; when "0110011" => vector <= "00110"; when "0110100" => vector <= "00111"; when "0110101" => vector <= "01000"; when "0110110" => vector <= "01001"; when "0110111" => vector <= "01010"; when "0111000" => vector <= "01011"; when "0111001" => vector <= "01100"; when "0111010" => vector <= "01101"; when "1000001" => vector <= "01110"; when "1000010" => vector <= "01111"; when "1000011" => vector <= "10000"; when "1000100" => vector <= "10001"; when "1000101" => vector <= "10010"; when "1000110" => vector <= "10011"; when "1101101" => vector <= "10100"; when "1001110" => vector <= "10101"; when "1001111" => vector <= "10110"; when "1010010" => vector <= "10111"; when "1010011" => vector <= "11000"; when "1010100" => vector <= "11001"; when "1010101" => vector <= "11010"; when "1010110" => vector <= "11011"; when "1010111" => vector <= "11100"; when "1011010" => vector <= "11101"; when "0001101" => vector <= "11110"; when "1111111" => vector <= "11111"; when others => vector <= "11111"; end case; count:= (count +1); end if; elsif transfer = '0' then done <= '0'; count := 0; end if; end if; end process convert; end behavioural; -------------------------------------------------------------------------- -- |ASCII | ASCII in HEX | Binary Value | Encoded Vector | -- |--------|-------------------|-------------------|-------------------| -- | Null | 00 | 000 0000 | 00000 | -- | Space | 20 | 010 0000 | 00001 | -- | Period | 2E | 010 1110 | 00010 | -- | 0 | 30 | 011 0000 | 00011 | -- | 1 | 31 | 011 0001 | 00100 | -- | 2 | 32 | 011 0010 | 00101 | -- | 3 | 33 | 011 0011 | 00110 | -- | 4 | 34 | 011 0100 | 00111 | -- | 5 | 35 | 011 0101 | 01000 | -- | 6 | 36 | 011 0110 | 01001 | -- | 7 | 37 | 011 0111 | 01010 | -- | 8 | 38 | 011 1000 | 01011 | -- | 9 | 39 | 011 1001 | 01100 | -- | : | 3A | 011 1010 | 01101 | -- | A | 41 | 100 0001 | 01110 | -- | B | 42 | 100 0010 | 01111 | -- | C | 43 | 100 0011 | 10000 | -- | D | 44 | 100 0100 | 10001 | -- | E | 45 | 100 0101 | 10010 | -- | F | 46 | 100 0110 | 10011 | -- | m | 6D | 110 1101 | 10100 | -- | N | 4E | 100 1110 | 10101 | -- | O | 4F | 100 1111 | 10110 | -- | R | 52 | 101 0010 | 10111 | -- | S | 53 | 101 0011 | 11000 | -- | T | 54 | 101 0100 | 11001 | -- | U | 55 | 101 0101 | 11010 | -- | V | 56 | 101 0110 | 11011 | -- | W | 57 | 101 0111 | 11100 | -- | Z | 5A | 101 1010 | 11101 | -- | | 0D | 000 1101 | 11110 | -- | ERROR | -- | --- ---- | 11111 | --------------------------------------------------------------------------