基础知识
- 数值表示:位宽进制值,如 2d0 表示 2 位宽十进制 0,这里的位宽是 bit, 1 bit = 8 byte
- input 和 output 默认是 wire 类型
- 关于 管脚约束中 I/O std 的选择:

管脚约束

代码
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: LWX
//
// Create Date: 2025/08/03 17:38:28
// Design Name:
// Module Name: key
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////module key_module(input clk, output reg LED,input key );reg [1:0] mode = 2'd0; // 2bit 十进制 0reg [19:0] cnt = 20'd0;reg [1:0] key_r = 2'b11; // 接收按键状态的 2 位 regreg key_value = 0; // 按键值always@(posedge clk) begin // 按键信号同步时钟key_r[1] <= key_r[0];key_r[0] <= key;endwire key_negedge = key_r[1] & ~key_r[0]; // 按下为 1,弹起为 0,标志按键状态的检测,只有前一刻为 1,这一刻为 0 才是 按下always@(posedge clk) begincase (mode)2'd0 : begin // 初始状态cnt <= 20'd0;if (key_negedge) mode <= 2'd1;end 2'd1: beginif (cnt < 20'd1000000) begin // 计数中cnt <= cnt + 1'b1;endelse beginif (key == 0) begin // 如果按键按下且 20s 之内还是按下key_value <= ~key_value;mode <= 2'd2;endelsemode <= 2'd0; // 如果按键松开,回到初始状态endend2'd2: begin // 等待按键松开if (key == 1)mode <= 2'd0;enddefault: mode <= 2'd0;endcaseendalways@(posedge clk) beginLED <= key_value;endendmodule