⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2_mouse9.vhd

📁 PS2键盘鼠标接口控制实现电子琴功能
💻 VHD
📖 第 1 页 / 共 2 页
字号:
                                                               --start
       when  m2_st15=>  m2_nexts<=m2_st16;  
              q_data2_x<=ps2_data&q_data2_x(8 downto 1);        --data0 
       when  m2_st16=>  m2_nexts<=m2_st17;
              q_data2_x<=ps2_data&q_data2_x(8 downto 1);  
       when  m2_st17=>  m2_nexts<=m2_st18;               
              q_data2_x<=ps2_data&q_data2_x(8 downto 1); 
                                        --  always_one<=ps2_data;
       when  m2_st18=>  m2_nexts<=m2_st19;
              q_data2_x<=ps2_data&q_data2_x(8 downto 1); 
                                           always_one<=ps2_data;                 
       when  m2_st19=>  m2_nexts<=m2_st20;
              q_data2_x<=ps2_data&q_data2_x(8 downto 1); 
       when  m2_st20=>  m2_nexts<=m2_st21;
              q_data2_x<=ps2_data&q_data2_x(8 downto 1); 
       when  m2_st21=>  m2_nexts<=m2_st22;    
              q_data2_x<=ps2_data&q_data2_x(8 downto 1); 
                                                          
       when  m2_st22=>  m2_nexts<=m2_st23;
              q_data2_x<=ps2_data&q_data2_x(8 downto 1);          --data7
                                         --   q_data2<=q_data2_x(8 downto 1);

       when  m2_st23=>  m2_nexts<=m2_st24;
              q_data2_x<=ps2_data&q_data1_x(8 downto 1); 
                                           q_data2<=q_data2_x(8 downto 1);
                           
                  
       when  m2_st24=> 
                
----------------------------
                if(always_one='1')  then   m2_nexts<=m2_st25;                --stop2
                else                       m2_nexts<=m2_st14;      ---
                end if;
----------------------------
       when  m2_st25=>  m2_nexts<=m2_st26;
                                               --start
       when  m2_st26=>  m2_nexts<=m2_st27;
             q_data3_x<=ps2_data&q_data3_x(8 downto 1);            --data0
       when  m2_st27=>  m2_nexts<=m2_st28; 
             q_data3_x<=ps2_data&q_data3_x(8 downto 1); 
       when  m2_st28=>  m2_nexts<=m2_st29;
             q_data3_x<=ps2_data&q_data3_x(8 downto 1); 
       when  m2_st29=>  m2_nexts<=m2_st30;
             q_data3_x<=ps2_data&q_data3_x(8 downto 1); 
       when  m2_st30=>  m2_nexts<=m2_st31;
             q_data3_x<=ps2_data&q_data3_x(8 downto 1);                 
       when  m2_st31=>  m2_nexts<=m2_st32;
             q_data3_x<=ps2_data&q_data3_x(8 downto 1);            
       when  m2_st32=>  m2_nexts<=m2_st33;
             q_data3_x<=ps2_data&q_data3_x(8 downto 1);
       when  m2_st33=>  m2_nexts<=m2_st34;                          
             q_data3_x<=ps2_data&q_data3_x(8 downto 1);        --data7
                                            
                                           --q_data3<=q_data3_x(8 downto 1);                            
       when  m2_st34=>  m2_nexts<=m2_st35; 
             q_data3_x<=ps2_data&q_data1_x(8 downto 1);
                                          q_data3<=q_data3_x(8 downto 1);                              
       when  m2_st35=>  m2_nexts<=m2_st36;                        
                                                               --stop3    
       when  m2_st36=>  m2_nexts<=m2_st37;
                                                               --start
       when  m2_st37=>  m2_nexts<=m2_st38;
             q_data4_x<=ps2_data&q_data4_x(8 downto 1);        --data0  
       when  m2_st38=>  m2_nexts<=m2_st39;
             q_data4_x<=ps2_data&q_data4_x(8 downto 1); 
       when  m2_st39=>  m2_nexts<=m2_st40;
             q_data4_x<=ps2_data&q_data4_x(8 downto 1); 
       when  m2_st40=>  m2_nexts<=m2_st41;
             q_data4_x<=ps2_data&q_data4_x(8 downto 1); 
       when  m2_st41=>  m2_nexts<=m2_st42;
             q_data4_x<=ps2_data&q_data4_x(8 downto 1); 
       when  m2_st42=>  m2_nexts<=m2_st43;
             q_data4_x<=ps2_data&q_data4_x(8 downto 1);
       when  m2_st43=>  m2_nexts<=m2_st44;                         
             q_data4_x<=ps2_data&q_data4_x(8 downto 1);        
       when  m2_st44=>  m2_nexts<=m2_st45;
             q_data4_x<=ps2_data&q_data4_x(8 downto 1);     --data7
                                       --   q_data4<=q_data4_x(8 downto 1); 

       when  m2_st45=>  m2_nexts<=m2_st46; 
             q_data4_x<=ps2_data&q_data1_x(8 downto 1);   
                                        q_data4<=q_data4_x(8 downto 1);                                          
       when  m2_st46=>  m2_nexts<=m2_st14;                     --stop4
                   
       when others => null;
       end case;
    end if;
    end process;

   u6: process(reset,q_data1,q_data2,q_data3,q_data4)
       begin
         if( reset='1')  then
--                   ps2_data2 <=(others=>'0');
             ps2_data2 <="11111111";
                 
         else
             ps2_data2 <=q_data2;
        end if;
     end process;
---------------------------------------------------rabish part---------------------------
     
 -------------------------------------------------------------------------------------------         
PROCESS( q_data2 )
    BEGIN
        CASE q_data2 IS
          WHEN "00010110" =>  INDEXV <= "0001" ; 
          WHEN "00011110" =>  INDEXV <= "0010" ; 
          WHEN "00100110" =>  INDEXV <= "0011" ; 
          WHEN "00100101" =>  INDEXV <= "0100" ; 
          WHEN "00101110" =>  INDEXV <= "0101" ; 
          WHEN "00110110" =>  INDEXV <= "0110" ; 
          WHEN "00111101" =>  INDEXV <= "0111" ; 
          WHEN "00111110" =>  INDEXV <= "1000" ; 
          WHEN "01000101" =>  INDEXV <= "1001" ; 
          WHEN "01000110" =>  
                IF DATA0(3 DOWNTO 0)="1001" THEN 
                              INDEXV <= "1010"  ;
                 ELSIF   DATA0(3 DOWNTO 0)="1010" THEN 
                              INDEXV <= "1011" ;
                              ELSE  INDEXV <= "1111" ;
                 END IF;
          WHEN OTHERS =>      INDEXV <= "1111" ;
        END CASE ;
          
    END PROCESS ;

--------------------------------------------------------------------------------------------
    Search : PROCESS(INDEXV)
    BEGIN
        CASE INDEXV IS              -- 译码电路,查表方式,控制音调的预置数
            WHEN "0001"  => TONE <= 773;  CODE1 <= "0001";  
            WHEN "0010"  => TONE <= 912;  CODE1 <= "0010";  
            WHEN "0011"  => TONE <= 1036; CODE1 <= "0011"; 
            WHEN "0100"  => TONE <= 1116; CODE1 <= "0100"; 
            WHEN "0101"  => TONE <= 1197; CODE1 <= "0101";  
            WHEN "0110"  => TONE <= 1290; CODE1 <= "0110";  
            WHEN "0111"  => TONE <= 1372; CODE1 <= "0111";  
            WHEN "1000"  => TONE <= 1410; CODE1 <= "1000";
           
            WHEN "1010"  => TONE <=  800; CODE1 <= "1010";
            WHEN "1011"  => TONE <= 1200; CODE1 <= "1001";
            WHEN "1100"  => TONE <= 1000; CODE1 <= "1000";

            WHEN "1111"  => TONE <= 2047; CODE1 <= "0000";
            WHEN   OTHERS    => TONE <= 2047; CODE1 <= "0000";  
        END CASE;
    END PROCESS;
-------------------------------------------------------------------------------
     PROCESS(clk1)
        VARIABLE Count4 : INTEGER RANGE 0 TO 15;
    BEGIN
        PreCLK <= '0';       
        IF Count4 > 11  THEN  PreCLK <= '1';  Count4 := 0;
        ELSIF clk1'EVENT AND clk1='1' THEN  Count4 := Count4 + 1;            
        END IF;
    END PROCESS;
    GenSpkS : PROCESS(PreCLK, TONE)
        VARIABLE Count11 : INTEGER RANGE 0 TO 16#7FF#;
               BEGIN            -- 11位可预置计数器
        IF PreCLK'EVENT AND PreCLK = '1' THEN
          IF   Count11=16#7FF# THEN  Count11 := TONE; FullSpkS <= '1';                
            ELSE Count11:=Count11 + 1; FullSpkS <= '0';                
            END IF;
        END IF;
    END PROCESS;
    
 PROCESS(FullSpkS)
        VARIABLE Count2 : STD_LOGIC;
            BEGIN --
        IF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2;
            IF Count2 = '1' THEN  SPKS <= '1';
                      ELSE        SPKS <= '0';
            END IF;
        END IF;
    END PROCESS;
-----------------------------------------------------------------------------
 uA : PS2    PORT MAP (   reset0 => reset,
                           clk0  => clk,
                        ps2_clk0 => ps2_clk00,
                       ps2_data0 => ps2_data00, 
                      ps2_data20 => DATA0,
                      ps2_data30 => ps2_data3A     );
                       
        ps2_data2A <=  DATA0;
                      
  END;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -