동기 리셋 vs 비동기 리셋: 타이밍·클럭·해제 시 주의점 비교

둘 다 플립플롭을 정해진 초기값으로 만드는 방식이지만, 리셋이 적용되는 타이밍이 다릅니다. 동기 리셋은 리셋 신호를 다른 데이터와 마찬가지로 클럭 에지에서 받아들입니다. 비동기 리셋은 플립플롭의 리셋 단자를 직접 사용해, 클럭과 관계없이 즉시 적용합니다. 실제 설계에서는 걸 때는 비동기로 즉시 적용하고, 해제만 클럭에 동기화하는 방식이 자주 쓰입니다.

비교 항목동기 리셋비동기 리셋
적용되는 타이밍리셋이 유효한 상태에서 클럭 에지가 왔을 때리셋이 유효해진 순간. 클럭을 기다리지 않습니다
클럭 필요 여부필요. 클럭이 멈춰 있으면 리셋할 수 없습니다불필요. 클럭이 동작하기 전이나 멈춰 있을 때도 적용됩니다
Verilog 작성법always @(posedge clk) if (!rst_n) q <= 0; else q <= d;always @(posedge clk or negedge rst_n) if (!rst_n) q <= 0; else q <= d;
회로 구성데이터 입력 앞에 리셋용 논리를 넣습니다리셋 단자가 달린 플립플롭을 사용합니다
면적과 데이터 경로데이터 경로에 게이트가 늘어나 그만큼 지연과 면적이 늘어날 수 있습니다셀은 리셋 단자만큼 크지만, 데이터 경로에 논리가 늘지 않습니다
글리치에 대한 강도강함. 에지 순간 이외의 글리치는 받아들이지 않습니다약함. 리셋 선의 글리치로 잘못 리셋될 수 있습니다
리셋 펄스 폭적어도 1클럭 주기 이상 유효하게 유지해야 합니다짧은 펄스로도 적용됩니다
타이밍 분석일반 데이터 입력으로서 셋업과 홀드로 분석할 수 있습니다해제 타이밍(리커버리 시간과 리무벌 시간)을 별도로 확인합니다
리셋 해제 시 주의점클럭에 동기화되어 있으므로 같은 클럭 영역 안에서는 문제가 잘 생기지 않습니다해제가 클럭 에지에 가까우면 플립플롭마다 해제 사이클이 어긋나거나 준안정 상태가 됩니다. 리셋 동기화 회로로 해제를 클럭에 맞춥니다
적합한 회로클럭이 항상 동작하는 회로, 리셋 신호에 노이즈가 실리기 쉬운 회로전원을 켜자마자 초기화하고 싶은 회로, 클럭이 멈출 수 있는 회로

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

동기 리셋
클럭이 항상 동작하고, 리셋 신호에 글리치가 실릴 우려가 있을 때. 리셋을 일반 데이터 경로와 마찬가지로 타이밍 분석하고 싶을 때.
비동기 리셋
클럭이 동작하기 전이나 멈춰 있을 때에도 즉시 초기화하고 싶을 때. 출력을 빨리 안전한 상태로 만들고 싶은 회로 등.
조합
비동기로 걸고 동기로 해제하는 방식(리셋 동기화 회로)이 널리 쓰입니다. 걸 때는 즉시 적용되고, 해제는 2단 플립플롭으로 클럭 에지에 맞춰집니다.

자주 묻는 질문

비동기 리셋의 해제를 클럭에 동기화하는 이유는 무엇인가요?

해제가 클럭 에지 근처에서 일어나면 리커버리 시간이나 리무벌 시간을 지키지 못해, 어떤 플립플롭은 현재 사이클에서, 다른 플립플롭은 다음 사이클에서 동작을 시작하는 어긋남이나 준안정 상태가 생기기 때문입니다. 상태 기계가 잘못된 상태에서 시작하는 원인이 되므로, 2단 플립플롭으로 해제를 클럭에 맞춘 뒤 분배합니다.

동기 리셋에서 클럭이 멈춰 있으면 어떻게 되나요?

리셋 신호를 넣어도 플립플롭은 초기화되지 않습니다. 전원을 켠 직후처럼 클럭이 안정되기 전부터 안전한 상태가 필요한 회로에서는 비동기 리셋을 사용합니다.

모든 플립플롭에 리셋이 필요한가요?

필요하지 않습니다. 데이터 경로처럼 사용 전에 반드시 기록되는 레지스터에서는 리셋을 생략해 면적과 배선을 줄이기도 합니다. 상태 기계나 제어 신호처럼 초기값이 동작에 영향을 주는 것은 리셋합니다.

이해도 확인

동기 리셋과 비동기 리셋의 차이로 올바른 것은?

  1. A동기 리셋은 클럭과 관계없이 작동하고, 비동기 리셋은 클럭 에지에서만 작동한다
  2. B동기 리셋은 클럭 에지에서만 작동하고, 비동기 리셋은 클럭과 관계없이 곧바로 작동한다
  3. C둘 다 완전히 같은 동작이며 이름만 다르다
정답과 해설 보기

정답: B. 동기 리셋은 클럭 에지에서만 작동하고, 비동기 리셋은 클럭과 관계없이 곧바로 작동한다

동기 리셋은 리셋 신호를 다른 입력과 마찬가지로 클럭 에지에서 받아들이므로 타이밍 분석이 쉬운 반면, 클럭이 동작하지 않으면 리셋할 수 없습니다. 비동기 리셋은 플립플롭의 리셋 단자를 직접 사용하므로 클럭이 없어도 곧바로 리셋할 수 있지만, 해제 순간이 클럭 에지에 가까우면 플립플롭마다 해제 타이밍이 달라질 우려가 있습니다.

비동기 리셋을 사용하는 회로에서 리셋 해제(0에서 1로의 변화)를 2단 플립플롭으로 클럭에 동기시킨 뒤 각 회로에 분배하는 이유로 올바른 것은?

  1. A리셋을 거는 것을 2클럭만큼 지연시켜 안전하게 하기 위해
  2. B리셋 신호를 2배 속도로 하기 위해
  3. C해제가 클럭 에지에 가까우면 플립플롭마다 해제되는 사이클이 어긋나거나 불안정해지므로, 해제를 클럭에 맞추기 위해
정답과 해설 보기

정답: C. 해제가 클럭 에지에 가까우면 플립플롭마다 해제되는 사이클이 어긋나거나 불안정해지므로, 해제를 클럭에 맞추기 위해

비동기 리셋의 해제가 클럭 에지 직전이나 직후에 일어나면 해제를 위한 타이밍 조건을 만족하지 못해, 어떤 플립플롭은 현재 사이클에서, 다른 것은 다음 사이클에서 동작을 시작하는 식의 어긋남이 생깁니다. 이는 상태 머신이 비정상 상태에서 시작하는 원인이 됩니다. 리셋 동기화 회로는 리셋을 걸 때는 즉시 작동시키고, 해제만 2단 플립플롭으로 클럭에 맞춰 전체에 분배합니다.

시뮬레이션에서 리셋이 없는 레지스터의 값이 처음에 X였다. 실제 칩에서는 어떻게 된다고 생각할 수 있습니까?

  1. A전원을 켰을 때 0이나 1 중 하나가 되지만, 어느 쪽이 될지는 정해져 있지 않다
  2. B실제 칩에서도 0과 1의 중간 전압인 채로 멈춘다
  3. C실제 칩에서는 반드시 0이 된다
정답과 해설 보기

정답: A. 전원을 켰을 때 0이나 1 중 하나가 되지만, 어느 쪽이 될지는 정해져 있지 않다

실제 플립플롭은 전원을 켜면 0이나 1 중 하나의 안정된 상태로 수렴하지만, 어느 쪽이 될지는 칩이나 위치, 온도 등에 따라 달라지며 정해져 있지 않습니다. 시뮬레이션의 X는 '어느 쪽인지 알 수 없음'을 나타냅니다. 그 값이 회로 동작에 영향을 준다면 리셋으로 정해진 값으로 만들어야 합니다. 데이터 경로처럼 사용하기 전에 반드시 값이 기록되는 레지스터에서는 리셋을 생략하기도 합니다.

  1. 위 기술의 리셋 종류와 동작으로 올바른 것은?
  2. 비동기 신호를 플립플롭으로 받았을 때 셋업 시간이나 홀드 시간을 만족하지 못해 출력이 일시적으로 0도 1도 아닌 불확정 상태가 되는 것을 무엇이라고 합니까?

HDL과 검증 문제 풀기

주요 용어 설명

동기 리셋(synchronous reset)
리셋 신호를 클록 에지에서 받아들여 플립플롭을 초기화하는 리셋. 타이밍 해석이 쉽지만 클록이 멈춰 있으면 걸리지 않는다.
비동기 리셋(Asynchronous Reset)
클록과 관계없이 리셋 신호가 유효해지면 즉시 플립플롭을 초기화하는 리셋. 해제는 클록에 동기시키는 것이 기본이다.
리셋 동기화 회로(Reset Synchronizer)
비동기 리셋을 걸 때는 즉시 효과가 나도록 하고, 해제만 2단 플립플롭으로 클록에 맞춘 뒤 회로 전체에 배포하는 회로.
메타스터빌리티(Metastability)
플립플롭에서 셋업 시간이나 홀드 시간이 지켜지지 않을 때 출력이 한동안 0도 1도 아닌 상태로 정해지지 않는 현상. 비동기 신호는 2단 플립플롭으로 동기화하여 대처한다.
글리치(glitch)
신호 경로별 지연 차이 등으로 출력에 순간적으로 나타나는 불필요한 펄스. 조합 회로에서는 해저드라고도 하며 DA 변환기에서는 코드가 바뀔 때 발생한다.

관련 비교