要求:
在数码管上显示类似秒表的计数器。
1按键:key1控制开始,key2控制结束。
2将数码管分为三个部分,百微秒,毫秒,秒。
想法:
分为6个模块:
第一个模块:按键(按键里面注意的就是按键消抖)
第二个模块:状态机(分为三个状态,IDLE,work,stop),从状态机引出一个control(控制信号)。
第三个模块:分频(将50M的频率分成0.01M的频率,百微秒的分频)其它的不用分,它是随着百微秒变化而变化。
第四个模块:计数,有6个计数器,每一个计数器在work状态中都工作,且每一个计数器都受到分频之后的clk控制。且后一个计数随着前一个计数变化。
第五个模块:译码模块:数码管的译码。
第六个模块:顶层模块,将各个子模块实列化。
------------------------------------------------------------------------------------------------------------------------代码:
module pro(
input clk,
input rst,
input key1,
input key2,
output key1_o,
output key2_o
);
reg key1_o5;
reg key1_o4;
reg key1_o1;
always@(posedge clk or negedge rst)
begin
if(~rst)
key1_o1<=0;
else
key1_o1<=key1;
end
reg key1_o3;
reg key1_o2;
always@(posedge clk or negedge rst)
begin
if(~rst)
key1_o2<=0;
else
key1_o2<=key1_o1;
end
always@(posedge clk or negedge rst)
begin
if(~rst)
key1_o3<=0;
else
key1_o3<=key1_o2;
end
wire pos;
always@(posedge clk or negedge rst)
begin
if(~r