티스토리 뷰
목차
한 줄 요약
Latch는 enable(레벨)이 켜져 있는 동안 입력이 출력으로 그대로 전달되는 레벨 감응(level-sensitive) 소자이고, Flip-Flop은 클럭 엣지 순간에만 입력을 받아들이는 엣지 감응(edge-triggered) 소자입니다. 둘 다 이전 상태를 기억하는 순차 회로(sequential circuit)의 기본 요소입니다.
Latch는 level sensitive(level trigger) 소자이며 비동기식이다.
flip-flop은 edge sensitive( edge trigger)소자이며 synchronous이다.
이 두 logic은 sequential circuit인데 이는 입력 및 현재 상태에 따라 출력 및 다음 상태가 결정되는 논리회로를 의미한다.
이 sequential circuit을 구성하기 위해서 래치와 플립플롭이 기억소자로 동작하며 unit을 이룬다.
| Latch | Flip-Flop | |
| 작동방식 | asynchronous | synchronous |
| 입출력 | Level Sensitive | Edge Sensitive |
| 속도 | 빠름(Clk X) | 상대적으로 느림 |

transparent 특성을 가져 단독으로 사용하기 어려운 소자는 Latch
Latch는 입력신호가 바로 출력신호로 전해지기 때문에 glitch와 같은 noise에 취약하다.
즉, enable이 1일 때, 신호가 노이즈를 일으켰다면 의도치 않은 노이즈 신호가 그대로 전달된다.
Flip-flop은 입력 신호의 glitch에 영향을 받지 않는다.
용어 정리: 래치를 "비동기"라고 부르는 이유
위 표에서 래치를 비동기, 플립플롭을 동기라고 구분한 것은 클럭 엣지가 아니라 레벨(enable)에 반응한다는 점을 단순하게 표현한 것입니다. 엄밀히 말하면 래치도 보통 클럭(또는 enable) 신호로 제어되므로, "레벨 트리거 vs 엣지 트리거"로 구분해 이해하는 편이 정확합니다.
동작 원리 한눈에 보기 (D 래치)
| Enable | 동작 | 출력 Q |
|---|---|---|
| 1 (활성) | 투명(transparent) | 입력 D를 그대로 따라감 |
| 0 (비활성) | 유지(hold) | 직전 값을 기억 |
그래서 enable이 켜진 동안 입력에 glitch가 생기면 그대로 출력에 전달됩니다. 플립플롭은 엣지 순간에만 값을 받아서 그 밖의 구간에서 생기는 glitch의 영향을 받지 않습니다.
Latch vs Flip-Flop 비교
| 구분 | Latch | Flip-Flop |
|---|---|---|
| 트리거 방식 | 레벨(enable) | 엣지(클럭 상승/하강) |
| 입력 반영 시점 | enable이 켜진 동안 계속 | 엣지 순간 한 번 |
| glitch 영향 | enable 구간에서 전달될 수 있음 | 엣지 외 구간의 glitch는 무시 |
| 구조 | 단일 저장 소자 | 보통 두 개의 래치(master–slave)로 구성 |
| 면적·전력 | 일반적으로 작음 | 상대적으로 큼 |
| 타이밍 분석 | time borrowing 가능, 분석이 복잡 | 엣지 기준이라 단순 |
| 주 용도 | 클럭 게이팅 셀(ICG), 고속 설계 | 일반적인 동기식 레지스터 |
플립플롭은 래치 두 개로 만든다
상승 엣지 D 플립플롭은 master 래치와 slave 래치를 직렬로 연결한 구조로 이해할 수 있습니다. 클럭이 low인 동안은 master가 입력을 받아들이고(투명), 클럭이 high로 바뀌는 순간 master는 값을 잠그고 slave가 열려 그 값을 출력으로 내보냅니다. 두 래치가 동시에 열리지 않기 때문에 엣지 순간에만 값이 바뀌는 효과가 납니다.
Time borrowing이란?
래치는 enable이 켜진 동안 입력이 통과하기 때문에, 앞 단 경로가 조금 느려도 다음 단에서 남는 시간을 빌려 쓸 수 있습니다. 이를 time borrowing이라고 하며, 고속 설계에서 래치를 쓰는 이유 중 하나입니다. 반대로 타이밍 분석이 복잡해지는 단점이 있습니다.
RTL에서 의도하지 않은 래치가 생기는 경우
Verilog에서 if나 case의 모든 분기에서 값을 지정하지 않으면 합성 툴이 이전 값을 유지하는 래치를 만듭니다(inferred latch). 의도한 설계가 아니라면 모든 분기에 값을 할당하거나 default를 작성해야 합니다.
// 의도치 않은 래치가 생기는 예: en이 0일 때 q에 대한 할당이 없음 always @(*) begin if (en) q = d; end // 해결: 모든 경우에 값을 지정 always @(*) begin if (en) q = d; else q = 1'b0; end
Setup / Hold와의 관계
플립플롭은 클럭 엣지 전후로 setup time과 hold time을 만족해야 합니다. 자세한 내용은 Setup Time과 Hold Time 총정리에서 정리했습니다. 래치는 enable이 닫히는 엣지를 기준으로 setup/hold를 확인합니다.
자주 묻는 질문
Q. 래치와 플립플롭 중 무엇을 써야 하나요?
일반적인 동기식 설계에서는 타이밍 분석이 단순하고 glitch에 강한 플립플롭을 기본으로 씁니다. 래치는 면적·성능 최적화나 클럭 게이팅 같은 특정 목적에서 의도적으로 사용합니다.
Q. 플립플롭은 왜 glitch에 강한가요?
엣지 순간의 입력만 받아들이기 때문에, 엣지가 아닌 구간에서 생기는 입력 변화는 출력에 영향을 주지 않습니다. 단, 엣지 주변의 setup/hold 구간에서 입력이 바뀌면 위반이 생깁니다.
Q. 래치가 싫은데 코드에 생겼다면?
합성 리포트의 latch 관련 경고를 확인하고, 조건문의 모든 분기에 값이 할당되는지 점검하세요.
'반도체 공정 및 설계 > ASIC 설계' 카테고리의 다른 글
| CTS (Clock Tree Synthesis) (3) | 2024.04.12 |
|---|---|
| Setup Time과 Hold Time 총정리 | 위반(violation) 원인과 해결 방법 (1) | 2024.04.12 |
| 논리게이트 총정리 | AND·OR·NOT·NAND·NOR·XOR 진리표와 CMOS 구현 차이 (0) | 2023.07.25 |
| target library와 link library 차이 | Design Compiler 라이브러리 설정 총정리 (2) | 2023.07.25 |
| ASIC DEF·LEF 차이와 RTL·Netlist 차이 총정리 | P&R 입력·출력 파일 한눈에 (0) | 2023.07.24 |