KR20210129071A - 상관된 샘플 생성 및 효율적인 통계적 시뮬레이션을 사용하여 타이밍 수율 및 수율 병목을 컴퓨팅하기 위한 신규한 방법 - Google Patents
상관된 샘플 생성 및 효율적인 통계적 시뮬레이션을 사용하여 타이밍 수율 및 수율 병목을 컴퓨팅하기 위한 신규한 방법 Download PDFInfo
- Publication number
- KR20210129071A KR20210129071A KR1020217026952A KR20217026952A KR20210129071A KR 20210129071 A KR20210129071 A KR 20210129071A KR 1020217026952 A KR1020217026952 A KR 1020217026952A KR 20217026952 A KR20217026952 A KR 20217026952A KR 20210129071 A KR20210129071 A KR 20210129071A
- Authority
- KR
- South Korea
- Prior art keywords
- timing
- delay
- samples
- slack
- design
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
- G06F30/3308—Design verification, e.g. functional simulation or model checking using simulation
- G06F30/3312—Timing analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/337—Design optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2111/00—Details relating to CAD techniques
- G06F2111/08—Probabilistic or stochastic CAD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2119/00—Details relating to the type or aim of the analysis or the optimisation
- G06F2119/12—Timing analysis or timing optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2119/00—Details relating to the type or aim of the analysis or the optimisation
- G06F2119/22—Yield analysis or yield optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
설계 중인 집적 회로 칩의 공통 타이밍 아크들을 통하는 전기 회로 경로들 사이의 상관을 고려하는, 파라메트릭 타이밍 수율 및 병목들을 결정하기 위한 방법 및 장치의 다양한 실시예들이 개시된다. 타이밍 아크 지연들의 몬테 카를로 샘플들이 생성되고, 타이밍 수율을 컴퓨팅하고 수율 병목들을 식별하는 데 사용된다.
Description
저작권 공고
본 특허 문서의 양수인은, 미국 특허 상표청의 파일들에 나타나 있는 바와 같이, 특허 문서 자체 또는 특허 출원의 누군가에 의한 팩시밀리 복제에 대해 이의가 없지만, 그렇지 않은 경우에는, 저작권에 의해 보호되는 임의의 포함된 저작물들에 있는 모든 권리들을 보유한다.
(1) 기술 분야
본 개시내용은 일반적으로 전자 설계 자동화의 분야에 관한 것이다. 더 구체적으로, 본 발명은 다음의 주제들: 특히, 상관된 샘플 생성 및 효율적인 통계적 시뮬레이션을 사용한 타이밍 수율(timing yield) 및 수율 병목(yield bottleneck)의 컴퓨테이션(computation)을 포함하는 통계적 타이밍 분석에 관한 것이다.
(2) 배경 기술
모바일 디바이스들, "사물 인터넷(internet of things)"(IOT), 및 인공 지능 디바이스들의 급속한 발전으로 인해, 더 적은 전력을 소비하여 복잡한 기능들을 수행함으로써 전력을 더 효율적으로 사용할 수 있는 회로 설계들에 대한 요구가 증가되었다. 더 낮은 전력 소비에 대한 이러한 요구는 오늘날 구축되는 제품들 중 다수에서 사용되는 집적 회로(IC) 칩들의 동작 전압이 감소되게 하였다. 결국, 동작 전압의 이러한 감소는 VLSI(very large scale integrated) 회로 칩들의 제조에서의 프로세스 환경 변동들의 부정적인 영향들이 상당히 증가되게 하였다. 더 구체적으로, IC 칩들을 제조하기 위해 사용되는 프로세스의 변동들은 파라메트릭 타이밍 수율(parametric timing yield)과 관련된 난제들을 초래한다. 파라메트릭 타이밍 수율은 타이밍 요건들을 만족시키는 IC 칩들 대 타이밍 요건들을 만족시키는 데 실패하는 IC 칩들의 비율이다. 오늘날의 코너 기반 타이밍 사인-오프 방법론(corner-based timing sign-off methodology)은 IC 설계의 타이밍 수율을 예측하는 데 있어서 점점 더 증가하는 난제들에 직면해 있다. 파라메트릭 수율(parametric yield)과 같은 변동 방법론(variation methodology)이 주요 정적 타이밍 분석 소프트웨어에서 널리 채택되어 왔지만, 변동 정보를 사용하여 타이밍 수율을 정확하게 컴퓨팅하는 데 이용가능한 양호한 방법들이 여전히 존재하지 않는다. 정확한 수율 컴퓨테이션에서의 주요 난제는 설계의 상이한 타이밍 경로들 사이의 위상 상관(topological correlation)들을 캡처하는 것이다. 랜덤화된 값들이 통계적 결과들을 예측하는 것을 보조하는 데 사용되는 브루트-포스 풀-칩(Brute-force full-chip) 몬테 카를로(Monte Carlo)(MC) 분석은 극심한 실행 시간 영향(즉, 그러한 모델들을 실행하는 데 요구되는 비교적 많은 양의 시간)으로 인해 실용적이지 않다.
따라서, VLSI 칩이 타이밍 요건들을 만족시킬 가능성에 대한 특정 특성들(예컨대, 프로세스 및 환경 변동들)의 영향을 더 정확하게 예측하고, 그에 따라, 수백만 개의 로컬 랜덤 변수들의 모델링을 요구하는 프로세스 및 환경 변동들에 관한 특정 가정들에 대해 파라메트릭 타이밍 수율을 예측할 수 있는 시스템을 제공하는 것이 유리할 것이다.
개시되는 방법 및 장치는, 하나 이상의 다양한 실시예에 따라, 다음의 도면들을 참조하여 설명된다. 도면들은 단지 예시의 목적들로 제공되고, 단지, 개시되는 방법 및 장치의 일부 실시예들의 예들을 도시한다. 이러한 도면들은 개시되는 방법 및 장치의 독자의 이해를 용이하게 하기 위해 제공된다. 이들은 청구되는 발명의 폭, 범위, 또는 적용성을 제한하는 것으로 고려되지 않아야 한다. 예시의 명확성 및 용이성을 위해, 이러한 도면들이 반드시 실척대로 이루어진 것은 아니라는 것에 유의해야 한다.
도 1a는 집적 회로(IC)의 회로 설계의 일부 또는 "블록"의 간략화된 도면이다.
도 1b는 타이밍 아크(7)에 대한 지연(d1,7)의 확률 분포 함수의 플롯이다.
도 1c는 타이밍 아크(7)에 대한 지연(d2,7)의 확률 분포 함수의 플롯이다.
도 2는 100개의 랜덤 변수의 통계적 최소치의 플롯이고, 여기서, 랜덤 변수들은 완전히 상관된다.
도 3은 도 2에 도시된 것과 유사한 플롯이지만, 랜덤 변수들은 완전히 독립적이다.
도 4는 본원에서 개시되는 방법의 일부 실시예들의 고 레벨 흐름도이다.
도 5는 수율 및 병목들을 결정하기 위해 시뮬레이션 동안 통계적 모멘트(moment)들이 증분적으로 컴퓨팅될 수 있는 방식의 일 예를 제공하도록 의도된 샘플 의사 코드이다.
도 6a는 본 기술의 실시예들과 함께 사용하는 데 적합한 컴퓨터 시스템의 간략화된 블록도들이다.
도 6b는 회로 설계를 예시한다.
도 6c는 본 기술의 집적 회로 실시예를 예시한다.
도 7은 제조 물품의 설계, 검증, 및 제작에서 수행되는 설계 및 제조 프로세스의 일 예를 예시한다.
도 8은 호스트 시스템 및 에뮬레이터를 포함하는 테스트 플랫폼의 일 예의 구현에 관한 추가적인 세부사항들을 예시한다.
도면들은 완전한 것으로, 또는 청구되는 발명을 개시되는 정확한 형태로 제한하는 것으로 의도되지 않는다. 개시되는 방법 및 장치는 수정 및 변경되어 실시될 수 있고, 본 발명은 청구항들 및 이들의 등가물들에 의해서만 제한되어야 한다는 것을 이해해야 한다.
도 1a는 집적 회로(IC)의 회로 설계의 일부 또는 "블록"의 간략화된 도면이다.
도 1b는 타이밍 아크(7)에 대한 지연(d1,7)의 확률 분포 함수의 플롯이다.
도 1c는 타이밍 아크(7)에 대한 지연(d2,7)의 확률 분포 함수의 플롯이다.
도 2는 100개의 랜덤 변수의 통계적 최소치의 플롯이고, 여기서, 랜덤 변수들은 완전히 상관된다.
도 3은 도 2에 도시된 것과 유사한 플롯이지만, 랜덤 변수들은 완전히 독립적이다.
도 4는 본원에서 개시되는 방법의 일부 실시예들의 고 레벨 흐름도이다.
도 5는 수율 및 병목들을 결정하기 위해 시뮬레이션 동안 통계적 모멘트(moment)들이 증분적으로 컴퓨팅될 수 있는 방식의 일 예를 제공하도록 의도된 샘플 의사 코드이다.
도 6a는 본 기술의 실시예들과 함께 사용하는 데 적합한 컴퓨터 시스템의 간략화된 블록도들이다.
도 6b는 회로 설계를 예시한다.
도 6c는 본 기술의 집적 회로 실시예를 예시한다.
도 7은 제조 물품의 설계, 검증, 및 제작에서 수행되는 설계 및 제조 프로세스의 일 예를 예시한다.
도 8은 호스트 시스템 및 에뮬레이터를 포함하는 테스트 플랫폼의 일 예의 구현에 관한 추가적인 세부사항들을 예시한다.
도면들은 완전한 것으로, 또는 청구되는 발명을 개시되는 정확한 형태로 제한하는 것으로 의도되지 않는다. 개시되는 방법 및 장치는 수정 및 변경되어 실시될 수 있고, 본 발명은 청구항들 및 이들의 등가물들에 의해서만 제한되어야 한다는 것을 이해해야 한다.
도 1a는 집적 회로(IC)의 회로 설계의 일부 또는 "블록"(100)의 간략화된 도면이다. 회로 지연들의 분석이 "경로 기반" 분석에 의해 행해지는 일부 경우들에서, IC 설계들은 복수의 경로들을 포함하는 것으로서 모델링되고, 복수의 경로들 각각은 복수의 요소들을 통해 이어진다. 예컨대, 도 1a에서, 회로 설계의 블록(100)을 통하는 6개의 고유 경로가 있다. 제1 경로는 D1로 지정된다. 경로(D1)는 블록(100)의 3개의 요소를 횡단한다. 제1 요소는 클록 입력 및 출력을 갖는 레지스터(102)이고, 제2 요소는 2입력 AND-게이트(104)이고, 제3 요소는 인버터(106)이다. 요소를 통하는 각각의 경로는 블록(100)에서 1에서 9까지 번호를 갖는 고유 타이밍 아크와 연관된다. 예컨대, 입력 AND-게이트(104)를 통하는 2개의 경로; 제1 입력으로부터 출력으로의 제1 경로 및 제2 입력으로부터 출력으로의 제2 경로가 있다. 이러한 2개의 경로 각각은 고유 타이밍 아크(4, 5)를 갖는다. 경로(D1)는 각각의 요소(102, 104, 106)와 연관된 "타이밍 아크들"(1, 4, 7)의 결과인 지연을 가지고 레지스터(108)에 도착한다. 경로(D1)를 횡단하는 신호가 마주치게 되는 제1 타이밍 아크는 타이밍 아크(1)이고, 경로(D1)에 대한 타이밍 아크(1)를 통한 지연은 d1,1로 지정된다. 제1 수치 인덱스는 경로(D1)의 경로 id "1"을 지칭하고, 제2 수치 인덱스는 요소(102)의 타이밍 아크 id "1"을 지칭한다. 마주치게 되는 제2 타이밍 아크는 제2 요소(104)의 타이밍 아크(4)이고, 이는 d1,4로 지정된 지연을 갖는다. 마지막으로, 경로(D1) 상에서 마주치게 되는 제3 타이밍 아크는 제3 요소(106)의 결과인 지연(d1,7)을 갖는 타이밍 아크(7)이다. 수치 인덱스 "7"은 인버터(106)와 연관된 타이밍 아크 id "7"을 지칭한다는 것에 유의한다. 이러한 간단한 예에서, 6개의 고유 경로 및 9개의 고유 타이밍 아크가 있는 것을 볼 수 있다. 추가하여, 3개의 고유 "엔드포인트"(110)가 있고, 이들은 각각 캡처 플립-플롭(108)으로의 입력에 있다. 엔드포인트가 반드시 캡처 플립-플롭의 입력에 있을 필요는 없고, 오히려, 엔드포인트는 경로에 대한 슬랙(slack)이 측정되는 포인트(즉, 슬랙에 영향을 미칠 수 있는 추가적인 지연들이 부과되지 않을 포인트)에 있다는 것에 유의해야 한다. 슬랙은 엔드포인트에서의 요구 시간과 도착 시간 사이의 차이이다. 엔드포인트에서의 양의 슬랙 s는 그 엔드포인트에서의 도착 시간이 회로의 전체 지연에 영향을 미치지 않으면서 s만큼 증가될 수 있다는 것을 암시한다. 반대로, 음의 슬랙은, 경로가 너무 느리고, 전체 회로가 원하는 속도로 작동하려면 경로가 가속되어야만 한다는 것(또는 기준 신호 지연되어야만 한다는 것)을 암시한다.
다른 경우들에서, 회로의 그래프 기반 모델이 회로 지연들의 분석을 보조하기 위해 사용된다. 그래프 기반 분석의 경우, 회로가 타이밍 그래프로 모델링되고, 여기서, 회로의 시작 및 끝에 소스 노드 및 싱크 노드가 있다. 게이트들 및 와이어들과 같은 회로 요소들의 세트뿐만 아니라 싱크와 소스 사이에 다수의 다른 노드들이 정의된다. 노드들은 회로 요소들의 핀들을 표현한다. 노드들 사이의 전파 지연이 모델링된다. 일부 경우들에서, 노드들은 소스로부터 싱크로의 일부 루트들이 동일한 요소들을 통과하게 하는 방식으로 커플링될 수 있다. 일부 경우들에서, 지연들은 회로의 그래프 표현(graphical representation)에서 별개의 노드들로서 모델링된다. 대조적으로, 경로 분석은 경로들의 세트를 정의하고, 경로들 각각은 입력 및 출력, 및 경로가 횡단하는 지연들을 갖는 요소들의 세트를 갖는다. 하나의 경로에서의 요소들 중 몇몇은 하나 이상의 다른 경로에서의 요소들에 대해 공통일 수 있다. 두 경우 모두에서, 시작 포인트로부터 종료 포인트까지의 지연들이 특성화되고, 지연들의 합과 시작에서 끝까지 횡단하는 데 요구되는 최소 시간 사이의 차이에 기초하여 슬랙이 결정될 수 있다.
경로 기반 분석이 사용되는 개시되는 방법 및 장치의 일부 실시예들에서, 변동 인식 타이밍 분석에 기초하여 결정되는 지연 분포로의 속도 인덱스 및 경로 컨텍스트(즉, 어떤 경로가 문제가 되는지)는 각각의 관심 경로를 따르는 타이밍 아크의 지연을 결정한다. 분석이 행해지면, 경로들의 세트가 추출될 것이고, 경로들의 공통 타이밍 아크들이 수집될 것이고, 타이밍 아크들의 서브세트들이 엔드포인트들과 연관될 것이다. 타이밍 아크가 동일한 회로 요소를 통한 지연으로 인한 것인 경우, 타이밍 아크는 2개의 경로에 대해 공통인 것으로 고려된다. 예컨대, 경로(D1) 상의 타이밍 아크(7)의 지연(d1,7) 및 경로(D2) 상의 타이밍 아크(7)의 지연(d2,7)은 공통 타이밍 아크(7)를 공유하는데, 이는 이들 둘 모두가 도 1a에 도시된 인버터(106)를 통한 지연의 결과이기 때문이다. 그러나, 경로(D1)를 횡단하는 신호들이 경로(D2)를 횡단한 신호들과는 상이한 구성요소들을 횡단하였을 것이라는 사실로 인해, 경로(D1) 상의 타이밍 아크(7)의 지연(d1,7)에 대한 확률 분포 함수(즉, 경로(D1)를 횡단하는 신호들에 대해 인버터(106)로부터 기인하는 가능한 지연 값들에 대한 확률 분포 함수)의 형상이 경로(D2) 상의 타이밍 아크(7)의 지연(d2,7)에 대한 확률 분포 함수의 형상과 상이할 수 있다는 것을 이해해야 한다. 도 1b는 경로(D1)에 대한 타이밍 아크(7)에 대한 지연(d1,7)의 확률 분포 함수의 플롯이다. 도 1c는 경로(D2)에 대한 타이밍 아크(7)에 대한 지연(d2,7)의 확률 분포 함수의 플롯이다. 이러한 2개의 플롯에서 볼 수 있는 바와 같이, 확률 분포 함수의 형상은 각각 약간 상이하다.
공통 타이밍 아크들을 수집하면, 타이밍 아크들 각각에 대해 랜덤 지연 샘플들이 생성된다. 이는 몬테 카를로 값 생성기가 복수의 속도 인덱스들을 생성하게 함으로써 행해지고, 복수의 속도 인덱스들은 각각 IC 설계의 타이밍 아크들 중 하나와 연관된다. 속도 인덱스는, 로컬 프로세스 및 환경 변동들과 관련된, 타이밍 아크의 느림(즉, 회로 요소를 통한 상대적 지연)의 척도이다. 몬테 카를로 값 생성기에 의해 생성되는 속도 인덱스의 각각의 값은 시뮬레이팅되고 있는 IC의 연관된 타이밍 아크에 대한 특정 지연 샘플에 대한 매트릭스(즉, "지연 매트릭스") 내의 지연 값을 생성하기 위해 타이밍 아크와 연관된다. 따라서, 지연 매트릭스의 각각의 요소는 문제의 IC 설계의 하나의 경로를 따르는 하나의 타이밍 아크와 연관된 지연을 표현한다. 개시되는 분석은, 복잡한 회로 내의 블록의 각각의 경로에 대해 또는 VLSI IC 칩의 회로와 같은 전체 복잡한 회로에 대해, 회로를 통하는 개별 경로에 대해 수행될 수 있다. 속도 인덱스의 사용은, 각각의 수율 결정적 경로(yield-critical path)를 따르는 각각의 타이밍 아크의 지연을 결정하는 것에서, 환경 및 프로세스에서의 로컬 변동들의 영향들이 고려될 수 있게 한다. 몬테 카를로 기법을 사용하는 것은 (예컨대, 변동 인식 타이밍 분석에 의해 결정되는 확률 밀도 함수에 기초한) 프로세스 및 환경 변동들로 인한 지연 값들의 통계적 분포를 고려하고, 상이한 경로들에서의 공통 타이밍 아크들과 연관된 지연들 사이의 상관들이 고려될 수 있게 한다.
개시되는 방법은, 수율 결정적 경로들의 세트에 대해 몬테 카를로 시뮬레이션들을 수행함으로써, 파라메트릭 타이밍 수율을 정확하게 컴퓨팅하고, 수율 결정적 타이밍 아크들, 경로들, 및 블록을 식별한다. 하나 초과의 경로에 대해 공통인 타이밍 아크들에 대해, 그 공통 타이밍 아크가 놓여 있는 각각의 경로에 대해 지연 매트릭스에 배치된 지연 값을 생성하기 위해, 동일한 속도 인덱스 값이 사용된다. 여러 개의 경로에 대해 공통인 타이밍 아크에 대해 하나의 속도 인덱스 값을 갖는 것은 공유되는 타이밍, 즉, 경로(D1)에서의 d1,4와 경로(D3)에서의 d3,4와 같은 공통 타이밍 아크들을 공유하는 경로들 사이의 상관을 고려한다. 따라서, 공통 타이밍 아크들의 영향을 고려하는 것은 상이한 경로들 사이의 상관이 캡처될 수 있게 한다.
도 1a의 블록(100)의 예에서, 지연 매트릭스(시뮬레이션으로부터의 샘플들의 세트)는 다음의 것을 포함할 수 있다:
D1 = d1,1 + d1,4 + d1,7
D2 = d2,2 + d2,5 + d2,7
D3 = d3,1 + d3,4 + d3,8
D4 = d4,2 + d4,5 + d4,8
D5 = d5,3 + d5,6 + d5,9
D6 = d6,3 + d6,6
지연 매트릭스의 수 개의 이러한 "인스턴스"는 각각이 동일한 구조를 갖지만 상이한 지연 값들을 갖는 시뮬레이팅된 샘플 IC들의 세트를 생성하기 위해 시뮬레이션 동안 생성되고, 여기서, 지연 매트릭스의 각각의 인스턴스의(즉, 각각의 시뮬레이팅된 샘플 IC의) 임의의 특정 요소의 지연 값들은 몬테 카를로 생성기에 의해 출력된 속도 인덱스에 의해 결정되고, 이어서, 이는 각각의 타이밍 아크의 지연 값을 참조하는 데 사용된다. 각각의 속도 인덱스 값을 생성하기 위해 몬테 카를로 생성기에 의해 사용되는 기준들은, 특정 타이밍 아크를 발생시키는 회로 요소에 대해 수행되는 변동 인식 타이밍 분석에 의해 결정되는 바와 같은, 속도 인덱스에 의해 처리되는 그 특정 타이밍 아크에 대한 지연에 대한 확률 밀도 함수에 기초한다.
"경로 기반" 분석과 대조적으로, "그래프 기반" 분석을 사용하여, 샘플 셀의 유사한 모델링이 수행될 수 있다. 즉, 그래프 기반 분석이 사용되는 개시되는 방법 및 장치의 실시예들에서, 회로의 그래프 표현에서 모델링되는 지연들은, 변동 인식 타이밍 분석에 의해 결정되는 바와 같은 관련 프로세스 및 환경 변수들에 기초하여, 식별 및 모델링된다. 일부 경우들에서, 회로의 그래프 표현 내의 제1 지연은 제1 신호가 회로 요소를 횡단한 결과일 수 있다. 회로의 그래프 표현 내의 제2 지연은 제2 신호가 동일한 공통 회로 요소를 횡단한 결과일 수 있다. 그러나, 제2 신호가 공통 회로 요소에 진입하기 전에 제1 신호와 상이한 요소들을 횡단하는 경우, 공통 요소를 통한 제2 지연은 공통 요소를 통한 제1 지연과 상이할 수 있다. 유사하게, 상이한 출력 요소들에 대한 연결들이 지연에 영향을 미칠 수 있다. 그럼에도 불구하고, 제1 및 제2 지연은 프로세스 및 환경에 대해 상관될 것이다(즉, 동일한 프로세스 및 환경 인자가 제1 및 제2 지연 둘 모두에서 변동들을 발생시킴). 따라서, 특정 프로세스 및 환경 조건들과 연관되는 "속도 인덱스"가 정의될 수 있다. 따라서, 특정 프로세스 및 환경 상태의 변화들에 응답하는 하나 이상의 지연이 특정 속도 인덱스와 연관된다.
랜덤 샘플들(즉, 지연 매트릭스의 요소들)이 생성되고, 경로 "도착/슬랙" 및 "설계 슬랙"을 평가하는 데 사용된다. 도착/슬랙은 엔드포인트에서의 계산된 타이밍과 그 엔드포인트에 대해 요구되는 타이밍 사이의 차이이다. 예컨대, 특정 설계의 경우, 신호는 13 ns 이하의 지연으로 특정 경로를 횡단해야만 한다. 신호가 10 ns 내에 경로를 횡단할 수 있는 경우, 3 ns의 양의 도착/슬랙이 있다. 다른 한편으로, 신호가 경로를 횡단하는 데 15 ns가 걸리는 경우, 슬랙은 -2 ns이다. 특정 VLSI 칩 설계가 100개의 그러한 경로(전형적으로 수는 훨씬 더 많음)를 갖는 경우, 최소 도착/슬랙이 "설계 슬랙"을 정의할 것이다. 즉, 100개의 경로 중 임의의 경로가 타이밍 요건을 만족시키는 데 실패하는 경우, 설계도 또한 타이밍 요건을 만족시키는 데 실패할 것이다. 따라서, 설계 슬랙은 모든 경로들에 대한 최악의 슬랙에 의해 결정된다(즉, 최소 값이 최악이고, 음수들은 양수들보다 더 작고, 더 높은 절대 값을 갖는 음수들은 더 낮은 절대 값을 갖는 음수들보다 더 작음). 따라서, 설계 슬랙은 각각의 경로에서의 모든 슬랙의 통계적 최소치(min)이다. IC의 다수의 샘플들(즉, 다수의 지연 매트릭스들)이 있을 것이기 때문에, IC 샘플들의 세트에 걸쳐 슬랙 값들의 분포가 있을 것이다. 몬테 카를로 시뮬레이션이 행해지면(즉, 각각의 IC 샘플에 대해 하나씩 여러 개의 타이밍 매트릭스들이 생성되면), IC 샘플의 총 수에 대한 음이 아닌 슬랙들의 비율로부터 설계 수율이 결정되고, 수율 ECO(Engineering Change Order)와 같은, 설계를 최적화할 수 있는 애플리케이션들에 대해 수율 병목이 식별되고, 여기서, 수율을 증가시키도록 요구되는 변경들에 대응하는 게이트 레벨 네트리스트 내에 로직이 직접적으로 삽입될 수 있다.
도 2는 100개의 랜덤 변수의 통계적 최소치의 플롯이고, 여기서, 랜덤 변수들은 완전히 상관된다. 예컨대, 각각의 랜덤 변수는 VLSI IC의 특정 경로를 통한 지연을 표현할 수 있다. 그러한 경우, 랜덤 변수들은 하나의 경로의 각각의 타이밍 아크가 모든 100개의 경로에 대해 각각의 다른 경로에서의 대응하는 타이밍 아크와 동일한 경우 완전히 상관될 것이다. 따라서, 도 2에 도시된 플롯은 가우시안 분포로 제로에 중심이 놓인다.
도 3은 유사한 플롯이다. 그러나, 랜덤 변수들은 완전히 독립적이다. 이들이 VLSI IC를 통하는 경로들인 예에서, 경로들에 공통 타이밍 아크들이 없을 것이다. 2개의 플롯을 비교하면, 도 3에 도시된 독립적 랜덤 변수 세트로부터의 분포가 더 좁지만 상당한 평균 시프트 및 비교적 긴 테일을 갖는다는 것을 볼 수 있다. 따라서, 이러한 플롯에 도시된 분포는, 제로 주위에 더 집중되고 -4 내지 -2의 범위에 훨씬 더 적은 포인트들이 있는, 도 2에 도시된 상관 랜덤 변수 세트로부터의 분포보다 더 불량하다. 이러한 2개의 플롯으로부터, 경로들 사이의 상관이 설계 슬랙 분포에 강한 영향을 미친다는 것을 볼 수 있다. 따라서, 타이밍 수율을 결정하기 위한 설계 슬랙 분포를 결정하는 것에서 경로들 사이의 이러한 상관을 고려하는 것이 중요하다.
도 4는 본원에서 개시되는 방법의 일부 실시예들의 고 레벨 흐름도이다. 처음에, 시뮬레이팅될 IC 설계의 셀들 내에서 타이밍 경로들이 식별된다(단계(400)). 설계 전체에 걸쳐 타이밍 경로들을 따르는 타이밍 아크들을 결정하기 위해 변동 인식 타이밍 분석이 수행된다(단계(402)). 변동 인식 타이밍 분석을 수행하기 위한 여러 개의 기법이 관련 기술분야에 널리 공지되어 있다. 개시되는 방법의 목적을 위해 임의의 공지된 기법이 이용될 수 있다. 즉, 본 방법은 이러한 분석을 수행하기 위한 임의의 특정 기법에 의존하지 않는다. 분석의 결과로서 타이밍 아크들의 지연들의 통계적 변동들을 결정할 시에, 수율 결정적 타이밍 경로들의 세트가 식별된다. 이러한 수율 결정적 타이밍 경로들은 수율을 결정하는 것에서 정적으로 중요할 가능성이 가장 높은 경로들을 포함한다. 즉, 이러한 수율 결정적 타이밍 경로들은, 이들이 음의 슬랙을 가질 가능성이 있는 경로들이기 때문에, 설계 슬랙을 결정하는 것에서 중요하게 될 가능성이 있을 것이다. 일부 실시예들에서, 수율 결정적 타이밍 경로들의 그 집합은 이들의 6-시그마 코너(6-sigma corner)들로 "프루닝(prune)"된다(단계(404)). 즉, 변동 인식 타이밍 분석으로부터 출력된 타이밍 아크들은, 공칭 도핑 농도들로부터의 6 표준 편차보다 더 큰 편차들과 같이, 공칭값으로부터 6 표준 편차 내에 있는 변동들로부터 기인하는 것들로 제한된다. 이러한 프루닝은 크게 벗어난 이상치들을 제거함으로써 경로 타이밍에 대한 값들의 폐쇄 모집단을 제공한다.
이러한 수율 결정적 타이밍 경로들을 식별하고 이들을 이들의 6-시그마 코너들로 프루닝할 시에, 상이한 수율 결정적 경로들 내의 공통 타이밍 아크들이 식별된다(단계(406)).
다음으로, 몬테 카를로 값 생성기에 의해 생성된 속도 인덱스 값들에 기초하여, 그리고 특히, 공통 타이밍 아크를 갖는 경로들이 몬테 카를로 값 생성기에 의해 생성된 동일한 속도 인덱스 값을 사용하는 것을 보장하면서, 셀 전체에 걸쳐 수율 결정적 경로들에 배정되는 타이밍 아크들에 대한 랜덤 지연 샘플들(즉, 설계의 하나의 샘플 내의 타이밍 아크들에 대한 지연을 표현하는 지연 매트릭스의 요소들)을 생성하기 위해, 시뮬레이션이 실행된다. 따라서, 각각의 특정 타이밍 아크에 대한 지연 샘플들은 그 특정 타이밍 아크와 연관된 지연 분포를 제공하고(단계(408)), 각각의 지연 샘플은 하나의 지연 매트릭스의 하나의 요소를 채운다. 임의의 특정 타이밍 아크에 대한 지연 샘플들의 세트는 그 타이밍 아크에 대한 지연 분포를 형성한다. 하나의 이러한 지연 분포는 IC 샘플들(즉, 복수의 지연 매트릭스들)의 세트에 걸쳐 각각의 타이밍 아크에 대해 존재한다. 특히, 각각의 수율 결정적 타이밍 경로의 타이밍 아크들 각각에 대한 값들의 지연 매트릭스들을 생성하기 위해 몬테 카를로 값 생성 기법이 사용된다. 2개 이상의 경로에 대해 공통인 타이밍 아크들은, 동일한 지연 매트릭스(즉, 시뮬레이팅되는 셀 샘플) 내의 지연들을 생성하기 위해, 동일한 생성된 속도 인덱스 값을 사용한다. 몬테 카를로 생성 기법은, 지연 매트릭스의 특정 인스턴스(즉, 샘플 IC에 대한 지연들의 시뮬레이팅되는 인스턴스)에 대한 각각의 지연을 생성하기 위해 사용될 속도 인덱스 값들을 결정하기 위한 기준들로서, 6-시그마 프루닝에 의해 부과된 제한들 및 변동 인식 타이밍 분석에 의해 제공된 정보로부터 결정된 확률 분포를 사용한다. 즉, 몬테 카를로 값 생성기는, 변동 인식 타이밍 분석의 결과들, 즉, 변동 인식 타이밍 분석으로부터 기인하는 값들의 분포의 6-시그마 프루닝에 기초하여, 각각의 속도 인덱스를 생성할 것이다. 각각의 타이밍 아크에 대한 지연 샘플 값은 변동 인식 타이밍 분석에 의해 결정된 지연 분포, 경로 컨텍스트(즉, 어떤 경로가 문제가 되는지), 및 속도 인덱스에 기초하여 선택된다.
다음으로, 각각의 엔드포인트와 연관된 지연들의 서브세트 및 각각의 엔드포인트에 대한 지연 요건들에 기초하여, 각각의 IC 샘플에 대한 각각의 엔드포인트에 대한(즉, 각각의 지연 매트릭스에 대한) 도착/슬랙이 컴퓨팅될 수 있다. 각각의 IC 샘플에 대한 설계 슬랙은 최악의 슬랙을 갖는 엔드포인트를 식별함으로써 결정될 수 있다. IC 샘플들의 세트에 걸쳐 각각의 엔드포인트에 대해 지연 분포가 결정될 수 있다. 추가하여, 설계 슬랙 분포는 IC 샘플들의 세트에 걸친 슬랙 값들의 분포이다. 컴퓨팅된 도착/슬랙 및 설계 슬랙 분포들은 설계 수율을 결정하고, 블록 및 설계 레벨 슬랙 분포들을 업데이트하기 위해 사용된다(단계(410)). 즉, 각각의 IC 샘플에 대한 최악의 슬랙을 갖는 엔드포인트를 결정하고, 최악의 슬랙이 음이 아닌 IC 샘플의 수를 IC 샘플의 총 수로 나눔으로써, 타이밍 수율의 값이 결정된다. 즉, 타이밍 수율은 모든 IC 샘플들의 총계에 대한 모든 엔드포인트들이 음이 아닌 슬랙을 갖는 모든 IC 샘플들의 비율이다.
블록 및 설계 레벨 슬랙 분포들을 업데이트할 시에, 셀들에 대한 랜덤 지연 샘플들의 새로운 세트가 생성될 수 있고, 경로 지연 분포들을 다시 한번 샘플링하는 데 사용될 수 있다(단계(408)). 단계(408) 및 단계(410)에서 수행되는 반복 프로세스의 완료 시에, 또는 그 반복 프로세스 전체에 걸친 특정 포인트들에서, IC 샘플의 총 수에 대한 모든 경로들이 음이 아닌 슬랙을 갖는 IC 샘플들(즉, 지연 매트릭스들)의 비율에 기초하여, 파라메트릭 타이밍 수율의 측정들이 이루어질 수 있다. 즉, 타이밍 요건들을 만족시킬 결과적인 제품들 대 그렇지 않을 결과적인 제품들의 비율을 결정하기 위해 측정들이 이루어질 수 있다. 추가하여, 매우 열악한 슬랙을 갖는 결정적(critical) 셀들, 경로들, 및 블록들과 같은 타이밍 수율 병목들이 식별될 수 있다. 이러한 측정들 및 병목들은 단계(408) 및 단계(410)의 반복을 통해 발생하는 반복 프로세스를 종료할 시점을 결정하는 데 사용될 수 있다. 병목들의 결정은 더 지속적으로 음의 슬랙을 갖는 특정 경로들을 식별함으로써 간단히 이루어질 수 있다.
도 5는 병목들을 결정하기 위해 시뮬레이션 동안 교차 모멘트(cross moment)들이 증분적으로 컴퓨팅될 수 있는 방식의 예를 제공하도록 의도된 샘플 의사 코드이다. 일부 실시예들에서, 시뮬레이션의 완료 시에, 각각의 타이밍 아크에 대한 개별 지연 분포와 설계 슬랙 분포 사이의 교차 모멘트들을 컴퓨팅함으로써, 수율 병목이 컴퓨팅될 수 있다.
도 5의 의사 코드를 살펴보면, 처음 3개의 "For 루프"(502, 504, 506)가 수행되고, 여기서, 최내측 루프(506)는 자기 모멘트(self moment)를 컴퓨팅하고, 중간 루프(504)는 슬랙에 대한 교차 모멘트를 컴퓨팅하고, 외측 루프(502)는 샘플들 각각에 대해(즉, 지연 매트릭스의 각각의 인스턴스에 대해) 그 컴퓨테이션들을 수행하기 위해 프로세스를 진행한다. 이어서, 다른 2개의 For 루프(508, 510)가 수행된다. 내측 루프(508)는 자기 모멘트의 평균을 결정한다. 외측 루프(510)는, IC 샘플들에 걸친 슬랙 분포와 각각의 타이밍 아크의 지연 분포를 교차시켜서, 교차 모멘트들에서의 상관을 컴퓨팅한다.
정확한 파라메트릭 타이밍 수율을 제공하는 것 이외에, 개시되는 방법 및 장치는 또한, 도 5에 도시된 통계적 회귀 방법을 통해 설계의 상이한 레벨에서 수율 병목을 식별한다. 방법은 내측 루프(506)에서의 시뮬레이션 동안 통계적 모멘트들을 증분적으로 컴퓨팅한다. 그리고 시뮬레이션이 행해질 때, 방법은, 루프(510)에서, 설계 슬랙 분포와 개별 지연 분포 사이의 교차 모멘트들(상관, 공왜도(coskewness) 등)을 컴퓨팅함으로써 수율 병목을 컴퓨팅할 것이다. 루프(510)에서 교차 모멘트들이 컴퓨팅되면, 이들은 잠재적 수율 ECO에 대한 수율 병목들을 식별하기 위해 병목 분석에서 사용될 수 있다. 즉, 병목 셀들은 더 큰 상관을 갖는 셀들(의사 코드에서 "ds")로서 정의된다.
하드웨어 구현
도 6a는 본 기술의 실시예들과 함께 사용하는 데 적합한 컴퓨터 시스템의 간략화된 블록도들이다. 도 6b는 회로 설계를 예시하고, 도 6c는 본 기술의 집적 회로 실시예를 예시한다.
일부 실시예들에서, 컴퓨터 시스템(610)은 적어도 하나의 프로세싱 디바이스(614), 이를테면 컴퓨터 또는 프로세서를 포함한다. 프로세싱 디바이스(614)는 버스 서브시스템(612)을 통해 다수의 주변 디바이스들(616, 620, 622, 626, 628)과 통신한다. 일부 그러한 실시예들에서, 프로세싱 디바이스(614)는 프로세서, 마이크로프로세서, 그래픽 프로세싱 유닛, 디지털 신호 프로세서, 및 이들의 전자 프로세싱 등가물들, 이를테면 주문형 집적 회로('ASIC') 또는 필드 프로그램가능 게이트 어레이('FPGA')일 수 있거나 또는 이들을 포함할 수 있다. 본원에서 '프로세서'라는 용어는, 가장 넓은 의미로, 그래픽 프로세싱 유닛들, 디지털 신호 프로세서들, 디지털 프로세서들, 및 이러한 디바이스들의 조합들을 포함하는, 단일 프로세서 및 멀티-코어 또는 멀티-프로세서 어레이들을 포함하는 것으로 사용된다. 게다가, 단일 컴퓨터 시스템 또는 단일 머신만이 예시될 수 있지만, 그러한 용어들의 단수 형태의 사용은 또한, 본원에서 논의되는 명령어들의 세트들 중 임의의 하나 이상을 수행하기 위해 명령어들을 개별적으로 또는 공동으로 실행하는 컴퓨터 시스템들 또는 머신들의 임의의 집합을 나타낼 것이다. 컴퓨터들 및 네트워크들의 끊임없이 변화되는 성질로 인해, 도 6a에 도시된 컴퓨터 시스템(610)의 설명은 단지 바람직한 실시예들을 예시하는 목적들을 위한 일 예로서 의도된다. 컴퓨터 시스템(610)의 다수의 다른 구성들은 도 6a에 도시된 컴퓨터 시스템보다 더 많거나 또는 더 적은 구성요소들을 갖는 것이 가능하다.
일부 실시예들에서, 주변 디바이스들은, 메모리 서브시스템(626) 및 파일 저장 서브시스템(628)을 포함하는 저장 서브시스템(624); 사용자 인터페이스 입력 디바이스들(622); 사용자 인터페이스 출력 디바이스들(620); 및 네트워크 인터페이스 서브시스템(616) 중 하나 이상을 포함한다. 사용자 인터페이스 입력 디바이스들(622) 및 사용자 인터페이스 출력 디바이스들(620)은 사용자들이 컴퓨터 시스템(610)과 상호작용할 수 있게 한다.
컴퓨터 시스템(610)은 서버 컴퓨터, 클라이언트 컴퓨터, 워크스테이션, 메인프레임, 개인용 컴퓨터(PC), 태블릿 PC, 셋-톱 박스(STB), 개인 휴대 정보 단말기(PDA), 셀룰러 전화기, 스마트폰, 웹 어플라이언스, 랙-장착 '블레이드', 키오스크, 텔레비전, 게임 스테이션, 네트워크 라우터, 스위치 또는 브리지, 또는 임의의 데이터 프로세싱 머신일 수 있고, 임의의 데이터 프로세싱 머신은 그 머신에 의해 취해질 액션들을 특정하는 명령어들을 (순차적으로 또는 다른 방식으로) 실행할 수 있다.
일부 실시예에서, 컴퓨터 시스템은(610)은 운영 시스템, 이를테면, Microsoft의 Windows, Sun Microsystems의 Solaris, Apple Computer의 MacOS, Linux, 또는 Unix를 포함한다. 일부 실시예들에서, 컴퓨터 시스템(610)은 또한, 기본 입력/출력 시스템(BIOS) 및 프로세서 펌웨어를 포함할 수 있다. 일부 그러한 실시예들에서, 운영 시스템 BIOS 및/또는 펌웨어는 저장 서브시스템(624)에서 유지된다. 일부 그러한 실시예들에서, 운영 시스템, BIOS, 및 펌웨어는, 프로세서(614)에 의해, 프로세서(614)에 연결된 인터페이스들 및 서브시스템들을 제어하기 위해 사용된다. 이러한 운영 시스템들과 호환가능한 전형적인 프로세서들은 Intel로부터의 Pentium 및 Itanium, Advanced Micro Devices로부터의 Opteron 및 Athlon, 및 ARM Holdings로부터의 ARM 프로세서를 포함한다.
청구되는 발명들의 혁신들, 실시예들, 및/또는 예들은 종래의 컴퓨터 애플리케이션들로 제한되지 않을 뿐만 아니라 이들을 실행하는 프로그램가능 장치로도 제한되지 않는다. 예컨대, 청구되는 것의 혁신들, 실시예들, 및/또는 예들은 광학 컴퓨터, 퀀텀 컴퓨터, 아날로그 컴퓨터 등을 포함할 수 있다. 컴퓨터 시스템은 멀티-프로세서 또는 멀티-코어 시스템일 수 있고, 분산 또는 원격 시스템을 사용할 수 있거나, 또는 분산 또는 원격 시스템으로 구현될 수 있다.
네트워크 인터페이스 서브시스템(616)은, 통신 네트워크(618)에 대한 인터페이스와 같은, 외부 네트워크들에 대한 인터페이스를 제공하고, 일부 실시예들에서, 통신 네트워크(618)를 통해 다른 컴퓨터 시스템들 또는 머신들(도시되지 않음) 내의 대응하는 인터페이스 디바이스들에 커플링된다. 일부 실시예들에서, 통신 네트워크(618)는 다수의 상호연결된 컴퓨터 시스템들, 머신들, 및 통신 링크들(명시적으로 도시되지 않음)을 포함한다. 이러한 통신 링크들은 유선 링크들, 광학 링크들, 무선 링크들일 수 있고/있거나 정보의 통신을 위한 임의의 다른 타입의 디바이스들을 사용할 수 있다. 게다가, 통신 네트워크(618)는 임의의 적합한 컴퓨터 네트워크, 예컨대, 인터넷과 같은 광역 네트워크, 및/또는 이더넷과 같은 로컬 영역 네트워크일 수 있다. 통신 네트워크(618)는 유선 및/또는 무선일 수 있고, 일부 실시예들에서, 가상 사설 네트워크와 함께 이용가능한 방법과 같은 암호화 및 복호화 방법들을 사용한다. 일부 실시예들에서, 통신 네트워크(618)는 다른 시스템들로부터 데이터를 수신하고 다른 시스템들로 데이터를 송신할 수 있는 하나 이상의 통신 인터페이스를 사용한다. 통신 인터페이스들의 일부 실시예들은 이더넷 카드, 모뎀(예컨대, 전화기, 위성, 케이블, 또는 ISDN), (비동기) 디지털 가입자 회선(DSL) 유닛, 파이어와이어 인터페이스, USB 인터페이스 등을 포함한다. 일부 실시예들에서, HTTP, TCP/IP, RTP/RTSP, IPX, 및/또는 UDP와 같은 하나 이상의 통신 프로토콜이 사용될 수 있다.
사용자 인터페이스 입력 디바이스들(622)은 알파뉴메릭 키보드, 키패드, 포인팅 디바이스들, 이를테면, 마우스, 트랙볼, 터치패드, 스타일러스 또는 그래픽 태블릿, 스캐너, 디스플레이 내에 포함된 터치스크린, 오디오 입력 디바이스들, 이를테면, 음성 인식 시스템들 또는 마이크로폰들, 시선 인식, 뇌파 패턴 인식, 및 다른 타입의 입력 디바이스들을 포함할 수 있다. 이러한 디바이스들은 유선으로 또는 무선으로 컴퓨터 시스템에 연결될 수 있다. 일반적으로, '디바이스'라는 용어의 사용은, 컴퓨터 시스템(610) 내에 또는 통신 네트워크(618) 상에 정보를 입력하기 위한 모든 가능한 타입의 디바이스들 및 방식들을 포함하는 것으로 의도된다.
사용자 인터페이스 입력 디바이스들은 전형적으로, 사용자로 하여금, 일부 타입의 사용자 인터페이스 출력 디바이스들, 예컨대, 디스플레이 서브시스템 상에 나타나는 객체들, 아이콘들, 텍스트 등을 선택할 수 있게 한다.
사용자 인터페이스 출력 디바이스들(620)은 디스플레이 서브시스템, 프린터, 팩스 머신, 또는 오디오 출력 디바이스들과 같은 비-시각적 디스플레이들을 포함할 수 있다. 디스플레이 서브시스템은 음극선관(CRT), 액정 디스플레이(LCD)와 같은 플랫-패널 디바이스, 프로젝션 디바이스, 또는 가상 현실 시스템과 같이 가시 이미지를 생성하기 위한 일부 다른 디바이스를 포함할 수 있다. 디스플레이 서브시스템은 또한, 이를테면, 오디오 출력 또는 촉각적 출력(예컨대, 진동들) 디바이스들을 통해, 비-시각적 디스플레이를 제공할 수 있다. 일반적으로, '출력 디바이스'라는 용어의 사용은, 컴퓨터 시스템(610)으로부터 사용자에게 또는 다른 머신 또는 컴퓨터 시스템에 정보를 출력하기 위한 모든 가능한 타입의 디바이스들 및 방식들을 포함하는 것으로 의도된다.
메모리 서브시스템(626)은 전형적으로, 프로그램 실행 동안의 명령어들 및 데이터의 저장을 위한 메인 랜덤 액세스 메모리('RAM') (630)(또는 다른 휘발성 저장 디바이스), 및 고정된 명령어들이 저장되는 판독 전용 메모리('ROM')(632)를 포함하는 다수의 메모리들을 포함한다. 파일 저장 서브시스템(628)은 프로그램 및 데이터 파일들에 대한 지속적인 저장을 제공하고, 하드 디스크 드라이브, 연관된 탈착식 매체들과 함께하는 플로피 디스크 드라이브, CD-ROM 드라이브, 광학 드라이브, 플래시 메모리, 또는 탈착식 매체 카트리지들을 포함할 수 있다. 특정 실시예들의 기능성을 구현하는 데이터베이스들 및 모듈들은 파일 저장 서브시스템(628)에 의해 저장될 수 있다.
버스 서브시스템(612)은 컴퓨터 시스템(610)의 다양한 구성요소들 및 서브시스템들이 의도된 대로 서로 통신하게 하기 위한 디바이스를 제공한다. 버스 서브시스템(612)이 단일 버스로서 개략적으로 도시되지만, 버스 서브시스템의 대안적인 실시예들은 다수의 버스들을 사용할 수 있다. 예컨대, RAM 기반 메인 메모리는 다이렉트 메모리 액세스('DMA') 시스템들을 사용하여 파일 저장 시스템들과 직접적으로 통신할 수 있다.
일부 실시예들에서, 컴퓨터 시스템으로 하여금 본 개시내용에서 설명되는 방법들에 관하여 위에서 언급된 기능들을 수행하게 하는 소프트웨어 모듈들이 메모리 서브시스템(626) 내에 저장될 수 있다. 이러한 소프트웨어 모듈들은, 컴퓨터 시스템으로 하여금 집적 회로 칩들을 제조하는 분야에서 개선된 동작들을 수행할 수 있게 함으로써, 컴퓨터 시스템의 동작을 개선한다. 그러한 소프트웨어 모듈들에 따라 기능하는 컴퓨터 시스템에 의해 수행되는 기능들은 본 분야에서 상당한 개선이고, 설계 수율의 결정 및 집적 회로의 타이밍에서 병목들이 존재하는 위치를 결정함에 있어서 실제적이고 중요한 문제를 해결함으로써, 설계 개선들이 즉석에서 이루어질 수 있게 하여, 집적 회로 설계 수율을 개선하고, 그러한 집적 회로들의 생성에서 낭비 및 비효율성을 감소시킴으로써 제조 비용을 감소시키기 위한 방법의 특정 구현을 표현한다.
도 6b는 파일 저장 서브시스템(628) 및/또는 네트워크 인터페이스 서브시스템(616)과 연관된 비-일시적 컴퓨터 판독가능 데이터 및 정보 저장 매체와 같은 메모리(640)를 도시하고, 회로 설계를 특정하는 데이터 구조를 포함할 수 있다. 메모리(640)는 하드 디스크, 플로피 디스크, CD-ROM, 광학 매체, 탈착식 매체 카트리지, 또는 휘발성 또는 비-휘발성 형태로 컴퓨터 판독가능 데이터를 저장하는 다른 매체일 수 있다. 이러한 메모리로부터 컴퓨터로 판독되는 소프트웨어는 선택된 시간 인스턴스에 유형의 형태로부터, 매체(이를테면, 전기 펄스로서 네트워크, 커넥터, 와이어 또는 트레이스, 또는 적외선 광보다 더 긴 전자기 스펙트럼 내의 파장들을 갖는 전자기 복사로서 대기 또는 공간과 같은 매체)를 통해 전파되는 송신 신호로 변환될 수 있다.
도 6c는, 예컨대 셀 라이브러리로부터 선택된 하나 이상의 셀을 포함하는, 설명되는 기술로 생성된 집적 회로(690)를 예시한다.
본원에서 설명되는 혁신들, 실시예들, 및/또는 예들 중 일부는 위에서 설명된 컴퓨터 시스템(610)과 같은 컴퓨터 시스템을 포함하고/하거나 사용한다. 본원에서 사용되는 바와 같이, '컴퓨터 시스템'이라는 용어는, 전형적으로 시퀀스 변환들('동작들'로 또한 지칭됨)을 사용하여 데이터 및 정보를 물리적으로 변환하는 유형의 데이터 및 정보 프로세싱 디바이스를 나타낸다. 데이터 및 정보는 프로세서에 의해 저장, 액세스, 전송, 결합, 비교, 또는 다른 방식으로 조작될 수 있는 전기, 자기, 광학, 또는 음향 신호에 의해 물리적으로 표현될 수 있다. '프로세서'라는 용어는, 그래픽 프로세싱 유닛들, 디지털 신호 프로세서들, 디지털 프로세서들, 및 이들 요소들의 조합들을 포함하는, 단일 프로세서 및 멀티-코어 시스템들 또는 멀티-프로세서 어레이들을 나타낼 수 있다.
컴퓨터 시스템은, 예컨대, 디지털 로직 회로부(예컨대, 이진 로직) 또는 아날로그(예컨대, 연산 증폭기)를 포함하는 전자식일 수 있다. 컴퓨터 시스템은 또한, 예컨대, 광학 신호 프로세싱, DNA 변환들, 또는 양자 역학, 또는 광전자 컴퓨터 시스템과 같은 기술들의 조합에 기초한 컴퓨터 시스템들에서 보이는 바와 같이 비-전자식일 수 있다. 이진 형태로 구조화된 데이터 및 정보에 대해, AND, OR, 및 NOT 논리 연산들(및 NAND, NOR, 및 XOR 연산들과 같은 이들의 파생물들)을 사용하여 데이터 및 정보를 변환할 수 있는 임의의 컴퓨터 시스템은 불 로직의 임의의 함수를 사용하여 데이터 및 정보를 변환할 수 있다. 아날로그 신경망 프로세서와 같은 컴퓨터 시스템이 또한, 데이터 및 정보를 비-디지털적으로 변환할 수 있다. 이러한 컴퓨터 시스템들 중 임의의 컴퓨터 시스템이, 사람 뇌의 생체전기 구조와 동등한 임의의 방식 또는 형태로, 데이터 및 정보를 프로세싱, 저장, 및 검색하고 있다는 과학적 증거는 없다.
하나 이상의 컴퓨터 시스템은 또한, 'SaaS(software as a service)'로서 또는 '클라우드 컴퓨팅' 환경에서 관련 동작들의 수행을 지원하도록 동작할 수 있다. 예컨대, 동작들의 적어도 일부는 분산 또는 원격 시스템에서 이용가능한 컴퓨터 시스템들의 그룹에 의해 수행될 수 있으며, 이러한 컴퓨터 시스템들은 통신 네트워크(예컨대, 인터넷) 및 하나 이상의 소프트웨어 인터페이스(예컨대, 애플리케이션 프로그램 인터페이스(API))를 통해 액세스가능하다.
본원에서 사용되는 바와 같이, '모듈'이라는 용어는, 전형적으로 사이즈 및/또는 복잡성이 제한되는 유형의 데이터 및 정보 프로세싱 디바이스를 나타낸다. 예컨대, '모듈'이라는 용어는 데이터 및 정보를 변환할 수 있는 하나 이상의 방법 또는 절차를 나타낼 수 있다. '모듈'이라는 용어는 또한, 컴퓨터 프로그램 내의 하나 이상의 방법 및 절차의 조합을 나타낼 수 있다. '모듈'이라는 용어는 또한, 디지털 로직 디바이스들의 작은 네트워크를 나타낼 수 있으며, 여기서, 로직 디바이스들의 상호연결들은 네트워크에 구조를 제공한다. System C와 같은 특수화된 언어로 특정된 모듈을 포함하는 방법들 및 절차들은 그 방법들 및 절차들로부터 획득되는 결과들과 정확히 동일한 결과들로 데이터 및 정보를 프로세싱하는 디지털 로직 디바이스들의 네트워크에 대한 사양을 생성하는 데 사용될 수 있다.
모듈은 영구적으로 구성될 수 있거나(예컨대, 하드웨어를 형성하도록 하드와이어링될 수 있거나), 일시적으로 구성될 수 있거나(예컨대, 소프트웨어로 프로그래밍될 수 있거나), 또는 2개의 구성들의 조합(예컨대, 구조화된 ASIC)일 수 있다. 영구적으로 구성된 모듈들은, 예컨대, 주문형 집적 회로(ASIC)들, 이를테면, 산술 로직 유닛(ALU)들, 프로그램가능 로직 어레이(PLA)들, 또는 판독 전용 메모리(ROM)들을 사용하여 제조될 수 있으며, 이들 모두는 전형적으로 제조 동안 구성된다. 일시적으로 구성된 모듈들은, 예컨대, 필드 프로그램가능 게이트 어레이들(FPGA들 - 예컨대, Xilink 또는 Intel의 Altera에 의해 판매됨), 랜덤 액세스 메모리(RAM)들, 또는 마이크로프로세서들을 사용하여 제조될 수 있다. 모듈은, 본 발명의 혁신들, 실시예들, 및/또는 예들의 양태들을 수행하기 위해, 전형적으로 데이터 및 정보에 적용되는 변환들('동작들'로 또한 지칭됨)의 시퀀스를 사용하여(또는 ROM들 및 RAM들의 경우, 입력 정보를 출력 데이터 및 정보를 저장하는 메모리에 대한 어드레스로서 사용함으로써 데이터 및 정보를 변환하여), 데이터 및 정보를 프로세싱하도록 구성된다.
일시적으로 구성된 모듈들은 임의의 하나의 시간 인스턴스에 구성될 필요가 없다. 예컨대, 하나 이상의 모듈을 포함하는 컴퓨터 시스템은 상이한 시간들에 구성된 모듈들을 가질 수 있다. 컴퓨터 시스템은 하나의 시간 인스턴스에 하나 이상의 모듈의 세트를 포함할 수 있고, 상이한 시간 인스턴스에 하나 이상의 모듈의 상이한 세트를 포함할 수 있다. 모듈을 영구적으로 구성된 형태, 일시적으로 구성된 형태, 또는 이 2개의 형태들의 조합으로 제조 또는 구현하기 위한 판정은, 비용, 시간 고려사항들, 엔지니어링 제약들, 및/또는 특정 설계 목표들에 의해 주도될 수 있다. 모듈의 프로세싱의 '본질(substance)'은 그 모듈이 제조 또는 구현된 형태와 무관한다.
본원에서 사용되는 바와 같이, '알고리즘'이라는 용어는 모듈이 결과를 달성하기 위해 데이터 및 정보를 변환하는 데 사용할 수 있는 동작들 또는 명령어들의 시퀀스 또는 세트를 포함하는 프로세스를 나타낸다. 모듈은 하나 이상의 알고리즘을 포함할 수 있다. 본원에서 사용되는 바와 같이, '스레드'라는 용어는 전체 프로세스 또는 알고리즘의 명령어들의 서브세트를 포함할 수 있는 명령어들의 시퀀스를 지칭한다. 프로세스 또는 알고리즘은 병렬로 실행될 수 있는 다수의 스레드들로 파티셔닝될 수 있다.
본원에서 사용되는 바와 같이, '컴퓨터'라는 용어는, 예컨대, 메모리(예컨대, NOT-AND 또는 NOT-OR 연산을 사용하는 플립-플롭들에 기초한 메모리)를 추가하여, 트랜지스터들을 포함할 수 있는 전자 게이트들을 사용하여 AND, OR, 및 NOT 논리 연산들(이에 제한되지는 않음)과 같은 특정 연산들을 수행할 수 있는 적어도 하나의 정보 프로세서를 포함한다. 이러한 프로세서는 튜링-컴플리트(Turing-complete) 또는 연산적으로 범용적(computationally universal)이라고 말한다. 컴퓨터는, 그 컴퓨터가 디지털 컴퓨터인지 여부와 무관하게, 전형적으로 다수의 모듈들을 포함한다.
본원에서 사용되는 바와 같이, '소프트웨어' 또는 '프로그램'이라는 용어는 본 명세서에서 설명되는 혁신들, 실시예들, 및 예들에 사용하기 위해 컴퓨터 시스템을 구성하는 하나 이상의 알고리즘 및 데이터 구조를 나타낸다. 소프트웨어에 의해 구성가능한 그러한 디바이스들은 하나 이상의 컴퓨터, 예컨대, 독립형 클라이언트 또는 서버 컴퓨터들, 또는 하나 이상의 하드웨어 모듈, 또는 하나 이상의 그러한 컴퓨터 또는 모듈의 시스템들을 포함한다. 본원에서 사용되는 바와 같이, '소프트웨어 애플리케이션'이라는 용어는 특정 결과를 달성하도록, 예컨대, 워드 프로세싱 동작들을 수행하도록, 또는 데이터의 세트를 암호화하도록 컴퓨터 시스템을 구성하는 데이터 및 명령어들의 세트를 나타낸다.
본원에서 사용되는 바와 같이, '프로그래밍 언어'라는 용어는 소프트웨어를 구성하는 명령어 및 데이터의 세트들을 특정하기 위한 문법 및 구문을 나타낸다. 프로그래밍 언어들은 어셈블러 명령어들, ISA(instruction-set-architecture) 명령어들, 머신 명령어들, 머신 종속 명령어들, 마이크로코드, 펌웨어 명령어들, 상태-설정 데이터, 또는 종래의 절차적 프로그래밍 언어들, 예컨대, C 프로그래밍 언어 또는 유사한 프로그래밍 언어들(이를테면, SystemC), 또는 Smalltalk, C++ 등과 같은 객체 지향 프로그래밍 언어, 및 임의의 향후의 등가의 프로그래밍 언어들과 같은 하나 이상의 상위 레벨 언어들의 임의의 조합으로 기입된 소스 코드 또는 객체 코드 중 어느 하나를 포함한다.
소프트웨어는 데이터 및 정보 저장 디바이스로부터 컴퓨터 또는 컴퓨터 시스템의 하나의 또는 메모리에 입력되고, 동등하게, 판독된다. 컴퓨터는 전형적으로, 소프트웨어를 운반하기 위해 사용되는 저장 매체를 판독하기 위한 디바이스를 갖거나, 또는 네트워크를 통해 소프트웨어를 수신하는 인터페이스 디바이스를 갖는다. 이 프로세스는 일반 컴퓨터 설명 섹션에서 논의된다.
본원에 첨부된 청구항들에 기재된 본 발명은 제조 물품을 생성하도록 설계 및 제조 프로세스(DMP)의 기능들을 수행하기 위해 컴퓨터 시스템(610)에 의해 구현될 수 있다. DMP는 전자 설계 자동화(EDA) 프로세스를 포함할 수 있다. 그러한 DMP에서, 제품 아이디어에 대한 정보는 설계자에 의해 공급된다. 정보는 제조 물품을 생성하기 위해 DMP에 의해 변환된다.
일부 실시예들에서, DMP(700)는 설계 툴 또는 검증 툴로서 EDA 소프트웨어 툴(712)(이는 일부 실시예들에서 EDA 소프트웨어임)을 사용한다. 설계가 완성될 때, 그 설계는 테이프-아웃(tape-out)(734)될 수 있으며, 이는 전형적으로, 마스크 세트를 제조하기 위해 제작 설비로 집적 회로에 대한 아트워크(artwork)(예컨대, 기하학적 패턴들)가 전송되는 시점이고, 그 마스크 세트는 집적 회로를 제조하기 위해 추후에 사용된다. 테이프-아웃 후에, 반도체 다이가 제작(736)되고, 패키징 및 조립 프로세스들(738)이 수행되며, 이는 본원에서 회로, 디바이스, 구성요소, 칩, 또는 SoC(System on Chip)로서 또한 나타낼 수 있는 완성된 집적 회로(740)를 생성한다.
DMP에 의해 생성된 제조 물품들, 이를테면 회로들 또는 시스템들은 저 레벨 트랜지스터 레이아웃들로부터 고 레벨 설명 언어들에 이르는 다양한 추상화 레벨들에서 상업적으로 사용된다. 대부분의 설계자들은, 하드웨어 설명 언어('HDL'), 이를테면, VHDL, Verilog, SystemVerilog, SystemC, MyHDL, 또는 OpenVera를 사용하여, 이들의 회로들 및 시스템들을 설계하기 위해 고 레벨의 추상화에서 시작한다. 고 레벨 HDL은 개발자들이, 특히 방대한 시스템에 대해, 이해하는 데 더 용이하고, 하위 추상화 레벨을 사용하여 파악하기 어려운 고도로 복잡한 개념들을 설명할 수 있다. HDL 설명은 개발자들에게 도움이 되는 다른 추상화 레벨들로 변환될 수 있다. 예컨대, 고 레벨 설명은 로직 레벨 레지스터 전송 레벨('RTL') 설명, 게이트 레벨 설명, 레이아웃 레벨 설명, 또는 마스크 레벨 설명으로 변환될 수 있다. 각각의 하위 추상화 레벨은 설계 설명에 더 많은 세부사항을 도입한다. 하위 추상화 레벨들은 자동으로 컴퓨터에 의해 생성될 수 있거나, 설계 라이브러리로부터 도출될 수 있거나, 또는 다른 설계 자동화 기법에 의해 생성될 수 있다. 하위 추상화 레벨에서의 명세 언어의 예는 아날로그 기반 회로들의 상세한 설명들에 많이 사용되는 SPICE이다.
도 7은, 집적 회로의 설계를 표현하는 설계 데이터 및 명령어들을 변환 및 검증하기 위해, 컴퓨터 시스템(610)과 같은 컴퓨터 시스템과 소프트웨어 툴들, 및 가능하게는 본원에서 명시적으로 도시되지 않은 특수 하드웨어-보조 툴들을 사용하여, 집적 회로와 같은 제조 물품을 설계, 검증, 및 제작하는 데 수행되는 DMP(700)의 일 예를 예시한다. 도 7에 대해 개시되는 DMP는 단지 예시 목적들을 위한 것일 뿐이고, 본 개시내용을 제한하도록 의도된 것이 아니다. 예컨대, 개시되는 방법 및 장치의 일부 실시예들에서, DMP는 설계자가 본원에서 설명되는 시퀀스와 상이한 시퀀스로 설계 동작들을 수행하도록 요구할 수 있다.
예시적인 DMP(700)는 제품 아이디어의 생성(단계(710))으로 시작된다. 일부 실시예들에서, DMP(700)는 EDA 소프트웨어 툴(712)을 구현한다. 시스템 설계(714) 동안, 설계자는 제조될 기능성을 설명하는 것을 보조하기 위해 EDA 툴을 사용한다. 설계자는 또한, 기능성을 개량하고 비용들을 체크하는 등을 하기 위해 가정 계획(what-if planning)을 수행할 수 있다. 하드웨어-소프트웨어 아키텍처 파티셔닝이 이 스테이지에서 발생할 수 있다. 이 스테이지에서 사용될 수 있는, 캘리포니아, 마운틴 뷰의 Synopsys, Inc.로부터의 EDA 소프트웨어 제품들의 예들은: Model Architect, Saber, System Studio, 및 Designware 제품들을 포함한다.
다음으로, 논리 설계 및 기능 검증이 수행된다(단계(716)). 논리 설계 및 기능 검증 동안, 회로 내의 모듈들은 하나 이상의 하드웨어 설명 언어 또는 HDL로 특정된다. 추가하여, 설계는 기능 정확도를 위해 체크된다. 즉, 설계가 정확한 출력들을 생성하는 것을 보장하기 위해, 설계되고 있는 회로 또는 시스템의 사양의 요건들과 일치하도록, 설계가 체크된다. HDL 언어들의 예들은: Verilog, VHDL, 및 SystemC를 포함한다. 기능 검증은 전형적으로, 소프트웨어 기반 시뮬레이터들, 및 다른 툴들, 이를테면, 테스트벤치 생성기들, 정적 HDL 체킹 툴들, 및 정식 검증 툴들을 사용함으로써 행해진다. 일부 상황들에서, '에뮬레이터들' 또는 '프로토타이핑(prototyping) 시스템들'로 지칭되는 특수 하드웨어가 기능 검증의 속도를 높이기 위해 이용된다. 이 스테이지에서 사용될 수 있는 EDA 소프트웨어 제품들의 예들은: VCS, Vera, Designware, Magellan, Formality, ESP, 및 Leda 제품들을 포함하고, 이들 각각은 캘리포니아, 마운틴 뷰의 Synopsys, Inc.로부터의 제품이다. 이 상태에서 사용될 수 있는, Synopsys로부터 또한 입수가능한 에뮬레이터 및 프로토타이핑 제품들의 예들은: Zebu.RTM. 및 Protolink.RTM.(RTM은 '등록 상표'를 나타냄)을 포함한다.
다음 단계는 테스트를 위한 합성 및 설계를 요구한다(단계(718)). 테스트를 위한 합성 및 설계 동안, HDL 코드는 네트리스트로 변환된다. 네트리스트는 타겟 기술에 대해 최적화될 수 있다. 추가적으로, 테스트들은 완성된 집적 회로를 체크하도록 설계 및 구현될 수 있다. 이 스테이지에서 사용될 수 있는 EDA 소프트웨어 제품들의 예들은: Design Compiler, Physical Compiler, Test Compiler, Power Compiler, FPGA Compiler, Tetramax, 및 Designware 제품들을 포함하고, 이들 각각은 캘리포니아, 마운틴 뷰의 Synopsys, Inc.로부터의 제품이다.
테스트를 위한 합성 및 설계 후에, 네트리스트가 검증된다(단계(720)). 네트리스트 검증 동안, 네트리스트는 타이밍 제약들에 대한 순응성(compliance) 및 HDL 코드에 대한 대응성(correspondence)에 대해 체크된다. 이 스테이지에서 사용될 수 있는 EDA 소프트웨어 제품들의 예들은: Formality, Primetime, 및 VCS 제품들을 포함하고, 이들 각각은 캘리포니아, 마운틴 뷰의 Synopsys, Inc.로부터의 제품이다.
다음으로, 설계 계획이 수행된다(단계(722)). 설계 계획 동안, 집적 회로에 대한 전체 플로어 플랜(floor plan)이 구성되고, 타이밍 및 최상위 레벨 라우팅에 대해 분석된다. 이 스테이지에서 사용될 수 있는 EDA 소프트웨어 제품들의 예들은: Astro 및 IC Compiler 제품들을 포함하고, 이들 각각은 캘리포니아, 마운틴 뷰의 Synopsys, Inc.로부터의 제품이다.
설계 계획 후에, 레이아웃이 구현된다(단계(724)). 레이아웃 구현 동안, 특정 로직 기능들을 수행하기 위해 라이브러리 셀들을 선택할 수 있는 바와 같이, 물리적 배치(트랜지스터들 또는 커패시터들과 같은 회로 요소들을 위치시키는 것) 및 라우팅(복수의 전도체들에 의한 회로 요소들의 연결)이 발생한다. 이 스테이지에서 사용될 수 있는 EDA 소프트웨어 제품들의 예들은: Astro 및 IC Compiler 제품들이고, 이들 각각은 캘리포니아, 마운틴 뷰의 Synopsys, Inc.로부터의 제품이다.
레이아웃 구현이 완료되면, 분석 및 추출이 수행된다(단계(726)). 분석 및 추출 동안, 회로 기능이 레이아웃 레벨에서 검증되며, 이는 레이아웃 설계의 개량을 가능하게 한다. 이 스테이지에서 사용될 수 있는 EDA 소프트웨어 제품들의 예들은: Astrorail, Primerail, Primetime, 및 Star RC/XT 제품들이고, 이들 각각은 캘리포니아, 마운틴 뷰의 Synopsys, Inc.로부터의 제품이다.
다음으로, 물리적 레이아웃이 검증된다(단계(728)). 물리적 검증 동안, 레이아웃 설계는 제조 제약들, 이를테면, 설계 규칙 제약들, 전기적 제약들, 리소그래피 제약들, 및 회로 기능이 HDL 설계 사양과 일치하는 것에 대해 정확성을 보장하기 위해 체크된다. 이 스테이지에서 사용될 수 있는 EDA 소프트웨어 제품의 예는 캘리포니아, 마운틴 뷰의 Synopsys, Inc.로부터의 Hercules 제품을 포함한다.
다음으로, 레이아웃의 해상도에 대한 향상들이 행해진다(단계(730)). 해상도 향상 동안, 설계의 제조성을 개선하기 위해, 레이아웃의 기하학적 조작들이 수행된다. 이 스테이지에서 사용될 수 있는 EDA 소프트웨어 제품의 예는 캘리포니아, 마운틴 뷰의 Synopsys, Inc.로부터의 Proteus 제품이다.
설계 계획, 물리적 구현, 분석 및 추출, 물리적 검증, 및 해상도 향상 중 하나 이상 동안, 도 4에서 위에 개시된 바와 같은, 설계 수율을 결정 및 최적화하기 위한 방법 및 장치가 이러한 단계들 중 하나 이상의 일부로서 수행될 수 있다.
다음으로, 마스크들이 준비되고, 설계가 "테이프-아웃"된다(단계(732)). 리소그래피 마스크들의 생성을 위해 (적절한 경우 리소그래피 향상들이 적용된 후에) 사용될 데이터가 생성된다. 테이프-아웃 데이터는 완성된 집적 회로들을 생성하기 위해 사용되는 리소그래피 마스크들을 생성하는 데 사용된다. 이 스테이지에서 사용될 수 있는 EDA 소프트웨어 제품들의 예들은 캘리포니아, 마운틴 뷰의 Synopsys, Inc.로부터의 CATS 계열의 제품들을 포함한다. 추가하여, 테이프-아웃 동안 사용될 수 있는 EDA 소프트웨어 제품들의 예들은 캘리포니아, 마운틴 뷰의 Synopsys, Inc.로부터의 IC Compiler 및 Custom Designer 계열들의 제품들을 포함한다.
위에서 언급된 집적 회로 설계 툴들은 사용될 수 있는 툴들의 예들일 뿐이다. 다른 EDA 벤더들(이를테면, Cadence, Siemens), 다른 회사 엔티티들, 대학들, 또는 오픈 소스 리포지토리들로부터의 유사한 상업용 툴들 및 다양한 비-상업용 툴들이 대안으로서 사용될 수 있다.
본원에서 설명되는 EDA 툴들의 일부 또는 전부, 및 라이브러리에 대한 셀들의 개발 및 라이브러리를 사용하는 물리적 및 논리적 설계를 위해 적용되는 툴들의 기능성을 제공하는 프로그램 및 데이터 구조들을 저장하기 위해 저장 서브시스템이 사용되는 것이 바람직하다. 이들 프로그램들 및 데이터 구조들은 일반적으로, 관련 기술분야의 통상의 기술자에게 공지된 방식으로 하나 이상의 프로세서들에 의해 실행된다.
개시되는 방법 및 장치의 일부 실시예들에 따르면, 도 7의 DMP(700)에 대해 개시된 EDA 프로세스와 같은 EDA 프로세스는 전형적으로, 회로 설계의 기능성을 검증하기 위한 에뮬레이터를 포함한다. 예컨대, 도 7에 대해 위에서 언급된 DMP(700)에서, 논리적 설계 기능 검증(단계(712))를 보조하기 위해 사용될 수 있는 Synopsys로부터 입수가능한 에뮬레이터 및 프로토타이핑 제품의 예들은: Zebu.RTM. 및 Protolink.RTM.(RTM은 '등록 상표'를 나타냄)을 포함한다. 도 8은 호스트 시스템(801) 및 에뮬레이터(802)를 포함하는 테스트 플랫폼(800)의 일 예의 구현에 관한 추가적인 세부사항들을 예시한다. 일부 실시예들에서, 에뮬레이터(802)는 FPGA들(804)과 같은 프로그램가능 디바이스들의 세트이다. 일부 그러한 실시예들에서, 호스트 시스템(801)은 회로 설계를 에뮬레이트하도록 에뮬레이터(802)를 구성하기 위해 컴파일러(810)를 사용하여 데이터 및 정보를 생성한다. 에뮬레이트될 하나 이상의 회로 설계는 'DUT(Design Under Test)'로 지칭된다. 에뮬레이터(802)는 DUT를 에뮬레이트하는 하드웨어 시스템이다. 즉, 에뮬레이터(802)는 DUT의 기능성을 검증하기 위해 DUT의 성능을 에뮬레이트하는 데 사용된다. 본원에서 개시되는 실시예들을 위해 에뮬레이터(802)로서 사용될 수 있는 제품의 일 예는 Synopsys, Inc.로부터 입수가능한 ZeBu Server이다.
호스트 시스템(801)은 하나 이상의 프로세서(806)를 포함한다. 호스트 시스템(801)이 다수의 프로세서들(806)로 구성되는 실시예에서, 호스트 시스템(801)에 의해 수행되는 것으로 본원에서 설명되는 기능들은 다수의 프로세서들(806) 사이에서 분산될 수 있다.
일부 실시예들에서, 호스트 시스템(801) 내의 프로세서(806) 중 적어도 하나는 에뮬레이터(802)에 의해 에뮬레이트되는 DUT를 표현하는 하드웨어 설명 언어로 기입된 코드를 프로세싱하는 컴파일러(810)를 포함한다. 컴파일러는 DUT를 에뮬레이트하도록 에뮬레이터(802)를 구성하기 위해 사용되는 데이터(전형적으로는 이진) 및 정보를 생성한다. 컴파일러(810)는 DUT를 변환하고/하거나, DUT를 변경하고/하거나, DUT를 재구성하고/하거나, DUT에 새로운 기능들을 추가하고/하거나, DUT의 타이밍을 제어할 수 있다.
호스트 시스템(801) 및 에뮬레이터(802)는 에뮬레이션 연결(808)에 의해 운반되는 신호들을 사용하여 데이터 및 정보를 교환한다. 연결(808)은 하나 이상의 전기 케이블, 예컨대, RS232 또는 USB 프로토콜들과 호환가능한 핀 구성들을 갖는 케이블들일 수 있다. 연결(808)은 로컬 영역 네트워크와 같은 유선 통신 매체 또는 네트워크, 또는 인터넷과 같은 광역 네트워크일 수 있다. 연결은, Bluetooth.RTM 또는 IEEE 802.11과 같은 무선 프로토콜을 사용하는, 하나 이상의 액세스 포인트를 갖는 무선 통신 매체 또는 네트워크일 수 있다. 호스트 시스템(801) 및 에뮬레이터(802)는 네트워크 서버(도시되지 않음)와 같은 제3 디바이스를 통해 데이터 및 정보를 교환할 수 있다.
일부 실시예들에서, 에뮬레이터(802)는 복수의 FPGA들(804)을 포함한다. 일부 그러한 실시예들에서, 각각의 FPGA(804)는 버스(811)를 통해 에뮬레이터(802)(및 잠재적으로는 다른 에뮬레이터 하드웨어 구성요소들)의 다른 FPGA들(804)에 인터페이스하고, 그에 따라, FPGA들(804)이 신호들을 교환하게 된다. 본원에서 개시되는 일부 실시예들이 FPGA들을 포함하는 에뮬레이터들을 사용하지만, 다른 실시예들은 DUT들을 에뮬레이트하기 위해 FPGA들(804) 대신에 또는 FPGA들(804)과 함께 다른 타입의 로직 블록들을 포함할 수 있다. 예컨대, 일부 실시예들은 커스텀 FPGA들, 에뮬레이션 또는 프로토타이핑을 위한 특수화된 ASIC들, 메모리들, 및 입력/출력 디바이스들을 사용할 수 있다.
FPGA들(804)은 하나 이상의 하드웨어 보드(812) 상에 상주할 수 있다. 여러 개의 보드(812)가 하드웨어 유닛(814) 내에 배치될 수 있다. 각각의 유닛(814) 내의 보드들(812)은 멀티-유닛 에뮬레이터(802)를 형성하도록 케이블들 또는 임의의 다른 수단에 의해 서로 연결될 수 있다. 일부 실시예들에서, 에뮬레이터(802)는 단일 보드(812), 하나 이상의 보드(812)를 갖는 단일 유닛(814), 또는 각각 하나 이상의 보드(812)를 갖는 다수의 유닛들(814)을 포함하고, 본 개시내용의 교시들로부터 벗어나지 않으면서, 각각의 보드(812)는 하나 이상의 유닛을 갖는다.
에뮬레이트될 DUT에 대해, 에뮬레이터(802)는 호스트 시스템(801)으로부터 하나 이상의 "비트 파일"을 수신한다. 비트 파일들은 DUT의 설명을 포함한다. 비트 파일들은: (1) 트레이스 및 주입 로직(trace and injection logic), (2) 에뮬레이터(802)의 FPGA들로의 파티션들의 매핑들, 및 (3) 설계 제약들과 함께 호스트 시스템(801)에 의해 생성된 DUT의 파티션들을 추가로 특정한다. 비트 파일들에 기초하여, 에뮬레이터(802)는 에뮬레이트된 DUT의 기능들을 수행하도록 FPGA들(804)을 구성한다. 일부 에뮬레이터들(802)의 경우, 에뮬레이터(802)의 하나 이상의 FPGA(804)는 FPGA(804)의 실리콘 내에 구축된 트레이스 및 주입 로직을 이미 갖고 있다. 이러한 타입의 에뮬레이터(802)의 경우, FPGA들(804)은 호스트 시스템(801)에 의해 트레이스 및 주입 로직을 에뮬레이트하도록 구성될 필요가 없다.
호스트 시스템(801)은 에뮬레이트될 DUT의 설명을 (예컨대, 사용자로부터 또는 데이터 저장소로부터) 수신한다. 일 실시예에서, DUT 설명은 레지스터 전송 언어(RTL)와 같은 하드웨어 설명 언어(HDL)로 이루어진다. 다른 실시예에서, DUT 설명은 네트리스트 레벨 파일들, 또는 네트리스트 레벨 파일들과 HDL 파일들의 혼합으로 이루어진다. DUT 설명의 일부 또는 전체 DUT 설명이 HDL로 이루어진 경우, 호스트 시스템(801)은 DUT 설명에 기초하여 게이트 레벨 네트리스트를 생성하기 위해 DUT 설명을 합성한다. 호스트 시스템(801)은 DUT를 다수의 파티션들로 파티셔닝하기 위해 DUT의 네트리스트를 사용할 수 있는데, 이들 피티션들 중 일부는 트레이스 및 주입 로직을 포함한다. 트레이스 및 주입 로직은 FPGA의 인터페이스들을 통해 교환되는 인터페이스 신호들을 트레이싱한다. 추가적으로, 트레이스 및 주입 로직은 트레이싱된 인터페이스 신호들을 FPGA의 로직 내에 주입하기 위해 사용될 수 있다. 호스트 시스템(801)은 각각의 파티션을 에뮬레이터(802)의 FPGA로 매핑한다. 일부 에뮬레이터들의 경우, 트레이스 및 주입 로직은 FPGA들의 그룹에 대해 선택된 파티션들에만 포함된다. 트레이스 및 주입 로직은 에뮬레이터(802)의 FPGA들 중 하나 이상 내에 구축될 수 있다. 호스트 시스템(801)은 FPGA들로 매핑될 멀티플렉서들을 합성할 수 있다. 멀티플렉서들은 인터페이스 신호들을 DUT 로직 내에 주입하기 위해 트레이스 및 주입 로직에 의해 사용될 수 있다.
호스트 시스템(801)은 DUT의 각각의 파티션 및 FPGA들로의 파티션들의 매핑을 설명하는 비트 파일들을 생성한다. 트레이스 및 주입 로직이 포함된 파티션들에 대해, 비트 파일들은 로직의 포함을 또한 설명한다. 비트 파일들은 또한, 배치 및 루트 정보, 및 설계 제약들을 포함할 수 있다. 호스트 시스템(801)은 비트 파일들을 저장하고, 또한, 어떤 FPGA들이 DUT의 각각의 구성요소를 에뮬레이트할지(각각의 구성요소가 어느 FPGA들에 매핑될지)를 설명하는 DUT 정보의 구성요소들을 저장한다.
요청 시에, 호스트 시스템(801)은 에뮬레이터(802)에 비트 파일들을 송신한다. 호스트 시스템(801)은 에뮬레이터(802)에게 DUT를 에뮬레이트하도록 명령한다. DUT의 에뮬레이션 동안 또는 에뮬레이션의 종료 시에, 호스트 시스템(801)은 에뮬레이션 연결(808)을 통해 에뮬레이터(802)로부터 에뮬레이션 결과들을 수신한다. 에뮬레이션 결과들은 DUT의 에뮬레이션에 기초하여 에뮬레이터(802)에 의해 생성된 데이터 및 정보이다. 에뮬레이션 결과들은 각각의 FPGA의 트레이스 및 주입 로직에 의해 트레이싱된 인터페이스 신호들(인터페이스 신호들의 상태들)을 포함한다. 호스트 시스템(801)은 에뮬레이션 결과들을 저장할 수 있거나, 또는 에뮬레이션 결과들을 다른 프로세싱 시스템으로 송신할 수 있다.
DUT의 에뮬레이션 후에, 사용자는 DUT의 구성요소를 디버깅하도록 요청할 수 있다. 그러한 요청이 이루어진 경우, 사용자는 디버깅할 에뮬레이션의 시간 기간을 제공할 수 있다. 호스트 시스템(801)은, 저장된 정보에 기초하여, 구성요소를 에뮬레이트하도록 구성된 FPGA들을 식별한다. 호스트 시스템(801)은, 시간 기간과 연관되고 각각의 식별된 FPGA의 트레이스 및 주입 로직에 의해 트레이싱된 저장된 인터페이스 신호들을 검색한다. 호스트 시스템(801)은 에뮬레이터(802)에게 식별된 FPGA들을 하나씩, 한 번에 여러 개씩, 또는 전적으로 재-에뮬레이트(re-emulate)하도록 명령한다. 호스트 시스템(801)은, 시간 기간에 대해 구성요소를 재-에뮬레이트하기 위해, 검색된 인터페이스 신호들을 에뮬레이터(802)에 송신한다. 각각의 식별된 FPGA의 트레이스 및 주입 로직은 호스트 시스템(801)으로부터 수신된 그의 각자의 인터페이스 신호들을 FPGA로 매핑된 DUT의 로직 내에 주입한다. FPGA의 다수의 재-에뮬레이션들의 경우, 결과들은 전체 디버그 뷰를 갖도록 모두 함께 병합될 수 있다.
호스트 시스템(801)은 에뮬레이터로부터 구성요소의 재-에뮬레이션 동안 식별된 FPGA들의 로직에 의해 트레이싱된 신호들을 수신한다. 호스트 시스템(801)은 에뮬레이터(802)로부터 수신된 신호들을 저장한다. 재-에뮬레이션 동안 트레이싱된 신호들은 초기 에뮬레이션 동안보다 더 높은 샘플링 레이트를 가질 수 있다. 예컨대, 초기 실행에서, 트레이싱된 신호는 매 X 밀리초마다 세이브(save)된 하드웨어 상태로 구성될 수 있다. 그러나, 재-에뮬레이션에서, 트레이싱된 신호는 매 Y 밀리초마다 세이브된 하드웨어 상태로 구성될 수 있으며, 여기서, Y는 X 미만이다. 사용자가 재-에뮬레이션 동안 트레이싱된 신호의 파형을 보기를 요청하는 경우, 호스트 시스템(801)은 저장된 신호를 검색하고, 신호의 플롯을 디스플레이할 수 있다(신호의 파형을 생성함). 그 후, 사용자는, 예컨대, 동일한 구성요소를 재-에뮬레이트하지만 상이한 시간 기간에 대해 재-에뮬레이트하도록, 또는 다른 구성요소를 재-에뮬레이트하도록 요청할 수 있다.
호스트 시스템(801)은 전형적으로, 적어도 7개의 서브-시스템들: 설계 합성기, 매핑 모듈, 실행 시간 모듈, 결과 모듈, 디버그 모듈, 파형 모듈, 및 저장 모듈을 포함한다. 이들 서브-시스템들 각각은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로서 구현될 수 있다. 이러한 구성요소들은 함께 에뮬레이터(802)를 구성하고, 에뮬레이션 결과들을 모니터링한다.
설계 합성기는 DUT의 HDL을 게이트 레벨 로직으로 변환한다. 에뮬레이트될 DUT에 대해, 설계 합성기는 DUT의 설명을 수신한다. DUT의 설명이 완전히 또는 부분적으로 HDL로 이루어진 경우(예컨대, RTL 또는 다른 추상화 레벨), 설계 합성기(210)는 게이트 레벨 로직에 관하여 DUT의 설명을 이용하여 게이트 레벨 네트리스트를 생성하기 위해 DUT의 HDL을 합성한다.
매핑 모듈은 DUT들을 파티셔닝하고, 파티션들을 에뮬레이터 FPGA들로 매핑한다. 매핑 모듈은 DUT의 네트리스트를 사용하여 게이트 레벨에 있는 DUT를 다수의 파티션들로 파티셔닝한다. 각각의 파티션에 대해, 매핑 모듈은 트레이스 및 주입 로직의 게이트 레벨 설명을 검색하고, 로직을 파티션 내에 포함시킨다. 위에서 설명된 바와 같이, 파티션에 포함된 트레이스 및 주입 로직은 파티션이 매핑된 FPGA의 인터페이스들을 통해 교환되는 트레이스 신호들(트레이스 인터페이스 신호들)을 트레이싱하도록 구성된다. 트레이스 및 주입 로직은 파티셔닝 전에 DUT 내에 포함될 수 있다. 예컨대, 트레이스 및 주입 로직은 DUT의 HDL을 합성하기 전에 또는 그 후에 설계 합성기에 의해 포함될 수 있다. 따라서, 트레이스 및 주입 로직은 파티션들과 일치하지 않을 수 있으며, 트레이스 및 주입 로직은 서브세트일 수 있거나, 수퍼세트(superset)일 수 있거나, 또는 심지어 파티션들과 상이할 수 있다.
트레이스 및 주입 로직을 포함시키는 것에 추가하여, 매핑 모듈은 트레이스 및 주입 로직에 의해 트레이싱되지 않는 특정 DUT 구성요소들의 상태들을 트레이싱하기 위해(트레이스 및 주입 로직에 의해 트레이싱되는 인터페이스 신호들 이외의 신호들을 트레이싱하기 위해) 파티션에 추가적인 트레이싱 로직을 포함시킬 수 있다. 매핑 모듈은 추가적인 트레이싱 로직을 파티셔닝 전에 DUT에 포함시킬 수 있거나, 또는 파티셔닝 후에 파티션들에 포함시킬 수 있다. 설계 합성기는 설명을 합성하기 전에 DUT의 HDL 설명에 추가적인 트레이싱 로직을 포함시킬 수 있다.
매핑 모듈은 DUT의 각각의 파티션을 에뮬레이터(802)의 FPGA로 매핑한다. 매핑 모듈은 설계 규칙들, 설계 제약들(예컨대, 타이밍 또는 로직 제약들), 및 에뮬레이터(802)에 관한 정보를 사용하여 파티셔닝 및 매핑을 수행한다. DUT의 구성요소들에 대해, 매핑 모듈은 어느 FPGA들이 각각의 구성요소를 에뮬레이트할지를 설명하는 정보를 저장 모듈에 저장한다.
파티셔닝 및 매핑에 기초하여, 매핑 모듈은, 생성된 파티션들 및 에뮬레이터(802)의 각각의 FPGA로의 로직의 매핑을 설명하는 하나 이상의 비트 파일을 생성한다. 비트 파일들은 추가적인 정보, 이를테면, DUT의 제약들, 및 FPGA들 사이의 연결들 및 각각의 FPGA 내의 연결들의 라우팅 정보를 포함할 수 있다. 매핑 모듈은 DUT의 각각의 파티션에 대해 비트 파일을 생성할 수 있으며, 그 비트 파일은 저장 모듈에 저장될 수 있다. 사용자로부터의 요청 시에, 매핑 모듈은 에뮬레이터(802)에 비트 파일들을 송신하고, 에뮬레이터(802)는 그 비트 파일들을 사용하여, DUT를 에뮬레이트하도록 FPGA들을 구성한다.
에뮬레이터(802)가 트레이스 및 주입 로직을 포함하는 특수화된 ASIC들을 포함하는 경우, 매핑 모듈은 DUT에 이들을 연결할 수 있게 하는 특정 구성을 생성할 수 있거나, 또는 어떤 트레이싱/주입된 신호에 대한 정보인지 및 특수화된 ASIC 상에 정보가 저장된 위치를 단지 저장할 수 있다.
실행 시간 모듈은 에뮬레이터(802) 상에서 수행되는 에뮬레이션들을 제어한다. 실행 시간 모듈은 에뮬레이터(802)로 하여금 에뮬레이션의 실행을 시작 또는 중단하게 할 수 있다. 추가적으로, 실행 시간 모듈은 입력 신호들/데이터를 에뮬레이터(802)에 제공할 수 있다. 입력 신호들은 에뮬레이터(802)에 연결을 통해 직접적으로 제공될 수 있거나, 또는 다른 입력 신호 디바이스들을 통해 간접적으로 제공될 수 있다. 예컨대, 실행 시간 모듈을 갖는 호스트 시스템(801)은 입력 신호를 에뮬레이터(802)에 제공하도록 입력 신호 디바이스를 제어할 수 있다. 입력 신호 디바이스는, 예컨대, (직접적으로 또는 케이블들을 통한) 테스트 보드, 신호 생성기, 다른 에뮬레이터(도시되지 않음), 또는 다른 호스트 시스템(도시되지 않음)일 수 있다.
결과 모듈은 에뮬레이터(802)에 의해 생성된 에뮬레이션 결과들을 프로세싱한다. 에뮬레이션 동안 및/또는 에뮬레이션을 완료한 후에, 결과 모듈은 에뮬레이션 동안 생성된 에뮬레이션 결과들을 에뮬레이터(802)로부터 수신한다. 에뮬레이션 결과들은 에뮬레이션 동안 트레이싱된 신호들을 포함한다. 구체적으로, 에뮬레이션 결과들은 각각의 FPGA에 의해 에뮬레이트된 트레이스 및 주입 로직에 의해 트레이싱된 인터페이스 신호들을 포함한다. 에뮬레이션 결과들은 또한, DUT에 포함된 추가적인 로직에 의해 트레이싱된 신호들을 포함할 수 있다. 각각의 트레이싱된 신호는 에뮬레이션의 다수의 사이클들에 걸쳐 있을 수 있다. 트레이싱된 신호는 다수의 하드웨어 상태들로 구성되고, 각각의 하드웨어 상태는 에뮬레이션의 시간과 연관된다. 결과 모듈은 수신된 트레이싱된 신호들을 저장 모듈에 저장한다. 각각의 저장된 신호에 대해, 결과 모듈은 어떤 FPGA가 트레이싱된 신호를 생성했는지를 나타내는 정보를 저장할 수 있다.
디버그 모듈은 사용자들이 DUT 구성요소들을 디버깅할 수 있게 한다. 에뮬레이터(802)가 DUT를 에뮬레이트하고, 결과 모듈이 에뮬레이션 동안 트레이스 및 주입 로직에 의해 트레이싱된 인터페이스 신호들을 수신한 후에, 사용자는 특정 시간 기간에 대해 구성요소를 재-에뮬레이트함으로써 DUT의 구성요소를 디버깅하도록 요청할 수 있다. 구성요소를 디버깅하라는 요청에서, 사용자는 구성요소를 식별하고, 디버깅할 에뮬레이션의 시간 기간을 나타낸다. 사용자의 요청은 또한, 신호들을 트레이싱하는 로직에 의해 하드웨어 상태들이 얼마나 자주 세이브되어야 하는지를 나타내는 샘플링 레이트를 포함할 수 있다.
디버그 모듈은, 매핑 모듈에 의해 저장 모듈에 저장된 정보에 기초하여, 구성요소를 에뮬레이트하도록 구성된, 에뮬레이터(802)의 하나 이상의 FPGA를 식별한다. 각각의 식별된 FPGA에 대해, 디버그 모듈은, 사용자에 의해 나타낸 시간 기간 동안 FPGA의 트레이스 및 주입 로직에 의해 트레이싱된 인터페이스 신호들을 저장 모듈로부터 검색한다(즉, 시간 기간과 연관된 트레이스 및 주입 로직에 의해 트레이싱된 하드웨어 상태들을 검색함).
디버그 모듈은 검색된 인터페이스 신호들을 에뮬레이터(802)에 송신한다. 디버그 모듈은, 요청된 시간 기간에 대해 구성요소를 재-에뮬레이트하기 위해, 디버그 모듈에게 식별된 FPGA들을 실행하도록, 그리고 각각의 식별된 FPGA의 트레이스 및 주입 로직에게 그의 각자의 트레이싱된 신호들을 FPGA의 로직 내에 주입하도록 명령한다. 디버그 모듈은 또한, 트레이싱 로직이 하드웨어 상태들을 적절한 간격들로 트레이싱하도록, 사용자에 의해 제공된 샘플링 레이트를 에뮬레이터(802)에 송신할 수 있다. 구성요소를 디버깅하기 위해, 에뮬레이터(802)는 단지 구성요소가 매핑된 FPGA들을 실행하기만 하면 된다. 추가적으로, 구성요소의 재-에뮬레이션은 처음부터 시작할 필요가 없고, 사용자가 원하는 임의의 포인트에서 시작할 수 있다.
식별된 FPGA에 대해, 디버그 모듈은, 식별된 FPGA의 동일한 구성을 다수의 에뮬레이터 FPGA들에 로딩하라는 명령어들을 에뮬레이터(802)에 송신할 수 있다. 디버그 모듈은 추가적으로, 에뮬레이터(802)에게 다수의 FPGA들을 병렬로 실행하도록 명령한다. 다수의 FPGA들로부터의 각각의 FPGA는, 더 짧은 양의 시간 내에 더 큰 시간 윈도우를 생성하기 위해, 인터페이스 신호들의 상이한 시간 윈도우로 실행된다. 예컨대, 식별된 FPGA가 특정 양의 사이클들을 실행하기 위해서는 1시간이 걸릴 수 있다. 그러나, 식별된 FPGA의 구성이 다수의 FPGA들에 로딩되고, FPGA들 각각이 사이클들의 서브세트를 실행하는 경우, FPGA들이 사이클들 모두를 공동으로 실행하는 데 단지 몇 분만이 걸릴 수 있다.
사용자는 재-에뮬레이트할 DUT 신호들의 계층 또는 리스트를 식별할 수 있다. 이를 가능하게 하기 위해, 디버그 모듈은 신호들의 계층 또는 리스트를 에뮬레이트하는 데 필요한 FPGA를 결정하고, 필요한 인터페이스 신호들을 검색하고, 재-에뮬레이션을 위해, 검색된 인터페이스 신호들을 에뮬레이터(802)에 송신한다. 따라서, 사용자는 디버깅/재-에뮬레이트할 DUT의 임의의 요소(예컨대, 구성요소 또는 신호)를 식별할 수 있다.
파형 모듈은 트레이싱된 신호들에 기초하여 파형들을 생성한다. 사용자가 에뮬레이션 실행 동안 트레이싱된 신호의 파형을 보기를 요청하는 경우, 호스트 시스템(801)은 저장 모듈로부터 신호를 검색한다. 파형 모듈은 사용자에게 신호의 플롯을 디스플레이한다. 하나 이상의 신호에 대해, 신호들이 에뮬레이터(802)로부터 수신될 때, 파형 모듈은 신호들의 플롯들을 자동으로 생성할 수 있다.
개시되는 방법 및 장치가 실시예들 및 구현들의 다양한 예들에 관하여 위에서 설명되지만, 개별 실시예들 중 하나 이상에서 설명되는 특정 특징들, 양태들, 및 기능성은 이들의 적용성에 있어서 이들을 설명하는 특정 실시예로 제한되지 않는다는 것을 이해해야 한다. 따라서, 청구되는 발명의 폭 및 범위는 위에서 개시된 실시예들을 설명하는 데 제공된 예들 중 임의의 것에 의해 제한되지 않아야 한다.
본 문서에서 사용되는 용어들 및 문구들, 및 이들의 변형들은, 달리 명시적으로 언급되지 않는 한, 제한적인 것이 아니라 개방형으로 해석되어야 한다. 전술된 것의 예들로서: "포함하는"이라는 용어는 "제한 없이 포함하는" 등을 의미하는 것으로 독해되어야 하고; "예"라는 용어는 논의 중인 아이템의 경우들의 예들(이들의 완전하거나 제한적인 리스트는 아님)을 제공하기 위해 사용되고; 단수 표현의 용어들은 "적어도 하나", "하나 이상" 등을 의미하는 것으로 독해되어야 하고; "종래의", "전통적인", "일반적인", "표준적인", "공지된" 및 유사한 의미의 용어들과 같은 형용사들은 설명되는 아이템을 주어진 시간 기간으로 또는 주어진 시간에 이용가능한 아이템으로 제한하는 것으로 해석되지 않아야 하고, 대신에, 현재 또는 향후의 임의의 시간에 이용가능하거나 또는 공지될 수 있는 종래의, 전통적인, 일반적인, 또는 표준적인 기술들을 포괄하는 것으로 독해되어야 한다. 마찬가지로, 이 문서가 관련 기술분야의 통상의 기술자에게 명백하거나 또는 공지되어 있을 기술들을 지칭하는 경우, 이러한 기술들은 현재 또는 향후의 임의의 시간에 관련 기술분야의 통상의 기술자에게 명백하거나 또는 공지된 기술들을 포괄한다.
"및"이라는 접속사로 연결된 아이템들의 그룹은 이러한 아이템들 각각 및 모두가 그룹에 있을 것을 요구하는 것으로 독해되지 않아야 하고, 오히려, 달리 명시적으로 언급되지 않는 한, "및/또는"으로 독해되어야 한다. 유사하게, "또는"이라는 접속사로 연결된 아이템들의 그룹은 그룹 내의 상호 배타성을 요구하는 것으로 독해되지 않아야 하고, 오히려, 달리 명시적으로 언급되지 않는 한, "및/또는"으로 또한 독해되어야 한다. 게다가, 개시되는 방법 및 장치의 아이템들, 요소들, 또는 구성요소들이 단수형으로 설명 또는 청구될 수 있지만, 단수형으로의 제한이 명시적으로 언급되지 않는 한, 복수형이 그 범위 내에 있는 것으로 고려된다.
일부 경우들에서 "하나 이상", "적어도", "그러나 이에 제한되지 않는", 또는 다른 유사한 문구들과 같은 확장 단어들 및 문구들의 존재는, 그러한 확장 문구들이 없을 수 있는 경우들에서, 더 좁은 경우가 의도 또는 요구되는 것을 의미하는 것으로 독해되지 않아야 한다. "모듈"이라는 용어의 사용은 모듈의 일부로서 설명 또는 청구되는 구성요소들 또는 기능성이 모두 공통 패키지로 구성되는 것을 암시하는 것이 아니다. 실제로, 제어 로직이든 다른 구성요소들이든 간에, 모듈의 다양한 구성요소들 중 임의의 것 또는 모두는 단일 패키지로 조합될 수 있거나 또는 개별적으로 유지될 수 있고, 추가로, 다수의 그룹들 또는 패키지들로 또는 다수의 위치들에 걸쳐 분산될 수 있다.
추가적으로, 본원에서 제시되는 다양한 실시예들은 블록도들, 흐름도들, 및 다른 예시들의 도움으로 설명된다. 본 문서를 읽은 후 관련 기술분야의 통상의 기술자에게 명백하게 될 바와 같이, 예시되는 실시예들 및 이들의 다양한 대안들은 예시되는 예들에 구속되지 않으면서 구현될 수 있다. 예컨대, 블록도들 및 이들에 수반되는 설명은 특정 아키텍처 또는 구성을 강제하는 것으로 해석되지 않아야 한다.
Claims (11)
- 복수의 타이밍 아크(timing arc)들 및 엔드포인트들을 갖는 집적 회로(IC)에 대해 타이밍 수율을 컴퓨팅하기 위한 방법으로서,
상기 타이밍 아크들의 복수의 서브세트들 각각의 서브세트는 엔드포인트와 연관되고,
상기 방법은,
a) 제1 IC 샘플의 각각의 타이밍 아크와 연관된 속도 인덱스를 생성하는 단계 ― 공통 타이밍 아크들에 대해 동일한 속도 인덱스가 사용됨 ―;
b) 상기 연관된 속도 인덱스, 상기 타이밍 아크의 지연 분포, 및 경로 컨텍스트에 기초하여, 상기 제1 IC 샘플의 각각의 타이밍 아크에 대해 제1 지연 샘플을 생성하는 단계;
c) 상기 제1 IC 샘플의 각각의 엔드포인트에 대해 슬랙(slack)을 결정하는 단계;
d) 상기 제1 IC 샘플에 대해 결정된 슬랙들 중에서 최악의 슬랙을 결정하는 단계;
e) 복수의 IC 샘플들에 대해 단계 a) 내지 단계 d)를 반복하는 단계; 및
f) 상기 IC 샘플의 총 수에 대한 음이 아닌 값을 갖는 결정된 최악의 슬랙의 수의 비율에 기초하여, 상기 IC에 대해 타이밍 수율을 결정하는 단계
를 포함하는, 방법. - 제1항에 있어서,
각각의 타이밍 아크에 대한 지연 분포는 변동 인식 타이밍 분석에 기초하여 결정되는, 방법. - 제1항에 있어서,
상기 타이밍 아크들의 서브세트는 시뮬레이팅되는 셀을 통하는 신호 경로를 포함하는, 방법. - 제1항에 있어서,
속도 인덱스 샘플들은 몬테 카를로 값 생성기에 의해 생성되는, 방법. - 제1항에 있어서,
상기 타이밍 아크들의 각각의 서브세트에 대해 상기 슬랙을 결정하는 것은 상기 서브세트의 각각의 타이밍 아크에 대한 지연 샘플들을 합산하는 단계를 포함하는, 방법. - 제3항에 있어서,
상기 공통 타이밍 아크들은 제1 신호 경로 및 제2 신호 경로 상의 타이밍 아크를 포함하고, 상기 제1 신호 경로 상의 상기 타이밍 아크의 지연은 상기 제2 신호 경로 상의 상기 타이밍 아크의 지연과 상이한, 방법. - 제6항에 있어서,
모든 타이밍 아크들에 대한 지연 샘플들을 포함하는 요소들을 갖는 지연 매트릭스를 생성하는 단계를 더 포함하고,
각각의 지연 매트릭스는 시뮬레이팅되는 샘플 셀을 표현하는, 방법. - 복수의 셀들을 갖는 집적 회로(IC)에서 타이밍 병목 셀(bottleneck cell)들을 결정하기 위한 방법으로서,
각각의 셀은 복수의 타이밍 아크들을 갖고,
상기 방법은,
a) 복수의 IC 샘플들에 대해 지연 매트릭스를 생성하는 단계;
b) 상기 복수의 IC 샘플들 각각에 대한 설계 슬랙 및 상기 복수의 IC 샘플들에 대한 설계 슬랙 분포를 결정하는 단계;
c) 상기 복수의 IC 샘플들에 걸쳐 제1 타이밍 아크에 대해 지연 분포를 결정하는 단계;
d) i. 상기 설계 슬랙 분포와
ii. 상기 제1 타이밍 아크에 대한 지연들의 지연 분포
의 교차 모멘트(cross moment)의 값을 컴퓨팅하는 단계;
e) 상기 IC의 각각의 타이밍 아크에 대해 단계 c) 및 단계 d)를 반복하는 단계; 및
f) 미리 결정된 임계치를 초과하는 값을 갖는 교차 모멘트를 발생시키는 타이밍 아크를 갖는 셀들을 결정하고, 그 셀들을 타이밍 병목들인 것으로 결정하는 단계
를 포함하는, 방법. - 컴퓨터 시스템으로서,
a) 전자 설계 자동화(EDA) 모듈을 포함하는 저장 서브시스템; 및
b) 상기 저장 서브시스템으로부터 명령어들을 수신하기 위해 상기 저장 서브시스템에 커플링된 프로세서
를 포함하고,
상기 명령어들은, 상기 프로세서에게,
i. 제1 IC 샘플의 타이밍 아크와 연관된 속도 인덱스를 생성하고 ― 공통 타이밍 아크들에 대해 동일한 속도 인덱스가 사용됨 ―;
ii. 상기 연관된 속도 인덱스, 상기 타이밍 아크의 지연 분포, 및 경로 컨텍스트에 기초하여, 상기 제1 IC 샘플의 각각의 타이밍 아크에 대해 제1 지연 샘플을 생성하고;
iii. 상기 제1 IC 샘플의 각각의 엔드포인트에 대해 슬랙을 결정하고;
iv. 상기 제1 IC 샘플에 대해 결정된 슬랙들 중에서 최악의 슬랙을 결정하고;
v. 복수의 IC 샘플들에 대해 i. 내지 iv.를 반복하고;
vi. 상기 IC 샘플의 총 수에 대한 음이 아닌 값을 갖는 결정된 최악의 슬랙의 수의 비율에 기초하여, 상기 IC에 대해 타이밍 수율을 결정하도록
지시하는, 컴퓨터 시스템. - 제9항에 있어서,
상기 저장 서브시스템으로부터 수신된 명령어들은, 상기 프로세서에게, 특정 셀의 최대 수의 샘플에서 음의 슬랙을 갖는 상기 특정 셀의 경로들을 식별하고, 식별된 경로들에서 음의 슬랙의 가능성을 감소시키도록 상기 특정 셀의 설계를 조정하도록 지시하는, 컴퓨터 시스템. - 제9항에 있어서,
상기 저장 서브시스템으로부터 수신된 명령어들은, 상기 프로세서에게,
a) 복수의 IC 샘플들에 대해 지연 매트릭스를 생성하고,
b) 상기 복수의 IC 샘플들 각각에 대한 설계 슬랙 및 상기 복수의 IC 샘플들에 대한 설계 슬랙 분포를 결정하고,
c) 상기 복수의 IC 샘플들에 걸쳐 제1 타이밍 아크에 대해 지연 분포를 결정하고,
d) i. 상기 설계 슬랙 분포와
ii. 상기 제1 타이밍 아크에 대한 지연들의 지연 분포
의 교차 모멘트의 값을 컴퓨팅하고,
e) 상기 IC의 각각의 타이밍 아크에 대해 c) 및 d)를 반복하고,
f) 미리 결정된 임계치를 초과하는 값을 갖는 교차 모멘트를 발생시키는 타이밍 아크를 갖는 셀들을 결정하고, 그 셀들을 타이밍 병목들인 것으로 결정하도록
지시하는, 컴퓨터 시스템.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962810504P | 2019-02-26 | 2019-02-26 | |
US62/810,504 | 2019-02-26 | ||
PCT/US2020/019994 WO2020176684A1 (en) | 2019-02-26 | 2020-02-26 | Novel method to compute timing yield and yield bottleneck using correlated sample generation and efficient statistical simulation |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20210129071A true KR20210129071A (ko) | 2021-10-27 |
Family
ID=69941513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020217026952A KR20210129071A (ko) | 2019-02-26 | 2020-02-26 | 상관된 샘플 생성 및 효율적인 통계적 시뮬레이션을 사용하여 타이밍 수율 및 수율 병목을 컴퓨팅하기 위한 신규한 방법 |
Country Status (5)
Country | Link |
---|---|
US (1) | US12112108B2 (ko) |
EP (1) | EP3931738A1 (ko) |
KR (1) | KR20210129071A (ko) |
CN (1) | CN113474780A (ko) |
WO (1) | WO2020176684A1 (ko) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8095906B2 (en) * | 2008-12-29 | 2012-01-10 | Altera Corporation | Method and apparatus for performing parallel routing using a multi-threaded routing procedure |
WO2020176684A1 (en) | 2019-02-26 | 2020-09-03 | Synopsys, Inc. | Novel method to compute timing yield and yield bottleneck using correlated sample generation and efficient statistical simulation |
CN112597716B (zh) * | 2020-12-14 | 2023-09-15 | 南京华大九天科技有限公司 | 一种基于sta与spice模型仿真筛选瓶颈单元的方法 |
TWI835197B (zh) * | 2021-11-18 | 2024-03-11 | 國立成功大學 | 製造程序之最佳良率路徑之搜尋方法及其系統 |
CN117371386B (zh) * | 2023-12-08 | 2024-04-02 | 奇捷科技(深圳)有限公司 | 电路布局更新方法、装置、设备及存储介质 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5365463A (en) * | 1990-12-21 | 1994-11-15 | International Business Machines Corporation | Method for evaluating the timing of digital machines with statistical variability in their delays |
US7401307B2 (en) * | 2004-11-03 | 2008-07-15 | International Business Machines Corporation | Slack sensitivity to parameter variation based timing analysis |
JP2006146345A (ja) * | 2004-11-16 | 2006-06-08 | Matsushita Electric Ind Co Ltd | 半導体集積回路の設計方法及びその設計装置 |
US7620921B2 (en) * | 2007-04-27 | 2009-11-17 | International Business Machines Corporation | IC chip at-functional-speed testing with process coverage evaluation |
US8239798B1 (en) | 2007-08-03 | 2012-08-07 | Cadence Design Systems, Inc. | Methods, systems, and apparatus for variation aware extracted timing models |
JP5076832B2 (ja) * | 2007-11-22 | 2012-11-21 | 富士通株式会社 | 遅延解析支援プログラム、該プログラムを記録した記録媒体、遅延解析支援装置、および遅延解析支援方法 |
US7886247B2 (en) * | 2008-04-29 | 2011-02-08 | International Business Machines Corporation | Method and apparatus for statistical path selection for at-speed testing |
US9292641B2 (en) * | 2012-12-26 | 2016-03-22 | Synopsys, Inc. | Timing bottleneck analysis across pipelines to guide optimization with useful skew |
WO2020176684A1 (en) | 2019-02-26 | 2020-09-03 | Synopsys, Inc. | Novel method to compute timing yield and yield bottleneck using correlated sample generation and efficient statistical simulation |
-
2020
- 2020-02-26 WO PCT/US2020/019994 patent/WO2020176684A1/en unknown
- 2020-02-26 KR KR1020217026952A patent/KR20210129071A/ko unknown
- 2020-02-26 US US17/433,595 patent/US12112108B2/en active Active
- 2020-02-26 CN CN202080015783.4A patent/CN113474780A/zh active Pending
- 2020-02-26 EP EP20713484.2A patent/EP3931738A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20220129611A1 (en) | 2022-04-28 |
WO2020176684A1 (en) | 2020-09-03 |
US12112108B2 (en) | 2024-10-08 |
CN113474780A (zh) | 2021-10-01 |
EP3931738A1 (en) | 2022-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12112108B2 (en) | Method to compute timing yield and yield bottleneck using correlated sample generation and efficient statistical simulation | |
US11836641B2 (en) | Machine learning-based prediction of metrics at early-stage circuit design | |
US10949591B1 (en) | Hardware based state signature generation and check for test and debug of semiconductor circuit functionality | |
US10846455B2 (en) | Automatic definition and extraction of functional coverage metric for emulation-based verification | |
US10867091B1 (en) | Machine learning based power optimization using parallel training and localized data generation | |
US10796048B1 (en) | Adding delay elements to enable mapping a time division multiplexing circuit on an FPGA of a hardware emulator | |
US10878153B1 (en) | Apparatuses and methods for accurate and efficient clock domain and reset domain verification with register transfer level memory inference | |
US10949589B2 (en) | Method for compression of emulation time line in presence of dynamic re-programming of clocks | |
US11763053B2 (en) | Coherent observability and controllability of overlaid clock and data propagation in emulation and prototyping | |
US11636388B1 (en) | Machine learning-based algorithm to accurately predict detail-route DRVS for efficient design closure at advanced technology nodes | |
US11003819B1 (en) | Method to enable multiple users of embedded-software debug to share a single hardware resource | |
US11327790B1 (en) | Event-level parallel simulation using dynamic synchronization | |
US11275877B2 (en) | Hardware simulation systems and methods for reducing signal dumping time and size by fast dynamical partial aliasing of signals having similar waveform | |
US10515170B1 (en) | Deep insight for debug using internal equivalence visualization and counter-example for sequential equivalence checking | |
US11475197B2 (en) | Hardware simulation systems and methods for identifying state-holding loops and oscillating loops | |
US11022634B1 (en) | Rail block context generation for block-level rail voltage drop analysis | |
US11475293B1 (en) | Learning-based toggle estimation | |
US10579760B2 (en) | Force/release support in emulation and formal verification | |
US11343110B2 (en) | Phantom object reporting in a power-and-ground router | |
US11176293B1 (en) | Method and system for emulation clock tree reduction | |
CN112818627A (zh) | 电路设计、测试和/或制造的更有效/有用的电子结构 | |
CN112883679A (zh) | 在多电压设计中加油站的自动生成 | |
CN116245073A (zh) | 可扩展片上系统(soc)级连接性验证的简化形式模型的创建 |