FPGA-basierte Digitaluhr-Verilog-Entwicklung

Inhaltsverzeichnis

1. Theoretische Grundlage

2. Fallhintergrund

1. Problembeschreibung

2. Denkprozess

Drei, Verilog-Kernsimulation

Viertens die Simulationsschlussanalyse

5. Referenzen


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

Ich denke du magst

Origin blog.csdn.net/ccsss22/article/details/126395857
Empfohlen
Rangfolge