Verilog

Verilog - CLK divider

_KDE_ 2025. 3. 20. 16:00

이번에는 3 basys board에서 제공하는 100MHz clk을 이용해 더 낮은 clk인 10Hz clk을 만들어 보겠습니다.

input으로는 clk과 reset을, output으로는 더 낮은 CLK인 o_clk을 선언 해줍니다.

100MHz CLK으로 10Hz CLK을 만들기 위해선 100MHz CLK이 10M개 의 파형을 띄울 때마다  o_clk을 1로 띄웠다가 0으로 만들어 주면 됩니다.

 

아래는 전체 코드입니다.

 


10M개의 파형의 개수를 세어야 하므로 parameter로 FCOUNT를 선언해주고 10_000_000으로 초기화 해줍니다.


 

FCOUNT(10_000_000)만큼의 파형 개수를 세어야 하므로 노란색으로 강조한 부분처럼 r_counter를 선언해줍니다.


always구문 안에서는 output이 reg type이어야 하므로 위처럼 reg r_clk를 선언해주고 output인 o_clk에 r_clk를 assign해줍니다.


 

100MHz의 CLK에 맞추어 10Hz CLK을 만들 것이기 때문에 CLK의 rising edge에 동작을 할 수 있도록 해줍니다. 그리도 reset이 인가되면  CLK과 r_counter를 0으로 초기화 시켜 줍니다.


만약 reset이 눌리지 않았다면

다음과 같은 step을 가집니다.

1. r_counter가 9_999_999인지?

2. r_counter가 4_999_999인지?

3. 그것도 아니라면 r_counter 1증가

 

첫 시작은 r_counter가 0이므로 4_999_999가 될 때까지 r_counter는 증가하게 됩니다.

 

그러다  r_counter가 4_999_999가 되면 r_clk는 0이 됩니다

 

여태까지 상황을 그림으로 표현하면 아래와 같습니다.

 


만약 r_counter가 9_999_999까지 증가하게되면 다음 clk에서 r_counter는 0이되고, r_clk가 1로 상승하게 됩니다.

 

그럼 다시 clk마다 r_counter는 1씩 증가하게 되고 r_counter가 4_999_999 가되면 r_clk은 다시 0으로 떨어지게 됩니다.

 

이것을 반복하면 10HZ의 r_clk이 생성되게 됩니다.

 

즉 clk_divider_2의 input으로 clk이 들어오면 출력 port인 o_clk으로 10Hz의 clk이 나오게 됩니다.

'Verilog' 카테고리의 다른 글

Verilog - 4bit full adder testbench  (2) 2025.03.16
Verilog - 4bit full adder  (2) 2025.03.16
Verilog - 1bit Half Adder, Full Adder (인스턴스화)  (1) 2025.03.09
Verilog 1주차 - Testbench  (0) 2025.03.03
Verilog 1주차 - 기본 작성법  (0) 2025.03.03