Synopsys® 설계 제약(SDC) set_multicycle_path 및 get_fanouts 명령을 사용하면 활성화 레지스터를 기반으로 멀티사이클 예외를 만들 수 있습니다.
그림 1은 레지스터 enable_reg 등록 din_a_reg[7.0], din_b_reg[7.0], din_x_reg[7.0], din_y_reg[7.0], a_times_b 및 x_times_y등록할 수 있는 활성화 신호를 만드는 데 사용되는 간단한 회로를 보여줍니다.
활성화 레지스터 enable_reg 레지스터의 클럭 기간의 2배인 활성화 펄스를 생성하며, 이 때문에 올바른 분석을 위해 멀티사이클 예외를 적용해야 합니다. 레지스터 enable_reg 공급되는 활성화 기반 레지스터에 2의 멀티사이클 설정과 1의 멀티사이클 홀드 를 적용해야 합니다. 다중 사이클 예외는 대상 레지스터가 enable_reg의해 제어되는 등록-등록 경로에만 적용됩니다.
이를 달성하려면 모든 활성화 기반 레지스터에 set_multicycle_path 예외를 적용할 수 있습니다. 모든 활성화 기반 레지스터를 지정해야 하기 때문에 이 방법은 일반적으로 지루할 수 있습니다. 또는 set_multicycle_path 및 get_fanouts 조합은 다음과 같이 사용할 수 있습니다.
활성화된 대상 레지스터에 2의 멀티사이클 #Setup
set_multicycle_path 2 -to [get_fanouts [get_pins enable_reg|q*] \
-through [get_pins -hierarchical *|*ena*]] -end -setup
활성화된 대상 레지스터에 1의 멀티사이클 #Hold
set_multicycle_path 1 -to [get_fanouts [get_pins enable_reg|q*] \
-through [get_pins -hierarchical *|*ena*]] -end –hold
set_multicycle_path 예외 대상은 레지스터의 활성화 포트를 공급하는 레지스터 reg_en 모든 팬아웃으로 제한되며, 다음 옵션으로 수행됩니다.
[get_fanouts [get_pins enable_reg|q*] -through [get_pins -hierarchical *|*ena*]]
표 1은 멀티사이클 예외가 적용된 후 설계에 있는 모든 활성화 기반 레지스터-등록 경로의 새로운 설정 및 보유 관계를 보여줍니다.
표 1. 활성화 기반 레지스터에 대한 관계 설정 및 보류
소스 레지스터 |
대상 등록 |
설정 관계 |
관계 유지 |
---|---|---|---|
din_a[*] |
din_a_reg[*] |
2배(래치 에지 시간) |
1배(래치 에지 시간) |
din_x[*] |
din_x_reg[*] |
2배(래치 에지 시간) |
1배(래치 에지 시간) |
din_b[*] |
din_b_reg[*] |
2배(래치 에지 시간) |
1배(래치 에지 시간) |
din_y[*] |
din_y_reg[*] |
2배(래치 에지 시간) |
1배(래치 에지 시간) |
fast_mult:mult|* |
a_times_b[*] |
2배(래치 에지 시간) |
1배(래치 에지 시간) |
fast_mult:mult|* |
x_times_y[*] |
2배(래치 에지 시간) |
1배(래치 에지 시간) |
enable_reg |
din_a_reg[*],din_b_reg[*], a_times_b[*],x_times_y[*] |
2배(래치 에지 시간) |
1배(래치 에지 시간) |
표 1에서 레지스터 enable_reg 시작해서 활성화 기반 레지스터에서 끝나는 설정 및 보유 관계가 각각 2와 1임을 알 수 있습니다. 이러한 경로에 설정 및 유지 관계를 수정할 필요가 없는 경우, 다음 멀티사이클 예외를 적용하여 원래 관계를 적용할 수 있습니다.
set_multicycle_path 1 -from [get_pins enable_reg|q*] –end -setup
set_multicycle_path 0 -from [get_pins enable_reg|q*] –end –hold