{"rsdb":{"rid":"378618","subhead":"","postdate":"0","aid":"264736","fid":"92","uid":"1","topic":"1","content":"
\n

\u672c\u6b21\u6848\u4f8b\u662f\u6309\u7740\u5c0f\u6885\u54e5\u7684\u601d\u8def\u6765\u5199\u7684\uff0c\u90e8\u5206\u622a\u56fe\u548c\u6587\u5b57\u6765\u81ea\u5176\u6559\u5b66\u89c6\u9891\u3002<\/strong>
\u8fd9\u6b21\u8bbe\u8ba1\u7684\u662f\u4e00\u4e2a\u80fd\u628a\u6309\u952e\u4fe1\u53f7\u8f93\u5165\u8f6c\u6362\u4e3a\u4e00\u4e2a\u6309\u952e\u4fe1\u53f7\u4e0b\u964d\u6cbf\u548c\u4e0a\u5347\u6cbf\u68c0\u6d4b\u8f93\u51fa\u3002<\/p> \n

1\u3001\u72b6\u6001\u673a\u7684\u8bbe\u5b9a<\/h2> \n

\"image\"
 <\/p> \n

    \n
  • \u7a7a\u95f2\u6001\uff1a\u7b49\u5f85\u6309\u952e\u4fe1\u53f7\u7684\u4e0b\u964d\u6cbf\uff0c\u82e5\u51fa\u73b0\u5219\u8fdb\u5165\u4e0b\u4e00\u4e2a\u72b6\u6001\u3002<\/li> \n
  • \u6309\u4e0b\u6ee4\u6ce2\u72b6\u6001\uff1a\u8fdb\u884c20ms\u7684\u8ba1\u65f6\uff0c\u82e5\u572820ms\u7684\u8ba1\u65f6\u5185\u51fa\u73b0\u7684\u4e0a\u5347\u6cbf\u5219\u8868\u793a\u6309\u952e\u8fd8\u5728\u6296\u52a8\uff0c\u56de\u5230\u7a7a\u95f2\u6001\uff1a\u5426\u5219\u8fdb\u5165\u4e0b\u4e00\u4e2a\u72b6\u6001,\u5e76\u751f\u6210\u6309\u952e\u6309\u4e0b\u4fe1\u53f7\u3002<\/li> \n
  • \u7b49\u5f85\u91ca\u653e\u72b6\u6001\uff1a\u5982\u679c\u5728\u8be5\u72b6\u6001\u4e0b\u51fa\u73b0\u4e0a\u5347\u6cbf\u4fe1\u53f7\u8fdb\u5165\u91ca\u653e\u6ee4\u6ce2\u72b6\u6001\u3002<\/li> \n
  • \u91ca\u653e\u6ee4\u6ce2\u72b6\u6001\uff1a\u8fdb\u884c20ms\u7684\u8ba1\u65f6\uff0c\u82e5\u572820ms\u7684\u8ba1\u65f6\u5185\u51fa\u73b0\u7684\u4e0b\u964d\u6cbf\u5219\u8868\u793a\u6309\u952e\u8fd8\u5728\u6296\u52a8\uff0c\u56de\u5230\u7b49\u5f85\u91ca\u653e\u72b6\u6001\uff1a\u5426\u5219\u8fdb\u5165\u7a7a\u95f2\u6001\uff0c\u5e76\u751f\u6210\u6309\u952e\u91ca\u653e\u4fe1\u53f7\u3002
     <\/li> \n <\/ul> \n

    2\u3001\u6a21\u5757\u4ee3\u7801<\/h2> \n
    `timescale 1ns \/ 1ps\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ Company: \n\/\/ Engineer:Lclone\n\/\/ \n\/\/ Create Date: 2023\/01\/14 20:44:54\n\/\/ Design Name: \n\/\/ Module Name: key_filter\n\/\/ Project Name: \n\/\/ Target Devices: \n\/\/ Tool Versions: \n\/\/ Description: \n\/\/ \n\/\/ Dependencies: \n\/\/ \n\/\/ Revision:\n\/\/ Revision 0.01 - File Created\n\/\/ Additional Comments:\n\/\/ \n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\n\nmodule key_filter(\n    input           Clk,\n    input           Rst_n,\n    input           Key_in,\n    output  reg    Key_press,\n    output  reg    Key_release\n    );\n    \n    reg [2:0]   key_sync;\n    always @(posedge Clk or negedge Rst_n) begin\n        if(Rst_n == 0)\n            key_sync <= 0;\n        else\n            key_sync <= {key_sync[1:0],Key_in};\/\/\u5ef6\u8fdf3\u62cd\uff0c\u51cf\u5c11\u4e9a\u7a33\u6001\u51fa\u73b0\u7684\u6982\u7387\u7684\u540c\u65f6\uff0c\u8fd8\u53ef\u4ee5\u6355\u83b7\u4e0a\u5347\u6cbf\u548c\u4e0b\u964d\u6cbf\n    end\n    \n    reg key_nedge;\n    reg key_pedge;\n    always @(posedge Clk or negedge Rst_n) begin\n        if(Rst_n == 0)\n            begin\n                key_nedge <= 0;\n                key_pedge <= 0;\n            end\n        else if(key_sync[2:1] == 2'b10 )\/\/\u4e0b\u964d\u6cbf\u6355\u83b7\n            key_nedge <= 1'b1;\n        else if(key_sync[2:1] == 2'b01 )\/\/\u4e0a\u964d\u6cbf\u6355\u83b7\n            key_pedge <= 1'b1;\n        else\n            begin\n                key_nedge <= 0;\n                key_pedge <= 0;\n            end\n    end\n    \n    parameter  CNT_20MS = 1_000_000;\n    reg [19:0]  cnt_20ms;\n    reg [ 1:0]  state;\n    always @(posedge Clk or negedge Rst_n) begin\n        if(Rst_n == 0)\n            begin\n                state <= 0;\n                cnt_20ms <= 0;\n                Key_press <= 0;\n                Key_release <= 0;\n            end\n        else case(state)\n            0:\n                begin\n                    Key_release <= 0;\n                    if(key_nedge == 1)\n                        state <= 1;\n                    else\n                        state <= 0;\n                end\n            1:\n                begin\n                    if(cnt_20ms < CNT_20MS & key_pedge == 1)\n                        begin\n                            state <= 0;\n                            cnt_20ms <= 0;\n                        end\n                    else if(cnt_20ms == CNT_20MS - 1)\n                        begin\n                            state <= 2;\n                            cnt_20ms <= 0;\n                            Key_press <= 1;\n                        end\n                    else\n                        cnt_20ms <= cnt_20ms + 1'b1;\n                end\n            2:\n                begin\n                    Key_press <= 0;\n                    if(key_pedge == 1)\n                        state <= 3;\n                    else\n                        state <= 2;\n                end\n            3:\n                begin\n                    if(cnt_20ms < CNT_20MS & key_nedge == 1)\n                        begin\n                            state <= 2;\n                            cnt_20ms <= 0;\n                        end\n                    else if(cnt_20ms == CNT_20MS - 1)\n                        begin\n                            state <= 0;\n                            cnt_20ms <= 0;\n                            Key_release <= 1;\n                        end\n                    else\n                        cnt_20ms <= cnt_20ms + 1'b1;\n                end\n            default:;\n        endcase\n    end\nendmodule\n<\/code><\/pre> \n 

    3\u3001\u4eff\u771f<\/h2> \n

    (1)$random\u51fd\u6570\u7684\u4f7f\u7528<\/h3> \n

    rand = {$random(seed)} % 10_000_000;<\/p> \n