Article Index

     

     

     


     

    The ps2 bloclk is more than a just the ps2 interface it is also coverts the Keyboard Scan to ASCI and a value I use to display on the screen

     

     

     

     

                          Keyboard G is   scan code 34  than needs to be asci G and in my my Fonts 16

                           this is line 34 of the file kb_conversion.vhd

                                   x"1647",  --34  G  display  16     ascii 47

                                         

                                                               This if the font that is 16 hex

                                    
     

     

          


     Test Bech of the ps2 module using scan code 34 (G)

     

     

     

     


                                                                   Ps2 port  
    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;

    entity ps2 is


     port (kb_ack       : in  std_logic;
           clk          : in  std_logic;
         rst          : in  std_logic;
       kb_clk       : in  std_logic;
       data_kb   : in  std_logic;
       data_out     : inout std_logic_vector (7 downto 0) ;
          data_ready   : out std_logic;
       parity_error : out std_logic;
        asci   : out std_logic_vector (7 downto 0) ;
       display   : out std_logic_vector (7 downto 0)
       ); 
         end ps2;


    architecture behavoral  of ps2 is

    COMPONENT  kb_conversion

      port (        clk  : in std_logic;
                    rd  : in std_logic;
                    scan_code : in std_logic_vector (6 downto 0);
                    asci    : out std_logic_vector (7 downto 0);
                    display : out std_logic_vector (7 downto 0)
            );
       END COMPONENT;

        --- signal declarations ---

     signal  count              : std_logic_vector (3 downto 0) := "0000";
     signal  tmp_data           : std_logic_vector (10 downto 0);
     signal  data_ready_internal: std_logic;
     signal  parity_chk         : std_logic;
     signal  asci_Signal        : std_logic_vector (7 downto 0);
     signal  display_Signal    : std_logic_vector (7 downto 0);
     signal  data_out_signal    : std_logic_vector (7 downto 0);
     signal  scan_code_signal   : std_logic_vector (6 downto 0);

     signal   clk_Signal  : std_logic;
     signal       rd : std_logic :='0';
     signal       fd : std_logic :='0';
     signal       q1 : std_logic :='0';
     signal       q0 : std_logic :='0';
     signal      count_rd : std_logic;
     
       begin

       process ( rst,kb_clk)
         begin
         if (rst = '0')  then                    
              tmp_data  <= "00000000000";
              count <= "0000";
           parity_chk <= '0';
              
                 else
                     
                   if  ( kb_clk ='0' and kb_clk'Event  ) then
              
                  if   (count = "1010" )   then
                       count <= "0000";
                        data_ready_internal <= '1';
              data_out <= tmp_data ( 9 downto 2);
            
                     else   tmp_data (10 downto 0)  <= data_kb & tmp_data (10 downto 1);
                      count <= count + 1;
             parity_chk <= parity_chk xor data_kb;       
                         data_ready_internal <= '0';      
                
             
           
                   end if;
                   end if;
              end if; 
           end process;

    data_out_signal <= data_out ;

      process ( rst,kb_clk)

       begin
              if  (kb_clk'event and kb_clk ='1' and (count = "1011")) then
                   parity_error <=  not parity_chk;
                 end if;
        end process;


    U1 : kb_conversion
      PORT MAP (clk => clk,
                rd => '1',
                scan_code =>scan_code_signal ,
                asci => asci_Signal,
                display => display_Signal);


    --process (scan_code_signal,data_out_signal,asci_Signal,data_ready_internal)
    -- begin
    --if (not (  data_out_signal = x"F0" )) then
        scan_code_signal  <= data_out_signal (6 downto 0);
     asci <= asci_Signal;
      
    --  else
     --  asci <= x"00";
    --   scan_code_signal <= x"00";
    -- end if ;
     
    -- end process;
      display <= display_Signal;

     

    process ( data_out_signal, clk,rst)

       begin 
      
     --  if (rst = '0' and(  data_out_signal = x"F0" )) then
        if (data_out_signal(7 downto 4) = x"E")  or (data_out_signal(7 downto 4) = x"F")  then
        q0 <= '0';
        q1 <= '0';
      
          elsif (clk'event and clk ='1')then
      q0 <= data_ready_internal;
      q1 <= q0; 
      end if;
      end process ;
       
        rd <= q0 and (not q1);
           fd <= q1 and (not q0);
      
      --  data_ready <= rd;
        --   count_rd <= rd;

     


     process (clk,rst )
      begin
       if (clk'event and clk ='1') then
         if ( rd = '1' ) then
         count_rd  <= not   count_rd ;
        data_ready <= count_rd;
      else
            data_ready <= '0';  
     
      end if ;
      end if;
         
         
        end process;

      

         end;

     

     

     

     

     


     

                      asci    : out std_logic_vector (7 downto 0);
                      display : out std_logic_vector (7 downto 0)
            );
    end;

     architecture   arc_kb_conversion of kb_conversion is
         signal display_asci_out: std_logic_vector(15 downto 0);
        type my_data_kb is array (0 to 127) of std_logic_vector (15 downto 0);
     signal my_data_sig :   my_data_kb :=
         (
         
         
         
          x"0000",  --00
          x"0000",  --01
          x"0000",  --02
          x"0000",  --03
          x"0000",  --04
          x"0000",  --05
          x"0000",  --06
          x"0000",  --07
          x"0000",  --08
          x"0000",  --09
          x"0000",  --0A
          x"0000",  --0B
          x"0000",  --0C
          x"0000",  --0D
          x"0000",  --0E
          x"0000",  --0F     
          x"0000",  --10
          x"0000",  --11
          x"0000",  --12
          x"0000",  --13
          x"0000",  --14
          x"2051",  --15  Q  DISP  20   ascii  51
          x"0000",  --16
          x"0000",  --17
          x"0000",  --18
          x"0000",  --19
          x"295A",  --1A  Z  dsisplay  29  ascii 5A
          x"2253",  --1B  S  display  22   ascii 53
          x"1041",  --1C  A  display  10   ascii 41
          x"2657",  --1D  W  display  26   ascii 57
          x"0000",  --1E
          x"0000",  --1F
          x"0000",  --20
          x"1243",  --21  C  display 12   ascii  43
          x"2758",  --22  X  DISPLAY 27   ascii  58
          x"1344",  --23  D  display 13   ascii  44
          x"1445",  --24  E  display 14   ascii  45
          x"0000",  --25
          x"0000",  --26
          x"0000",  --27
          x"0000",  --28
          x"2F00",  --29   sp display 2F
          x"2556",  --2A  V  display 25      ascii 56
          x"1546",  --2B  F  display 15      ascii 46
          x"2354",  --2C  T  display 23      ascii 54
          x"2152",  --2D  R  display 21   ascii 52
          x"0000",  --2E
          x"0000",  --2F
          x"0000",  --30
          x"1D4E",  --31  N  display  1D     ascii 4E
          x"1142",  --32  B  display  11     ascii 42
          x"1748",  --33  H  display  17     ascii 48
          x"1647",  --34  G  display  16     ascii 47
          x"2859",  --35  Y  display  28     ascci 59
          x"0000",  --36
          x"0000",  --37
          x"0000",  --38
          x"0000",  --39
          x"1C4D",  --3A  M  display 1C     ascii 4D
          x"194A",  --3B  J  display 19     ascii 4A
          x"2455",  --3C  U  display 24     ascii 55
          x"0000",  --3D
          x"0000",  --3E
          x"0000",  --3F
          x"0000",  --40
          x"0000",  --41
          x"1A4B",  --42 K   display  1A  ascii 4B
          x"1849",  --43 I   display  18    ascci 49
          x"1E4F",  --44 O   display  1E    ascci 4F
          x"0000",  --45
          x"0000",  --46
          x"0000",  --47
          x"0000",  --48
          x"0000",  --49
          x"0000",  --4A
          x"1B4C",  --4B  L display   1B   ascii 4C
          x"0000",  --4C
          x"1F50",  --4D  P display  1F    ascii 50
          x"0000",  --4E
          x"0000",  --4F
          x"0000",  --50
          x"0000",  --51
          x"0000",  --52
          x"0000",  --53
          x"0000",  --54
          x"0000",  --55
          x"0000",  --56
          x"0000",  --57
          x"0000",  --58
          x"0000",  --59
          x"0000",  --5A
          x"0000",  --5B
          x"0000",  --5C
          x"0000",  --5D
          x"0000",  --5E
          x"0000",  --5F
          x"0000",  --60
          x"0000",  --61
          x"0000",  --62
          x"0000",  --63
          x"0000",  --64
          x"0000",  --65
          x"0000",  --66
          x"0000",  --67
          x"2f00",  --68
          x"0000",  --69
          x"0000",  --6A
          x"2f00",  --6B
          x"0000",  --6C
          x"0000",  --6D
          x"0000",  --6E
          x"0000",  --6F
          x"0000",  --70
          x"0000",  --71
          x"2f00",  --72
          x"0000",  --73
          x"2f00",  --74
          x"2f00",  --75
          x"0000",  --76
          x"0000",  --77
          x"0000",  --78
          x"0000",  --79
          x"0000",  --7A
          x"0000",  --7B
          x"0000",  --7C
          x"0000",  --7D
          x"0000",  --7E
          x"0000"   --7F
         
               );
     
     begin
       
      process (clk)  is
      
     begin

    if rising_edge (clk) then
         if ( rd = '1') then
          
                  display_asci_out <= my_data_sig(  conv_integer(scan_code));
             asci    <= display_asci_out(7 downto 0);
             display <= display_asci_out(15 downto 8);
            end if;
      end if;  

    end process ;
                 
    end ;

     

     

     

     

     

     

     

     

    Call me on Skype

    My Tweets

    © 2017 Your Company. All Rights Reserved. Designed By ltheme.com

    Please publish modules in offcanvas position.