구글 안티그래비티 완전 분석 — 모델·요금제·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...

SDC Clock Constraints: A Guide to create_clock and create_generate_clock

Mastering Clock Constraints: A Deep Dive into create_clock and create_generate_clock in SDC

In the world of digital design, especially when dealing with complex integrated circuits, precise timing is paramount. Static Timing Analysis (STA) relies heavily on accurate clock definitions to ensure that signals propagate correctly and meet timing requirements. System Design Constraints (SDC) provide the language for communicating these timing specifications to synthesis and STA tools. Today, we'll dive into two fundamental SDC commands: create_clock and create_generate_clock.

Understanding the Foundation: create_clock

The create_clock command is your primary tool for defining the fundamental clocks in your design. Think of these as the "master" clocks that drive your system's operations.

Purpose:
create_clock establishes a clock object with defined characteristics like its period and waveform. This information is critical for:
* Timing Analysis: Allowing STA tools to accurately calculate signal delays and identify timing violations.
* Clock Network Optimization: Guiding synthesis and place-and-route tools to build efficient clock trees.
* Timing Graph Construction: Forming the basis for analyzing all timing paths in the design.

Key Parameters:

  • -period <period_value> (Required): This is the most crucial parameter, specifying the clock's period in nanoseconds (ns). For example, -period 10 defines a clock with a 10 ns period (100 MHz frequency).
  • -waveform {<rise_time> <fall_time>} (Optional): This defines the exact timing of the clock's rising and falling edges within its period, also in nanoseconds. The default is a 50% duty cycle, meaning a rising edge at 0.0 ns and a falling edge at period_value / 2 ns. You can specify asymmetrical duty cycles here. For instance, -waveform {0 3} on a 10 ns clock means it rises at 0 ns and falls at 3 ns.
  • <source> (Optional, but common): This specifies the physical port or pin in your design where this clock originates. You'll often see it used with commands like [get_ports CLK_IN] or [get_pins U1/CLK_PIN].
  • -name <clock_name> (Optional, but essential for virtual clocks): Assigns a custom name to the clock. This name is used in subsequent SDC commands. When defining a "virtual clock" (one not physically present in the design but used for external interface timing), -name is used, and <source> is omitted.
  • -add (Optional): Use this if a source already has a clock defined, and you want to add another clock to it.

Example:

# Define a 10ns clock on the input port CLK_IN
create_clock -period 10 [get_ports CLK_IN]

# Define a 6ns clock with a specific waveform on port SYS_CLK_PORT
create_clock -period 6 -waveform {0 3} [get_ports SYS_CLK_PORT]

# Define a virtual clock named EXT_REF_CLK with a 5ns period
create_clock -period 5 -name EXT_REF_CLK

Derived Clocks: create_generated_clock

In modern designs, clocks are rarely just simple square waves. They often go through Phase-Locked Loops (PLLs), clock dividers, multipliers, or multiplexers, creating derived or "generated" clocks. The create_generated_clock command is how you tell the STA tool about these derived clocks.

Purpose:
This command defines a clock whose timing is related to an existing master clock. STA tools use this information to understand the timing relationships between different clock domains, which is critical for analyzing clock domain crossings (CDCs) and ensuring overall design integrity.

Key Parameters and Concepts:

  1. -master_clock <clock>:

    • What it means: When a pin receives multiple clocks (e.g., through a multiplexer), you might need to explicitly tell SDC which master clock is active for a particular generated clock. This parameter specifies that master clock.
    • When to use: Essential when a -source pin has more than one clock feeding into it, and you want to define a generated clock derived from a specific master clock among them. Often used with -add to define multiple generated clocks from the same source pin, each tied to a different master.
    • Example:
      tcl # Assume mux_out_pin can be driven by CLK_A or CLK_B create_generated_clock -name gen_clk_A -source [get_pins mux_out_pin] -master_clock CLK_A [get_pins FF1/Q] create_generated_clock -name gen_clk_B -source [get_pins mux_out_pin] -master_clock CLK_B -add [get_pins FF1/Q]
  2. -edges <edge_list>:

    • What it means: This is a sophisticated way to define the generated clock's waveform by mapping specific edges of the master clock to the rising and falling edges of the generated clock. The master clock edges are numbered sequentially (1st rising, 1st falling, 2nd rising, 2nd falling, etc.).
    • Format: {master_rising_edge_for_gen_rise master_edge_for_gen_fall master_edge_for_next_gen_rise}.
    • When to use: Ideal for complex clocking schemes where simple division/multiplication doesn't suffice, or when you need fine-grained control over the generated clock's pulse shape relative to the master. This parameter often cannot be used with -divide_by or -multiply_by.
    • Example (Clock Division by 2):
      Imagine a master CLK with edges at 0ns (R1), 5ns (F1), 10ns (R2), 15ns (F2), 20ns (R3), etc.
      tcl # Master clock CLK has edges: 1(0ns R), 2(5ns F), 3(10ns R), 4(15ns F), 5(20ns R)... create_generated_clock -name clk_div2_edge -source [get_ports CLK] -edges {1 3 5} [get_pins FF1/Q]
      This generates a clock at FF1/Q that rises with master edge 1 (0ns), falls with master edge 3 (10ns), and rises again with master edge 5 (20ns). This effectively creates a clock with twice the period (half the frequency) of the master.
  3. -divide_by <factor>:

    • What it means: This is a straightforward way to create a slower clock. The generated clock's frequency will be the master clock's frequency divided by <factor>. Consequently, its period will be <factor> times the master clock's period.
    • When to use: When you need a clock that runs at a simple fraction of the master clock's speed.
    • Example:
      tcl create_clock -name CLK_SYS -period 10 [get_ports clk_in] # Create a clock that is half the frequency of CLK_SYS create_generated_clock -name CLK_DIV_2 -source [get_pins clk_in] -divide_by 2 [get_pins reg_div_2/Q]
      This results in CLK_DIV_2 having a 20 ns period.
  4. -multiply_by <factor>:

    • What it means: This creates a faster clock. The generated clock's frequency will be the master clock's frequency multiplied by <factor>, meaning its period is the master clock's period divided by <factor>.
    • When to use: For generating higher-frequency clocks, common with PLLs or frequency synthesizers.
    • Example:
      tcl create_clock -name CLK_MASTER -period 10 [get_ports clk_in] # Create a clock that is twice the frequency of CLK_MASTER create_generated_clock -name CLK_MUL_2 -source [get_pins clk_in] -multiply_by 2 [get_pins pll_out_pin]
      This generates CLK_MUL_2 with a 5 ns period.
  5. -duty_cycle <percent>:

    • What it means: Sets the duty cycle of the generated clock to a specified percentage (0.0 to 100.0). The default is usually 50%.
    • When to use: To define clocks with non-50% duty cycles, which is particularly relevant when using -multiply_by or when the clock generation logic (like a PLL or clock divider circuit) is configured to produce a specific pulse width.
    • Example:
      tcl create_clock -name CLK_IN -period 10 [get_ports clk_in] # Generate a clock with double the frequency and a 25% duty cycle create_generated_clock -name CLK_MUL_2_DC -source [get_ports clk_in] -multiply_by 2 -duty_cycle 25 [get_pins pll_out_pin]
      This creates a clock that is twice as fast as CLK_IN but has a narrower pulse width (25% of its period).

Combining Parameters for Complex Clocks

Many clocking scenarios involve both frequency multiplication/division and specific edge alignments. SDC tools often allow combining these parameters.

Example (Fractional Clock Generation for PLLs):
PLLs and MMCMs frequently generate clocks with fractional frequency relationships.

# Assume CLKIN is the master clock at pin mmcm0/CLKIN
# We want to generate CLKOUT at pin mmcm0/CLKOUT
# which is 4/3 times the frequency of CLKIN.

create_generated_clock -name clk_4_3_ratio \
    -source [get_pins mmcm0/CLKIN] \
    -multiply_by 4 \
    -divide_by 3 \
    [get_pins mmcm0/CLKOUT]

This command elegantly defines a clock clk_4_3_ratio at mmcm0/CLKOUT that is precisely 4/3 times the frequency of the master clock at mmcm0/CLKIN, a common scenario for clock synthesizers.

By mastering create_clock and create_generated_clock, you gain precise control over your design's timing, ensuring your digital systems operate as intended.

References

댓글

이 블로그의 인기 게시물

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

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

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