FPGA学习之按键控制led

来源:互联网 发布:免费企业网管软件 编辑:程序博客网 时间:2024/05/21 15:06

按键控制led

设计要求:通过8个按键分别控制一个led的亮灭。

 

该实验有两个模块:按键缓存模块和由按键值控制led模块

按键缓存模块:通过二级缓存,将按键值存入key_r1,防止按键时产生的尖峰脉冲影响按键值。

由按键值控制led模块:采用case语句,一一对应控制led的亮灭。

 

顶层代码:

module keyled(clk,rst_n,key,led);

 

input clk;

input rst_n;

input [7:0]key;

output [7:0]led;

 

//二级缓存按键数据

reg [7:0]key_r0,key_r1;

always @(posedge clk or negedge rst_n)

    if(!rst_n)begin

        key_r0 <= 8'd0;

        key_r1 <= 8'd0;

    end

    else begin

        key_r0 <= key;

        key_r1 <= key_r0;

    end

   

reg [7:0]led_r;

always @(key_r1)begin

    case(key_r1)

        8'b1111_1110:led_r = 8'b1111_1110;

        8'b1111_1101:led_r = 8'b1111_1100;

        8'b1111_1011:led_r = 8'b1111_1000;

        8'b1111_0111:led_r = 8'b1111_0000;

        8'b1110_1111:led_r = 8'b1110_0000;

        8'b1101_1111:led_r = 8'b1100_0000;

        8'b1011_1111:led_r = 8'b1000_0000;

        8'b0111_1111:led_r = 8'b0000_0000;

        default:led_r = 8'b1111_1111;

    endcase

end

   

assign led = led_r;

 

endmodule

 

 

测试文件:除了clk,rst_n信号外,还设置了8+1种不同的key值(最后一种是乱序的按键),以便观察led。

代码:

`timescale 1ns/1ns

`define clk_period 20

 

module keyled_tb;

 

reg clk;

reg rst_n;

reg [7:0]key;

wire [7:0]led;

 

keyled keyled(

        .clk(clk),

        .rst_n(rst_n),

        .key(key),

        .led(led)

        );

 

initial clk=1;

always#(`clk_period/2)clk=~clk;

 

initial begin

    rst_n=0;

    key=0;

    #(`clk_period*20+1);

    rst_n=1;

    #`clk_period;

    key=8'b1111_1110;

    #(`clk_period*10);

   

    key=8'b1111_1101;

    #(`clk_period*10);

    

    key=8'b1111_1011;

    #(`clk_period*10);

   

    key=8'b1111_0111;

    #(`clk_period*10);

   

    key=8'b1110_1111;

    #(`clk_period*10);

   

    key=8'b1101_1111;

    #(`clk_period*10);

   

    key=8'b1011_1111;

    #(`clk_period*10);

   

    key=8'b0111_1111;

    #(`clk_period*10);

   

    key=8'b1101_1110;

    #(`clk_period*10);

       

end

       

endmodule

 

 

仿真波形图:

波形图.jpg
1 0