FPGA学习笔记之按键控制
参考:
【黑金原创教程】【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学习笔记之按键控制的更多相关文章
- input子系统学习笔记六 按键驱动实例分析下【转】
转自:http://blog.chinaunix.net/uid-20776117-id-3212095.html 本文接着input子系统学习笔记五 按键驱动实例分析上接续分析这个按键驱动实例! i ...
- FPGA学习笔记(二)——FPGA学习路线及开发流程
###### [该随笔部分内容转载自小梅哥] ######### 一.FPGA学习路线 工具使用 -> 语法学习 -> 逻辑设计 -> IP使用 ->接口设计 -& ...
- FPGA学习笔记(八)—— 状态机设计实例之独立按键消抖
###### [该随笔中部分内容转载自小梅哥] ######### 独立按键消抖自古以来在单片机和FPGA中都是个不可避免的问题,首先,解释一下什么叫做按键抖动,如图,按键在按下和松开的那个瞬间存在大 ...
- AM335x(TQ335x)学习笔记——GPIO按键驱动移植
还是按照S5PV210的学习顺序来,我们首先解决按键问题.TQ335x有六个用户按键,分别是上.下.左.右.Enter和ESC.开始我想到的是跟学习S5PV210时一样,编写输入子系统驱动解决按键问题 ...
- FPGA学习笔记(六)—— 时序逻辑电路设计
用always@(posedge clk)描述 时序逻辑电路的基础——计数器(在每个时钟的上升沿递增1) 例1.四位计数器(同步使能.异步复位) // Module Name: coun ...
- 0039 Java学习笔记-多线程-线程控制、线程组
join线程 假如A线程要B线程去完成一项任务,在B线程完成返回之前,不进行下一步执行,那么就可以调用B线程的join()方法 join()方法的重载: join():等待不限时间 join(long ...
- FPGA学习笔记之格雷码、边沿检测、门控时钟
一.格雷码 格雷码的优点主要是进位时只有一位跳变,误码率低. 1.二进制转格雷码 我们观察下表: 二进制码 格雷码 00 00 01 01 10 11 11 10 二进制码表示为B[],格雷码表示为G ...
- AMQ学习笔记 - 19. 问题解决 - 控制Atomikos的日志输出
概述 在使用Atomikos为ActiveMQ提供JTA支持时,Atomikos在控制台打印了繁琐的日志.这里介绍如何控制Atomikos日志输出的粒度. 解决方案 基于以下三个事实: Atomiko ...
- FPGA学习笔记(三)—— 数字逻辑设计基础(抽象的艺术)
FPGA设计的是数字逻辑,在开始用HDL设计之前,需要先了解一下基本的数字逻辑设计-- 一门抽象的艺术. 现实世界是一个模拟的世界,有很多模拟量,比如温度,声音······都是模拟信号,通过对模拟信号 ...
随机推荐
- 安卓apk反编译
在win环境反编译安卓APP的.apk文件 安卓apk 反编译为 Java源码图文教程 Android安全攻防战,反编译与混淆技术完全解析(上)
- OpenGL程序无法启动此应用程序,因为计算机中丢失glut32.dll(转))
今天打开一个OpenGL源码,各种修改之后想要运行看一下效果,结果在我的开发环境下出现缺少相应的dll库: Windows7 64位+VS2010 提示:程序无法启动此应用程序,因为计算机中丢失glu ...
- 【深度学习框架-caffe】caffe中使用到的layer
https://www.jianshu.com/p/f6f49f6bcea6 https://github.com/BVLC/caffe/tree/master/include/caffe/layer ...
- vuex中mutations数据响应
vuex中的mutation需遵守Vue的响应规则: 既然Vuex的store中的状态是响应式的,那么在我们变更状态时,监视状态的Vuex最好在state中初始化好所有的所需属性. 如果需要在对象上添 ...
- Warning: Hash history cannot PUSH the same path; a new entry will not be added to the history stack
现象 在用`mobx-react-router`的`this.props.history.push("/")`的时候,浏览器会提示 Warning: Hash history ca ...
- 2019年Java面试题基础系列228道(5)
21.存在两个类,B 继承 A,C 继承 B,我们能将 B 转换为C 么?如 C = (C) B: 这属于强制类型转换,如果被转换的B实例不是C类型,会有异常 比如你的ABC分别对应动物,猫,黑猫. ...
- CentOS 7 搭建 GitLab
概述 GitLab 是我在日常工作中使用的代码仓库管理系统,它带有非常友好的 Web 界面,并且功能丰富.下面将介绍我在 CentOS 7 上搭建 GitLab 的步骤,以及遇到的一些问题. 关于不同 ...
- [bzoj3829][Poi2014]FarmCraft_树形dp
FarmCraft 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=3829 数据范围:略. 题解: 因为每条边只能必须走两次,所以我们的路径一定是 ...
- Kibana配置安装
学习网站 https://discuss.elastic.co https://github.com/elastic 配置 server.port: 5601 server.host: "l ...
- Word 查找替换高级玩法系列之 -- 通配符大全A篇
1. 通配符大全一览 序号 特殊字符(不使用通配符) 代码(不使用通配符) 特殊字符(使用通配符) 代码(使用通配符) 1 任意单个字符 ^? 任意单个字符 ? 2 任意数字 ^### 任意数字(单个 ...