본문 바로가기

SDC는 전자설계자동화(EDA) 도구에서 디지털 회로 설계의 제약 조건을 지정하는 데 널리 사용되는 형식입니다. 클럭 그룹은 서로 다른 클럭 도메인 간의 적절한 타이밍 분석을 보장하기 위해 중요한 역할을 합니다.

set_clock_groups

set_clock_groups 명령어

set_clock_groups 명령어는 서로 다른 클럭 도메인 간의 관계를 정의하는 데 사용됩니다. 이 명령어는 타이밍 분석 목적으로 클럭 간의 상호 작용을 지정하는 데 사용되며, 관계는 동기(synchronous), 비동기(asynchronous), 또는 배타적(exclusive)일 수 있습니다.

명령어 형식
set_clock_groups -asynchronous -group {클럭1 클럭2} -group {클럭3 클럭4}
주요 옵션
  • -asynchronous: 지정된 클럭 그룹이 서로 비동기적임을 나타냅니다. 비동기 클럭 그룹 간에는 타이밍 분석을 수행하지 않습니다.
  • -exclusive: 지정된 클럭 그룹이 서로 배타적임을 나타냅니다. 즉, 한 그룹의 클럭이 활성화되어 있을 때 다른 그룹의 클럭은 비활성화 상태임을 의미합니다.
  • -synchronous: 지정된 클럭 그룹이 서로 동기적임을 나타냅니다. 동기 클럭 그룹 간에는 타이밍 분석이 수행됩니다.

예시

다음은 set_clock_groups 명령어를 사용하는 몇 가지 예시입니다.

비동기 클럭 그룹 설정

set_clock_groups -asynchronous -group {clkA clkB} -group {clkC clkD}
  • clkAclkB는 같은 그룹에 속하며, clkCclkD는 다른 그룹에 속합니다.
  • 이 두 그룹은 서로 비동기적이므로, 타이밍 분석에서 서로 영향을 받지 않습니다.

배타적 클럭 그룹 설정

set_clock_groups -exclusive -group {clkA clkB} -group {clkC clkD}
  • clkAclkB는 같은 그룹에 속하며, clkCclkD는 다른 그룹에 속합니다.
  • 한 그룹의 클럭이 활성화되어 있을 때 다른 그룹의 클럭은 비활성화 상태입니다.

동기 클럭 그룹 설정

set_clock_groups -synchronous -group {clkA clkB} -group {clkC clkD}
  • clkAclkB는 같은 그룹에 속하며, clkCclkD는 다른 그룹에 속합니다.
  • 이 두 그룹은 서로 동기적이므로, 타이밍 분석에서 서로 영향을 받을 수 있습니다.

멀티라인 입력 예시

클럭 그룹을 멀티라인으로 입력할 때는 다음과 같이 백슬래시(\)를 사용하여 줄 바꿈을 할 수 있습니다.

set_clock_groups -asynchronous \
-group {clkA clkB} \
-group {clkC clkD}

이 명령어는 하나의 연속된 명령어로 처리되며, 각 그룹 간의 비동기 관계를 정의합니다.

이와 같이 set_clock_groups 명령어를 사용하여 클럭 도메인 간의 관계를 명확히 정의할 수 있습니다. 이를 통해 디자인의 타이밍 분석을 보다 정확하게 수행할 수 있습니다.

-asynchronous-exclusive 옵션 차이

-asynchronous 옵션

-asynchronous 옵션은 지정된 클럭 그룹이 서로 비동기적임을 나타냅니다. 비동기 클럭 그룹 간에는 타이밍 분석을 수행하지 않습니다. 이는 서로 다른 클럭 도메인이 독립적으로 작동하며, 클럭 간에 직접적인 타이밍 경로가 없음을 의미합니다.

예시

예를 들어, 두 개의 클럭 clkAclkB가 있고, 이들은 서로 다른 클럭 도메인에 속해 있으며 비동기적입니다.

set_clock_groups -asynchronous -group {clkA} -group {clkB}
  • clkAclkB는 비동기 관계에 있으며, 이들 간의 타이밍 분석은 수행되지 않습니다.
  • clkA 도메인의 플립플롭에서 clkB 도메인의 플립플롭으로 신호가 전달될 때는 비동기 FIFO, 듀얼 클럭 FIFO 등 비동기 설계 기법을 사용해야 합니다.

-exclusive 옵션

-exclusive 옵션은 지정된 클럭 그룹이 서로 배타적임을 나타냅니다. 이는 한 그룹의 클럭이 활성화되어 있을 때 다른 그룹의 클럭은 비활성화 상태임을 의미합니다. 즉, 동시에 활성화되지 않으며, 타이밍 분석에서 그룹 간의 상호 작용이 고려되지 않습니다.

예시

예를 들어, 네 개의 클럭 clkA, clkB, clkC, clkD가 있고, clkAclkB는 한 그룹, clkCclkD는 다른 그룹으로 배타적 관계에 있습니다.

set_clock_groups -exclusive -group {clkA clkB} -group {clkC clkD}
  • clkAclkB는 한 그룹에 속하고, clkCclkD는 다른 그룹에 속합니다.
  • 이 설정은 clkAclkB가 활성화되어 있을 때 clkCclkD는 비활성화 상태임을 의미합니다.
  • 반대로, clkCclkD가 활성화되어 있을 때 clkAclkB는 비활성화 상태입니다.
  • 이들 간의 타이밍 경로는 존재하지 않으며, 타이밍 분석에서 고려되지 않습니다.

차이점 요약

  • -asynchronous:
    • 비동기 관계.
    • 서로 독립적으로 작동하며, 클럭 간에 직접적인 타이밍 경로가 없습니다.
    • 타이밍 분석을 수행하지 않습니다.
    • 주로 비동기 FIFO와 같은 비동기 설계 기법을 사용합니다.
  • -exclusive:
    • 배타적 관계.
    • 한 그룹의 클럭이 활성화되어 있을 때 다른 그룹의 클럭은 비활성화 상태입니다.
    • 그룹 간의 타이밍 경로가 존재하지 않으며, 타이밍 분석에서 고려되지 않습니다.
    • 주로 전력 관리, 모드 전환 등의 상황에서 사용됩니다.

이 두 옵션은 각각 다른 상황에서 사용되며, 설계의 타이밍 분석과 동작을 정확히 정의하는 데 중요한 역할을 합니다.

 

참고 - set_false_path 와 동일

# Clocks A & C are never active when clocks B & D are active
set_clock_groups -exclusive -group {A C} -group {B D}

# Equivalent specification using false paths
set_false_path -from [get_clocks A] -to [get_clocks B]
set_false_path -from [get_clocks A] -to [get_clocks D]
set_false_path -from [get_clocks C] -to [get_clocks B]
set_false_path -from [get_clocks C] -to [get_clocks D]
set_false_path -from [get_clocks B] -to [get_clocks A]
set_false_path -from [get_clocks B] -to [get_clocks C]
set_false_path -from [get_clocks D] -to [get_clocks A]
set_false_path -from [get_clocks D] -to [get_clocks C]

 

B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.