集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1281|回复: 3

FPGA的PS2代码

[复制链接]
fpga_feixiang 发表于 2018-8-9 13:35:36 | 显示全部楼层 |阅读模式
detect_module
PS2_CLK_Pin_In由高变低时触发

module detect_module
(
    CLK, RSTn,
     PS2_CLK_Pin_In,
     H2L_Sig
);

    input CLK;
     input RSTn;
     input PS2_CLK_Pin_In;
     output H2L_Sig;

     /**************************/

     reg H2L_F1;
     reg H2L_F2;

     always @ ( posedge CLK or negedge RSTn )
         if( !RSTn )
              begin
                   H2L_F1 <= 1'b1;
                     H2L_F2 <= 1'b1;
              end   
          else
              begin
                    H2L_F1 <= PS2_CLK_Pin_In;//低电平有效
                     H2L_F2 <= H2L_F1;
                end

     /****************************/

     assign H2L_Sig = H2L_F2 & !H2L_F1;

     /****************************/


endmodule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
ps2_decode_module
按位读出按键信号

module ps2_decode_module
(
    CLK, RSTn,
     H2L_Sig, PS2_Data_Pin_In,
     PS2_Data, PS2_Done_Sig
);

    input CLK;
     input RSTn;
     input H2L_Sig;
     input PS2_Data_Pin_In;
     output [7:0]PS2_Data;
     output PS2_Done_Sig;

     /*******************************/

     reg [7:0]rData;
     reg [4:0]i;
     reg isShift;
     reg isDone;


     always @ ( posedge CLK or negedge RSTn )
         if( !RSTn )
              begin
                    rData <= 8'd0;
                     i <= 5'd0;
                     isDone <= 1'b0;
                end
           else
                case( i )

                     5'd0:
                      if( H2L_Sig ) i <= i + 1'b1;

                      4'd1, 4'd2, 4'd3, 4'd4, 4'd5, 4'd6, 4'd7, 4'd8:
                      if( H2L_Sig ) begin i <= i + 1'b1; rData[ i-1 ] <= PS2_Data_Pin_In; end//先传输低位,在传高位 记录通码

                      5'd9, 5'd10:
                      if( H2L_Sig ) i <= i + 1'b1;

                      5'd11:
                      if( rData == 8'hf0 ) i <= 5'd12; //如果是0xf0则后8位为断码
                      else i <= 5'd23;

                      5'd12, 5'd13, 5'd14, 5'd15, 5'd16, 5'd17, 5'd18, 5'd19, 5'd20, 5'd21, 5'd22:
                      if( H2L_Sig ) i <= i + 1'b1;

                      5'd23:
                      begin i <= i + 1'b1; isDone <= 1'b1; end

                      5'd24:
                      begin i <= 5'd0; isDone <= 1'b0; end

                 endcase

    /************************************/

     assign PS2_Data = rData;
     assign PS2_Done_Sig = isDone;

     /*************************************/

endmodule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
组合PS2模块
module ps2_module
(
    CLK, RSTn,
     PS2_CLK_Pin_In, PS2_Data_Pin_In,
     PS2_Data, PS2_Done_Sig
);

    input CLK;
     input RSTn;
     input PS2_CLK_Pin_In;
     input PS2_Data_Pin_In;
     output [7:0]PS2_Data;
     output PS2_Done_Sig;

     /********************************/

     wire H2L_Sig;

     detect_module U1
     (
         .CLK( CLK ),
          .RSTn( RSTn ),
          .PS2_CLK_Pin_In( PS2_CLK_Pin_In ),  // input - from top
          .H2L_Sig( H2L_Sig )                 // output - to U2
     );

     /*********************************/

     ps2_decode_module U2
     (
         .CLK( CLK ),
          .RSTn( RSTn ),
          .H2L_Sig( H2L_Sig ),                  // input - from U1
          .PS2_Data_Pin_In( PS2_Data_Pin_In ),  // input - from top
          .PS2_Data( PS2_Data ),                // output - to top
          .PS2_Done_Sig( PS2_Done_Sig )         // output - to top
     );

     /**********************************/

endmodule
zxopenhl 发表于 2018-8-9 20:45:02 | 显示全部楼层
谢谢楼主分享!
zhangyukun 发表于 2018-8-10 09:24:58 | 显示全部楼层
FPGA的PS2代码
lixirui 发表于 2018-9-1 10:09:13 | 显示全部楼层

FPGA的PS2代码
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-1 20:11 , Processed in 0.058453 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表