구글 안티그래비티 완전 분석 — 모델·요금제·CLI 총정리

🚀 구글 안티그래비티(Antigravity) 완전 분석 구글이 2025년 11월 Gemini 3와 함께 공개한 에이전트 퍼스트(agent-first) IDE 안티그래비티는 Claude·GPT·Gemini를 한 도구에서 골라 쓰는 멀티모델 코딩 환경이다. 이 글에서는 ① 지원 모델과 요금제별 사용량의 실체, ② 실사용자 평가, ③ 구글의 방향성, ④ Claude Code와의 비교·연계, ⑤ CLI( agy )로 직접 쓰는 법까지 다섯 갈래를 차례로 정리한다. 자료 간 충돌이 있는 지점은 한쪽으로 단정하지 않고 양쪽을 모두 살려 표기했다. 📅 기준 시점: 2026년 6월 · 프리뷰 단계 정보로 수치는 변동 가능 1. 안티그래비티란 무엇인가 — 기초 정리 안티그래비티는 2025년 7월 구글이 24억 달러 규모 라이선스 계약 으로 영입한 전 Windsurf 팀이 설계를 주도했다. VSCode를 포크한 위에 자율 에이전트 오케스트레이션 계층을 얹은 구조다. 2026년 5월 Google I/O에서 발표된 안티그래비티 2.0 은 데스크탑 앱과 함께 공식 CLI agy 를 처음 공개하며 기존 Gemini CLI의 공식 후계자 자리를 확정했다. 핵심 정체성은 단순 코드 자동완성이 아니라 병렬 에이전트 오케스트레이션 이다. 여러 에이전트가 동시에 — 하나는 API, 하나는 테스트, 또 하나는 프론트엔드 — 작업을 나눠 진행하고, 각 에이전트는 계획·테스트 결과·스크린샷·영상을 담은 Artifact 를 남긴다. "사람이 한 줄씩 승인"하는 방식이 아니라 "에이전트들이 일을 마치고 사람이 사후 검수"하는 모델이다. flowchart TD A([사용자 작업 지시]) --> B[에이전트 A API 구현] A --> C[에이전트 B 테스트 작성] A --> D[에이전트 C UI 생성] B --> E[Artifact 계획·결과·영상] C --> E D --> E...

AXI Burst Transaction의 4KB Boundary 규칙과 Cortex-A MMU 설정 영향 분석

🔧 AXI 프로토콜의 핵심: Burst Transaction과 4KB Boundary 규칙 완벽 가이드

SoC 설계자와 임베디드 엔지니어를 위한 AXI 버스 프로토콜 4KB 주소 경계 규칙의 원리, 위반 사례, 그리고 Cortex-A 환경에서의 실전 해결 방안을 총정리합니다.

📌 AXI 4KB Boundary 규칙이란?

AMBA AXI 스펙(IHI0022)에는 "하나의 Burst Transaction은 4KB(2¹² = 4096 바이트) 주소 경계를 넘어서는 안 된다"는 명시적인 규칙이 존재합니다. 주소값 기준으로 하위 12비트가 0x000으로 정렬되는 지점, 즉 0x1000, 0x2000, 0x3000 등이 바로 4KB 경계입니다.

🤔 왜 하필 4KB인가?

이 제약의 배경에는 두 가지 핵심 이유가 있습니다.

▶ MMU 페이지 단위 일치 — 현대 프로세서(ARMv8-A, x86 등)의 MMU는 최소 페이지 크기를 4KB로 설정합니다. 버스 트랜잭션이 이 단위를 넘으면 페이지 테이블 매핑이 달라질 수 있어 주소 변환에 혼란이 생깁니다.
▶ 슬레이브 주소 공간 보호 — AXI 인터커넥트에서 각 슬레이브에 할당되는 최소 주소 공간이 통상 4KB입니다. 경계를 넘는 Burst는 의도치 않게 다른 슬레이브 영역을 침범하여 데이터 무결성을 파괴할 수 있습니다.
▶ 디코딩 단순화 — 인터커넥트가 주소의 상위 비트만으로 슬레이브를 결정할 수 있어, 트랜잭션 중간에 라우팅 대상이 변경되는 복잡한 상황을 원천 차단합니다.

📊 AXI Burst 유형별 4KB 규칙 적용

AXI 프로토콜은 세 가지 Burst 유형을 정의하며, 각각에 대해 4KB 규칙이 다르게 영향을 미칩니다.

Burst 유형 ARBURST / AWBURST 주소 동작 4KB 위반 가능성
FIXED 2'b00 주소 고정 (FIFO 접근) 없음 ✓
INCR 2'b01 주소 순차 증가 높음 ⚠
WRAP 2'b10 경계에서 시작 주소로 래핑 제한적 (정렬 필수)

INCR Burst가 가장 주의가 필요합니다. 주소가 계속 증가하므로 시작 주소와 전송 길이 조합에 따라 4KB 경계를 넘을 확률이 높습니다. 반면 WRAP Burst는 캐시 라인 페치에 주로 사용되며, 전송 크기가 자연 정렬(Natural Alignment)을 만족해야 하므로 위반 가능성이 상대적으로 낮습니다.

⚠️ 규칙 위반은 어떻게 발생하는가?

이 오류는 주로 하드웨어 마스터(커스텀 DMA 엔진 등)를 직접 설계하거나, 소프트웨어에서 주소 정렬을 고려하지 않고 대량 데이터를 전송할 때 발생합니다.

🔍 실제 위반 시나리오

상황: 32-bit(4-byte) 데이터를 16 beat INCR Burst로 전송 (총 64 bytes)

시작 주소: 0x0FD0

끝 주소: 0x0FD0 + 64 = 0x1010

→ 전송 도중 0x1000 (4KB 경계)을 넘어감!

▼ 4KB Boundary 위반 다이어그램

영역 A (슬레이브 1)
0x0000 ~ 0x0FFF
영역 B (슬레이브 2)
0x1000 ~ 0x1FFF
↑ 4KB Boundary (0x1000)
Burst 시작: 0x0FD0
Burst 끝: 0x1010 ✗

이 경우 AXI 마스터는 반드시 트랜잭션을 두 개로 분할(Split)해야 합니다. 하드웨어 로직이 이를 처리하지 못하고 단일 ARLEN/AWLEN 값으로 전송을 시도하면, 인터커넥트 레벨에서 SLVERR(Slave Error) 또는 DECERR(Decode Error)가 발생하며 시스템이 Hang될 수 있습니다.

✅ 올바른 Split 처리 방법

Burst 1 0x0FD0 → 0x0FFF (12 beats, 48 bytes)
Burst 2 0x1000 → 0x100F (4 beats, 16 bytes)

📐 경계 위반 여부 판단 공식

// 경계 위반 체크 로직
End_Address = Start_Address + (AxLEN + 1) × AxSIZE_bytes - 1
Violation = (Start_Address[31:12] != End_Address[31:12])
// 최대 허용 beat 수 계산
Max_Beats = (0x1000 - (Start_Address & 0xFFF)) / AxSIZE_bytes

🧠 Cortex-A MMU 환경과 Single Transaction 현상

Cortex-A 프로세서에서 MMU를 켜고 특정 메모리 영역을 설정했을 때, 예상과 달리 Burst가 발생하지 않고 Single 전송만 나오는 현상이 보고됩니다. 이는 오류가 아니라 메모리 속성(Memory Attribute) 설정에 따른 정상 동작인 경우가 대부분입니다.

ARMv8-A 메모리 타입과 Burst 동작 비교

메모리 타입 Gathering Reordering Burst 가능 용도
Device-nGnRnE 불가 MMIO 레지스터
Device-nGnRE 불가 디바이스 접근
Device-GRE 가능 DMA 영역
Normal (NC) 가능 비캐시 메모리
Normal (WB) 최적 일반 메모리

핵심은 'Gathering' 속성입니다. Device-nGnRnE에서 'nG(No Gathering)'는 여러 개의 작은 쓰기 요청을 하나의 큰 Burst로 묶는 것을 금지합니다. 따라서 이 속성이 적용된 영역에서는 memcpy()를 호출하더라도 모든 전송이 Single Transaction으로 나가게 됩니다.

💡 실무 팁: DMA 버퍼 영역에 Burst 전송이 필요하다면 해당 영역을 Normal Memory (Non-cacheable 또는 Write-Back)로 설정하세요. MMIO 레지스터와 DMA 버퍼의 메모리 속성을 분리하는 것이 성능 최적화의 핵심입니다.

🛠️ 실전 진단 및 솔루션 가이드

Burst가 의도대로 동작하지 않거나 4KB 경계 오류가 의심될 때, 다음 4단계로 체계적으로 원인을 파악하세요.

Step 1 페이지 테이블 설정 확인 (MAIR / PTE)

해당 메모리 영역의 MAIR(Memory Attribute Indirection Register) 인덱스와 PTE 속성을 확인하세요. 성능이 중요한 DMA 영역이라면 Device 타입 대신 Normal Memory (Non-cacheable)로 설정해야 Write Combining이 허용됩니다.

Step 2 데이터 정렬(Alignment) 검사

DMA 컨트롤러에 넘기는 시작 주소가 전송 크기의 배수인지 확인하세요. 가급적 주소를 4KB 단위로 정렬하거나, 전송 길이가 경계를 넘지 않도록 remaining = 0x1000 - (addr & 0xFFF)로 사전 계산하여 Split 로직을 구현해야 합니다.

Step 3 버스 프로토콜 분석기 활용

시스템이 멈추면 ILA(Integrated Logic Analyzer) 또는 외부 프로토콜 분석기로 ARADDR/AWADDR 값과 AxLEN 조합을 모니터링하세요. Address + (Len+1) × Size가 4KB 경계를 넘는지 RTL 시뮬레이션에서 assertion으로 검증하는 것을 권장합니다.

Step 4 가상 주소 vs 물리 주소 점검

MMU가 활성화된 환경에서 소프트웨어는 가상 주소를 다루지만, AXI 버스로 나가는 것은 물리 주소입니다. 가상 주소에서 연속적인 영역이 물리 주소에서는 4KB 페이지 단위로 불연속적일 수 있습니다. 이 경우 Scatter-Gather DMA 기능을 사용하여 페이지별 디스크립터를 구성해야 합니다.

🚨 현업에서 자주 발생하는 실수 TOP 5

① 비정렬 시작 주소 사용 — malloc() 반환 주소를 그대로 DMA에 전달하면 4-byte 정렬은 되지만 4KB 정렬은 보장되지 않습니다. posix_memalign()이나 aligned_alloc()을 사용하세요.
② Device 메모리 속성으로 DMA 버퍼 설정 — MMIO 레지스터와 DMA 버퍼를 같은 Device 타입으로 설정하면 Burst가 나가지 않아 성능이 수십 배 저하됩니다.
③ WRAP Burst에서 비자연 정렬 사용 — WRAP Burst의 시작 주소는 전송 크기(AxSIZE × AxLEN)의 배수여야 합니다. 이를 위반하면 undefined behavior가 발생합니다.
④ AxLEN 최대값 착각 — AXI3에서는 최대 16 beats(AxLEN=15)까지만 지원하고, AXI4부터 256 beats(AxLEN=255)까지 확장되었습니다. 프로토콜 버전에 따른 제한을 확인하세요.
⑤ 시뮬레이션에서만 검증 — RTL 시뮬레이션에서는 통과했지만, 실제 FPGA/ASIC 환경에서 인터커넥트 설정이 다르면 런타임 에러가 발생할 수 있습니다. 프로토콜 체커 IP를 인터커넥트에 삽입하여 실시간 검증하는 것을 추천합니다.

🔑 AXI3 vs AXI4: 주요 차이점

4KB Boundary 규칙은 AXI3과 AXI4 모두에서 동일하게 적용되지만, 프로토콜 버전에 따라 Burst 관련 스펙이 다릅니다.

항목 AXI3 AXI4
최대 Burst Length 16 beats 256 beats
AxLEN 비트 수 4-bit (0~15) 8-bit (0~255)
4KB 위반 위험도 중간 높음
Write Interleaving 지원 제거됨

AXI4에서 Burst Length가 256까지 확장되면서, 단일 Burst가 최대 256 × 128 = 32KB(128-byte 데이터 폭 기준)까지 전송할 수 있게 되었습니다. 이에 따라 4KB 경계를 넘을 가능성이 크게 증가했고, Split 로직의 구현이 더욱 중요해졌습니다.

📝 결론: 안정적인 SoC 설계를 위한 체크리스트

AXI 프로토콜의 4KB Boundary 규칙은 시스템의 확장성과 슬레이브 독립성을 보장하는 최소한의 안전장치입니다. 이를 준수하기 위한 핵심 체크리스트를 정리합니다.

✅ 커스텀 DMA 마스터 설계 시 4KB Split 로직을 필수 포함
✅ 페이지 테이블에서 DMA 버퍼 영역을 Normal Memory로 설정
✅ 소프트웨어에서 DMA 시작 주소의 4KB 정렬 보장
✅ RTL 시뮬레이션에 4KB Boundary Assertion 추가
✅ MMU 환경에서 가상 vs 물리 주소 불일치 고려
✅ AXI 프로토콜 버전(AXI3/AXI4)에 따른 AxLEN 최대값 확인
✅ FPGA 프로토타입에 AXI Protocol Checker IP 삽입하여 실시간 검증

특히 Cortex-A 환경에서는 MMU 설정 하나만으로도 버스 전송 효율이 극명하게 달라질 수 있습니다. 메모리 맵(Memory Map) 설계 시 각 영역의 속성을 신중히 결정하고, 하드웨어의 Split 로직소프트웨어의 메모리 속성 관리가 조화를 이루는 것이 안정적인 SoC의 핵심입니다.

📚 References

→ AMBA AXI and ACE Protocol Specification (ARM IHI0022)
→ Arm Architecture Reference Manual for A-profile Architecture (ARM DDI0487)
→ ARM CoreLink Interconnect Technical Reference Manual

본 콘텐츠는 공개된 기술 문서와 실무 경험을 바탕으로 작성되었습니다. 정확한 스펙은 ARM 공식 문서를 참조하시기 바랍니다.

📄 Raw Data
### AXI 프로토콜의 핵심: Burst Transaction과 4KB Boundary 규칙 완벽 가이드

임베디드 시스템과 SoC(System on Chip) 설계에서 데이터 전송 효율을 극대화하기 위해 사용하는 **AXI(Advanced eXtensible Interface) 프로토콜**은 매우 정교한 규칙들을 가지고 있습니다. 그중에서도 개발자들이 가장 흔히 접하면서도 실수하기 쉬운 제약 사항이 바로 **'4KB Address Boundary'** 규칙입니다. 이번 포스팅에서는 이 규칙의 정의와 위반 시 발생하는 문제, 그리고 Cortex-A 환경에서의 실질적인 해결 방안을 심층적으로 분석해 보겠습니다.

---

### 1. AXI 4KB Boundary 규칙이란 무엇인가?

AMBA AXI 스펙에 따르면, **"하나의 Burst Transaction은 4KB 주소 경계를 넘어서는 안 된다"**는 명시적인 규칙이 존재합니다. 여기서 4KB는 $2^{12}$ 바이트를 의미하며, 주소값으로 따지면 하위 12비트가 `000`으로 끝나는 지점(예: `0x1000`, `0x2000`, `0x3000` 등)입니다.

**왜 하필 4KB인가?**
그 이유는 메모리 관리와 슬레이브(Slave) 장치의 보호에 있습니다. 현대적인 시스템에서 대부분의 메모리 관리 장치(MMU)는 최소 페이지 단위를 **4KB**로 설정합니다. 또한, AXI 인터커넥트(Interconnect) 상에서 각 슬레이브 장치들에 할당되는 최소 주소 공간 역시 보통 4KB 단위입니다. 

만약 하나의 Burst가 이 경계를 넘어가게 되면, 데이터 전송 중에 의도치 않게 **A 슬레이브에서 B 슬레이브로 접근 대상이 바뀌는 현상**이 발생할 수 있습니다. 이는 시스템 버스 프로토콜의 복잡도를 기하급수적으로 증가시키고 데이터 무결성을 파괴하기 때문에 프로토콜 차원에서 금지하고 있는 것입니다.

---

### 2. 규칙 위반은 어떻게 발생하는가? (예시와 상황)

이 오류는 주로 하드웨어 마스터(DMA 등)를 직접 설계하거나, 소프트웨어에서 주소 정렬(Alignment)을 고려하지 않고 대량의 데이터를 전송할 때 발생합니다.

**실제 발생 예시:**
*   **상황:** 32-bit (4-byte) 데이터를 16번 보내는 INCR Burst를 수행하려고 합니다. (Total 64 bytes)
*   **시작 주소:** `0x0FD0`
*   **계산:** `0x0FD0`에서 64바이트를 더하면 `0x1010`이 됩니다.
*   **결과:** 전송 도중에 `0x1000`이라는 4KB 경계를 통과하게 됩니다.

이 경우, AXI 마스터는 `0x0FD0`부터 `0x0FFF`까지만 전송하는 첫 번째 Burst와, `0x1000`부터 시작하는 두 번째 Burst로 **트랜잭션을 쪼개서(Split)** 보내야 합니다. 만약 하드웨어 로직이 이를 처리하지 못하고 단일 `ARLEN`이나 `AWLEN` 값으로 전송을 시도하면 인터커넥트 레벨에서 **Slave Error(SLVERR)** 혹은 **Decode Error(DECERR)**가 발생하며 시스템이 정지(Hang)될 수 있습니다.

---

### 3. Cortex-A MMU 환경과 Single Transaction 현상

사용자가 지적한 것처럼, Cortex-A 프로세서에서 MMU를 켜고 특정 메모리 영역을 설정했을 때 Burst가 일어나지 않고 단일(Single) 전송만 발생하는 경우가 있습니다. 이는 오류라기보다는 **메모리 속성(Memory Attribute) 설정에 따른 정상적인 동작**인 경우가 많습니다.

**원인 분석:**
Cortex-A의 페이지 테이블 엔트리(PTE)에서 해당 영역이 **Device Memory**로 설정되어 있다면, CPU는 데이터의 순서와 기록 시점을 엄격하게 제어합니다. 특히 다음과 같은 설정에서 문제가 됩니다:
1.  **Device-nGnRnE (Strongly Ordered):** No Gathering, No Reordering, No Early Write Acknowledgement. 여기서 **'No Gathering'**이 핵심입니다. 여러 개의 작은 쓰기 요청을 하나의 큰 Burst로 묶지 않겠다는 의미이므로, 무조건 Single Transaction으로 나갑니다.
2.  **Alignment Fault:** 주소 정렬이 맞지 않는 상태에서 Normal Memory가 아닌 영역에 접근하면 프로세서가 이를 쪼개서 처리하거나 예외를 발생시킵니다.

---

### 4. 문제 해결을 위한 진단 및 솔루션 가이드

만약 의도한 대로 Burst가 동작하지 않거나 4KB 경계 오류가 의심된다면 다음 순서로 원인을 파악하고 해결해야 합니다.

**단계 1: 페이지 테이블 설정 확인 (MAIR/PTE)**
가장 먼저 해당 메모리 영역의 속성을 확인하세요. 성능이 중요하다면 `Device` 타입 대신 **Normal Memory (Non-cacheable)** 타입을 사용해야 합니다. Normal Memory 속성에서는 프로세서가 여러 전송을 묶어 Burst로 보낼 수 있는 'Write Combining'이 허용됩니다.

**단계 2: 데이터 정렬(Alignment) 검사**
소프트웨어에서 DMA 컨트롤러에 주소를 넘길 때, 시작 주소가 전송 크기의 배수인지 확인하십시오. 가급적 **주소를 4KB 단위로 정렬**하거나, 전송 길이가 4KB 경계를 넘지 않도록 소프트웨어 레벨에서 `Transfer_Size`를 계산하여 두 번의 DMA 호출로 나누는 로직을 추가해야 합니다.

**단계 3: 버스 프로토콜 분석기 활용**
시스템이 멈춘다면 ILA(Integrated Logic Analyzer)나 외부 프로토콜 분석기를 통해 `ARADDR` 혹은 `AWADDR` 값과 `ALEN`의 조합을 모니터링하세요. `Address + (Len * Size)`가 4KB 경계를 넘는지 체크하는 로직을 시뮬레이션에서 검증하는 것이 필수적입니다.

**단계 4: 가상 주소 vs 물리 주소**
MMU가 켜진 경우 소프트웨어는 가상 주소를 보지만, AXI 버스로 나가는 것은 물리 주소입니다. 가상 주소에서는 연속적이어도 물리 주소에서 4KB 페이지가 불연속적일 수 있습니다. 이 경우 Scatter-Gather DMA 기능을 사용하여 물리적으로 파편화된 메모리에 대응해야 합니다.

---

### 결론: 안정적인 SoC 설계를 위한 조언

AXI 프로토콜의 4KB Boundary 규칙은 시스템의 확장성과 독립성을 보장하기 위한 최소한의 안전장치입니다. 이를 준수하기 위해서는 **하드웨어 설계 단계에서의 Split 로직 구현**과 **소프트웨어 단계에서의 메모리 속성 및 정렬 관리**가 조화를 이루어야 합니다. 특히 Cortex-A 환경에서는 MMU 설정 하나만으로도 버스 전송 효율이 극명하게 갈릴 수 있으므로, 메모리 맵(Memory Map) 설계 시 각 영역의 속성을 신중히 결정하시기 바랍니다.
---

## References

- [AMBA AXI and ACE Protocol Specification](https://developer.arm.com/documentation/ihi0022/latest/)
- [Arm Architecture Reference Manual for A-profile architecture](https://developer.arm.com/documentation/ddi0487/latest/)

댓글

이 블로그의 인기 게시물

Vim 9.2 릴리즈 총정리: 더 빠르고 강력해진 텍스트 편집의 제왕

폐쇄망 SoC 설계자를 위한 가볍고 빠른 Vim 최적화 가이드

에이전트 시대를 위한 터미널 cmux 가이드: 설치부터 AI 활용까지