SDC를 통한 ASIC 타이밍 제약 : 멀티 플렉스 클록을 올바르게 지정하는 방법?


10

소개

SDC 형식의 타이밍 제약 조건을 올바르게 작성하는 방법에 대한 인터넷 및 일부 교육 과정에서 여러 가지 상충되거나 불완전한 정보를 발견 한 후 EE 커뮤니티에 일반적인 클럭 생성 구조에 대한 도움을 요청하고 싶습니다.

나는 ASIC 또는 FPGA에서 특정 기능을 구현 하는 방법에 차이가 있다는 것을 알고 있지만 (두 가지와 함께 작업 한) 주어진 구조 의 타이밍을 제한하는 일반적이고 올바른 방법이 있어야한다고 생각 합니다. 기본 기술-내가 틀렸다면 알려주십시오.

SDC 파서 소스 코드를 제공하는 Synopsys에도 불구하고 다른 벤더의 구현 및 타이밍 분석 도구마다 약간의 차이가 있지만, 주로 문서에서 찾아 볼 수있는 구문 문제가되기를 바랍니다.

질문

이것은 다음과 같은 클럭 멀티플렉서 구조에 관한 것으로, 이는 더 큰 디자인의 일부인 clkgen 모듈의 일부입니다. 클록 멀티플렉서 회로도

ext_clk입력은 설계 외부에서 (입력 핀을 통해 입력) 생성되는 것으로 가정 되지만 clk0clk4신호는 clkgen 모듈 에서 생성 및 사용되며 (자세한 내용은 관련 리플 클럭 질문 참조) baseclkdiv4clk, 각기.

문제는 타이밍 분석기와 같은 제약 조건을 지정하는 방법입니다

  1. 다른 AND 및 OR 게이트를 통한 지연을 고려 cpu_clk하여 소스 클록 ( fast_clk또는 slow_clk또는 ext_clk) 중 하나 일 수있는 다중 클록으로 취급
  2. 동시에 디자인의 다른 곳에서 사용되는 소스 클럭 사이의 경로를 자르지 마십시오.

온칩 클록 멀티플렉서의 가장 간단한 경우 에는 set_clock_groupsSDC 문만 필요한 것 같습니다 .

set_clock_groups -logically_exclusive -group {baseclk} -group {div4clk} -group {ext_clk}

... 주어진 구조에서, 이것은 clk0( fast_clk출력을 통해 )와 clk4(를 통해 slow_clk)가 여전히 주장 될 때만 cpu_clk구성되어 있어도 디자인에 여전히 사용 된다는 사실로 인해 복잡합니다 .ext_clkuse_ext

여기 에 설명 된 set_clock_groups대로 위와 같은 명령은 다음을 유발합니다.

이 명령은 모든 그룹의 각 시계에서 다른 모든 그룹의 각 시계로 set_false_path를 호출하는 것과 같습니다.

... 다른 시계는 여전히 다른 곳에서 사용되기 때문에 올바르지 않습니다.

추가 정보

use_clk0, use_clk4use_ext입력은 그 중 하나는 주어진 시간에 높은 방식으로 생성된다. 모든 use_*입력이 낮 으면 모든 클록을 정지시키는 데 사용될 수 있지만 ,이 질문의 초점은이 구조의 클록 다중화 특성에 있습니다.

회로도 의 X2 인스턴스 (간단한 버퍼)는 자동 위치 및 경로 도구가 일반적으로 버퍼를 자유롭게 배치 할 수있는 문제 (예 : 핀 and_cpu_1/zor_cpu1/in2핀 사이)를 강조하기위한 자리 표시 자 입니다. 이상적으로는 타이밍 제약이 영향을받지 않아야합니다.


이 질문을 매우 구체적이고 매우 좁은 질문으로 좁혀보다 간결하게 만들 수 있습니까? 중요한 정보가 무엇이며 여기에서 실제로 무엇을하는지 이해하기가 어렵습니다.
travisbartley

@ trav1s : 질문을 재구성했습니다. 설명이 필요하면 알려주십시오.
FriendFX

답변:


3

and_ * net에서 1 클럭으로 나누기를 정의하고 물리적으로 배타적임을 선언하십시오. Cadence RTL 컴파일러는 cpu_clk에 의해 클록 된 레지스터에 대해 3 개의 타이밍 경로를 생성함으로써 상황을 정확하게 처리합니다 (하나의 클록에 대해 각각 하나의 경로). clk0, clk4 및 clk_ext에 의해 직접 구동되는 레지스터에는 고유 한 타이밍 아크가 있습니다.

create_generated_clock -source [get_ports clk0] \
-divide_by 1 -name and_clk0    [get_pins and_cpu_1/Y]

create_generated_clock -source [get_ports clk4] \
-divide_by 1 -name and_clk4    [get_pins and_cpu_2/Y]

create_generated_clock -source [get_ports clk_ext] \
-divide_by 1 -name and_clk_ext [get_pins and_cpu_ext1/Y]

set_clock_groups \
-physically_exclusive \
-group [get_clocks and_clk0] \
-group [get_clocks and_clk4] \
-group [get_clocks and_clk_ext]

제안 해 주셔서 감사합니다. 불행히도 현재 이것을 확인할 수 없지만 귀하의 개념은 나에게 유망합니다. 당신은 사이의 경로 여부를 확인할 수 cast_clk, cpu_clkslow_clk동시에 각각의 입력 클럭에 의해 제약되는 동안, 아직 (때문에 전용 시계 그룹에 즉하지 예외를) 체크? 궁극적 으로이 질문에 대한 권위있는 답변을 찾고 있습니다.
FriendFX

@FriendFX RTL 컴파일러에서 코드를 테스트했으며 경로가 올바르게 추론되었습니다.
Revanth Kamaraj

알려 드리기 위해 단일 셀 클럭 멀티플렉서 및 솔루션 (적어도 일부 도구의 경우)에 대한 정보를 추가했습니다.
FriendFX

1

이것은 답변되지 않은 오래된 스레드이지만 동기화 클럭과 비동기 클럭에 대한 기본 이해를 다룹니다.

  • 기본적으로, 동기화 클럭은 최소 지연을 추가하여 위상이 동기화 된 상태를 유지해야 Mux'ing이 글리치를 생성하지 않습니다.
    • 이것은 종종 모든 게이트 클럭 소스를 최고 속도 클럭으로 리샘플링하여 수행됩니다.
  • 비동기 클럭은 타이밍에 중요하지 않으므로 지연이 허용됩니다. 리플 카운터와 같은

여기에 이미지 설명을 입력하십시오


이 오래된 질문을 조사해 주셔서 감사합니다. 필자의 경우 회로에 표시된 것처럼 시계를 최고 속도 시계와 다시 동기화하지 않습니다. 그러나 여전히 내 질문의 주요 부분은 누락 된 것입니다. 즉 , 언급 된 링크 링크가 잘못 컷되었다고 주장하기 때문에 동일한 동기 설계에서 사용되는 것 뿐만 아니라 소스 클록의 동기 성을 고려 하여이 회로를 제한하는 올바른 SDC 문입니다. set_clock_groups이 시계들 사이의 경로.
FriendFX
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.