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 상태로 초기화되고, 이후애는 클럭에 따라 계속해서 비트들이 왼쪽으로 쉬프트되며 순환된다.