⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.v

📁 这是一个verilog HDL 语言的例子
💻 V
字号:
`timescale 1ns/1ps

module key
	(
		Clk,Rst,
		sw0,sw1,sw2,sw3,
		led_d0,led_d1
	);
	
input Clk,Rst;
input sw0,sw1,sw2,sw3;
output led_d0,led_d1;

wire[3:0] key_neg;
reg[3:0] key_neg_now;
reg[3:0] key_neg_pre;

always @ (posedge Clk or negedge Rst) begin
	if( !Rst) begin
		key_neg_now <= 4'h0;
		key_neg_pre <= 4'h0;
	end
	else begin
		key_neg_now <= { sw3,sw2,sw1,sw0 };
		key_neg_pre <= key_neg_now;
	end
end

assign key_neg = key_neg_pre & (~key_neg_now); //检查是下降沿

reg [19:0] cnt;
always @ ( posedge Clk or negedge Rst) begin
	if( !Rst)
		cnt <= 20'd0;
	else if (key_neg)
		cnt <= 20'd0;
	else
		cnt <= cnt + 1'b1;
end

//检查20ms后是否还是按下状态,即是否还是低电平
wire[3:0] key_state;
reg[3:0] key_state_now;
reg[3:0] key_state_pre;

always @ (posedge Clk or negedge Rst) begin
	if( !Rst) begin
		key_state_now <= 4'hF;
		key_state_pre <= 4'hF;
	end
	else begin
		if ( cnt ==  20'hfffff )
			key_state_now <= { sw3,sw2,sw1,sw0 };
		key_state_pre <= key_state_now;
	end
end

assign key_state = key_state_pre & (~key_state_now); // 

reg led_d0_r,led_d1_r;

always @ ( posedge Clk or negedge Rst ) begin
	if( !Rst ) begin
		led_d0_r <= 'b1;
		led_d1_r <= 'b0;
	end
	else begin
		if( key_state ) begin
			led_d0_r <= ~led_d0_r;
			led_d1_r <= ~led_d1_r;		
		end
	end
end

assign  led_d0 = led_d0_r;
assign  led_d1 = led_d1_r;


endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -