분주기(prescaler)

Yonghee·2023년 7월 24일

분주기(prescaler)

분주기는 '주기를 쪼갠다' 뜻으로 카운터의 변수를 활용하여 clock 주기를 더 느리게 만드는 장치입니다.

분주기는 회로 내부에 모듈마다 clock 동작 주파수가 서로 다를 수 있는데 이때 각 모듈의 동작 주파수를 맞춰주기 위해 사용됩니다.

    always @(posedge clk, posedge rst)begin // 100mhz 주기의 counter
        if(rst)begin
            counter <= 28'b0;
            clk1 <= 1'b0;
        end
        else if(counter >= 50000000)begin
            clk1 <= ~clk1;
        end 
        else if(counter >= 100000000)begin   // 1초에 100000000번 반복해야 함
            counter <= 28'b0;                
            clk1 <= ~clk1;
        end 
        else 
            counter <= counter + 1'b1;
    end

이런 식으로 always @(posedge clk,posedge rst) 상단에 오는 clk가 100mhz 주기 1초 주기로 바꾸려고 할 때, 100mhz는 1 초에 100000000번 진동한다는 거니깐 clk 주기를 늦추게 만드는 작업이 필요합니다.

clk 주기를 1초로 만들기 위해 counterclk1의 새로운 변수를 만들었습니다. counter 변수가 총 50000000번 진동할 때 clk1가 한번 반전되고 100000000번 진동할 때 다시 clk1을 반전시키면 100mhz의 주기를 갖는 clk를 1초의 주기로 바꿀 수 있습니다. 그리고 counter는 다시 0으로 초기화해 계속 같은 동작이 반복되게 하면 새로운 clock 주파수를 갖는 장치가 만들어집니다.

profile
SoC 설계 엔지니어 성장 기록

2개의 댓글

comment-user-thumbnail
2023년 7월 24일

좋은 글 감사합니다.

1개의 답글