FPGA学习之按键控制led

简介: 按键控制led 设计要求:通过8个按键分别控制一个led的亮灭。   该实验有两个模块:按键缓存模块和由按键值控制led模块 按键缓存模块:通过二级缓存,将按键值存入key_r1,防止按键时产生的尖峰脉冲影响按键值。 由按键值控制led模块:采用case语句,一一对应控制led的亮灭。   顶层代码: module keyled(clk,

按键控制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
目录
相关文章
|
5月前
|
异构计算
FPGA新起点V1开发板(十)——按键控制LED
FPGA新起点V1开发板(十)——按键控制LED
FPGA新起点V1开发板(十)——按键控制LED
|
6月前
|
存储 算法 前端开发
【FPGA学习篇】认识Robei(一)
【FPGA学习篇】认识Robei(一)
92 1
|
5月前
|
异构计算
FPGA入门(5):控制LED灯
FPGA入门(5):控制LED灯
58 0
|
异构计算
|
开发工具 芯片 异构计算
芯片设计:FPGA开发学习
芯片设计:FPGA开发学习
260 0
芯片设计:FPGA开发学习
|
异构计算
实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)
实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)
1311 0
实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)
|
存储
FPGA-SDRAM设计学习(三)初始化、模式寄存器、激活和读命令
FPGA-SDRAM设计学习(三)初始化、模式寄存器、激活和读命令
306 0
FPGA-SDRAM设计学习(三)初始化、模式寄存器、激活和读命令

热门文章

最新文章

下一篇
DataWorks