zoukankan      html  css  js  c++  java
  • 【iCore1S 双核心板_FPGA】例程二:GPIO输入实验——识别按键输入

    实验现象:

    iCore1s 双核心板上与FPGA相连的三色LED(PCB上标示为FPGA·LED),按键按下红灯点亮,松开按键红灯熄灭。

    核心源代码:

    module KEY(
        input CLK_12M,
        input FPGA_KEY,
        output FPGA_LEDR,
        output FPGA_LEDG,
        output FPGA_LEDB
    );
    //----------------------rst_n-----------------------//
    //产生复位信号    
        reg rst_n;
        reg [3:0]cnt_rst;
        
        always@(posedge CLK_12M)
            if(cnt_rst==4'd10)
                begin
                    rst_n <= 1'd1;
                    cnt_rst <= 4'd10;
                end
            else cnt_rst <= cnt_rst + 1'd1;
    //-----------------------KEY_CLK--------------------//
    //将按键的按下与松开转换为KEY_CLK,按下后松开为上升沿 
        reg KEY_CLK;
        reg [7:0]cnt_key0;
        reg [7:0]cnt_key1;
        always@(posedge CLK_12M or negedge rst_n )
            begin
                if(!rst_n)
                    begin
                        KEY_CLK <= 1'd0;
                        cnt_key0 <= 8'd0;
                        cnt_key1 <= 8'd0;
                    end
                else if(!FPGA_KEY)
                    begin
                        cnt_key0 <= cnt_key0 + 1'd1;
                        if(cnt_key0==8'd200)//消抖
                            begin
                                
                                if(!FPGA_KEY)
                                    begin
                                        KEY_CLK <= 1'd0;
                                        cnt_key0 <= 8'd0;
                                    end
                            end                    
                    end
                else if(FPGA_KEY)
                    begin
                        cnt_key1 <= cnt_key1 + 1'd1;
                        if(cnt_key1==8'd200)//消抖
                            begin
                                if(FPGA_KEY)
                                    begin
                                        KEY_CLK <= 1'd1;
                                        cnt_key1 <= 8'd0;
                                    end
                            end
                    end
            end
    //-----------------------led-------------------------//    
        reg [1:0]led_state;
        reg ledr,ledg,ledb;
    
        always@(posedge KEY_CLK or negedge rst_n)
            begin
                if(!rst_n)
                    begin
                        led_state <= -2'd1;//初始化使灯熄灭
                        ledr <= 1'd1;
                        ledg <= 1'd1;
                        ledb <= 1'd1;
                    end    
                else 
                    begin
                        led_state <= led_state + 1'd1;
                        if(led_state > 2'd2)
                            begin
                                led_state <= 2'd0;
                            end
                        case(led_state)
                            2'd0:            //红灯亮
                                begin
                                    ledr <= 1'd0;
                                    ledg <= 1'd1;
                                    ledb <= 1'd1;
                                end
                            2'd1:            //绿灯亮
                                begin
                                    ledr <= 1'd1;
                                    ledg <= 1'd0;
                                    ledb <= 1'd1;
                                end
                            2'd2:            //蓝灯亮
                                begin
                                    ledr <= 1'd1;
                                    ledg <= 1'd1;
                                    ledb <= 1'd0;
                                end
                            default :    //灯熄灭
                                begin                    
                                    ledr <= 1'd1;
                                    ledg <= 1'd1;
                                    ledb <= 1'd1;                    
                                end
                        endcase
                    end    
            end
            
        assign FPGA_LEDR = ledr;
        assign FPGA_LEDG = ledg;
        assign FPGA_LEDB = ledb;
        
    //--------------------endmodule------------------//    
    endmodule 

    代码包下载:

    链接:http://pan.baidu.com/s/1kUWAJC7 密码:13jp

  • 相关阅读:
    js的click事件传递参数方法
    https://en.wikipedia.org/wiki/Log-structured_merge-tree
    窗口标题
    编译器前端 后端
    https://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/util/MurmurHash.html
    修改内存数据
    阿里巴巴建设业务中台的方法论 业务中台规范
    入 Go 必读:大型Go工程的项目结构及实战思考 原创 毛剑 QCon 今天
    https://github.com/golang/go/wiki/CommonMistakes
    goroutines inside of goroutines
  • 原文地址:https://www.cnblogs.com/xiaomagee/p/7114789.html
Copyright © 2011-2022 走看看