用FPGA设计流水灯

流水灯原理:

        控制led,依次让led进行亮灭,实现流水灯效果

 实验目的:用一个按键可以开关控制流水灯的流动与停止

模块框图:

wat_led 模块代码

module wat_led(
    input wire clk_50mhz          ,//系统时钟50Mhz    
    input wire rst_n              ,//全局复位
    input wire wat_led_flag       ,//输入信号,一个高电平周期
    
    output reg [3:0] led           //输出信号

    );
    
parameter S_MAX = 26'd49_999_999; //计时1s

reg [25:0] sum_s; //计数器
reg [1:0] qs;     //控制灯的亮灭状态

reg wat_led_flag_h ;//把输入信号wat_led_flag处理为电平反转信号

always@(  posedge  clk_50mhz or negedge rst_n) begin 
if (rst_n==1'b0) begin
    wat_led_flag_h <= 1'b0;
end
else if (wat_led_flag == 1'b1) begin
    wat_led_flag_h <= ~wat_led_flag_h;
end
else begin
    wat_led_flag_h <= wat_led_flag_h;
end
end  


always@(  posedge  clk_50mhz or negedge rst_n) begin 
if (rst_n==1'b0) begin
    sum_s <= 26'd0;
end
else if (sum_s == S_MAX) begin
    sum_s <= 26'd0;
end
else begin
    sum_s <=sum_s+ 26'd1;
end
end  

always@(  posedge  clk_50mhz or negedge rst_n) begin 
if (rst_n==1'b0) begin
    qs <= 3'd0;
end
else if (sum_s == S_MAX) begin
    qs <= qs+ 3'd1;
end
else begin
    qs <= qs;
end
end 
    
always@(  posedge  clk_50mhz or negedge rst_n)
begin 
if (rst_n==1'b0) begin
    led <= 4'b0000;
end
else if(wat_led_flag_h==1'b1) begin
    case(qs)
   2'b00: led <= 4'b0001;
   2'b01: led <= 4'b0010;
   2'b10: led <= 4'b0100;      
   2'b11: led <= 4'b1000;
   default: led <= 4'b0000;
   endcase    
end
end


endmodule

key_filter模块代码,见我的这一篇文章 :用FPGA设计软件按键消抖-CSDN博客

key_wat_led模块代码,如下:

module key_wat_led (
    input   wire    clk_50mhz   ,   //系统时钟50Mhz
    input   wire    rst_n       ,   //全局复位
    input   wire    key_in      ,   //按键输入信号

    output  wire [3:0] led           //输出信号
);

wire     key_flag;


key_filter key_filter_inst
(
    .clk_50mhz  (clk_50mhz)     ,   //系统时钟50Mhz
    .rst_n      (rst_n    )     ,   //全局复位
    .key_in     (key_in   )     ,   //按键输入信号
 
    .key_flag   (key_flag )         //key_flag为1时表示消抖后检测到按键被按下
                                    //key_flag为0时表示没有检测到按键被按下
);

wat_led wat_led_inst
(
    .clk_50mhz      (clk_50mhz   )    ,//系统时钟50Mhz    
    .rst_n          (rst_n       )    ,//全局复位
    .wat_led_flag   (key_flag    )    ,//输入信号,一个高电平周期

    .led            (led         )     //输出信号

);

endmodule //key_wat_led

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值