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设计之前,需要先了解一下基本的数字逻辑设计-- 一门抽象的艺术. 现实世界是一个模拟的世界,有很多模拟量,比如温度,声音······都是模拟信号,通过对模拟信号 ...
随机推荐
- docker 之网络配置
Docker 网络实现 首先,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)来收发数据包:此外,如果不同子网之间要进行通信,需要路由机制. Docker 中的网络接口默认都是虚拟的接口 ...
- WPF TextBlock 文本换行的两种方式
第一种: <TextBlock> This is line 1.<LineBreak/> This is line 2. </TextBlock> 第二种 < ...
- RBF神经网络学习算法及与多层感知器的比较
对于RBF神经网络的原理已经在我的博文<机器学习之径向基神经网络(RBF NN)>中介绍过,这里不再重复.今天要介绍的是常用的RBF神经网络学习算法及RBF神经网络与多层感知器网络的对比. ...
- docker 使用阿里云镜像加速
1.登录阿里云 2.进入控制台 3.搜索 “容器镜像服务” 下拉点击 “镜像加速器” 复制自己的私有地址 进入自己的docker宿主机器(替换下面的地址为自己的私有地址) 修改daemon配置文件/e ...
- 一个unsigned int 数的二进制表示中有多少个1
这是一道面试题可以用以下的一些方案.第一种是很容易想到的采用循环的方式并且与1进行位与运算,具体代码如下. 1unsigned int GetBitNumOfOne_ByLoop1(unsigned ...
- python 线程队列PriorityQueue(优先队列)(37)
在 线程队列Queue / 线程队列LifoQueue 文章中分别介绍了先进先出队列Queue和先进后出队列LifoQueue,而今天给大家介绍的是最后一种:优先队列PriorityQueue,对队列 ...
- 软件素材---C语言函数不确定个数的入参的处理
1 : #用来把参数转换成字符串 #define P(A) printf("%s:%d\n",#A,A);int main(int argc, char **argv) { ...
- LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)
581. 最短无序连续子数组 581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序 ...
- phaser三个学生做题目
3个学生一起参加考试,一共有三道题,要求所有学生到齐才能开始考试,全部同学都做完第一题,学生才能继续做第二题,全部学生做完了第二题,才能做第三题,所有学生都做完的第三题,考试才结束 public cl ...
- [转帖]HAProxy 7层 负载均衡
HAProxy 7层 负载均衡 https://www.cnblogs.com/jicki/p/5546902.html HAProxy 系统 CentOS 5.8 x64 wget http://h ...