Verilog_RTL 설계/Basys_3

[Sequential Circuit] Ring_Counter

juniha 2025. 7. 7. 19:57

목적

  • Ring_counter는 1개의 0 또는 1이 고정된 위치를 따라 순환하며 이동하는 형태의 회로이며 초기값 0111이 한 비트씩 왼쪽으로 이동하며 순환하는 것을 확인

사용 코드

module ring_counter(
    input clk,          // 클럭 입력
    input reset_p,      // 비동기 리셋 입력 (posedge에서 작동)
    output reg [3:0] q  // 4비트 링 카운터 출력
);
    
    always @(posedge clk, posedge reset_p) begin
        if (reset_p)
            q = 4'b0111;                  // 리셋 시 초기값 설정 (링 순환의 시작점)
        else begin
            q = {q[0], q[3:1]};           // 순환 쉬프트 수행 (왼쪽으로 1비트씩 순환)
            // 위 코드는 아래와 같은 효과:
            // q[3] <= q[0], q[2] <= q[3], q[1] <= q[2], q[0] <= q[1]
        end    
    end
endmodule

Schematic

simulation

 

결론

1 0111 1011
2 1011 1101
3 1101 1110
4 1110 0111
→ 다시 반복

 

  • 이 회로는 4비트 Ring_Counter이며, 한 비트가 순차적으로 순환되며 회전하는 구조이다.
  • reset_p가 1이 되면 카운터는 0111 상태로 초기화되고, 이후애는 클럭에 따라 계속해서 비트들이 왼쪽으로 쉬프트되며 순환된다.