这次做的按键计数器,功能不复杂,比较简单。稍微花点篇幅讲解一下。首先给出设计的具体要求:

首先给出顶层的原理图设计:

比较难的功能应该算是第四点,即高位的0不予以显示。但是,原子家提供的数码管显示例程里面,已经包含了这个功能,所以我们直接拿来调用就行。具体代码我就不贴了,有需要的去原子官网下载。
另外就是按键消抖模块,关于按键消抖,我之前已经讲解过了,参考我的这篇博客:
FPGA项目(3)--按键消抖_嵌入式小李的博客-CSDN博客
https://blog.csdn.net/guangali/article/details/130674206?spm=1001.2014.3001.5501 接下来就是按键计数器的逻辑设计了。这个也不难。定义三个按键和一个数据,不同按键按下,数据对应加不同数值就行:

最后,给出逻辑控制模块的具体代码:
module counter( input clk, input rst, input k1, //按下+1 input k2, //按下+10 input k3, //按下+100 这里的按键信号都经过了消抖处理 output en, //数码管使能位 output sign, //符号控制位 output [5:0] point, output reg [19:0] data // 6个数码管要显示的数值 ); always @(posedge clk or negedge rst) begin if(!rst) data<=20'd0; //按下复位键 结果清0 else if(k1==1'b0) data<=data+20'd1; else if(k2==1'b0) data<=data+20'd10; else if(k3==1'b0) data<=data+20'd100; else data<=data; end assign en=1'b1; //数码管一直使能 assign sign=1'b0; //不显示负号 assign point=6'b000000; //不显示小数点 endmodule