-- EE552 -- keyASCII.vhd -- This code converts the scancode from the AT keyboard to ASCII code. library ieee; use ieee.std_logic_1164.all; library work; use work.key_pack.all; entity keyASCII is generic(datawidth: positive:= 8); port( key_in : in std_logic_vector(datawidth-1 downto 0); key_ascii: out std_logic_vector(datawidth-1 downto 0)); end entity keyASCII; architecture converter of keyASCII is -- The alphabet - lower case only. constant a: std_logic_vector(datawidth-1 downto 0) := "01100001";--Hex: 61 constant b: std_logic_vector(datawidth-1 downto 0) := "01100010";--Hex: 62 constant c: std_logic_vector(datawidth-1 downto 0) := "01100011";--Hex: 63 constant d: std_logic_vector(datawidth-1 downto 0) := "01100100";--Hex: 64 constant e: std_logic_vector(datawidth-1 downto 0) := "01100101";--Hex: 65 constant f: std_logic_vector(datawidth-1 downto 0) := "01100110";--Hex: 66 constant g: std_logic_vector(datawidth-1 downto 0) := "01100111";--Hex: 67 constant h: std_logic_vector(datawidth-1 downto 0) := "01101000";--Hex: 68 constant i: std_logic_vector(datawidth-1 downto 0) := "01101001";--Hex: 69 constant j: std_logic_vector(datawidth-1 downto 0) := "01101010";--Hex: 6A constant k: std_logic_vector(datawidth-1 downto 0) := "01101011";--Hex: 6B*** constant l: std_logic_vector(datawidth-1 downto 0) := "01101100";--Hex: 6C constant m: std_logic_vector(datawidth-1 downto 0) := "01101101";--Hex: 6D constant n: std_logic_vector(datawidth-1 downto 0) := "01101110";--Hex: 6E constant o: std_logic_vector(datawidth-1 downto 0) := "01101111";--Hex: 6F constant p: std_logic_vector(datawidth-1 downto 0) := "01110000";--Hex: 70 constant q: std_logic_vector(datawidth-1 downto 0) := "01110001";--Hex: 71 constant r: std_logic_vector(datawidth-1 downto 0) := "01110010";--Hex: 72 constant s: std_logic_vector(datawidth-1 downto 0) := "01110011";--Hex: 73 constant t: std_logic_vector(datawidth-1 downto 0) := "01110100";--Hex: 74 constant u: std_logic_vector(datawidth-1 downto 0) := "01110101";--Hex: 75 constant v: std_logic_vector(datawidth-1 downto 0) := "01110110";--Hex: 76 constant w: std_logic_vector(datawidth-1 downto 0) := "01110111";--Hex: 77*** constant x: std_logic_vector(datawidth-1 downto 0) := "01111000";--Hex: 78 constant y: std_logic_vector(datawidth-1 downto 0) := "01111001";--Hex: 79**** constant z: std_logic_vector(datawidth-1 downto 0) := "01111010";--Hex: 7A -- The number and symbols constant zero: std_logic_vector(datawidth-1 downto 0) := "00110000";--Hex: 30 constant one: std_logic_vector(datawidth-1 downto 0) := "00110001";--Hex: 31 constant two: std_logic_vector(datawidth-1 downto 0) := "00110010";--Hex: 32 constant three: std_logic_vector(datawidth-1 downto 0) := "00110011";--Hex: 33 ***** constant four: std_logic_vector(datawidth-1 downto 0) := "00110100";--Hex: 34 constant five: std_logic_vector(datawidth-1 downto 0) := "00110101";--Hex: 35** constant six: std_logic_vector(datawidth-1 downto 0) := "00110110";--Hex: 36 constant seven: std_logic_vector(datawidth-1 downto 0) := "00110111";--Hex: 37*-*-* constant eight: std_logic_vector(datawidth-1 downto 0) := "00111000";--Hex: 38 constant nine: std_logic_vector(datawidth-1 downto 0) := "00111001";--Hex: 39**** constant SP: std_logic_vector(datawidth-1 downto 0) := "00100000";--Hex: 20 constant coma: std_logic_vector(datawidth-1 downto 0) := "00101100";--Hex: 2C constant period:std_logic_vector(datawidth-1 downto 0) := "00100111";--Hex: 27 -- Special Function: SHIFT:Read, ESC:Delete, ENTER:End of paragraph constant ESC: std_logic_vector(datawidth-1 downto 0) := "00010000";--Hex: 10 constant SHIFT: std_logic_vector(datawidth-1 downto 0) := "00010001";--Hex: 11 constant ENTER: std_logic_vector(datawidth-1 downto 0) := "00010010";--Hex: 12 begin key_ascii<= ENTER when key_in = x"5A" else ESC when key_in = x"76" else SHIFT when key_in = x"12" else a when key_in = x"1c" else b when key_in = x"32" else c when key_in = x"21" else d when key_in = x"23" else e when key_in = x"24" else f when key_in = x"2b" else g when key_in = x"34" else h when key_in = x"33" else i when key_in = x"43" else j when key_in = x"3b" else k when key_in = x"42" else l when key_in = x"4b" else m when key_in = x"3a" else n when key_in = x"31" else o when key_in = x"44" else p when key_in = x"4d" else q when key_in = x"15" else r when key_in = x"2d" else s when key_in = x"1b" else t when key_in = x"2c" else u when key_in = x"3c" else v when key_in = x"2a" else w when key_in = x"1d" else x when key_in = x"22" else y when key_in = x"35" else z when key_in = x"1a" else zero when key_in = x"45" else one when key_in = x"16" else two when key_in = x"1e" else three when key_in = x"26" else four when key_in = x"25" else five when key_in = x"2e" else six when key_in = x"36" else seven when key_in = x"3d" else eight when key_in = x"3e" else nine when key_in = x"46" else SP when key_in = x"29" else coma when key_in = x"41" else period when key_in = x"49" ; end architecture;