参考:

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二:按键模块① - 消抖

源码如下:

key_funcmod.v

 module key_funcmod(clk, rst, key, led, debug_led);

 input clk, rst, key;

 `define DEG

 `ifndef DEG
output reg [:] led;
`else
output [:] led;
`endif output reg debug_led; //`define DEBUG debug_led <= 1'b1; parameter T10MS='d500_000; reg F1, F2; always @(posedge clk or negedge rst)
begin
if (!rst)
{F2, F1} <= 'b11;
else
{F2, F1} <= {F1, key};
end wire isH2L;
wire isL2H; assign isH2L = (F2 == 'b1 && F1 == 1'b0);
assign isL2H = (F2 == 'b0 && F1 == 1'b1); reg[:] i;
reg[:] C1;
reg isPress, isRelease; always @(posedge clk or negedge rst)
begin
if (!rst)
begin
i <= 'd0;
{isPress, isRelease} <= 'b00;
C1 <= 'd0;
end
else
begin
case(i)
:
begin
if (isH2L)
i <= i + 'b1;
//`DEBUG
end
:
begin
if (C1 == T10MS) begin C1 <= 'd0; i <= i + 1'b1; end
else begin C1 <= C1 + 'b1; end
end
:
begin
isPress <= 'b1;
i <= i + 'b1;
end
:
begin
isPress <= 'b0;
i <= i + 'b1;
end
:
begin
if(isL2H)
i <= i + 'b1;
end
:
begin
if (C1 == T10MS) begin C1 <= 'd0; i <= i + 1'b1; end
else begin C1 <= C1 + 'b1; end
end
:
begin
isRelease <= 'b1;
i <= i + 'b1;
end
:
begin
isRelease <= 'b0;
i <= 'd0;
//`DEBUG
end
endcase
end
end reg[:] D1; always @(posedge clk or negedge rst)
begin
if (!rst)
`ifdef DEG
D1 <= 'b00;
`else
led <= 'b00;
`endif
else
if (isPress)
begin
`ifdef DEG
D1[] <= ~D1[];
`else
led[] <= ~led[];
`endif
//`DEBUG
end
else if (isRelease)
`ifdef DEG
D1[] <= ~D1[];
`else
led[] <= ~led[];
`endif
end `ifdef DEG
assign led = D1;
`endif endmodule

下载: http://files.cnblogs.com/files/pengdonglin137/key_demo1.zip

学到的知识:

1、Verilog下条件编译以及宏定义的使用;

2、一种调试方法:判断代码是不是执行到了,可以在关键位置加一个点灯的语句;

3、刚开始我把led设置为了 output reg [1:0] led,然后再最后assign led = D1,结果不管怎么按键,灯不亮。问题是:assign 语句后的led的类型应该是wire,而不应该是reg类型;

4、{isPress, isRelease} <= 2'b00; 其中, 不能写成 2'd11

FPGA学习笔记之按键控制的更多相关文章

  1. input子系统学习笔记六 按键驱动实例分析下【转】

    转自:http://blog.chinaunix.net/uid-20776117-id-3212095.html 本文接着input子系统学习笔记五 按键驱动实例分析上接续分析这个按键驱动实例! i ...

  2. FPGA学习笔记(二)——FPGA学习路线及开发流程

    ###### [该随笔部分内容转载自小梅哥]       ######### 一.FPGA学习路线 工具使用 -> 语法学习 -> 逻辑设计 -> IP使用 ->接口设计 -& ...

  3. FPGA学习笔记(八)—— 状态机设计实例之独立按键消抖

    ###### [该随笔中部分内容转载自小梅哥] ######### 独立按键消抖自古以来在单片机和FPGA中都是个不可避免的问题,首先,解释一下什么叫做按键抖动,如图,按键在按下和松开的那个瞬间存在大 ...

  4. AM335x(TQ335x)学习笔记——GPIO按键驱动移植

    还是按照S5PV210的学习顺序来,我们首先解决按键问题.TQ335x有六个用户按键,分别是上.下.左.右.Enter和ESC.开始我想到的是跟学习S5PV210时一样,编写输入子系统驱动解决按键问题 ...

  5. FPGA学习笔记(六)—— 时序逻辑电路设计

    用always@(posedge clk)描述        时序逻辑电路的基础——计数器(在每个时钟的上升沿递增1) 例1.四位计数器(同步使能.异步复位) // Module Name: coun ...

  6. 0039 Java学习笔记-多线程-线程控制、线程组

    join线程 假如A线程要B线程去完成一项任务,在B线程完成返回之前,不进行下一步执行,那么就可以调用B线程的join()方法 join()方法的重载: join():等待不限时间 join(long ...

  7. FPGA学习笔记之格雷码、边沿检测、门控时钟

    一.格雷码 格雷码的优点主要是进位时只有一位跳变,误码率低. 1.二进制转格雷码 我们观察下表: 二进制码 格雷码 00 00 01 01 10 11 11 10 二进制码表示为B[],格雷码表示为G ...

  8. AMQ学习笔记 - 19. 问题解决 - 控制Atomikos的日志输出

    概述 在使用Atomikos为ActiveMQ提供JTA支持时,Atomikos在控制台打印了繁琐的日志.这里介绍如何控制Atomikos日志输出的粒度. 解决方案 基于以下三个事实: Atomiko ...

  9. FPGA学习笔记(三)—— 数字逻辑设计基础(抽象的艺术)

    FPGA设计的是数字逻辑,在开始用HDL设计之前,需要先了解一下基本的数字逻辑设计-- 一门抽象的艺术. 现实世界是一个模拟的世界,有很多模拟量,比如温度,声音······都是模拟信号,通过对模拟信号 ...

随机推荐

  1. log4net示例2-日志输入存入Access(转)

    需求:基于log4net组建,创建Console程序将日志输出到Access数据库. 具体实施: (1)创建控制台程序. (2)控制台程序中,添加一个纯文本文件,文件命名为“log-Access.se ...

  2. Jmeter学习——测试计划元件【转】

    1. Test Plan (测试计划) 用来描述一个性能测试,包含与本次性能测试所有相关的功能.也就说本次性能测试的所有内容是于基于一个计划的. 下面看一下一个计划下面都有哪些主要的功能模块(右键单击 ...

  3. UMl类图基本认识

    1.基本认识 1) UML——Unified modeling language UML (统一建模语言), 是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果2) ...

  4. js复制json对象

    var newJson = JSON.parse(JSON.stringify(json对象));

  5. [一点感触]ADF4350 ADF4111混频记

    几经周折,还是和jack顺利的调完了二者的混频,回想起来我发的上一个版本是2016-11-29,时间可能永远停留在这里了... 祝您一路走好,未来的世界不再忙碌.奔波! 发两张界面纪念吧: 也曾想着把 ...

  6. 《ucore lab6》实验报告

    资源 ucore在线实验指导书 我的ucore实验代码 练习1: 使用 Round Robin 调度算法(不需要编码) 题目 完成练习0后,建议大家比较一下(可用kdiff3等文件比较软件) 个人完成 ...

  7. IDEA设置方法注释生成模板

    1.在项目设置里面找到Editor-Live Templates(默认设置里没有这个),然后点击右边的+号,选择Template Group,创建模板组,我这里起名叫Silentdoer: 2.选中自 ...

  8. myeclipse 相关问题

    [如何设置 Tab 键为四个空格] https://blog.csdn.net/QQ826688096/article/details/90543252

  9. SecureCRT系列:生成公私钥

    SecureCRT下载地址:http://www.portablesoft.org/securecrt-securefx-legacy-versions/1.打开我们的SecureCRT客户端,点击t ...

  10. CentOS下使用yum安装Apache极为方便,只需要在终端键入以下命令即可

    CentOS下使用yum安装Apache极为方便,只需要在终端键入以下命令即可 1.安装Apache yum install httpd 2.设置服务器开机自动启动Apache systemctl e ...