参考:

【黑金原创教程】【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

最新文章

  1. 微信为什么发布 Mac 版?
  2. 七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解
  3. 使用IntelliJ IDEA 配置Maven(入门)
  4. GenomicRangeQuery /codility/ preFix sums
  5. 使用git将代码push到osc上
  6. python web编程 创建一个web服务器
  7. mysql 关键字 字段 转义
  8. Java中移位操作运算符的理解
  9. GCD之线程挂起与恢复
  10. 安装Apache提示APR not found的解决办法
  11. Dshell----开源攻击分析框架
  12. 在HTML页面中有jQuery实现实现拼图小游戏
  13. entOS7查看开放端口命令
  14. AtCoder Beginner Contest 043 D - アンバランス / Unbalanced
  15. 全网最详细的hive-site.xml配置文件里如何添加达到Hive与HBase的集成,即Hive通过这些参数去连接HBase(图文详解)
  16. MySQL与Oracle的区别之我见
  17. uva10160(dfs+状态压缩)
  18. react native项目直接全局定义横竖屏幕
  19. Matrix-Tree定理题表
  20. JS中对象继承方式

热门文章

  1. Jrebel激活方法(转)
  2. HR数据分析常用的50个公式
  3. TroubleShooting经验总结
  4. Elasticsearch - 处理冲突
  5. JS中的match和test正则表达式验证密码或用户名的一种规则
  6. MYSQL 递归操作
  7. 【Leetcode_easy】1042. Flower Planting With No Adjacent
  8. AtCoder Beginner Contest 147 E. Balanced Path
  9. 6、2、2 存到redis 中的验证码
  10. (模板)AC自动机模板