本文主要涉及Xilinx版的FPGA的边沿触发检测,通过锁存一个时钟节拍, 比较前后两个检测状态, 判定是否产生上升沿或者下降沿,可用于按键检测等,具体如下:
检测上升沿:
reg KEY_SCAN;
reg KEY_SCAN_REG;
always@(posedge CLK) // 锁存一个时钟节拍,KEY_SCAN_REG是KEY_SCAN的上一个状态
KEY_SCAN_REG <= KEY_SCAN;
wire FLAG =(~KEY_SCAN_REG) & KEY_SCAN;
// 真值表:
~KEY_SCAN_REG |
KEY_SCAN |
FLAG |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
检测下降沿:
reg KEY_SCAN;
reg KEY_SCAN_REG;
always@(posedge CLK) // 锁存一个时钟节拍,KEY_SCAN_REG是KEY_SCAN的上一个状态
KEY_SCAN_REG <= KEY_SCAN;
wire FLAG = KEY_SCAN_REG & (~KEY_SCAN);
// 真值表:
KEY_SCAN_REG |
~KEY_SCAN |
FLAG |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
其中,检测到边沿触发, FLAG=1为有效,作为后期操作的标志位。