본문 바로가기
하만 세미콘 아카데미/Verilog HDL

Remote Control Stop Watch Part1

by smileww 2024. 11. 24.

Stop_watch_ctl_sig_gen

 

// Digilent Cora-Z7 Board
//-- xc7z007sclg400-1

module stop_watch_ctl_sig_gen
( 
input	rst       		,   // USER_DIO1 <L19>
input	clk       		,   // 125MHz
//	
output	reg pls_1mhz	,  // 1MHz Pulse Output
output	reg pls_1khz	,  // 1KHz Pulse Output
output	reg pls_100hz	   // 100Hz Pulse Output
);

reg [6:0] hcnt;

reg [15:0] kcnt;
reg pl0,pl1;

reg [3:0] plcnt;

// 1MHz Pulse Generation    
always@(negedge rst, posedge clk)
begin
    if (rst == 0)
		begin
			hcnt <= 0;	pls_1mhz <= 0;
		end
    else if (pl1 & ~pl0)
		begin
			if (hcnt < 24)
				hcnt <= hcnt + 1;
			else	
				hcnt <= 0;
			if (hcnt < 12)	pls_1mhz <= 0;
			else			pls_1mhz <= 1;
		end
end        

// Ouput Signal Generation    
always@(negedge rst, posedge clk)
begin
    if (rst == 0)
		begin
			pls_100hz <= 0;		pls_1khz <= 0;	
		end
    else 
		begin
			pls_1khz <= pl1;
			if (plcnt < 5)	pls_100hz <= 0;
			else			pls_100hz <= 1;
		end
end        

// 100Hz Pulse Generation    
always@(negedge rst, posedge clk)
begin
    if (rst == 0)
		plcnt <= 0;	
    else if (pl1 & ~pl0)
		if (plcnt < 9)
			plcnt <= plcnt + 1;
		else	
			plcnt <= 0;
end        

// 1KHz Pulse Generation    
always@(negedge rst, posedge clk)
begin
    if (rst == 0)
		begin
			kcnt <= 0;	pl0 <= 0;	pl1 <= 0;
		end
    else 
		begin
			pl1 <= pl0;
			if (kcnt < 62499)
				kcnt <= kcnt + 1;
			else	
				begin	
					kcnt <= 0;
					pl0 <= ~pl0;
				end
		end
end        

endmodule

 

여러 클럭을 순차적으로 생성하고, 각각의 클럭이 다른 클럭의 생성에 영향을 미치는 방식인 클럭 디바이더 또는 분주기라고 불리는 방식으로 만듭니다. 하나의 높은 주파수 클럭을 기반으로 하여 여러 하위 주파수 클럭을 파생시키는데 이는 주로 디지털 회로에서 클럭 신호의 주파수를 낮추기 위해 사용합니다.

 

  1. 먼저 시스템클록이 125MHz (125,000,000) 이기 때문에 62500 카운터를 기점으로 반전되는 변수를 하나 생성합니다62500을 기점으로 값이 토글이 되어 해당 변수는 하나의 거대한 클록이 됩니다. pl0는 62,500을 기점으로 반전되기 때문에 시스템 클록이 125MHz (즉 1초) 에서 1kHz의 주파수 파형을 만들어낼 수 있습니다
  2. pl1이 1, pl0가 0인 기점으로 plcnt를 하나씩 증가시킵니다. 그러면 총 카운터로는 1,250,000번이 되었을 때 plcnt가 총 10번 증가하게 되고 plcnt가 5를 기점으로 토글하게 되면 100Hz가 생성됩니다. (초당 100번)