2026. 4. 16. 23:29ㆍAMBA
ARM SoC 설계에서 저전력은 선택이 아니라 필수다. 스마트폰부터 데이터센터까지, 전력 소모를 줄이지 못하면 배터리 수명과 발열 문제로 직결된다. ARM은 이를 위한 표준 인터페이스를 AMBA Low Power Interface Specification에 정의했고, 그 핵심 중 하나가 Q Channel이다.
이 글에서는 Q Channel이 무엇인지, 신호 구성은 어떻게 되는지, 핸드쉐이크 프로토콜은 어떻게 동작하는지를 처음 접하는 사람도 이해할 수 있게 풀어서 설명한다.
Q Channel이란?
Q Channel은 ARM AMBA 5 Low Power Interface Specification에 정의된 저전력 핸드쉐이크 인터페이스다. SoC 안에서 Power Management Unit(PMU) 같은 전력 관리 주체가 특정 IP나 서브시스템에게 "지금 저전력 상태로 들어가라"고 요청할 때 사용한다.
쉽게 비유하면 이렇다. 사무실 관리자(PMU)가 퇴근 후 직원(IP)에게 "불 꺼도 돼?"라고 묻는 것이다. 직원이 "다 끝났어요"라고 하면 불을 끄고(power gating / clock gating), "아직 일하고 있어요"라고 하면 끄지 않는다. Q Channel은 이 대화를 하드웨어 신호로 표현한 것이다.
Q Channel을 사용하면 PMU가 강제로 전원을 차단하지 않고 IP가 안전하게 준비된 시점에 저전력 상태로 전환할 수 있다. 데이터 손실 없이 안전한 전력 전환이 핵심이다.
Q Channel 신호 구성
Q Channel은 총 4개의 신호로 구성된다. 방향에 주의해야 한다.
| 신호명 | 방향 | 활성 레벨 | 설명 |
| QREQN | PMU → IP | Active Low | 저전력 상태 진입 요청. Low로 떨어지면 "저전력 모드로 들어가라"는 요청 |
| QACCEPTN | IP → PMU | Active Low | 요청 수락. Low로 떨어지면 "준비됐다, 저전력 상태에 진입했다"는 응답 |
| QDENY | IP → PMU | Active High | 요청 거부. High로 올라가면 "지금은 저전력 모드 불가, 아직 바쁘다"는 응답 |
| QACTIVE | IP → PMU | Active High | IP 활성 상태 표시. High면 "현재 트랜잭션 처리 중", Low면 "유휴 상태" |
N이 붙은 신호(QREQN, QACCEPTN)는 Active Low, 즉 0이 의미 있는 상태다. QDENY와 QACTIVE는 Active High, 즉 1이 의미 있는 상태다. 처음 보면 헷갈리니 이 점을 먼저 짚고 넘어가야 한다.
상태 정의
Q Channel 인터페이스는 크게 4가지 상태로 동작한다.
| 상태 | QREQN | QACCEPTN | QDENY | 설명 |
| RUN | 1 (deasserted) | 1 (deasserted) | 0 | 정상 동작 상태. IP가 자유롭게 동작 중 |
| REQUEST | 0 (asserted) | 1 | 0 | PMU가 저전력 요청을 보낸 상태. IP의 응답을 기다리는 중 |
| STOPPED | 0 (asserted) | 0 (asserted) | 0 | IP가 저전력 상태에 진입 완료. Clock/Power 차단 가능한 시점 |
| DENIED | 0 (asserted) | 1 | 1 | IP가 요청을 거부한 상태. PMU는 요청을 철회해야 함 |
핸드쉐이크 프로토콜 - Accept 시나리오
IP가 저전력 요청을 수락하는 가장 기본적인 흐름이다. IP가 처리 중인 트랜잭션을 모두 마무리하고 준비되면 수락한다.
흐름도
RUN 상태
QREQN=1, QACCEPTN=1, QDENY=0, QACTIVE=1(or 0)
Step 1: PMU가 QREQN을 Low로 내림 - 저전력 진입 요청
↓
REQUEST 상태
QREQN=0, QACCEPTN=1, QDENY=0
Step 2: IP가 진행 중인 트랜잭션 마무리 - QACTIVE=0으로 내림
↓
Step 3: IP가 QACCEPTN을 Low로 내림 - 수락 응답
↓
STOPPED 상태
QREQN=0, QACCEPTN=0, QDENY=0, QACTIVE=0
[PMU가 클럭 게이팅 or 전원 차단 수행]
Step 4: PMU가 복구 시 QREQN을 High로 올림 - 복귀 요청
↓
Step 5: IP가 QACCEPTN을 High로 올림 - 정상 동작 재개
↓
RUN 상태 복귀
핵심 규칙
QACCEPTN을 Low로 내리기 전에 반드시 QACTIVE가 Low 상태여야 한다. QACTIVE가 High인 상태에서 QACCEPTN을 내리는 것은 프로토콜 위반이다. IP가 아직 트랜잭션을 처리하는 도중에 "저전력 들어갔다"고 거짓말하는 것이기 때문이다.
또한 STOPPED 상태에서 PMU가 QREQN을 High로 올리기 전까지, IP는 절대 QACCEPTN을 먼저 High로 올려서는 안 된다. PMU의 신호를 따라가는 것이 원칙이다.
핸드쉐이크 프로토콜 - Deny 시나리오
IP가 처리해야 할 작업이 남아서 지금 당장 저전력 상태로 들어갈 수 없는 경우다. IP는 QDENY를 High로 올려서 요청을 거부한다.
흐름도
RUN 상태
QREQN=1, QACCEPTN=1, QDENY=0
Step 1: PMU가 QREQN을 Low로 내림 - 저전력 진입 요청
↓
REQUEST 상태
QREQN=0, QACCEPTN=1, QDENY=0
Step 2: IP가 QDENY를 High로 올림 - "지금은 불가" 거부 응답
↓
DENIED 상태
QREQN=0, QACCEPTN=1, QDENY=1
Step 3: PMU가 거부를 인지하고 QREQN을 High로 올림 - 요청 철회
↓
Step 4: IP가 QDENY를 Low로 내림 - 거부 해제
↓
RUN 상태 복귀
QREQN=1, QACCEPTN=1, QDENY=0
핵심 규칙
QACCEPTN과 QDENY는 동시에 활성화(asserted)될 수 없다. 수락과 거부가 동시에 발생하는 것은 논리적으로 불가능하다. 설계 시 이 두 신호가 동시에 asserted되지 않도록 반드시 보장해야 한다.
Deny 이후 PMU는 잠시 후 다시 요청을 시도할 수 있다. 언제 재시도할지는 PMU의 정책(policy)에 달려 있다.
타이밍 웨이브폼으로 이해하기
Accept 시나리오 웨이브폼
Clock __|H|_|H|_|H|_|H|_|H|_|H|_|H|_|H|_|H|_|H|_
QREQN HHHHHHH|_________________________|HHHHHHHHHH
PMU request PMU deassert
QACTIVE HHHHHHHHHHHHHHH|_______________________HHHHH
IP completes txn
QACCEPTN HHHHHHHHHHHHHHHHHHHHH|____________|HHHHHHHH
IP accepts IP exits
QDENY __________________________________________________
(항상 Low - deny 없음)
Deny 시나리오 웨이브폼
Clock __|H|_|H|_|H|_|H|_|H|_|H|_|H|_|H|_|H|_
QREQN HHHHHHH|_____________|HHHHHHHHHHHH
PMU request PMU cancels
QDENY _______________|HHHHHH|______________
deny deny released
QACCEPTN HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
(항상 High - accept 없음)
Q Channel vs P Channel
ARM AMBA Low Power Interface에는 Q Channel 외에 P Channel도 있다. 둘 다 저전력 핸드쉐이크 인터페이스지만 용도와 복잡도가 다르다.
| 항목 | Q Channel | P Channel |
| 용도 | 단순 ON/OFF 전력 제어 | 다중 전력 상태 제어 (복잡한 파워 도메인) |
| 전력 상태 수 | 2가지 (RUN / STOPPED) | 최대 16가지 (인코딩된 상태값 전달) |
| 신호 복잡도 | 단순 (4신호) | 복잡 (버스 폭 포함, 다수의 신호) |
| 주요 사용처 | Clock gating, 간단한 Power gating | DVFS, Retention, 복합 Power State 관리 |
| 구현 난이도 | 낮음 | 높음 |
간단한 IP의 Clock gating 제어에는 Q Channel로 충분하다. 복잡한 retention 상태나 DVFS(Dynamic Voltage and Frequency Scaling)가 필요한 경우에는 P Channel을 사용한다.
실제 SoC에서의 활용
실제 ARM Cortex 계열 프로세서나 GPU IP는 Q Channel을 통해 외부 PMU와 연결된다. 예를 들어 Cortex-M 시리즈에는 SLEEPING, SLEEPDEEP 신호와 함께 Q Channel이 제공되어 PMU가 코어 상태에 따라 Clock gating을 자동으로 제어할 수 있다.
1. Clock Gating 제어
IP가 유휴 상태일 때 PMU가 QREQN을 asserted, IP가 QACCEPTN을 asserted하면 PMU가 해당 IP의 클럭을 차단한다. STOPPED 상태에서 클럭이 꺼진다.
2. Power Gating 제어
STOPPED 상태 진입 후 PMU가 파워 스위치를 off한다. 이때 retention register에 상태를 저장하는 절차가 선행돼야 한다.
3. Subsystem 전력 제어
오디오 서브시스템, 카메라 ISP, DSP 등 특정 기능 블록 전체에 Q Channel을 연결해서 사용하지 않을 때 전원을 끄는 방식으로 사용한다.
설계 시 주의사항
1. QACTIVE 관리
QACTIVE는 IP 내부의 모든 활성 트랜잭션을 정확히 반영해야 한다. AXI outstanding transaction, internal pipeline, pending interrupt 등 모든 요소를 고려해야 한다. QACTIVE가 너무 일찍 내려가면 데이터 손실이 발생한다.
2. 비동기 도메인 처리
Q Channel은 서로 다른 Clock Domain 사이에서 사용되는 경우가 많다. PMU와 IP가 다른 클럭을 사용한다면 각 신호에 CDC(Clock Domain Crossing) 처리를 적용해야 한다.
3. QACCEPTN / QDENY 상호 배타성
두 신호가 동시에 asserted되지 않도록 RTL 레벨에서 assert 구문으로 검증해두는 것이 좋다.
// Q Channel 프로토콜 위반 체크 예시 (SVA)
assert property (@(posedge clk)
!(~qacceptn && qdeny))
else $error("Q Channel: QACCEPTN and QDENY both asserted - protocol violation");
assert property (@(posedge clk)
(~qacceptn |-> ~qactive))
else $error("Q Channel: QACCEPTN asserted while QACTIVE is high - protocol violation");
4. Reset 처리
Reset 이후 초기 상태는 RUN 상태(QREQN=1, QACCEPTN=1, QDENY=0)가 돼야 한다. 리셋 동작 중 Q Channel 신호가 잘못된 값을 유지하지 않도록 명확히 처리해야 한다.
정리
Q Channel은 4개의 신호로 구성된 단순하지만 중요한 저전력 핸드쉐이크 프로토콜이다.
| 항목 | 내용 |
| 목적 | PMU와 IP 간의 안전한 저전력 상태 전환 협상 |
| 신호 구성 | QREQN (요청), QACCEPTN (수락), QDENY (거부), QACTIVE (활성 표시) |
| Accept 조건 | QACTIVE=0이 된 후 QACCEPTN을 Low로 내림 |
| Deny 조건 | QDENY를 High로 올림, PMU가 QREQN을 철회해야 종료 |
| 설계 주의사항 | QACCEPTN과 QDENY 상호 배타성, CDC 처리, QACTIVE 정확성 |
Q Channel을 처음 보면 Active Low/High 신호 혼용 때문에 헷갈리지만, 원칙만 기억하면 된다. "QREQN이 내려오면 요청, QACCEPTN이 내려가면 수락, QDENY가 올라가면 거부." 이 세 가지가 전부다.