一、知识点
1. 使能信号
en_cnt为1时cnt开始计数,为0则cnt计数清零,通过控制en_cnt来实现计数,计数满时en_cnt为0
2. 边沿检测
外部输入key_in存入reg0,下一周期,新的key_in存入reg0,上一时刻的reg0存入reg1。eg下降沿信号:低电平出现,存入reg0,reg1仍为高电平,对reg0取反再相与为1则可判定
3. 随机数发生函数
联合repeat函数使用,避免按延时输入的复杂
4. task——endtask
任务调用,激励源产生更简洁
5. 仿真模型
用一个模块代替testbench中激励源等编写,该模块产生激励输入消抖模块,外部仅需时钟、复位信号。模型不可综合,测试链接中要单独加上该模块。
6. 异步信号亚稳态同步处理
key_in与时钟信号无关,为异步信号,在上升沿可能采集到不定态(下降过程),即亚稳态,D触发器振荡,振荡后在下一上升沿前稳定,但稳定状态不确定,采用两级寄存器可以保证输出结果稳定。
在reg0,reg1之前使用两级寄存器,对外部输入的异步信号进行同步处理,再使用D触发器存储两个相邻时钟上升沿时外部输入信号(已经同步于系统时钟)的电平状态。
使用两级D触发器进行同步
7. 模块设计化思想
顶层模块包含两个消抖模块(内含激励模块model)、led控制模块,自底向上设计。
二、实现功能分析
1. 实际板子
右下角为通用按键,上方为四个led灯,左下角为复位按键,也可做功能按键
2. 功能电路简化
按键变化输入FPGA端口,按下接地为0,释放为1,实际按键有抖动,不可预期,需要滤波
3. 功能状态转移图
未按下时空闲状态;按下抖动滤除状态;按下稳定状态;释放抖动滤除状态