Inhaltsverzeichnis
Viertens die Simulationsschlussanalyse
1. Theoretische Grundlage
Das gesamte Programm gliedert sich in die folgenden drei Teile:
·Uhrsteuerteil, unterteilt in Einstellungsminuten, Sekundenfunktion, zweite Reset-Funktion;
Pausenfunktion, Stoppfunktion zum Zählen der Uhr;
4-stellige digitale Röhrenanzeigefunktion;
Die Systemtasten sind: Schnelleinstellungstaste, Reset, zweite Reset-Taste, System-Pause-Taste (zwei Funktionen für Arbeit und Pause sind verfügbar)
Es werden also vier Knöpfe benötigt.
2. Fallhintergrund
1. Problembeschreibung
Das grundlegende Blockdiagramm des gesamten Systems ist unten dargestellt:
2. Denkprozess
·Tastenentprellung wird hauptsächlich durch die Verzögerungsfunktion realisiert, und es dauert oft lange, das tatsächliche Laden des Boards zu verzögern, daher bietet Ihnen unser Code zwei Versionen des Codes, eine Version ist die Simulationsversion, ohne Jitter aufzuheben , eine Version ist die Hardware-Version mit der Entprellfunktion.
·Die Simulationsversion berücksichtigt hauptsächlich die Funktion des Systems, also steuern wir das Taktsystem direkt; in der Hardwareversion müssen wir die Systemtaktfrequenz teilen, um die Uhr zu erhalten, die 1 Sekunde entspricht.
Drei, Verilog-Kernsimulation
Das Top-Programm sieht wie folgt aus:
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
Viertens die Simulationsschlussanalyse
Die Simulationsergebnisse sind wie folgt:
normale Operation:
Wie Sie in der obigen Abbildung sehen können, wird die Sekundenzählung 0, wenn die Sekundenzählung 59 erreicht, und dann erhöht sich die Minutenzahl um 1;
Einstellung:
Punkteinstellung:
Wenn die Minuteneinstelltaste gedrückt wird, beginnt die Minute schnell zu zählen, was der eigentlichen elektronischen Uhr entspricht.
Zweite Anpassung:
Wenn die zweite Einstelltaste gedrückt wird, wechselt die Sekunde auf 0.
Pause:
Stoppen Sie zu gehen, wenn Pause gedrückt wird.
Zurücksetzen:
Nach dem Zurücksetzen wird das System 0; A02-36