FPGA Verilog 按键与LED组合设计

  1. 用点亮4盏LED灯;
  2. 4盏LED灯在1秒内轮流点亮,即每盏LED灯的点亮时间是250毫秒;
  3. 一个轮流完成后,用一个4位的加法器累加LED循环的次数;
  4. 即当每一轮第四盏LED熄灭后,将这四盏LED灯改为同时点亮,显示出加法器中的16进制的数值,点亮时间为2秒;
  5. 加法器的数值从0~F循环
module key_test(clk,rst_n,light,key);
    input clk;
    input rst_n;
    input key;
    output reg[3:0] light;   //灯

reg [31:0] timer;
reg [3:0] adder = 4'b0000;
reg [19:0] cnt_20ms;
reg key_flag = 1'b0; 
reg adder_stop = 1'b1;
reg [31:0]timer_final;

parameter T_NORMAL = 32'd149_999_999;
parameter T_SKIP = 32'd49_999_999;
parameter CNT_MAX = 20'd999_999;

//消抖
always@(posedge clk or negedge rst_n)
begin
    if (rst_n == 1'b0)
        cnt_20ms <= 20'd0;
	else if( key == 1'b1 )
		cnt_20ms <= 20'd0;                             
	else if(cnt_20ms == CNT_MAX)
		cnt_20ms <= CNT_MAX;
	else
		cnt_20ms <= cnt_20ms + 20'd1;
end

always@(posedge clk or negedge rst_n)
begin
    if (rst_n == 1'b0)
        key_flag <= 1'b0;
	else if( cnt_20ms == (CNT_MAX -20'd1) )
		key_flag <= 1'b1;                             
	else 
		key_flag <= 1'b0;
end

always@(posedge clk or negedge rst_n)
begin
    if (rst_n == 1'b0)
        adder_stop <= 1'b0;
	else if( key_flag == 1'b1 )
	begin 
	if(adder_stop == 1'b0 )
		adder_stop <= 1'b1;                             //stop adder
	else if(adder_stop == 1'b1 )
		adder_stop <= 1'b0;
	end
	else
		adder_stop <= adder_stop;
end


always@(posedge clk or negedge rst_n)
begin
    if (rst_n == 1'b0)
        timer <= 32'd0;
	else if (timer == T_NORMAL)
		timer <= 32'd0;
	else if ((adder_stop == 1'd1) && (timer == T_SKIP))
		timer <= 32'd0;
	else 
		timer <= timer +32'd1;
end

always@(posedge clk or negedge rst_n)
begin
    if(rst_n == 1'b0)
	begin
        light <= 4'b0000;
		adder <= 4'b0000;
	end
    else if (timer == 32'd0)
        light <= 4'b0001;
    else if (timer == 32'd12_499_999)
        light <= 4'b0010;
    else if (timer == 32'd24_999_999)
        light <= 4'b0100;
    else if (timer == 32'd36_499_999)
    begin
		light <= 4'b1000;
		if(adder_stop == 1'b1)
			adder <= adder;
		else if (adder_stop == 1'b0)
        	adder <= adder + 4'd1;
	end
	else if (timer == 32'd49_999_999)
		light <= adder;
end
		
endmodule
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Verilog按键控制LED实验是一种基于数字逻辑设计实验,通过按键操作来控制LED灯的开启和关闭。 首先,我们需要使用Verilog语言编写一个简单的电路模块,包括一个按键输入和一个LED输出端口。该模块应能够检测按键状态,并根据按键状态控制LED输出端口。一种常见的做法是使用一个触发器来存储按键状态,在按键被按下的瞬间改变LED输出状态。 接下来,我们需要在开发板上搭建硬件平台,并将按键LED连接到相应的引脚上。通过配置Verilog代码和引脚映射,我们能够将按键LED正确连接到FPGA芯片上。 在实验过程中,我们可以通过按下或释放按键来控制LED的亮灭状态。当按下按键时,Verilog模块将检测到按键状态改变,并将LED输出端口的状态相应改变,从而使LED灯亮起。当释放按键时,LED输出状态保持不变,灯继续亮或灭。 最后,我们可以通过编译、逻辑仿真和实际硬件测试来验证我们的Verilog代码。在验证过程中,我们可以使用仿真工具来模拟按键操作,并观察LED的输出状态是否符合预期。如果验证通过,我们可以将代码烧录到FPGA芯片上,并通过实际按键操作来控制LED的亮灭。 Verilog按键控制LED实验是一种实用和有趣的数字电路设计实验,能够培养学生的逻辑设计硬件调试能力。通过这个实验,我们可以学习到数字逻辑设计的基本原理和Verilog语言的应用,同时也能够体验到硬件和软件之间的紧密配合。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值