Saturday, 5 August 2017

VHDL FPGA PONG GAME VGA video gate array implementation Xilinx Spartan 3 development board + code

MODULES IN TXT FORMAT

TOP MODULE
 -- Listing 13.10  
 library ieee;  
 use ieee.std_logic_1164.all;  
 use ieee.numeric_std.all;  
 entity pong_top is  
   port(  
    clk, reset: in std_logic;  
    btn: in std_logic_vector (1 downto 0);  
    hsync, vsync: out std_logic;  
    rgb: out  std_logic_vector (2 downto 0)  
   );  
 end pong_top;  
 architecture arch of pong_top is  
   type state_type is (newgame, play, newball, over);  
   signal video_on, pixel_tick: std_logic;  
   signal pixel_x, pixel_y: std_logic_vector (9 downto 0);  
   signal graph_on, gra_still, hit, miss: std_logic;  
   signal text_on: std_logic_vector(3 downto 0);  
   signal graph_rgb, text_rgb: std_logic_vector(2 downto 0);  
   signal rgb_reg, rgb_next: std_logic_vector(2 downto 0);  
   signal state_reg, state_next: state_type;  
   signal dig0, dig1: std_logic_vector(3 downto 0);  
   signal d_inc, d_clr: std_logic;  
   signal timer_tick, timer_start, timer_up: std_logic;  
   signal ball_reg, ball_next: unsigned(1 downto 0);  
   signal ball: std_logic_vector(1 downto 0);  
 begin  
   -- instantiate video synchonization unit  
   vga_sync_unit: entity work.vga_sync  
    port map(clk=>clk, reset=>reset,  
         hsync=>hsync, vsync=>vsync,  
         pixel_x=>pixel_x, pixel_y=>pixel_y,  
         video_on=>video_on, p_tick=>pixel_tick);  
   -- instantiate text module  
   ball <= std_logic_vector(ball_reg); --type conversion  
   text_unit: entity work.pong_text  
    port map(clk=>clk, reset=>reset,  
         pixel_x=>pixel_x, pixel_y=>pixel_y,  
         dig0=>dig0, dig1=>dig1, ball=>ball,  
         text_on=>text_on, text_rgb=>text_rgb);  
   -- instantiate graph module  
   graph_unit: entity work.pong_graph  
    port map(clk=>clk, reset=>reset, btn=>btn,  
        pixel_x=>pixel_x, pixel_y=>pixel_y,  
        gra_still=>gra_still,hit=>hit, miss=>miss,  
        graph_on=>graph_on,rgb=>graph_rgb);  
   -- instantiate 2 sec timer  
   timer_tick <= -- 60 Hz tick  
    '1' when pixel_x="0000000000" and  
         pixel_y="0000000000" else  
    '0';  
   timer_unit: entity work.timer  
    port map(clk=>clk, reset=>reset,  
         timer_tick=>timer_tick,  
         timer_start=>timer_start,  
         timer_up=>timer_up);  
   -- instantiate 2-digit decade counter  
   counter_unit: entity work.m100_counter  
    port map(clk=>clk, reset=>reset,  
         d_inc=>d_inc, d_clr=>d_clr,  
         dig0=>dig0, dig1=>dig1);  
   -- registers  
   process (clk,reset)  
   begin  
    if reset='1' then  
      state_reg <= newgame;  
      ball_reg <= (others=>'0');  
      rgb_reg <= (others=>'0');  
    elsif (clk'event and clk='1') then  
      state_reg <= state_next;  
      ball_reg <= ball_next;  
      if (pixel_tick='1') then  
       rgb_reg <= rgb_next;  
      end if;  
    end if;  
   end process;  
   -- fsmd next-state logic  
   process(btn,hit,miss,timer_up,state_reg,  
       ball_reg,ball_next)  
   begin  
    gra_still <= '1';  
    timer_start <='0';  
    d_inc <= '0';  
    d_clr <= '0';  
    state_next <= state_reg;  
    ball_next <= ball_reg;  
    case state_reg is  
      when newgame =>  
       ball_next <= "11";  -- three balls  
       d_clr <= '1';     -- clear score  
       if (btn /= "00") then -- button pressed  
         state_next <= play;  
         ball_next <= ball_reg - 1;  
       end if;  
      when play =>  
       gra_still <= '0';  -- animated screen  
       if hit='1' then  
         d_inc <= '1';   -- increment score  
       elsif miss='1' then  
         if (ball_reg=0) then  
          state_next <= over;  
         else  
          state_next <= newball;  
         end if;  
         timer_start <= '1'; -- 2 sec timer  
         ball_next <= ball_reg - 1;  
       end if;  
      when newball =>  
       -- wait for 2 sec and until button pressed  
       if timer_up='1' and (btn /= "00") then  
        state_next <= play;  
       end if;  
      when over =>  
       -- wait for 2 sec to display game over  
       if timer_up='1' then  
         state_next <= newgame;  
       end if;  
     end case;  
   end process;  
   -- rgb multiplexing circuit  
   process(state_reg,video_on,graph_on,graph_rgb,  
       text_on,text_rgb)  
   begin  
    if video_on='0' then  
      rgb_next <= "000"; -- blank the edge/retrace  
    else  
      -- display score, rule or game over  
      if (text_on(3)='1') or  
       (state_reg=newgame and text_on(1)='1') or -- rule  
       (state_reg=over and text_on(0)='1') then  
       rgb_next <= text_rgb;  
      elsif graph_on='1' then -- display graph  
       rgb_next <= graph_rgb;  
      elsif text_on(2)='1' then -- display logo  
       rgb_next <= text_rgb;  
      else  
       rgb_next <= "110"; -- yellow background  
      end if;  
    end if;  
   end process;  
   rgb <= rgb_reg;  
 end arch;  



VGA SYNCHRONIZATION MODULE
 Library ieee;  
 use ieee.std_logic_1164.all;  
 use ieee.numeric_std.all;  
 entity vga_sync is  
 port (  
 clk, reset: in std_logic;  
 hsync , vsync : out std_logic ;  
 video_on, p_tick: out std_logic;  
 pixel_x , pixel_y : out std_logic_vector (9 downto 0)  
 ) ;  
 end vga_sync ;  
 architecture arch of vga_sync is  
 -- VGA 6 4 0 - b y - 4 8 0 s y n c p a r a m e t e r s  
 constant HD: integer :=640; -- h o r i z o n t a l d is p l a y a r e a  
 constant HF: integer:=16 ; --h. f r o n t p o r c h  
 constant HB: integer:=48 ; --h. b a c k p o r c h  
 constant HR: integer:=96 ; --h. r e t r a c e  
 constant VD :integer :=480; -- v e r t i c a l d is p l a y a r e a  
 constant VF :integer:=10; -- v . f r o n t p o r c h  
 constant VB: integer :=33; -- v . b a c k p o r c h  
 constant VR :integer :=2; -- v . r e t r a c e  
 -- mod-2 c o u n t e r  
 signal mod2_reg, mod2_next : std_logic;  
 -- s y n c c o u n t e r s  
 signal v_count_reg , v_count_next : unsigned(9 downto 0) ;  
 signal h_count_reg , h_count_next : unsigned (9 downto 0 ) ;  
 -- o u t p u t b u f f e r  
 signal v_sync_reg , h_sync_reg : std_logic ;  
 signal v_sync_next , h_sync_next : std_logic;  
 -- s t a t u s signal  
 signal h_end , v_end , pixel_tick: std_logic;  
 -- r e g is t e r s  
 begin  
 process (clk , reset)  
 begin  
 if reset='1' then  
 mod2_reg <= '0' ;  
 v_count_reg <= ( others => '0' ) ;  
 h_count_reg <= ( others => '0' ) ;  
 v_sync_reg <= '0' ;  
 h_sync_reg <= '0' ;  
 elsif (clk'event and clk='1') then  
 mod2_reg <= mod2_next ;  
 v_count_reg <= v_count_next;  
 h_count_reg <= h_count_next;  
 v_sync_reg <= v_sync_next ;  
 h_sync_reg <= h_sync_next ;  
 end if ;  
 end process ;  
 -- mod-2 c i r c u i t t o g e n e r a t e 2 5 MHz e n a b l e t i c k  
 mod2_next <= not mod2_reg;  
 -- 2 5 MHz p i x e l t i c k  
 pixel_tick <= '1' when mod2_reg='1' else '0' ;  
 -- s t a t u s  
 h_end <=-- end of h o r i z o n t a l c o u n t e r  
 '1' when h_count_reg=(HD+HF+HB+HR-1) else --799  
 '0' ;  
 v_end <= -- end of v e r t i c a l c o u n t e r  
 '1' when v_count_reg=(VD+VF+VB+VR-1) else --524  
 '0' ;  
 -- mod-800 h o r i z o n t a l s y n c c o u n t e r  
 process (h_count_reg,h_end,pixel_tick)  
 begin  
 if pixel_tick='1' then -- 2 5 MHz t i c k  
 if h_end='1' then  
 h_count_next <= ( others => '0' ) ;  
 else  
 h_count_next <= h_count_reg + 1 ;  
 end if ;  
 else  
 h_count_next <= h_count_reg;  
 end if ;  
 end process ;  
 process (v_count_reg,h_end,v_end,pixel_tick)  
 begin  
 -- mod-525 v e r t i c a l s y n c c o u n t e r  
 if pixel_tick='1' and h_end='1' then  
 if (v_end='1') then  
 v_count_next <= ( others => '0' ) ;  
 else  
 v_count_next <= v_count_reg + 1 ;  
 end if ;  
 else  
 v_count_next <= v_count_reg;  
 end if ;  
 end process ;  
 -- h o r i z o n t a l and v e r t i c a l s y n c , b u f f e r e d t o a v o i d g l i t c h  
 h_sync_next <=  
           '1' when (h_count_reg >=(HD+HF)) --656  
                 and (h_count_reg<=(HD+HF+HR-1)) else --751  
           '0';  
 v_sync_next <=  
           '1' when ( v_count_reg >= ( VD+VF ) ) --490  
           and (v_count_reg<=(VD+VF+VR-1)) else --491  
           '0' ;  
 -- v i d e o o n / o f f  
 video_on <=  
           '1' when (h_count_reg<HD) and (v_count_reg<VD) else  
           '0' ;  
 --o u t p u t signal  
 hsync <= h_sync_reg ;  
 vsync <= v_sync_reg ;  
 pixel_x <= std_logic_vector(h_count_reg);  
 pixel_y <= STD_LOGIC_VECTOR ( v_count_reg ) ;  
 p_tick <= pixel_tick;  
 end arch;  


PONG TEXT MODULE
 -- Listing 13.6  
 library ieee;  
 use ieee.std_logic_1164.ALL;  
 use ieee.numeric_std.ALL;  
 entity pong_text is  
   port(  
    clk, reset: in std_logic;  
    pixel_x, pixel_y: in std_logic_vector(9 downto 0);  
    dig0, dig1: in std_logic_vector(3 downto 0);  
    ball: in std_logic_vector(1 downto 0);  
    text_on: out std_logic_vector(3 downto 0);  
    text_rgb: out std_logic_vector(2 downto 0)  
   );  
 end pong_text;  
 architecture arch of pong_text is  
   signal pix_x, pix_y: unsigned(9 downto 0);  
   signal rom_addr: std_logic_vector(10 downto 0);  
   signal char_addr, char_addr_s, char_addr_l, char_addr_r,  
      char_addr_o: std_logic_vector(6 downto 0);  
   signal row_addr, row_addr_s, row_addr_l,row_addr_r,  
      row_addr_o: std_logic_vector(3 downto 0);  
   signal bit_addr, bit_addr_s, bit_addr_l,bit_addr_r,  
      bit_addr_o: std_logic_vector(2 downto 0);  
   signal font_word: std_logic_vector(7 downto 0);  
   signal font_bit: std_logic;  
   signal score_on, logo_on, rule_on, over_on: std_logic;  
   signal rule_rom_addr: unsigned(5 downto 0);  
   type rule_rom_type is array (0 to 63) of  
     std_logic_vector (6 downto 0);  
   -- rull text ROM definition  
   constant RULE_ROM: rule_rom_type :=  
   (  
    -- row 1  
    "1001010", -- J  
    "1010101", -- U  
    "1000001", -- A  
    "1001110", -- N  
    "0000000", --   
    "1000110", -- F  
    "1000101", -- E  
    "1001100", -- L  
    "1001001", -- I  
    "1010000", -- P  
    "1000101", -- E  
    "0000000", --  
    "1010000", -- P  
    "0101110", -- .  
    "1010110", -- V  
    "0000000", --   
    -- row 2  
    "1000111", -- G  
    "1000001", -- A  
    "1001101", -- M  
    "1000101", -- E  
    "0000000", --   
    "1000011", -- C  
    "1001111", -- O  
    "1000100", -- D  
    "1000101", -- E  
    "0000000", --   
    "1001001", -- I  
    "1001110", -- N  
    "0000000", --   
    "1010100", -- T  
    "1001000", -- H  
    "1000101", -- E  
    -- row 3  
    "1010110", -- V  
    "1001001", -- I  
    "1000100", -- D  
    "1000101", -- E  
    "1001111", -- O  
    "0000000", --   
    "0000000", --  
    "0000000", --   
    "0000000", --   
    "0000000", --   
    "0000000", --   
    "0000000", --   
    "0000000", --   
    "0000000", --   
    "0000000", --   
    "0000000", --   
    -- row 4  
    "1000100", -- D  
    "1000101", -- E  
    "1010011", -- S  
    "1000011", -- C  
    "1010010", -- R  
    "1001001", -- I  
    "1010000", -- P  
    "1010100", -- T  
    "1001001", -- I  
    "1001111", -- O  
    "1001110", -- N  
    "0101110", -- .  
    "0000000", --  
    "0000000", --  
    "0000000", --  
    "0000000" --  
   );  
 begin  
   pix_x <= unsigned(pixel_x);  
   pix_y <= unsigned(pixel_y);  
   -- instantiate font rom  
   font_unit: entity work.font_rom  
    port map(clk=>clk, addr=>rom_addr, data=>font_word);  
   ---------------------------------------------  
   -- score region  
   -- - display two-digit score, ball on top left  
   -- - scale to 16-by-32 font  
   -- - line 1, 16 chars: "Score:DD Ball:D"  
   ---------------------------------------------  
   score_on <=  
    '1' when pix_y(9 downto 5)=0 and  
         pix_x(9 downto 4)<16 else  
    '0';  
   row_addr_s <= std_logic_vector(pix_y(4 downto 1));  
   bit_addr_s <= std_logic_vector(pix_x(3 downto 1));  
   with pix_x(7 downto 4) select  
    char_addr_s <=  
     "1010011" when "0000", -- S x53  
     "1100011" when "0001", -- c x63  
     "1101111" when "0010", -- o x6f  
     "1110010" when "0011", -- r x72  
     "1100101" when "0100", -- e x65  
     "0111010" when "0101", -- : x3a  
     "011" & dig1 when "0110", -- digit 10  
     "011" & dig0 when "0111", -- digit 1  
     "0000000" when "1000",  
     "0000000" when "1001",  
     "1000010" when "1010", -- B x42  
     "1100001" when "1011", -- a x61  
     "1101100" when "1100", -- l x6c  
     "1101100" when "1101", -- l x6c  
     "0111010" when "1110", -- :  
     "01100" & ball when others;  
   ---------------------------------------------  
   -- logo region:  
   --  - display logo "PONG" on top center  
   --  - used as background  
   --  - scale to 64-by-128 font  
   ---------------------------------------------  
   logo_on <=  
    '1' when pix_y(9 downto 7)=2 and  
      (3<= pix_x(9 downto 6) and pix_x(9 downto 6)<=6) else  
    '0';  
   row_addr_l <= std_logic_vector(pix_y(6 downto 3));  
   bit_addr_l <= std_logic_vector(pix_x(5 downto 3));  
   with pix_x(8 downto 6) select  
    char_addr_l <=  
     "1010110" when "011", -- V x56  
     "1001000" when "100", -- H x48  
     "1000100" when "101", -- D x44  
     "1001100" when others; --L x4C  
   ---------------------------------------------  
   -- rule region  
   --  - display rule (4-by-16 tiles)on center  
   --  - rule text:  
   --    Rule:  
   --    Use two buttons  
   --    to move paddle  
   --    up and down  
   ---------------------------------------------  
   rule_on <= '1' when pix_x(9 downto 7) = "010" and  
             pix_y(9 downto 6)= "0010" else  
        '0';  
   row_addr_r <= std_logic_vector(pix_y(3 downto 0));  
   bit_addr_r <= std_logic_vector(pix_x(2 downto 0));  
   rule_rom_addr <= pix_y(5 downto 4) & pix_x(6 downto 3);  
   char_addr_r <= RULE_ROM(to_integer(rule_rom_addr));  
   ---------------------------------------------  
   -- game over region  
   -- - display }Game Over" on center  
   -- - scale to 32-by-64 fonts  
   ---------------------------------------------  
   over_on <=  
    '1' when pix_y(9 downto 6)=3 and  
      5<= pix_x(9 downto 5) and pix_x(9 downto 5)<=13 else  
    '0';  
   row_addr_o <= std_logic_vector(pix_y(5 downto 2));  
   bit_addr_o <= std_logic_vector(pix_x(4 downto 2));  
   with pix_x(8 downto 5) select  
    char_addr_o <=  
     "1010011" when "0101", -- S x53  
     "1010101" when "0110", -- U x55  
     "1000010" when "0111", -- B x42  
     "1010011" when "1000", -- S x53  
     "1000011" when "1001", -- C X43  
     "1010010" when "1010", -- R x52  
     "1001001" when "1011", -- I x49  
     "1000010" when "1100", -- B x42  
     "1000101" when others; -- E x45  
   ---------------------------------------------  
   -- mux for font ROM addresses and rgb  
   ---------------------------------------------  
   process(score_on,logo_on,rule_on,pix_x,pix_y,font_bit,  
       char_addr_s,char_addr_l,char_addr_r,char_addr_o,  
       row_addr_s,row_addr_l,row_addr_r,row_addr_o,  
       bit_addr_s,bit_addr_l,bit_addr_r,bit_addr_o)  
   begin  
    text_rgb <= "110"; -- background, yellow  
    if score_on='1' then  
      char_addr <= char_addr_s;  
      row_addr <= row_addr_s;  
      bit_addr <= bit_addr_s;  
      if font_bit='1' then  
       text_rgb <= "001";  
      end if;  
    elsif rule_on='1' then  
      char_addr <= char_addr_r;  
      row_addr <= row_addr_r;  
      bit_addr <= bit_addr_r;  
      if font_bit='1' then  
       text_rgb <= "001";  
      end if;  
    elsif logo_on='1' then  
      char_addr <= char_addr_l;  
      row_addr <= row_addr_l;  
      bit_addr <= bit_addr_l;  
      if font_bit='1' then  
       text_rgb <= "011";  
      end if;  
    else -- game over  
      char_addr <= char_addr_o;  
      row_addr <= row_addr_o;  
      bit_addr <= bit_addr_o;  
      if font_bit='1' then  
       text_rgb <= "001";  
      end if;  
    end if;  
   end process;  
   text_on <= score_on & logo_on & rule_on & over_on;  
   ---------------------------------------------  
   -- font rom interface  
   ---------------------------------------------  
   rom_addr <= char_addr & row_addr;  
   font_bit <= font_word(to_integer(unsigned(not bit_addr)));  
 end arch;  



ASCII DECODER ROM
 -- Listing 13.1  
 -- ROM with synchonous read (inferring Block RAM)  
 -- character ROM  
 --  - 8-by-16 (8-by-2^4) font  
 --  - 128 (2^7) characters  
 --  - ROM size: 512-by-8 (2^11-by-8) bits  
 --        16K bits: 1 BRAM  
 library ieee;  
 use ieee.std_logic_1164.all;  
 use ieee.numeric_std.all;  
 entity font_rom is  
   port(  
    clk: in std_logic;  
    addr: in std_logic_vector(10 downto 0);  
    data: out std_logic_vector(7 downto 0)  
   );  
 end font_rom;  
 architecture arch of font_rom is  
   constant ADDR_WIDTH: integer:=11;  
   constant DATA_WIDTH: integer:=8;  
   signal addr_reg: std_logic_vector(ADDR_WIDTH-1 downto 0);  
   type rom_type is array (0 to 2**ADDR_WIDTH-1)  
     of std_logic_vector(DATA_WIDTH-1 downto 0);  
   -- ROM definition  
   constant ROM: rom_type:=(  -- 2^11-by-8  
   -- CODE X00  
      "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00000000", -- 5  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00000000", -- 9  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x01  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111110", -- 2 ******  
   "10000001", -- 3 *   *  
   "10100101", -- 4 * * * *  
   "10000001", -- 5 *   *  
   "10000001", -- 6 *   *  
   "10111101", -- 7 * **** *  
   "10011001", -- 8 * ** *  
   "10000001", -- 9 *   *  
   "10000001", -- a *   *  
   "01111110", -- b ******  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x02  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111110", -- 2 ******  
   "11111111", -- 3 ********  
   "11011011", -- 4 ** ** **  
   "11111111", -- 5 ********  
   "11111111", -- 6 ********  
   "11000011", -- 7 **  **  
   "11100111", -- 8 *** ***  
   "11111111", -- 9 ********  
   "11111111", -- a ********  
   "01111110", -- b ******  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x03  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "01101100", -- 4 ** **  
   "11111110", -- 5 *******  
   "11111110", -- 6 *******  
   "11111110", -- 7 *******  
   "11111110", -- 8 *******  
   "01111100", -- 9 *****  
   "00111000", -- a  ***  
   "00010000", -- b  *  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x04  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00010000", -- 4  *  
   "00111000", -- 5  ***  
   "01111100", -- 6 *****  
   "11111110", -- 7 *******  
   "01111100", -- 8 *****  
   "00111000", -- 9  ***  
   "00010000", -- a  *  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x05  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00011000", -- 3  **  
   "00111100", -- 4  ****  
   "00111100", -- 5  ****  
   "11100111", -- 6 *** ***  
   "11100111", -- 7 *** ***  
   "11100111", -- 8 *** ***  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00111100", -- b  ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x06  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00011000", -- 3  **  
   "00111100", -- 4  ****  
   "01111110", -- 5 ******  
   "11111111", -- 6 ********  
   "11111111", -- 7 ********  
   "01111110", -- 8 ******  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00111100", -- b  ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x07  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00000000", -- 5  
   "00011000", -- 6  **  
   "00111100", -- 7  ****  
   "00111100", -- 8  ****  
   "00011000", -- 9  **  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x08  
   "11111111", -- 0 ********  
   "11111111", -- 1 ********  
   "11111111", -- 2 ********  
   "11111111", -- 3 ********  
   "11111111", -- 4 ********  
   "11111111", -- 5 ********  
   "11100111", -- 6 *** ***  
   "11000011", -- 7 **  **  
   "11000011", -- 8 **  **  
   "11100111", -- 9 *** ***  
   "11111111", -- a ********  
   "11111111", -- b ********  
   "11111111", -- c ********  
   "11111111", -- d ********  
   "11111111", -- e ********  
   "11111111", -- f ********  
   -- code x09  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00111100", -- 5  ****  
   "01100110", -- 6 ** **  
   "01000010", -- 7 *  *  
   "01000010", -- 8 *  *  
   "01100110", -- 9 ** **  
   "00111100", -- a  ****  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x0a  
   "11111111", -- 0 ********  
   "11111111", -- 1 ********  
   "11111111", -- 2 ********  
   "11111111", -- 3 ********  
   "11111111", -- 4 ********  
   "11000011", -- 5 **  **  
   "10011001", -- 6 * ** *  
   "10111101", -- 7 * **** *  
   "10111101", -- 8 * **** *  
   "10011001", -- 9 * ** *  
   "11000011", -- a **  **  
   "11111111", -- b ********  
   "11111111", -- c ********  
   "11111111", -- d ********  
   "11111111", -- e ********  
   "11111111", -- f ********  
   -- code x0b  
   "00000000", -- 0  
   "00000000", -- 1  
   "00011110", -- 2  ****  
   "00001110", -- 3   ***  
   "00011010", -- 4  ** *  
   "00110010", -- 5  ** *  
   "01111000", -- 6 ****  
   "11001100", -- 7 ** **  
   "11001100", -- 8 ** **  
   "11001100", -- 9 ** **  
   "11001100", -- a ** **  
   "01111000", -- b ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x0c  
   "00000000", -- 0  
   "00000000", -- 1  
   "00111100", -- 2  ****  
   "01100110", -- 3 ** **  
   "01100110", -- 4 ** **  
   "01100110", -- 5 ** **  
   "01100110", -- 6 ** **  
   "00111100", -- 7  ****  
   "00011000", -- 8  **  
   "01111110", -- 9 ******  
   "00011000", -- a  **  
   "00011000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x0d  
   "00000000", -- 0  
   "00000000", -- 1  
   "00111111", -- 2  ******  
   "00110011", -- 3  ** **  
   "00111111", -- 4  ******  
   "00110000", -- 5  **  
   "00110000", -- 6  **  
   "00110000", -- 7  **  
   "00110000", -- 8  **  
   "01110000", -- 9 ***  
   "11110000", -- a ****  
   "11100000", -- b ***  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x0e  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111111", -- 2 *******  
   "01100011", -- 3 **  **  
   "01111111", -- 4 *******  
   "01100011", -- 5 **  **  
   "01100011", -- 6 **  **  
   "01100011", -- 7 **  **  
   "01100011", -- 8 **  **  
   "01100111", -- 9 ** ***  
   "11100111", -- a *** ***  
   "11100110", -- b *** **  
   "11000000", -- c **  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x0f  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00011000", -- 3  **  
   "00011000", -- 4  **  
   "11011011", -- 5 ** ** **  
   "00111100", -- 6  ****  
   "11100111", -- 7 *** ***  
   "00111100", -- 8  ****  
   "11011011", -- 9 ** ** **  
   "00011000", -- a  **  
   "00011000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x10  
   "00000000", -- 0  
   "10000000", -- 1 *  
   "11000000", -- 2 **  
   "11100000", -- 3 ***  
   "11110000", -- 4 ****  
   "11111000", -- 5 *****  
   "11111110", -- 6 *******  
   "11111000", -- 7 *****  
   "11110000", -- 8 ****  
   "11100000", -- 9 ***  
   "11000000", -- a **  
   "10000000", -- b *  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x11  
   "00000000", -- 0  
   "00000010", -- 1    *  
   "00000110", -- 2   **  
   "00001110", -- 3   ***  
   "00011110", -- 4  ****  
   "00111110", -- 5  *****  
   "11111110", -- 6 *******  
   "00111110", -- 7  *****  
   "00011110", -- 8  ****  
   "00001110", -- 9   ***  
   "00000110", -- a   **  
   "00000010", -- b    *  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x12  
   "00000000", -- 0  
   "00000000", -- 1  
   "00011000", -- 2  **  
   "00111100", -- 3  ****  
   "01111110", -- 4 ******  
   "00011000", -- 5  **  
   "00011000", -- 6  **  
   "00011000", -- 7  **  
   "01111110", -- 8 ******  
   "00111100", -- 9  ****  
   "00011000", -- a  **  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x13  
   "00000000", -- 0  
   "00000000", -- 1  
   "01100110", -- 2 ** **  
   "01100110", -- 3 ** **  
   "01100110", -- 4 ** **  
   "01100110", -- 5 ** **  
   "01100110", -- 6 ** **  
   "01100110", -- 7 ** **  
   "01100110", -- 8 ** **  
   "00000000", -- 9  
   "01100110", -- a ** **  
   "01100110", -- b ** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x14  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111111", -- 2 *******  
   "11011011", -- 3 ** ** **  
   "11011011", -- 4 ** ** **  
   "11011011", -- 5 ** ** **  
   "01111011", -- 6 **** **  
   "00011011", -- 7  ** **  
   "00011011", -- 8  ** **  
   "00011011", -- 9  ** **  
   "00011011", -- a  ** **  
   "00011011", -- b  ** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x15  
   "00000000", -- 0  
   "01111100", -- 1 *****  
   "11000110", -- 2 **  **  
   "01100000", -- 3 **  
   "00111000", -- 4  ***  
   "01101100", -- 5 ** **  
   "11000110", -- 6 **  **  
   "11000110", -- 7 **  **  
   "01101100", -- 8 ** **  
   "00111000", -- 9  ***  
   "00001100", -- a   **  
   "11000110", -- b **  **  
   "01111100", -- c *****  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x16  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00000000", -- 5  
   "00000000", -- 6  
   "00000000", -- 7  
   "11111110", -- 8 *******  
   "11111110", -- 9 *******  
   "11111110", -- a *******  
   "11111110", -- b *******  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x17  
   "00000000", -- 0  
   "00000000", -- 1  
   "00011000", -- 2  **  
   "00111100", -- 3  ****  
   "01111110", -- 4 ******  
   "00011000", -- 5  **  
   "00011000", -- 6  **  
   "00011000", -- 7  **  
   "01111110", -- 8 ******  
   "00111100", -- 9  ****  
   "00011000", -- a  **  
   "01111110", -- b ******  
   "00110000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x18  
   "00000000", -- 0  
   "00000000", -- 1  
   "00011000", -- 2  **  
   "00111100", -- 3  ****  
   "01111110", -- 4 ******  
   "00011000", -- 5  **  
   "00011000", -- 6  **  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00011000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x19  
   "00000000", -- 0  
   "00000000", -- 1  
   "00011000", -- 2  **  
   "00011000", -- 3  **  
   "00011000", -- 4  **  
   "00011000", -- 5  **  
   "00011000", -- 6  **  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "01111110", -- 9 ******  
   "00111100", -- a  ****  
   "00011000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x1a  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00011000", -- 5  **  
   "00001100", -- 6   **  
   "11111110", -- 7 *******  
   "00001100", -- 8   **  
   "00011000", -- 9  **  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x1b  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00110000", -- 5  **  
   "01100000", -- 6 **  
   "11111110", -- 7 *******  
   "01100000", -- 8 **  
   "00110000", -- 9  **  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x1c  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00000000", -- 5  
   "11000000", -- 6 **  
   "11000000", -- 7 **  
   "11000000", -- 8 **  
   "11111110", -- 9 *******  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x1d  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00100100", -- 5  * *  
   "01100110", -- 6 ** **  
   "11111111", -- 7 ********  
   "01100110", -- 8 ** **  
   "00100100", -- 9  * *  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x1e  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00010000", -- 4  *  
   "00111000", -- 5  ***  
   "00111000", -- 6  ***  
   "01111100", -- 7 *****  
   "01111100", -- 8 *****  
   "11111110", -- 9 *******  
   "11111110", -- a *******  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x1f  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "11111110", -- 4 *******  
   "11111110", -- 5 *******  
   "01111100", -- 6 *****  
   "01111100", -- 7 *****  
   "00111000", -- 8  ***  
   "00111000", -- 9  ***  
   "00010000", -- a  *  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x20  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00000000", -- 5  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00000000", -- 9  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x21  
   "00000000", -- 0  
   "00000000", -- 1  
   "00011000", -- 2  **  
   "00111100", -- 3  ****  
   "00111100", -- 4  ****  
   "00111100", -- 5  ****  
   "00011000", -- 6  **  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00000000", -- 9  
   "00011000", -- a  **  
   "00011000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x22  
   "00000000", -- 0  
   "01100110", -- 1 ** **  
   "01100110", -- 2 ** **  
   "01100110", -- 3 ** **  
   "00100100", -- 4  * *  
   "00000000", -- 5  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00000000", -- 9  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x23  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "01101100", -- 3 ** **  
   "01101100", -- 4 ** **  
   "11111110", -- 5 *******  
   "01101100", -- 6 ** **  
   "01101100", -- 7 ** **  
   "01101100", -- 8 ** **  
   "11111110", -- 9 *******  
   "01101100", -- a ** **  
   "01101100", -- b ** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x24  
   "00011000", -- 0   **  
   "00011000", -- 1   **  
   "01111100", -- 2  *****  
   "11000110", -- 3 **  **  
   "11000010", -- 4 **  *  
   "11000000", -- 5 **  
   "01111100", -- 6  *****  
   "00000110", -- 7    **  
   "00000110", -- 8    **  
   "10000110", -- 9 *  **  
   "11000110", -- a **  **  
   "01111100", -- b  *****  
   "00011000", -- c   **  
   "00011000", -- d   **  
   "00000000", -- e  
   "00000000", -- f  
   -- code x25  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "11000010", -- 4 **  *  
   "11000110", -- 5 **  **  
   "00001100", -- 6   **  
   "00011000", -- 7  **  
   "00110000", -- 8  **  
   "01100000", -- 9 **  
   "11000110", -- a **  **  
   "10000110", -- b *  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x26  
   "00000000", -- 0  
   "00000000", -- 1  
   "00111000", -- 2  ***  
   "01101100", -- 3 ** **  
   "01101100", -- 4 ** **  
   "00111000", -- 5  ***  
   "01110110", -- 6 *** **  
   "11011100", -- 7 ** ***  
   "11001100", -- 8 ** **  
   "11001100", -- 9 ** **  
   "11001100", -- a ** **  
   "01110110", -- b *** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x27  
   "00000000", -- 0  
   "00110000", -- 1  **  
   "00110000", -- 2  **  
   "00110000", -- 3  **  
   "01100000", -- 4 **  
   "00000000", -- 5  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00000000", -- 9  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x28  
   "00000000", -- 0  
   "00000000", -- 1  
   "00001100", -- 2   **  
   "00011000", -- 3  **  
   "00110000", -- 4  **  
   "00110000", -- 5  **  
   "00110000", -- 6  **  
   "00110000", -- 7  **  
   "00110000", -- 8  **  
   "00110000", -- 9  **  
   "00011000", -- a  **  
   "00001100", -- b   **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x29  
   "00000000", -- 0  
   "00000000", -- 1  
   "00110000", -- 2  **  
   "00011000", -- 3  **  
   "00001100", -- 4   **  
   "00001100", -- 5   **  
   "00001100", -- 6   **  
   "00001100", -- 7   **  
   "00001100", -- 8   **  
   "00001100", -- 9   **  
   "00011000", -- a  **  
   "00110000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x2a  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "01100110", -- 5 ** **  
   "00111100", -- 6  ****  
   "11111111", -- 7 ********  
   "00111100", -- 8  ****  
   "01100110", -- 9 ** **  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x2b  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00011000", -- 5  **  
   "00011000", -- 6  **  
   "01111110", -- 7 ******  
   "00011000", -- 8  **  
   "00011000", -- 9  **  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x2c  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00000000", -- 5  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00011000", -- b  **  
   "00110000", -- c  **  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x2d  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00000000", -- 5  
   "00000000", -- 6  
   "01111110", -- 7 ******  
   "00000000", -- 8  
   "00000000", -- 9  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x2e  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00000000", -- 5  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00000000", -- 9  
   "00011000", -- a  **  
   "00011000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x2f  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000010", -- 4    *  
   "00000110", -- 5   **  
   "00001100", -- 6   **  
   "00011000", -- 7  **  
   "00110000", -- 8  **  
   "01100000", -- 9 **  
   "11000000", -- a **  
   "10000000", -- b *  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x30  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111100", -- 2 *****  
   "11000110", -- 3 **  **  
   "11000110", -- 4 **  **  
   "11001110", -- 5 ** ***  
   "11011110", -- 6 ** ****  
   "11110110", -- 7 **** **  
   "11100110", -- 8 *** **  
   "11000110", -- 9 **  **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x31  
   "00000000", -- 0  
   "00000000", -- 1  
   "00011000", -- 2  
   "00111000", -- 3  
   "01111000", -- 4  **  
   "00011000", -- 5  ***  
   "00011000", -- 6 ****  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "01111110", -- b  **  
   "00000000", -- c  **  
   "00000000", -- d ******  
   "00000000", -- e  
   "00000000", -- f  
   -- code x32  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111100", -- 2 *****  
   "11000110", -- 3 **  **  
   "00000110", -- 4   **  
   "00001100", -- 5   **  
   "00011000", -- 6  **  
   "00110000", -- 7  **  
   "01100000", -- 8 **  
   "11000000", -- 9 **  
   "11000110", -- a **  **  
   "11111110", -- b *******  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x33  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111100", -- 2 *****  
   "11000110", -- 3 **  **  
   "00000110", -- 4   **  
   "00000110", -- 5   **  
   "00111100", -- 6  ****  
   "00000110", -- 7   **  
   "00000110", -- 8   **  
   "00000110", -- 9   **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x34  
   "00000000", -- 0  
   "00000000", -- 1  
   "00001100", -- 2   **  
   "00011100", -- 3  ***  
   "00111100", -- 4  ****  
   "01101100", -- 5 ** **  
   "11001100", -- 6 ** **  
   "11111110", -- 7 *******  
   "00001100", -- 8   **  
   "00001100", -- 9   **  
   "00001100", -- a   **  
   "00011110", -- b  ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x35  
   "00000000", -- 0  
   "00000000", -- 1  
   "11111110", -- 2 *******  
   "11000000", -- 3 **  
   "11000000", -- 4 **  
   "11000000", -- 5 **  
   "11111100", -- 6 ******  
   "00000110", -- 7   **  
   "00000110", -- 8   **  
   "00000110", -- 9   **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x36  
   "00000000", -- 0  
   "00000000", -- 1  
   "00111000", -- 2  ***  
   "01100000", -- 3 **  
   "11000000", -- 4 **  
   "11000000", -- 5 **  
   "11111100", -- 6 ******  
   "11000110", -- 7 **  **  
   "11000110", -- 8 **  **  
   "11000110", -- 9 **  **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x37  
   "00000000", -- 0  
   "00000000", -- 1  
   "11111110", -- 2 *******  
   "11000110", -- 3 **  **  
   "00000110", -- 4   **  
   "00000110", -- 5   **  
   "00001100", -- 6   **  
   "00011000", -- 7  **  
   "00110000", -- 8  **  
   "00110000", -- 9  **  
   "00110000", -- a  **  
   "00110000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x38  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111100", -- 2 *****  
   "11000110", -- 3 **  **  
   "11000110", -- 4 **  **  
   "11000110", -- 5 **  **  
   "01111100", -- 6 *****  
   "11000110", -- 7 **  **  
   "11000110", -- 8 **  **  
   "11000110", -- 9 **  **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x39  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111100", -- 2 *****  
   "11000110", -- 3 **  **  
   "11000110", -- 4 **  **  
   "11000110", -- 5 **  **  
   "01111110", -- 6 ******  
   "00000110", -- 7   **  
   "00000110", -- 8   **  
   "00000110", -- 9   **  
   "00001100", -- a   **  
   "01111000", -- b ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x3a  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00011000", -- 4  **  
   "00011000", -- 5  **  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x3b  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00011000", -- 4  **  
   "00011000", -- 5  **  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00110000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x3c  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000110", -- 3   **  
   "00001100", -- 4   **  
   "00011000", -- 5  **  
   "00110000", -- 6  **  
   "01100000", -- 7 **  
   "00110000", -- 8  **  
   "00011000", -- 9  **  
   "00001100", -- a   **  
   "00000110", -- b   **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x3d  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "01111110", -- 5 ******  
   "00000000", -- 6  
   "00000000", -- 7  
   "01111110", -- 8 ******  
   "00000000", -- 9  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x3e  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "01100000", -- 3 **  
   "00110000", -- 4  **  
   "00011000", -- 5  **  
   "00001100", -- 6   **  
   "00000110", -- 7   **  
   "00001100", -- 8   **  
   "00011000", -- 9  **  
   "00110000", -- a  **  
   "01100000", -- b **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x3f  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111100", -- 2 *****  
   "11000110", -- 3 **  **  
   "11000110", -- 4 **  **  
   "00001100", -- 5   **  
   "00011000", -- 6  **  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00000000", -- 9  
   "00011000", -- a  **  
   "00011000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x40  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111100", -- 2 *****  
   "11000110", -- 3 **  **  
   "11000110", -- 4 **  **  
   "11000110", -- 5 **  **  
   "11011110", -- 6 ** ****  
   "11011110", -- 7 ** ****  
   "11011110", -- 8 ** ****  
   "11011100", -- 9 ** ***  
   "11000000", -- a **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x41  
   "00000000", -- 0  
   "00000000", -- 1  
   "00010000", -- 2  *  
   "00111000", -- 3  ***  
   "01101100", -- 4 ** **  
   "11000110", -- 5 **  **  
   "11000110", -- 6 **  **  
   "11111110", -- 7 *******  
   "11000110", -- 8 **  **  
   "11000110", -- 9 **  **  
   "11000110", -- a **  **  
   "11000110", -- b **  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x42  
   "00000000", -- 0  
   "00000000", -- 1  
   "11111100", -- 2 ******  
   "01100110", -- 3 ** **  
   "01100110", -- 4 ** **  
   "01100110", -- 5 ** **  
   "01111100", -- 6 *****  
   "01100110", -- 7 ** **  
   "01100110", -- 8 ** **  
   "01100110", -- 9 ** **  
   "01100110", -- a ** **  
   "11111100", -- b ******  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x43  
   "00000000", -- 0  
   "00000000", -- 1  
   "00111100", -- 2  ****  
   "01100110", -- 3 ** **  
   "11000010", -- 4 **  *  
   "11000000", -- 5 **  
   "11000000", -- 6 **  
   "11000000", -- 7 **  
   "11000000", -- 8 **  
   "11000010", -- 9 **  *  
   "01100110", -- a ** **  
   "00111100", -- b  ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x44  
   "00000000", -- 0  
   "00000000", -- 1  
   "11111000", -- 2 *****  
   "01101100", -- 3 ** **  
   "01100110", -- 4 ** **  
   "01100110", -- 5 ** **  
   "01100110", -- 6 ** **  
   "01100110", -- 7 ** **  
   "01100110", -- 8 ** **  
   "01100110", -- 9 ** **  
   "01101100", -- a ** **  
   "11111000", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x45  
   "00000000", -- 0  
   "00000000", -- 1  
   "11111110", -- 2 *******  
   "01100110", -- 3 ** **  
   "01100010", -- 4 **  *  
   "01101000", -- 5 ** *  
   "01111000", -- 6 ****  
   "01101000", -- 7 ** *  
   "01100000", -- 8 **  
   "01100010", -- 9 **  *  
   "01100110", -- a ** **  
   "11111110", -- b *******  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x46  
   "00000000", -- 0  
   "00000000", -- 1  
   "11111110", -- 2 *******  
   "01100110", -- 3 ** **  
   "01100010", -- 4 **  *  
   "01101000", -- 5 ** *  
   "01111000", -- 6 ****  
   "01101000", -- 7 ** *  
   "01100000", -- 8 **  
   "01100000", -- 9 **  
   "01100000", -- a **  
   "11110000", -- b ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x47  
   "00000000", -- 0  
   "00000000", -- 1  
   "00111100", -- 2  ****  
   "01100110", -- 3 ** **  
   "11000010", -- 4 **  *  
   "11000000", -- 5 **  
   "11000000", -- 6 **  
   "11011110", -- 7 ** ****  
   "11000110", -- 8 **  **  
   "11000110", -- 9 **  **  
   "01100110", -- a ** **  
   "00111010", -- b  *** *  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x48  
   "00000000", -- 0  
   "00000000", -- 1  
   "11000110", -- 2 **  **  
   "11000110", -- 3 **  **  
   "11000110", -- 4 **  **  
   "11000110", -- 5 **  **  
   "11111110", -- 6 *******  
   "11000110", -- 7 **  **  
   "11000110", -- 8 **  **  
   "11000110", -- 9 **  **  
   "11000110", -- a **  **  
   "11000110", -- b **  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x49  
   "00000000", -- 0  
   "00000000", -- 1  
   "00111100", -- 2  ****  
   "00011000", -- 3  **  
   "00011000", -- 4  **  
   "00011000", -- 5  **  
   "00011000", -- 6  **  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00111100", -- b  ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x4a  
   "00000000", -- 0  
   "00000000", -- 1  
   "00011110", -- 2  ****  
   "00001100", -- 3   **  
   "00001100", -- 4   **  
   "00001100", -- 5   **  
   "00001100", -- 6   **  
   "00001100", -- 7   **  
   "11001100", -- 8 ** **  
   "11001100", -- 9 ** **  
   "11001100", -- a ** **  
   "01111000", -- b ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x4b  
   "00000000", -- 0  
   "00000000", -- 1  
   "11100110", -- 2 *** **  
   "01100110", -- 3 ** **  
   "01100110", -- 4 ** **  
   "01101100", -- 5 ** **  
   "01111000", -- 6 ****  
   "01111000", -- 7 ****  
   "01101100", -- 8 ** **  
   "01100110", -- 9 ** **  
   "01100110", -- a ** **  
   "11100110", -- b *** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x4c  
   "00000000", -- 0  
   "00000000", -- 1  
   "11110000", -- 2 ****  
   "01100000", -- 3 **  
   "01100000", -- 4 **  
   "01100000", -- 5 **  
   "01100000", -- 6 **  
   "01100000", -- 7 **  
   "01100000", -- 8 **  
   "01100010", -- 9 **  *  
   "01100110", -- a ** **  
   "11111110", -- b *******  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x4d  
   "00000000", -- 0  
   "00000000", -- 1  
   "11000011", -- 2 **  **  
   "11100111", -- 3 *** ***  
   "11111111", -- 4 ********  
   "11111111", -- 5 ********  
   "11011011", -- 6 ** ** **  
   "11000011", -- 7 **  **  
   "11000011", -- 8 **  **  
   "11000011", -- 9 **  **  
   "11000011", -- a **  **  
   "11000011", -- b **  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x4e  
   "00000000", -- 0  
   "00000000", -- 1  
   "11000110", -- 2 **  **  
   "11100110", -- 3 *** **  
   "11110110", -- 4 **** **  
   "11111110", -- 5 *******  
   "11011110", -- 6 ** ****  
   "11001110", -- 7 ** ***  
   "11000110", -- 8 **  **  
   "11000110", -- 9 **  **  
   "11000110", -- a **  **  
   "11000110", -- b **  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x4f  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111100", -- 2 *****  
   "11000110", -- 3 **  **  
   "11000110", -- 4 **  **  
   "11000110", -- 5 **  **  
   "11000110", -- 6 **  **  
   "11000110", -- 7 **  **  
   "11000110", -- 8 **  **  
   "11000110", -- 9 **  **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x50  
   "00000000", -- 0  
   "00000000", -- 1  
   "11111100", -- 2 ******  
   "01100110", -- 3 ** **  
   "01100110", -- 4 ** **  
   "01100110", -- 5 ** **  
   "01111100", -- 6 *****  
   "01100000", -- 7 **  
   "01100000", -- 8 **  
   "01100000", -- 9 **  
   "01100000", -- a **  
   "11110000", -- b ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x510  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111100", -- 2 *****  
   "11000110", -- 3 **  **  
   "11000110", -- 4 **  **  
   "11000110", -- 5 **  **  
   "11000110", -- 6 **  **  
   "11000110", -- 7 **  **  
   "11000110", -- 8 **  **  
   "11010110", -- 9 ** * **  
   "11011110", -- a ** ****  
   "01111100", -- b *****  
   "00001100", -- c   **  
   "00001110", -- d   ***  
   "00000000", -- e  
   "00000000", -- f  
   -- code x52  
   "00000000", -- 0  
   "00000000", -- 1  
   "11111100", -- 2 ******  
   "01100110", -- 3 ** **  
   "01100110", -- 4 ** **  
   "01100110", -- 5 ** **  
   "01111100", -- 6 *****  
   "01101100", -- 7 ** **  
   "01100110", -- 8 ** **  
   "01100110", -- 9 ** **  
   "01100110", -- a ** **  
   "11100110", -- b *** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x53  
   "00000000", -- 0  
   "00000000", -- 1  
   "01111100", -- 2 *****  
   "11000110", -- 3 **  **  
   "11000110", -- 4 **  **  
   "01100000", -- 5 **  
   "00111000", -- 6  ***  
   "00001100", -- 7   **  
   "00000110", -- 8   **  
   "11000110", -- 9 **  **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x54  
   "00000000", -- 0  
   "00000000", -- 1  
   "11111111", -- 2 ********  
   "11011011", -- 3 ** ** **  
   "10011001", -- 4 * ** *  
   "00011000", -- 5  **  
   "00011000", -- 6  **  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00111100", -- b  ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x55  
   "00000000", -- 0  
   "00000000", -- 1  
   "11000110", -- 2 **  **  
   "11000110", -- 3 **  **  
   "11000110", -- 4 **  **  
   "11000110", -- 5 **  **  
   "11000110", -- 6 **  **  
   "11000110", -- 7 **  **  
   "11000110", -- 8 **  **  
   "11000110", -- 9 **  **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x56  
   "00000000", -- 0  
   "00000000", -- 1  
   "11000011", -- 2 **  **  
   "11000011", -- 3 **  **  
   "11000011", -- 4 **  **  
   "11000011", -- 5 **  **  
   "11000011", -- 6 **  **  
   "11000011", -- 7 **  **  
   "11000011", -- 8 **  **  
   "01100110", -- 9 ** **  
   "00111100", -- a  ****  
   "00011000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x57  
   "00000000", -- 0  
   "00000000", -- 1  
   "11000011", -- 2 **  **  
   "11000011", -- 3 **  **  
   "11000011", -- 4 **  **  
   "11000011", -- 5 **  **  
   "11000011", -- 6 **  **  
   "11011011", -- 7 ** ** **  
   "11011011", -- 8 ** ** **  
   "11111111", -- 9 ********  
   "01100110", -- a ** **  
   "01100110", -- b ** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x58  
   "00000000", -- 0  
   "00000000", -- 1  
   "11000011", -- 2 **  **  
   "11000011", -- 3 **  **  
   "01100110", -- 4 ** **  
   "00111100", -- 5  ****  
   "00011000", -- 6  **  
   "00011000", -- 7  **  
   "00111100", -- 8  ****  
   "01100110", -- 9 ** **  
   "11000011", -- a **  **  
   "11000011", -- b **  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x59  
   "00000000", -- 0  
   "00000000", -- 1  
   "11000011", -- 2 **  **  
   "11000011", -- 3 **  **  
   "11000011", -- 4 **  **  
   "01100110", -- 5 ** **  
   "00111100", -- 6  ****  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00111100", -- b  ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x5a  
   "00000000", -- 0  
   "00000000", -- 1  
   "11111111", -- 2 ********  
   "11000011", -- 3 **  **  
   "10000110", -- 4 *  **  
   "00001100", -- 5   **  
   "00011000", -- 6  **  
   "00110000", -- 7  **  
   "01100000", -- 8 **  
   "11000001", -- 9 **   *  
   "11000011", -- a **  **  
   "11111111", -- b ********  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x5b  
   "00000000", -- 0  
   "00000000", -- 1  
   "00111100", -- 2  ****  
   "00110000", -- 3  **  
   "00110000", -- 4  **  
   "00110000", -- 5  **  
   "00110000", -- 6  **  
   "00110000", -- 7  **  
   "00110000", -- 8  **  
   "00110000", -- 9  **  
   "00110000", -- a  **  
   "00111100", -- b  ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x5c  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "10000000", -- 3 *  
   "11000000", -- 4 **  
   "11100000", -- 5 ***  
   "01110000", -- 6 ***  
   "00111000", -- 7  ***  
   "00011100", -- 8  ***  
   "00001110", -- 9   ***  
   "00000110", -- a   **  
   "00000010", -- b    *  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x5d  
   "00000000", -- 0  
   "00000000", -- 1  
   "00111100", -- 2  ****  
   "00001100", -- 3   **  
   "00001100", -- 4   **  
   "00001100", -- 5   **  
   "00001100", -- 6   **  
   "00001100", -- 7   **  
   "00001100", -- 8   **  
   "00001100", -- 9   **  
   "00001100", -- a   **  
   "00111100", -- b  ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x5e  
   "00010000", -- 0  *  
   "00111000", -- 1  ***  
   "01101100", -- 2 ** **  
   "11000110", -- 3 **  **  
   "00000000", -- 4  
   "00000000", -- 5  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00000000", -- 9  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x5f  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "00000000", -- 5  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00000000", -- 9  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "11111111", -- d ********  
   "00000000", -- e  
   "00000000", -- f  
   -- code x60  
   "00110000", -- 0  **  
   "00110000", -- 1  **  
   "00011000", -- 2  **  
   "00000000", -- 3  
   "00000000", -- 4  
   "00000000", -- 5  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00000000", -- 9  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x61  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "01111000", -- 5 ****  
   "00001100", -- 6   **  
   "01111100", -- 7 *****  
   "11001100", -- 8 ** **  
   "11001100", -- 9 ** **  
   "11001100", -- a ** **  
   "01110110", -- b *** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x62  
   "00000000", -- 0  
   "00000000", -- 1  
   "11100000", -- 2 ***  
   "01100000", -- 3  **  
   "01100000", -- 4  **  
   "01111000", -- 5  ****  
   "01101100", -- 6  ** **  
   "01100110", -- 7  ** **  
   "01100110", -- 8  ** **  
   "01100110", -- 9  ** **  
   "01100110", -- a  ** **  
   "01111100", -- b  *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x63  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "01111100", -- 5 *****  
   "11000110", -- 6 **  **  
   "11000000", -- 7 **  
   "11000000", -- 8 **  
   "11000000", -- 9 **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x64  
   "00000000", -- 0  
   "00000000", -- 1  
   "00011100", -- 2  ***  
   "00001100", -- 3   **  
   "00001100", -- 4   **  
   "00111100", -- 5  ****  
   "01101100", -- 6 ** **  
   "11001100", -- 7 ** **  
   "11001100", -- 8 ** **  
   "11001100", -- 9 ** **  
   "11001100", -- a ** **  
   "01110110", -- b *** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x65  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "01111100", -- 5 *****  
   "11000110", -- 6 **  **  
   "11111110", -- 7 *******  
   "11000000", -- 8 **  
   "11000000", -- 9 **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x66  
   "00000000", -- 0  
   "00000000", -- 1  
   "00111000", -- 2  ***  
   "01101100", -- 3 ** **  
   "01100100", -- 4 ** *  
   "01100000", -- 5 **  
   "11110000", -- 6 ****  
   "01100000", -- 7 **  
   "01100000", -- 8 **  
   "01100000", -- 9 **  
   "01100000", -- a **  
   "11110000", -- b ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x67  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "01110110", -- 5 *** **  
   "11001100", -- 6 ** **  
   "11001100", -- 7 ** **  
   "11001100", -- 8 ** **  
   "11001100", -- 9 ** **  
   "11001100", -- a ** **  
   "01111100", -- b *****  
   "00001100", -- c   **  
   "11001100", -- d ** **  
   "01111000", -- e ****  
   "00000000", -- f  
   -- code x68  
   "00000000", -- 0  
   "00000000", -- 1  
   "11100000", -- 2 ***  
   "01100000", -- 3 **  
   "01100000", -- 4 **  
   "01101100", -- 5 ** **  
   "01110110", -- 6 *** **  
   "01100110", -- 7 ** **  
   "01100110", -- 8 ** **  
   "01100110", -- 9 ** **  
   "01100110", -- a ** **  
   "11100110", -- b *** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x69  
   "00000000", -- 0  
   "00000000", -- 1  
   "00011000", -- 2  **  
   "00011000", -- 3  **  
   "00000000", -- 4  
   "00111000", -- 5  ***  
   "00011000", -- 6  **  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00111100", -- b  ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x6a  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000110", -- 2   **  
   "00000110", -- 3   **  
   "00000000", -- 4  
   "00001110", -- 5   ***  
   "00000110", -- 6   **  
   "00000110", -- 7   **  
   "00000110", -- 8   **  
   "00000110", -- 9   **  
   "00000110", -- a   **  
   "00000110", -- b   **  
   "01100110", -- c ** **  
   "01100110", -- d ** **  
   "00111100", -- e  ****  
   "00000000", -- f  
   -- code x6b  
   "00000000", -- 0  
   "00000000", -- 1  
   "11100000", -- 2 ***  
   "01100000", -- 3 **  
   "01100000", -- 4 **  
   "01100110", -- 5 ** **  
   "01101100", -- 6 ** **  
   "01111000", -- 7 ****  
   "01111000", -- 8 ****  
   "01101100", -- 9 ** **  
   "01100110", -- a ** **  
   "11100110", -- b *** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x6c  
   "00000000", -- 0  
   "00000000", -- 1  
   "00111000", -- 2  ***  
   "00011000", -- 3  **  
   "00011000", -- 4  **  
   "00011000", -- 5  **  
   "00011000", -- 6  **  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00111100", -- b  ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x6d  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "11100110", -- 5 *** **  
   "11111111", -- 6 ********  
   "11011011", -- 7 ** ** **  
   "11011011", -- 8 ** ** **  
   "11011011", -- 9 ** ** **  
   "11011011", -- a ** ** **  
   "11011011", -- b ** ** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x6e  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "11011100", -- 5 ** ***  
   "01100110", -- 6 ** **  
   "01100110", -- 7 ** **  
   "01100110", -- 8 ** **  
   "01100110", -- 9 ** **  
   "01100110", -- a ** **  
   "01100110", -- b ** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x6f  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "01111100", -- 5 *****  
   "11000110", -- 6 **  **  
   "11000110", -- 7 **  **  
   "11000110", -- 8 **  **  
   "11000110", -- 9 **  **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x70  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "11011100", -- 5 ** ***  
   "01100110", -- 6 ** **  
   "01100110", -- 7 ** **  
   "01100110", -- 8 ** **  
   "01100110", -- 9 ** **  
   "01100110", -- a ** **  
   "01111100", -- b *****  
   "01100000", -- c **  
   "01100000", -- d **  
   "11110000", -- e ****  
   "00000000", -- f  
   -- code x71  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "01110110", -- 5 *** **  
   "11001100", -- 6 ** **  
   "11001100", -- 7 ** **  
   "11001100", -- 8 ** **  
   "11001100", -- 9 ** **  
   "11001100", -- a ** **  
   "01111100", -- b *****  
   "00001100", -- c   **  
   "00001100", -- d   **  
   "00011110", -- e  ****  
   "00000000", -- f  
   -- code x72  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "11011100", -- 5 ** ***  
   "01110110", -- 6 *** **  
   "01100110", -- 7 ** **  
   "01100000", -- 8 **  
   "01100000", -- 9 **  
   "01100000", -- a **  
   "11110000", -- b ****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x73  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "01111100", -- 5 *****  
   "11000110", -- 6 **  **  
   "01100000", -- 7 **  
   "00111000", -- 8  ***  
   "00001100", -- 9   **  
   "11000110", -- a **  **  
   "01111100", -- b *****  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x74  
   "00000000", -- 0  
   "00000000", -- 1  
   "00010000", -- 2  *  
   "00110000", -- 3  **  
   "00110000", -- 4  **  
   "11111100", -- 5 ******  
   "00110000", -- 6  **  
   "00110000", -- 7  **  
   "00110000", -- 8  **  
   "00110000", -- 9  **  
   "00110110", -- a  ** **  
   "00011100", -- b  ***  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x75  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "11001100", -- 5 ** **  
   "11001100", -- 6 ** **  
   "11001100", -- 7 ** **  
   "11001100", -- 8 ** **  
   "11001100", -- 9 ** **  
   "11001100", -- a ** **  
   "01110110", -- b *** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x76  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "11000011", -- 5 **  **  
   "11000011", -- 6 **  **  
   "11000011", -- 7 **  **  
   "11000011", -- 8 **  **  
   "01100110", -- 9 ** **  
   "00111100", -- a  ****  
   "00011000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x77  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "11000011", -- 5 **  **  
   "11000011", -- 6 **  **  
   "11000011", -- 7 **  **  
   "11011011", -- 8 ** ** **  
   "11011011", -- 9 ** ** **  
   "11111111", -- a ********  
   "01100110", -- b ** **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x78  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "11000011", -- 5 **  **  
   "01100110", -- 6 ** **  
   "00111100", -- 7  ****  
   "00011000", -- 8  **  
   "00111100", -- 9  ****  
   "01100110", -- a ** **  
   "11000011", -- b **  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x79  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "11000110", -- 5 **  **  
   "11000110", -- 6 **  **  
   "11000110", -- 7 **  **  
   "11000110", -- 8 **  **  
   "11000110", -- 9 **  **  
   "11000110", -- a **  **  
   "01111110", -- b ******  
   "00000110", -- c   **  
   "00001100", -- d   **  
   "11111000", -- e *****  
   "00000000", -- f  
   -- code x7a  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00000000", -- 4  
   "11111110", -- 5 *******  
   "11001100", -- 6 ** **  
   "00011000", -- 7  **  
   "00110000", -- 8  **  
   "01100000", -- 9 **  
   "11000110", -- a **  **  
   "11111110", -- b *******  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x7b  
   "00000000", -- 0  
   "00000000", -- 1  
   "00001110", -- 2   ***  
   "00011000", -- 3  **  
   "00011000", -- 4  **  
   "00011000", -- 5  **  
   "01110000", -- 6 ***  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00001110", -- b   ***  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x7c  
   "00000000", -- 0  
   "00000000", -- 1  
   "00011000", -- 2  **  
   "00011000", -- 3  **  
   "00011000", -- 4  **  
   "00011000", -- 5  **  
   "00000000", -- 6  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "00011000", -- b  **  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x7d  
   "00000000", -- 0  
   "00000000", -- 1  
   "01110000", -- 2 ***  
   "00011000", -- 3  **  
   "00011000", -- 4  **  
   "00011000", -- 5  **  
   "00001110", -- 6   ***  
   "00011000", -- 7  **  
   "00011000", -- 8  **  
   "00011000", -- 9  **  
   "00011000", -- a  **  
   "01110000", -- b ***  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x7e  
   "00000000", -- 0  
   "00000000", -- 1  
   "01110110", -- 2 *** **  
   "11011100", -- 3 ** ***  
   "00000000", -- 4  
   "00000000", -- 5  
   "00000000", -- 6  
   "00000000", -- 7  
   "00000000", -- 8  
   "00000000", -- 9  
   "00000000", -- a  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000", -- f  
   -- code x7f  
   "00000000", -- 0  
   "00000000", -- 1  
   "00000000", -- 2  
   "00000000", -- 3  
   "00010000", -- 4  *  
   "00111000", -- 5  ***  
   "01101100", -- 6 ** **  
   "11000110", -- 7 **  **  
   "11000110", -- 8 **  **  
   "11000110", -- 9 **  **  
   "11111110", -- a *******  
   "00000000", -- b  
   "00000000", -- c  
   "00000000", -- d  
   "00000000", -- e  
   "00000000" -- f  
   );  
 begin  
   -- addr register to infer block RAM  
   process (clk)  
   begin  
    if (clk'event and clk = '1') then  
     addr_reg <= addr;  
    end if;  
   end process;  
   data <= ROM(to_integer(unsigned(addr_reg)));  
 end arch;  

PONG GRAPHS
 -- Listing 13.7  
 library ieee;  
 use ieee.std_logic_1164.all;  
 use ieee.numeric_std.all;  
 entity pong_graph is  
   port(  
    clk, reset: std_logic;  
    btn: std_logic_vector(1 downto 0);  
    pixel_x,pixel_y: in std_logic_vector(9 downto 0);  
    gra_still: in std_logic;  
    graph_on, hit, miss: out std_logic;  
    rgb: out std_logic_vector(2 downto 0)  
   );  
 end pong_graph;  
 architecture arch of pong_graph is  
   signal pix_x, pix_y: unsigned(9 downto 0);  
   constant MAX_X: integer:=640;  
   constant MAX_Y: integer:=480;  
   constant WALL_X_L: integer:=32;  
   constant WALL_X_R: integer:=35;  
   constant BAR_X_L: integer:=600;  
   constant BAR_X_R: integer:=603;  
   signal bar_y_t, bar_y_b: unsigned(9 downto 0);  
   constant BAR_Y_SIZE: integer:=72;  
   signal bar_y_reg, bar_y_next: unsigned(9 downto 0);  
   constant BAR_V: integer:=4;  
   constant BALL_SIZE: integer:=8; -- 8  
   signal ball_x_l, ball_x_r: unsigned(9 downto 0);  
   signal ball_y_t, ball_y_b: unsigned(9 downto 0);  
   signal ball_x_reg, ball_x_next: unsigned(9 downto 0);  
   signal ball_y_reg, ball_y_next: unsigned(9 downto 0);  
   signal ball_vx_reg, ball_vx_next: unsigned(9 downto 0);  
   signal ball_vy_reg, ball_vy_next: unsigned(9 downto 0);  
   constant BALL_V_P: unsigned(9 downto 0)  
       :=to_unsigned(2,10);  
   constant BALL_V_N: unsigned(9 downto 0)  
       :=unsigned(to_signed(-2,10));  
   type rom_type is array (0 to 7) of  
     std_logic_vector (7 downto 0);  
   constant BALL_ROM: rom_type :=  
   (  
    "00111100", --  ****  
    "01111110", -- ******  
    "11111111", -- ********  
    "11111111", -- ********  
    "11111111", -- ********  
    "11111111", -- ********  
    "01111110", -- ******  
    "00111100" --  ****  
   );  
   signal rom_addr, rom_col: unsigned(2 downto 0);  
   signal rom_data: std_logic_vector(7 downto 0);  
   signal rom_bit: std_logic;  
   signal wall_on, bar_on, sq_ball_on, rd_ball_on: std_logic;  
   signal wall_rgb, bar_rgb, ball_rgb:  
      std_logic_vector(2 downto 0);  
   signal refr_tick: std_logic;  
 begin  
   -- registers  
   process (clk,reset)  
   begin  
    if reset='1' then  
      bar_y_reg <= (OTHERS=>'0');  
      ball_x_reg <= (OTHERS=>'0');  
      ball_y_reg <= (OTHERS=>'0');  
      ball_vx_reg <= ("0000000100");  
      ball_vy_reg <= ("0000000100");  
    elsif (clk'event and clk='1') then  
      bar_y_reg <= bar_y_next;  
      ball_x_reg <= ball_x_next;  
      ball_y_reg <= ball_y_next;  
      ball_vx_reg <= ball_vx_next;  
      ball_vy_reg <= ball_vy_next;  
    end if;  
   end process;  
   pix_x <= unsigned(pixel_x);  
   pix_y <= unsigned(pixel_y);  
   refr_tick <= '1' when (pix_y=481) and (pix_x=0) else  
         '0';  
   -- wall  
   wall_on <=  
    '1' when (WALL_X_L<=pix_x) and (pix_x<=WALL_X_R) else  
    '0';  
   wall_rgb <= "001"; -- blue  
   -- paddle bar  
   bar_y_t <= bar_y_reg;  
   bar_y_b <= bar_y_t + BAR_Y_SIZE - 1;  
   bar_on <=  
    '1' when (BAR_X_L<=pix_x) and (pix_x<=BAR_X_R) and  
         (bar_y_t<=pix_y) and (pix_y<=bar_y_b) else  
    '0';  
   bar_rgb <= "010"; --green  
   -- new bar y-position  
   process(bar_y_reg,bar_y_b,bar_y_t,refr_tick,btn,gra_still)  
   begin  
    bar_y_next <= bar_y_reg; -- no move  
    if gra_still='1' then --initial position of paddle  
      bar_y_next <= to_unsigned((MAX_Y-BAR_Y_SIZE)/2,10);  
    elsif refr_tick='1' then  
      if btn(1)='1' and bar_y_b<(MAX_Y-1-BAR_V) then  
       bar_y_next <= bar_y_reg + BAR_V; -- move down  
      elsif btn(0)='1' and bar_y_t > BAR_V then  
       bar_y_next <= bar_y_reg - BAR_V; -- move up  
      end if;  
    end if;  
   end process;  
   -- square ball  
   ball_x_l <= ball_x_reg;  
   ball_y_t <= ball_y_reg;  
   ball_x_r <= ball_x_l + BALL_SIZE - 1;  
   ball_y_b <= ball_y_t + BALL_SIZE - 1;  
   sq_ball_on <=  
    '1' when (ball_x_l<=pix_x) and (pix_x<=ball_x_r) and  
         (ball_y_t<=pix_y) and (pix_y<=ball_y_b) else  
    '0';  
   -- round ball  
   rom_addr <= pix_y(2 downto 0) - ball_y_t(2 downto 0);  
   rom_col <= pix_x(2 downto 0) - ball_x_l(2 downto 0);  
   rom_data <= BALL_ROM(to_integer(rom_addr));  
   rom_bit <= rom_data(to_integer(not rom_col));  
   rd_ball_on <=  
    '1' when (sq_ball_on='1') and (rom_bit='1') else  
    '0';  
   ball_rgb <= "100";  -- red  
   -- new ball position  
   ball_x_next <=  
    to_unsigned((MAX_X)/2,10) when gra_still='1' else  
    ball_x_reg + ball_vx_reg when refr_tick='1' else  
    ball_x_reg ;  
   ball_y_next <=  
    to_unsigned((MAX_Y)/2,10) when gra_still='1' else  
    ball_y_reg + ball_vy_reg when refr_tick='1' else  
    ball_y_reg ;  
   -- new ball velocity  
   -- wuth new hit, miss signals  
   process(ball_vx_reg,ball_vy_reg,ball_y_t,ball_x_l,ball_x_r,  
       ball_y_t,ball_y_b,bar_y_t,bar_y_b,gra_still)  
   begin  
    hit <='0';  
    miss <='0';  
    ball_vx_next <= ball_vx_reg;  
    ball_vy_next <= ball_vy_reg;  
    if gra_still='1' then      --initial velocity  
      ball_vx_next <= BALL_V_N;  
      ball_vy_next <= BALL_V_P;  
    elsif ball_y_t < 1 then     -- reach top  
      ball_vy_next <= BALL_V_P;  
    elsif ball_y_b > (MAX_Y-1) then -- reach bottom  
      ball_vy_next <= BALL_V_N;  
    elsif ball_x_l <= WALL_X_R then -- reach wall  
      ball_vx_next <= BALL_V_P;   -- bounce back  
    elsif (BAR_X_L<=ball_x_r) and (ball_x_r<=BAR_X_R) and  
       (bar_y_t<=ball_y_b) and (ball_y_t<=bar_y_b) then  
       -- reach x of right bar, a hit  
       ball_vx_next <= BALL_V_N; -- bounce back  
       hit <= '1';  
    elsif (ball_x_r>MAX_X) then   -- reach right border  
      miss <= '1';         -- a miss  
    end if;  
   end process;  
   -- rgb multiplexing circuit  
   process(wall_on,bar_on,rd_ball_on,wall_rgb,bar_rgb,ball_rgb)  
   begin  
    if wall_on='1' then  
      rgb <= wall_rgb;  
    elsif bar_on='1' then  
      rgb <= bar_rgb;  
    elsif rd_ball_on='1' then  
      rgb <= ball_rgb;  
    else  
      rgb <= "110"; -- yellow background  
    end if;  
   end process;  
   -- new graphic_on signal  
   graph_on <= wall_on or bar_on or rd_ball_on;  
 end arch;  


TIMER MODULE
 -- Listing 13.9  
 library ieee;  
 use ieee.std_logic_1164.all;  
 use ieee.numeric_std.all;  
 entity timer is  
   port(  
    clk, reset: in std_logic;  
    timer_start, timer_tick: in std_logic;  
    timer_up: out std_logic  
   );  
 end timer;  
 architecture arch of timer is  
   signal timer_reg, timer_next: unsigned(6 downto 0);  
 begin  
   -- registers  
   process (clk, reset)  
   begin  
    if reset='1' then  
      timer_reg <= (others=>'1');  
    elsif (clk'event and clk='1') then  
      timer_reg <= timer_next;  
    end if;  
   end process;  
   -- next-state logic  
   process(timer_start,timer_reg,timer_tick)  
   begin  
    if (timer_start='1') then  
      timer_next <= (others=>'1');  
    elsif timer_tick='1' and timer_reg/=0 then  
      timer_next <= timer_reg - 1;  
    else  
      timer_next <= timer_reg;  
    end if;  
   end process;  
   timer_up <='1' when timer_reg=0 else '0';  
 end arch;  


M COUNTER MODULE
 -- Listing 13.8  
 library ieee;  
 use ieee.std_logic_1164.all;  
 use ieee.numeric_std.all;  
 entity m100_counter is  
   port(  
    clk, reset: in std_logic;  
    d_inc, d_clr: in std_logic;  
    dig0,dig1: out std_logic_vector (3 downto 0)  
   );  
 end m100_counter;  
 architecture arch of m100_counter is  
   signal dig0_reg, dig1_reg: unsigned(3 downto 0);  
   signal dig0_next, dig1_next: unsigned(3 downto 0);  
 begin  
   -- registers  
   process (clk,reset)  
   begin  
    if reset='1' then  
      dig1_reg <= (others=>'0');  
      dig0_reg <= (others=>'0');  
    elsif (clk'event and clk='1') then  
      dig1_reg <= dig1_next;  
      dig0_reg <= dig0_next;  
    end if;  
   end process;  
   -- next-state logic for the decimal counter  
   process(d_clr,d_inc,dig1_reg,dig0_reg)  
   begin  
    dig0_next <= dig0_reg;  
    dig1_next <= dig1_reg;  
    if (d_clr='1') then  
      dig0_next <= (others=>'0');  
      dig1_next <= (others=>'0');  
    elsif (d_inc='1') then  
      if dig0_reg=9 then  
       dig0_next <= (others=>'0');  
       if dig1_reg=9 then -- 10th digit  
         dig1_next <= (others=>'0');  
       else  
         dig1_next <= dig1_reg + 1;  
       end if;  
      else -- dig0 not 9  
       dig0_next <= dig0_reg + 1;  
      end if;  
    end if;  
   end process;  
   dig0 <= std_logic_vector(dig0_reg);  
   dig1 <= std_logic_vector(dig1_reg);  
 end arch;  

CONSTRAINT FILE
 #Created by Constraints Editor (xc3s250e-tq144-4) - 2017/07/29  
 NET "clk" LOC = "P129"; #TNM_NET = clk;  
 TIMESPEC TS_clk = PERIOD "clk" 50 MHz HIGH 50%;  
 #8I/Os_2 (Input)  
 NET "reset" LOC = "p91" ;  
 #16I/Os_1 (output)  
 NET "hsync" LOC = "p126" ;  
 NET "vsync" LOC = "p125" ;  
 NET "rgb[0]" LOC = "p124" ;  
 NET "rgb[1]" LOC = "p123" ;  
 NET "rgb[2]" LOC = "p122" ;  
 #8I/Os_2  
 NET "btn[0]" LOC = "p94" ;  
 NET "btn[1]" LOC = "p93" ;  
 #NET "sw[2]" LOC = "p92" ;  

TUTORIAL ON HOW TO ADD CLOCK TIMING CONSTRAINTS IN A MODULE

No comments:

Post a Comment