目次
1. 理論的根拠
プログラム全体は、次の 3 つの部分に分かれています。
·時計制御部分、調整分、秒機能、秒リセット機能に分かれています。
一時停止機能、クロックカウント停止機能;
4桁のデジタル管表示機能;
システムボタンは、クイック調整ボタン、リセット、セカンドリセットボタン、システム一時停止ボタン(作業と一時停止の2つの機能が利用可能)
したがって、4 つのボタンが必要です。
2. 事件の背景
1. 問題の説明
システム全体の基本ブロック図を以下に示します。
2.思考プロセス
·キーのデバウンスは主に遅延の機能によって実現され、ボードの実際のロードを遅らせるには長い時間がかかることが多いため、コードは 2 つのバージョンのコードを提供します。1 つのバージョンはシミュレーション バージョンで、Jitter をキャンセルしません。 、1つのバージョンはデバウンス機能を備えたハードウェアバージョンです。
・シミュレーション版は主にシステムの機能を考慮しているため、クロック系を直接制御しているが、ハードウェア版では1秒分のクロックを得るためにシステムクロックの周波数を分周する必要がある。
3、verilog コア シミュレーション
トッププログラムは次のとおりです。
module time_module(
i_clk, //系统时钟
//这里假设按键的初始状态为0,按下后为1
i_rst, //系统复位
i_min_fast,//调整分
i_sec_fast,//调整秒
i_stop_run,//暂停或者继续工作
o_min, //显示分
o_sec //显示秒
);
input i_clk;
input i_rst;
input i_min_fast;
input i_sec_fast;
input i_stop_run;
output[7:0]o_min;
output[7:0]o_sec;
reg[7:0]o_min = 8'd0;
reg[7:0]o_sec = 8'd0;
always @(posedge i_clk or posedge i_rst)
begin
if(i_rst)
begin
o_min <= 8'd0;//59
o_sec <= 8'd0;//59
end
else begin
if(i_stop_run == 0)//不按下时为0,时钟正常工作
begin
//正常计时间
if(o_sec[3:0] == 4'd9)
begin
o_sec[3:0] <= 4'd0;
if(o_sec[7:4] == 4'd5)
begin
o_sec[7:4] <= 4'd0;
//分计数
if(o_min[3:0] == 4'd9)
begin
o_min[3:0] <= 4'd0;
if(o_min[7:4] == 4'd5)
begin
o_min[7:4] <= 4'd0;
end
else begin
o_min[7:4] <= o_min[7:4] + 4'd1;
end
end
else begin
o_min[3:0] <= o_min[3:0] + 4'd1;
end
end
else begin
o_sec[7:4] <= o_sec[7:4] + 4'd1;
end
end
else begin
o_sec[3:0] <= o_sec[3:0] + 4'd1;
end
//调整时间
if(i_min_fast == 1'b1)
begin
if(o_min[3:0] == 4'd9)
begin
o_min[3:0] <= 4'd0;
if(o_min[7:4] == 4'd5)
begin
o_min[7:4] <= 4'd0;
end
else begin
o_min[7:4] <= o_min[7:4] + 4'd1;
end
end
else begin
o_min[3:0] <= o_min[3:0] + 4'd1;
end
end
if(i_sec_fast == 1'b1)
begin
o_sec <= 8'd0;
end
end
else begin//按下时为1,时钟停止
o_min <= o_min;
o_sec <= o_sec;
end
end
end
endmodule
第四に、シミュレーション結論分析
シミュレーション結果は次のとおりです。
通常の操作:
上の図でわかるように、秒のカウントが 59 に達すると、0 になり、その後分数が 1 増加します。
調整:
ポイント調整:
分修正ボタンを押すと、実際の電子時計と同じように分が早くカウントされます。
2 番目の調整:
秒調整ボタンを押すと、秒が0に変わります。
一時停止:
一時停止を押すと歩行を停止します。
リセット:
リセット後、システムは 0 になります; A02-36