KR20110086587A - 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법 - Google Patents

순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법 Download PDF

Info

Publication number
KR20110086587A
KR20110086587A KR1020117012932A KR20117012932A KR20110086587A KR 20110086587 A KR20110086587 A KR 20110086587A KR 1020117012932 A KR1020117012932 A KR 1020117012932A KR 20117012932 A KR20117012932 A KR 20117012932A KR 20110086587 A KR20110086587 A KR 20110086587A
Authority
KR
South Korea
Prior art keywords
module
electrical
port
wrapper
files
Prior art date
Application number
KR1020117012932A
Other languages
English (en)
Other versions
KR101275486B1 (ko
Inventor
마크 에이치 노다인
Original Assignee
애플 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 애플 인크. filed Critical 애플 인크.
Publication of KR20110086587A publication Critical patent/KR20110086587A/ko
Application granted granted Critical
Publication of KR101275486B1 publication Critical patent/KR101275486B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3323Design verification, e.g. functional simulation or model checking using formal methods, e.g. equivalence checking or property checking

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

이 명세서는 순차적 등가성 검사를 위한 재구성된 디지털 논리 설계들을 준비하기 위해 도 7에서 설명된 방법을 설명한다. 이 방법은 처음에 복수의 포트들을 포함하는 전기 설계 모듈의 기술, 및 하나 이상의 참조 모듈들의 계층 구조를 포함하는 전기 참조 모델의 기술로부터 시작되고, 각각의 상기 참조 모듈은 복수의 내부 신호들을 포함한다. 또한, 이 방법은 추가적인 최초 정보를 갖는 구성 파일을 포함한다. 이 방법은 그 후 구성 파일을 처리한다(100). 그 후, 이 방법(105)은 하나 이상의 출력 파일들을 계산한다. 마지막으로, 이 방법(110)은 출력 파일들을 기록한다.

Description

순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법{A METHOD FOR PREPARING RE-ARCHITECTED DESIGNS FOR SEQUENTIAL EQUIVALENCE CHECKING}
이 발명은 일반적으로 반도체 집적 회로 설계의 검증(verification) 분야에 속하고, 특히 순차적 최적화 기법들을 이용하여 수정된 설계가 그것의 최초의 설계와 동등한 것을 검증하는 경우의 반도체 집적 회로 설계의 검증 분야에 속한다. 이 발명은 다르지만 대응하는 설계들을 취하여 이것들이 상업 순차적 최적화 도구들(commercial sequential optimization tools)을 이용하여 비교될 수 있도록 하기 위한 회로를 생성한다.
복잡한 IC 설계들의 기능 확인(validation)(검증)은 일반적으로 설계를 생성하기 위한 엔지니어링 인력-시간(engineering man-hours)의 대부분을 소비하는 활동이다. 검증의 프로세스는 설계 구현의 출력을 어떤 설계 참조 모델에 의해 기대되는 것과 대조하는 것을 수반한다.
반도체 칩들의 검증은 시뮬레이션을 통하여 또는 정형 기법들(formal methods)을 이용하여 행해질 수 있다. 시뮬레이션 검증은 설계에 대해 일련의 테스트들을 실행하고 그 테스트들의 결과들을 소망 결과들을 생성하는 참조 모델과 비교하는 것을 수반한다.
정형 검증 기법은 개개의 테스트 사례들의 시뮬레이션들에 의지하기보다는 관심 특성(property of interest)을 증명하기 위해 회로들의 수학적 모델들을 이용한다는 점에서 시뮬레이션 검증과 구별된다. 정형 기법의 이점은, 이것이 작동할 때, 이것은 모든 가능한 테스트 사례의 철저한 시뮬레이션(exhaustive simulation)을 행하는 것과 동등하다는 것이다. 철저한 시뮬레이션은 이것만으로 상태 공간의 사이즈 때문에 회로들의 가장 사소한 것 외에는 어떤 것에 대해서도 실용적이지 않다.
정형 기법들은 이것들의 수학적 증명들을 달성하기 위해 BDD(binary decision diagram), OBDD(ordered BDD), STA(symbolic trajectory analysis), SAT(satisfiability solver), 및 BSAT(bounded satisfiability solver)를 포함하는 다수의 기법들을 이용한다. 모든 이러한 기법들에서의 공통의 맥락(common thread)은 이것들이, 컴퓨터 과학 용어로, NP-완전(NP-complete) 문제들을 가진 알고리즘들이라는 것이다. 상세히 말하지는 않지만, 수년간의 연구에도 불구하고, 아무도 최악의 경우의 실행 시간이 입력 크기 면에서 지수적으로 증가하지 않는 아무 알고리즘이라도 찾아내어 NP-완전 문제를 해결하는 것에 성공하지 못했다. 따라서 사람들은 적당한 시간 안에 문제들을 해결해보기 위해 발견적 방법(heuristics)에 의지해야 한다.
하나의 중요한 유형의 정형 기법은, 2개의 회로가 동일한 기능을 수행하는 것을 검증하기 위해 이용되는, 등가성 검사(equivalence checking)이다. 이 회로들 중 하나는 회로의 이상적인 거동을 특정하는 참조 모델인 것으로 간주되고; 다른 회로는 그의 거동이 참조 모델과 비교될 설계 모델이다. 일례는 RTL(register transfer level) 회로를 이것을 게이트-레벨 넷리스트(gate-level netlist)로 합성한 결과들과 비교하는 것이다. 등가성 검사에 의해, 설계 프로젝트는, 보다 빠르게 시뮬레이션하는, RTL 설계에 대한 검증 시뮬레이션 사이클들의 대부분을 행할 수 있고, 그 후 합성 동안에 어떤 버그도 도입되지 않았다는 것을 보증하기 위해 등가성 검사를 이용할 수 있다.
2개의 회로가 동일하기 위해서는, 각각은 동일한 수의 주 입력들(primary inputs, PIs) 및 동일한 수의 주 출력들(primary outputs, POs)을 가져야 하고, 대응하는 입력들/출력들을 식별하기 위한 어떤 방법이 있어야 한다. 상업적 조합 등가성 도구들(commercial combinational equivalence tools)은 또한 2개의 설계들의 내부 순차적 엘리먼트들(래치들 또는 플롭들) 사이의 완전한 대응을 요구한다. 이러한 매칭(matching)에 기초하여, 이 도구들은 상태 유지 엘리먼트들의 임의의 2개의 대응하는 쌍들을 연결하는 조합 회로를 BDD(binary decision diagram) 같은 표준 형식(canonical form)으로 변환하고 동등(equality)에 대하여 비교한다. 만약 대응하는 조합 회로들의 임의의 쌍이 매칭하지 않는다면, 등가성은 실패한다. 대응점(correspondence point)들을 이용함으로써, 도구들은 임의의 한 시점에서 다루어질 조합 회로들의 사이즈를 최소로 유지할 수 있어, 잠재해 있는 NP-완전성 문제에 의해 야기되는 용량 문제들을 사실상 제거한다.
유감스럽게도, 이러한 등가성의 관점(view of equivalence)은 속도 또는 전력을 최적화하기 위해 유용한 다수의 변환들을 다루기에는 너무 제한적이다. 순차적 엘리먼트들 사이의 회로들의 대응을 깨면서 PI들 및 PO들에서의 계산의 동등을 유지하는, 다음과 같은, 회로에 대한 많은 수정들이 있다:
1. 상태 기계들의 리코딩(recoding)
2. 래치 경계들에 걸쳐 논리를 이동시키는 것에 의한 리타이밍(retiming)
3. 클록 게이팅
4. 파이프라인 단계 삽입/제거
5. 리소스 할당
순차적 엘리먼트들의 매칭이 추정될 수 없는 일반화된 문제는, 활발한 연구 분야인, 순차적 등가성 검사라고 불린다. 순차적 등가성 검사 문제 분야는 조합 등가성 검사의 문제 분야보다 훨씬 더 어렵고, 따라서 순차적 등가성을 제공하기 위한 임의의 알고리즘들의 적용은 리소스 한계들 때문에 실패할 수 있다.
설계 모듈을 최적화할 때, 유효하지 않은 입력들의 경우에 출력들이 매칭할 필요는 없다. 이 문제를 다루기 위해, 상업적 순차적 등가성 도구들은 입력 제약들의 세트들이 특정되는 것을 허용한다. 이상적으로, 입력 제약들은 검증될 설계에 대한 정당한 입력 공간을 정확히 특정한다. 유감스럽게도, 제약들 자체는 인간의 실수를 겪기 쉽고 검증을 필요로 한다. 만약 과도하게 제한된 제약들의 세트가 특정되면, 2개의 설계는, 비록 이것들이 입력 제약들에 의해 부정확하게 제외된 정당한 입력들에 대한 상이한 출력들을 가질 수 있음에도, 동등한 것으로서 비교할 수 있다.
마찬가지로, 최적화된 설계 모듈의 출력이 그 출력이 유효하지 않은 임의의 시간 기간 동안에 참조 모델과 매칭할 필요는 없다. 예를 들면, 메모리 모듈로부터 나오는 데이터 라인들은 메모리에 대한 판독 동작이 데이터가 판독되도록 야기할 때 매칭하기만 하면 된다. 출력이 유효하지 않은 시간 동안에 검사가 억제되도록 허용하기 위해, 상업적 순차적 등가성 검사 도구들은 유효 마스크를 계산하는 회로가 유효 마스크가 부울(Boolean) TRUE를 인코딩하는 값을 갖지 않을 때 검사가 불능(disable)이 되도록 특정되는 것을 허용한다.
공격적인 타이밍 목표들을 만족시키기 위해, 모듈들의 경계들을 수정하고 및/또는 모듈간 경계들에 대한 신호 타이밍을 변경하는 것이 종종 필요하다. 몇몇 신호들은 또한 최초의 설계에 관하여 최적화된 설계에서 리인코딩(re-encode)될 수 있다.
만약 탑 레벨 설계에 대한 등가성 검사를 실행하는 것이 가능하다면, 그 밖에 아무것도 필요하지 않을 것이다. 그러나, 순차적 등가성 검사 도구들에서의 용량 문제 때문에, 설계를 보다 작은 부분들로 분해하고 블랙박스들을 사용하는 것이 필요하다. 도 1은 블랙박싱이 어떻게 작동하는지를 설명한다. 모듈 B는 이미 이것의 대응하는 참조 모듈과 동등한 것으로 밝혀졌고 모듈 A는 3개의 입력 및 2개의 출력을 갖는 모듈 B를 인스턴스화(instantiate)한다고 가정한다. 그러면 우리는, 설계가 그와 대조하여 동등한 것으로 판명되는 참조 모델에서 유사한 블래박싱이 일어나면서, B의 입력들을 이것들이 A의 PO들인 것처럼 간주하고 B의 출력들을 이것들이 A의 PI들인 것처럼 취급하여 A의 형식적 등가성 검사(formal equivalence check)를 수행한다. 모든 최적화된 설계 모듈들에 걸쳐서 등가성을 검증함으로써 전체적인 등가성(global equivalence)이 달성된다.
위에 언급된 바와 같이, 형식적 등가성 검사 도구들이 작동하기 위해서는, 이 도구들은 2개의 모듈들이 동일한 PI들 및 PO들을 가질 것을 요구한다. 그러나, 등가성 검사를 계층적으로 분해할 때, 변경된 경계들, 리타이밍된 포트들, 또는 인코딩된 포트들로 인해 참조 모델과 다른 설계 모듈들이 있을 수 있다. 모듈의 경계가 어떻게 리드로잉되고(redrawn), 리타이밍되고, 인코딩되는지에 관한 모든 정보는 개시된 발명에 기재된 모듈 구성에 포함된다.
이 방법은 참조 모델을 판독하고, 최적화된 설계 모듈에 대한 구성 파일을 판독하고, 래퍼들(wrappers)은 동일한 타이밍을 갖는 동일한 PI들 및 PO들을 갖지만 하나는 참조 모델을 인캡슐레이트(encapsulate)하고 다른 하나는 설계 모듈을 인캡슐레이트하도록, 수정된 참조 모델들의 세트 및 래퍼들의 쌍을 생성한다. 만약 2개의 래퍼들이 동등한 것으로 판명되면, 이 증명은 설계 모듈이 이것의 구성 파일에서 특정된 인터페이스 변경들을 충실히 구현하는 것을 보증한다.
설계 모듈에 대한 구성 파일은 설계 모듈의 포트들 각각에 대하여 다음의 정보를 포함한다:
1. 참조 모델 내의 신호들의 어떤 부울 조합에 기초하여 설계 모듈 포트의 등가물을 어떻게 생성하는지를 특정하는 참조 연결(reference connection).
2. 항등 함수(identity function)로 디폴팅하고, 참조 연결을 설계 모듈 포트로 변환하는(translate) 인코딩 함수(encoding function). 인코딩 함수는 부울 조합의 특수한 경우로, 구체적으로 다중 비트 신호를 상이한 표현으로 변환하기 위한 것이다. 인코딩 함수의 예는 이진 인코딩을 원-핫 인코딩(one-hot encoding)으로 변환하는 것이다. 인코딩 함수들은 단순한 편의 사항이고 개시된 발명에 어떤 추가적인 응용 영역도 더하지 않는다.
3. 지연을 지원하는 이 발명의 실시예에서, 설계 모듈 포트의 타이밍이 참조 연결의 타이밍과 어떻게 관련이 있는지에 대한, 0으로 디폴팅하는, 클록 사이클 단위의 지연 값(delay value). 양수(positive) 값들은 설계 모듈 포트가 참조 연결보다 더 늦게 변화하고 음수(negative) 값들은 그것이 더 일찍 변화하는 것을 의미한다.
4. 유효 마스크들을 지원하는 개시된 발명의 실시예에서, 출력 포트의 값이 이것의 참조 표현과 매칭할 것으로 기대되는 경우를 특정하는, 참조 모델 내의 신호들로의 참조들을 가능하게는 포함하는, 부울 TRUE로 디폴팅하는, 부울 표현식(Boolean expression)인 유효 마스크(valid mask).
이 출원은 모든 목적을 위해 이 명세서에 참고로 통합되는, 2008년 11월 7일에 출원된, 더 일찍이 출원된 미국 가출원 일련 번호 61/112,537의 이익을 주장한다.
[발명의 개요]
이 발명은 순차적 등가성 검사 도구에 사용하기 위해 참조 모델 내의 어떤 서브 회로(sub-circuit)와 대조하여 재설계된 논리 설계를 비교하기 위한 회로를 생성하기 위한 방법이다.
실제 등가성 검사는, 하나는 참조 모델을 인캡슐레이트하고 하나는 설계 모델을 인캡슐레이트하는, 동일한 주 입력들(PI들) 및 주 출력들(PO들)을 갖는 탑 레벨 래퍼 파일들(top-level wrapper files)의 세트 사이에 행해진다. 예를 들면, 참조 모듈 B 및 설계 인스턴스(design instance) b가 있고, b의 입력들 및 출력들은, 도 2에 개략적으로 도시된대로, B의 입력들 및 출력들에 상대적으로 자기들에게 적용된 어떤 인코딩 함수(들)를 갖는다는 점에서만 다르다고 가정한다. 개시된 발명의 출력들은 B 및 b를 각각 래핑하는 참조 래퍼(reference wrapper) WR 및 설계 래퍼(design wrapper) WD이고, 입력들 및 출력들이 정확히 대응하도록, 원 안에 "f"로 표현되어 있는, 인코딩 함수들이 삽입되어 있다.
때때로 설계 모듈의 참조 연결들에서 그 신호들이 참조되는 참조 모델 내의 하나 이상의 모듈들은 탑 레벨 모듈들이 아니다. 참조 모델의 내부 모듈들 내에 있는 신호들에의 액세스를 허용하기 위해, 개시된 발명은 계층 구조(hierarchy)의 하위 레벨들로 통하여 지나가는(pass through) 추가적인 포트들을 포함하는 것 외에도, 참조 모듈들을 흉내내는(mimic) 계층적 오버라이드 파일들(hierarchical override files)이라 불리는 계층적 모듈들의 세트를 생성할 필요가 있다. 대응하는 참조 모듈 바로 위의 모듈은 임의의 입력 포트들을 이것들의 주위의 모듈로부터 분리하고 대신에 이것들을 새로이 도입된 입력들에 연결하도록 재기록(rewrite)될 필요가 있다.
간단한 예로서, 도 3에 도시된 바와 같이, 설계 모듈 b에 대응하는 참조 모듈 B가 참조 모델로서 사용되는 참조 모듈 C에 의해 예증(instance)된다고 가정한다. B는 2개의 출력들 o1 및 o2와 함께 3개의 입력들 i1, i2, 및 i3를 갖는다고 가정한다. 개시된 발명은 참조 래퍼 WR 및 설계 래퍼 WD를 출력한다. B의 i1, i2, 및 i3에 입력들을 전달하기 위해, 개시된 발명은 B의 입력들에게까지 와이어링되는(wired through) 여분의 포트들을 포함하는 모듈 C의 수정된 버전 C'를 생성하여 C로부터의 이전의 입력들을 대체할 필요가 있다. 유사하게, C'는 o1 및 o2의 값들을 참조 래퍼에게 익스포트(export)하는 여분의 출력 포트들을 포함할 필요가 있다. 인코딩 함수들은 도 2에 동등하게 적용된다. 비록 이 예는 계층 구조의 단 하나의 레벨에 대한 오버라이드 파일을 설명하였지만, 이 개념은 당연히 다수의 레벨들로 확장된다.
이제 참조 모델의 경계들에 상대적으로 설계 모듈의 경계들이 리드로잉되는, 즉, 설계 모듈에 대응하는 참조 내의 어떤 하나의 모듈도 존재하지 않는 경우들을 다루는 방법을 설명한다.
먼저 도 4에 도시된 바와 같이 참조 모듈 B에 상대적으로 어떤 논리가 제거된 설계 모듈 b의 경우를 고찰한다. 가장 간단한 경우에, b의 포트들은 B의 포트들 또는 내부 신호들에 대응한다. 예를 들면, b는 B의 입력들 1 및 2에 대응하는 입력들 1' 및 2' 및 내부 신호 m에 대응하는 입력 3'를 갖는다고 가정한다. 또한 이것은 B의 내부 신호 n의 인코딩된 버전에 대응하는 출력 x'를 갖는다고 가정한다. 개시된 발명은, 이전에 자신을 구동한 모든 논리로부터 분리되는, 내부 신호 m을 구동하는 외부 입력 포트를 갖는 것 외에는 모듈 B와 동일한 모듈 B'와 함께 참조 래퍼 WR 및 설계 래퍼 WD를 생성한다. B'는 신호 n에 액세스하는 새로운 출력 포트를 또한 포함한다. 래퍼는 그 후 새로이 생성된 이런 포트들을 최초의 포트들과 동일한 방식으로 취급한다.
이 상황은 b의 새로운 포트들이 B 내의 신호들의 부울 조합으로 식별되는 보다 일반적인 경우의 특수한 경우이다. 도 5는 b가 m1 및 m2의 AND로서 식별된 입력 포트 및 n1 및 n2의 AND로서 식별된 출력 포트를 갖는다고 가정한 이 경우를 도시하는데, 이 기법은 임의의 수의 신호들의 임의의 부울 조합까지 일반화된다.
다음으로, 도 6에 도시된 바와 같이 추가적인 논리를 갖는 모듈들의 경우를 다루는 방법을 설명한다. 이 도면에서, 설계 모듈 b는 선행 모듈(predecessor module) A 및 후속 모듈(successor module) C의 일부 부분들과 함께 참조 모듈 B의 전부를 포함한다고 가정한다. 또한 D는 A, B, 및 C를 포함하는 어떤 설계 모듈이라고 가정한다[계층 구조의 개재하는 레벨들(intervening levels)이 있을 수 있다]. 개시된 발명은, 전과 같이, 2개의 래퍼들 WR 및 WD를 생성할 뿐만 아니라, b의 입력 포트들에 의해 식별되는 A의 내부 신호들 및 b의 입력들에 대응하는 B의 입력들에 도달하기 위한 추가적인 입력 포트들을 갖고, 또한 b의 출력 포트들에 의해 식별되는 C의 내부 신호들 및 b의 출력들에 대응하는 B의 출력들을 익스포트하기 위한 추가적인 출력 포트들을 갖도록 수정된 D의 새로운 버전 D'를 (A 및 B에 도달하기 위해 필요할 수 있는 계층 구조의 모든 개재하는 레벨들과 함께) 생성한다. 이것은 또한 이것의 내부 신호들을 이것들의 구동하는 논리로부터 분리하고 대신에 이것들을 새로이 생성된 포트들에 연결한, b의 입력 포트들에 의해 식별되는 내부 신호들을 구동하기 위해 필요한 여분의 입력 포트들을 갖는 A의 수정된 버전 A'뿐만 아니라, b의 출력 포트들에 의해 식별되는 이것의 내부 신호들을 익스포트하기 위한 여분의 출력 포트들을 갖는 C의 수정된 버전 C'를 출력해야 한다. (A', C', 및 D'는 계층적 오버라이드 파일들의 예들이다.) WD는 WR 내의 대응하는 신호들에 상대적으로 이것들의 적당한 인코딩 함수들을 통하여 이것의 PI들을 전달한다. WR은 마찬가지로 b의 출력 포트들에 대응하는 D'의 출력들을, 이것의 PO들에 와이어링하기 전에 이것들의 인코딩 함수들을 통하여 전달한다.
설명적인 이유로, 상기 논의는 설계 모듈이 어떤 대응하는 참조 모듈보다 더 적은 논리를 구현하는 경우와 이것이 더 많은 논리를 구현하는 경우를 분리하였다. 그러나, 다음의 일반화들을 위해 이 예들을 확장하는 것은 수월하다(straightforward).
1. 어떤 논리가 추가되고 다른 논리가 제거된 것.
2. 그의 논리 중 일부가 설계 모듈에 포함되는, 다수의 선행 또는 후속 참조 모듈들을 갖고 것.
3. 몇몇 참조 모듈들의 전체를 구현하는 설계 모듈을 갖는 것.
4. 다수의 설계 모듈들 사이에 분할되는 참조 모듈을 갖는 것.
5. 추가된 또는 제거된 논리에 대한 신호들의 부울 조합들에 대응하는 포트들을 갖는 것.
개시된 발명의 하나의 실시예에서, 구성 파일은 리타이밍된 포트들을 특정할 수 있다: 설계 모듈의 임의의 입력이 이것의 참조 연결에 상대적으로 어떤 정수의 사이클들만큼 지연될 수 있다. 음수 지연(negative delay)은 설계 포트가 대응하는 참조 연결보다 더 일찍 전이(transition)하는 것을 의미한다.
개시된 발명은 설계 입력 포트들 중 임의의 것의 최대 음수 지연을 계산하고 이 시간을 참조 래퍼 및 설계 래퍼 양쪽 모두에 대한 기초 입력 시간으로 취하는 것에 의해 리타이밍된 포트들을 다룬다. 최대 음수 지연의 것이 아닌 임의의 입력에 대하여 적당한 수의 플롭들이 삽입된다. 참조 모델의 경우에, 모든 입력 포트들은 당연히 제로의 지연을 갖는다. 출력들상의 지연들은, 만약 지연이 양수(positive)이면 설계 래퍼에 여분의 플롭들을 도입하고, 만약 지연이 음수이면 참조 래퍼에 여분의 플롭들을 도입하는 것에 의해 처리된다.
개시된 발명의 하나의 실시예는 그 목적이 하나 이상의 제한되지 않는(unconstrained) 참조 신호들을 입력하고 하나 이상의 제한된(constrained) 참조 신호들을 출력하는 것인 제약 모듈들(constraint modules)을 래퍼들 내에 인스턴스화하는 것에 의해 입력 제약들을 처리한다.
개시된 발명의 하나의 실시예는 출력 검사를 제한하는 유효 마스크들을 순차적 등가성 도구에 의해 사용될 수 있는 개별 파일에 저장하는 것에 의해 유효 마스크들을 처리한다.
본 발명의 이해를 더 돕기 위하여, 첨부 도면들은 본 발명의 특정한 특징들을 설명하는 데 도움이 되고 다음은 첨부 도면들의 간단한 설명이다.
도 1은 블랙박스들을 사용하여 등가성 검사들을 분해하는 것을 설명한다.
도 2는 인코딩 함수들에 대한 래퍼들을 사용하는 간단한 예를 설명한다.
도 3은 계층적 오버라이드 파일의 예를 설명한다.
도 4는 논리가 제거된 참조 모듈에 대응하는 설계 모듈을 설명한다.
도 5는 참조 모듈 내의 내부 신호들의 조합들에 의해 포트들을 식별하는 것을 설명한다.
도 6은 논리가 추가된 참조 모듈에 대응하는 설계 모듈을 설명한다.
도 7은 개시된 발명의 탑 레벨 순서도를 설명한다.
도 8은 도 7의 박스(100)의 방법을 설명한다.
도 9는 도 7의 박스(105)의 방법을 설명한다.
도 10은 도 9의 박스(305)의 방법을 설명한다.
도 11은 도 10의 박스(405) 및 박스(420)의 방법을 설명한다.
도 12는 도 11의 박스(545)의 방법을 설명한다.
도 13은 도 12의 박스(630)의 방법을 설명한다.
도 14는 도 9의 박스(310)의 방법을 설명한다.
도 15는 도 14의 박스(805) 및 박스(820)의 방법을 설명한다.
도 16은 도 15의 박스(945)의 방법을 설명한다.
도 17은 도 9의 박스(315)의 방법을 설명한다.
도 18은 도 9의 박스(320)의 방법을 설명한다.
도 19는 도 18의 박스(1200)의 방법을 설명한다.
도 20은 도 19의 박스(1315), 도 24의 박스(1815), 도 28의 박스(2245), 및 도 29의 박스(2325)의 방법을 설명한다.
도 21은 도 18의 박스(1205)의 방법을 설명한다.
도 22는 도 21의 박스(1515)의 방법을 설명한다.
도 23은 도 22의 박스(1630) 및 도 28의 박스(2230)의 방법을 설명한다.
도 24는 도 22의 박스(1635)의 방법을 설명한다.
도 25는 도 22의 박스(1640) 및 도 28의 박스(2240)의 방법을 설명한다.
도 26은 도 9의 박스(325)의 방법을 설명한다.
도 27은 도 26의 박스(2000)의 방법을 설명한다.
도 28은 도 27의 박스(2125) 및 박스(2145)의 방법을 설명한다.
도 29는 도 26의 박스(2005)의 방법을 설명한다.
도 30은 도 7의 박스(110)의 방법을 설명한다.
도 31은 도 30의 박스(2405) 및 박스(2415)의 방법을 설명한다.
도 32는 도 30의 박스(2430)의 방법을 설명한다.
도 33은 전형적인 네트워크 환경에서의 방법을 설명한다.
본 발명은 순차적 등가성 검사를 위한 재구성된 디지털 논리 설계들을 준비하는 방법이다. 이 명세서는 본 발명의 철저한 이해를 제공하기 위하여 다수의 특정한 상세들을 설명한다. 이 기술 분야의 숙련자는 이러한 특정한 상세들 없이 본 발명을 실시할 수 있다는 것을 인식할 것이다. 또한, 이 명세서는 본 발명을 불명료하게 하지 않기 위하여 몇몇 잘 알려진 아이템들은 설명하지 않는다.
도 33은 전형적인 네트워크 환경에서의 본 발명의 사용을 설명한다. 본 발명은 네트워크 환경에서 하나 이상의 워크스테이션들(10) 상에서 실행하는 소프트웨어 프로그램이다. 다양한 워크스테이션들(10)은 네트워크(12)에 연결되고 거기서 그것들은 서로 통신할 수 있다. 또한, 네트워크 환경은 공유 저장 장치(14) 및 네트워크 서버(16)를 포함한다. 그리고, 네트워크 환경은 인터넷(18)에 연결될 수 있다. 하나 이상의 워크스테이션들(10) 상에서 동작할 수 있는 것 외에도, 본 발명은 공유 저장 장치(14) 및 네트워크 서버(16)의 리소스들을 사용할 수 있다. 본 발명은 또한 인터넷(18)을 통하여 이용 가능한 리소스들을 사용할 수 있다. 본 발명의 하나의 실시예는 리눅스(Linux) 기반의 독립 실행형(standalone) 워크스테이션(10)을 사용하고 해석 언어(interpretive language) PERL 및 TCL을 사용한다. 이 기술 분야의 숙련자는 본 발명이 동작을 위해 다른 언어들을 사용할 수 있고 그것은 다른 운영 체제들에서 호스팅될 수 있다는 것을 인식할 것이다.
개시된 발명은 도 8의 방법을 사용하여 구성 파일을 처리하는 박스(100)에서 시작한다. 다음으로, 개시된 발명은 박스(105)에서 래퍼 및 다른 출력 파일들의 콘텐츠를 계산한다. 박스(105)를 달성하기 위한 방법은 도 9에서 주어진다. 마지막으로, 박스(110)에서 출력 파일들이 기록되고, 그 방법은 도 30에서 설명된다.
구성 파일은, 복수의 포트 정의들을 포함하는, 하나의 탑 레벨 인스턴스 정의(top-level instance definition)를 포함한다. 인스턴스 정의는 참조 모델과 대조하여 검사될 설계 모듈의 이름을 특정한다. 개시된 발명의 하나의 실시예에서, 구성 파일은 또한 그에 대해 블록박스들이 생성될 수 있는 설계 모듈의 복수의 서브-인스턴스 정의들을 특정할 수 있고; 이 서브-인스턴스 정의들은 설계 모듈을 통하여 계층적 경로를 추가로 특정하는 것 외에는 인스턴스 정의와 동일한 정보를 포함한다.
포트 정의는 다음의 정보들을 포함한다:
1. 설계 모듈의 명명된 포트들 중 하나에 대응하는, 설명되고 있는 포트에 대한 이름(name).
2. 참조 모델의 내부 신호들에 의하여 설계 모듈의 포트의 정의를 확립하는, 참조 연결(reference connection):
a. 참조 연결은 부울 상수들 0 및 1 및 복수의 참조 모듈들 내의 복수의 신호들의 부울 조합일 수 있다.
b. 개시된 발명의 하나의 실시예에서, 설계 모듈의 입력 포트에 대한 참조 연결은 입력 제약 모듈에 의해 전처리될 수 있다.
c. 개시된 발명의 하나의 실시예에서, 참조 연결은 VHDL 또는 Verilog와 같은 HDL(High-level Definition language)로 특정된 로컬 신호들을 사용하고, 여기서 각각의 로컬로 정의된 신호는 부울 상수들 0 및 1 및 복수의 참조 모듈들 내의 복수의 신호들의 부울 조합을 이용하여 구동된다.
3. 연결이 설계 모듈의 포트에 대응하기 위해 어떻게 인코딩되어야 하는지를 특정하는 인코딩 함수(encoding function). 그러한 인코딩 함수는 단지 부울 조합의 전부 또는 일부를 특정하는 편리한 대안적인 방법이다. 그것은 개시된 발명의 기본적인 구성 요소는 아니다.
4. 개시된 발명의 하나의 실시예에서, 참조 연결이 설계 모듈의 포트에 대응하기 위해 몇 개의 클록 사이클만큼 지연되어야 하는지를 특정하는 지연(delay). 이 지연은 음수일 수 있다.
도 8은 상기 모든 실시예들을 포함하는 도 7의 박스(100)의 방법을 설명한다. 이 방법의 목적은 구성 파일을 처리하고 그 정보를 구성 레코드들의 세트 안에 저장하는 것이다.
박스(200)에서, 구성 파일을 열고 리스트 inst_list를 탑 레벨 인스턴스 정의 및, 서브-인스턴스들의 블랙박싱을 지원하는 이 발명의 실시예에서, 구성 파일로부터의 서브-인스턴스 정의들로 초기화한다. 또한 리스트 sig_list를 로컬 신호들을 지원하는 이 발명의 실시예에서 구성 파일 내의 로컬 신호 정의들의 리스트로 초기화한다. 그 후, 박스(205)에서, 리스트 inst_list에 미처리된 인스턴스 정의가 있는지를 조사한다. 만약 없다면, 박스(225)로 진행한다. 만약 있다면, 박스(210)로 진행하여, inst를 inst_list의 제1 미처리된 엘리먼트로 설정하고, 리스트 port_list를 인스턴스 inst에 대한 인스턴스 정의가 포함하는 포트 정의들의 세트로 초기화하고 박스(215)로 진행하여, 리스트 port_list에 미처리된 포트 정의가 있는지를 묻는다. 만약 없다면, 박스(205)로 되돌아가고; 만약 있다면 박스(220)로 진행하여, port를 리스트 port_list의 다음 미처리된 포트 정의로 설정하고 포트 port와 관련된 포트 정의로부터의 모든 정보를 인스턴스 inst의 포트 port에 대한 구성 레코드 안에 기록한 다음 박스(215)로 되돌아간다.
박스(225)로부터 시작하여, 리스트 sig_list에 미처리된 로컬 신호 정의가 있는지를 묻는다. 만약 없다면, 박스(235)로 진행하여, 구성 파일을 닫고 종료하고; 만약 있다면, 박스(230)로 진행하여, sig를 리스트 sig_list 내의 다음 미처리된 로컬 신호 정의로 설정하고 신호 sig를 정의하고 구동하기 위한 정보를 신호 sig에 대한 구성 레코드에 기록한다. 그 후 박스(225)로 되돌아간다.
도 9는 도 7의 박스(105)의 방법을 나타낸다. 이 방법의 목적은 순차적 등가성 검사를 수행하기 위해 요구되는 모든 출력 파일들의 콘텐츠를 계산하는 것이다.
박스(300)에서, 참조 래퍼에 대한 새로운 모듈을 정의하고 그 안에 참조 모델을 인스턴스화한다. 또한 설계 래퍼에 대한 새로운 모듈을 정의하고 그 안에 설계 모듈을 인스턴스화한다. 다음으로, 박스(305)는 도 10의 방법을 이용하여 양쪽 래퍼들에 대한 주 입력들(primary inputs)을 계산하고 박스(310)는 도 14의 방법을 이용하여 양쪽 래퍼들에 대한 주 출력들(primary outputs)을 생성한다. 그 후 박스(315)로 진행하여 설계 모듈의 모든 입력 포트들의 최소 지연을 계산하는데, 이것을 달성하는 방법은 도 17에서 설명된다. 다음으로, 박스(320)는 도 18의 방법을 이용하여 래퍼들의 주 입력들에 의해 구동되는 와이어들을 생성하고 박스(325)는 도 26의 방법을 이용하여 래퍼들의 주 출력들을 구동한다.
도 10은 도 9의 박스(305)의 방법을 나타낸다. 이 방법의 목적은 참조 래퍼 및 설계 래퍼 양쪽 모두에 대하여 사용되는 주 입력들의 세트를 생성하는 것이다.
이 방법은 박스(400)에서 설계 모듈을 포함하도록 변수 mod를 설정하고 모듈 모드의 입력 포트들의 리스트를 포함하도록 리스트 port_list를 설정하는 것으로 시작한다. 다음으로, 박스(405)에서, 도 11의 방법을 이용하여 모듈 mod에의 입력들에 대한 주 입력들을 생성한다. 박스(410)로 진행하여, 서브-인스턴스들을 지원하는 본 발명의 실시예에서, 설계 내에 블랙박스 인스턴스로서 간주할 미처리된 서브-인스턴스들이 있는지를 알기 위해 조사한다. 만약 없다면, 종료하고; 만약 있다면, 박스(415)로 진행하여, 변수 mod를 다음 블랙박스 인스턴스의 모듈로, 리스트 port_list를 다음 블랙박스 인스턴스의 출력 포트들의 리스트로 설정한다. 블랙박스의 출력들은 래퍼들의 주 입력들에 대응한다는 것을 상기한다. 그 후 도 11의 방법을 이용하여 박스(420)에서 블랙박스 인스턴스 mod에의 출력들에 대한 주 입력들을 생성하고 박스(410)로 되돌아간다.
도 11은 도 10의 박스(405) 및 박스(420)의 방법을 나타낸다. 변수 mod는 모듈의 이름을 포함하고 리스트 port_list는 설계 모듈이거나 또는, 서브-인스턴스들의 블랙박싱을 지원하는 이 발명의 실시예에서, 그것의 서브-인스턴스를 나타내는 모듈인, 모듈 mod 상의 포트들의 리스트를 포함한다고 가정한다. 이 방법의 목적은 모듈 mod 상의 port_list 내의 포트들의 세트에 대한 참조 래퍼 및 설계 래퍼 양쪽 모두에 대한 주 입력들의 세트를 생성하는 것이다. 그것은 또한 내부 신호들의 구동을 허용하도록 수정되는 참조 모듈 내의 모듈들에 대한 계층적 오버라이드 파일들을 정의하는 효과를 갖는다.
이 방법은 박스(500)에서 리스트 signal_list를 공백 리스트(empty list)이도록 설정하는 것으로 시작하고 그 후 박스(505)로 진행하여 리스트 port_list 내의 미처리된 포트들에 대하여 조사한다. 만약 리스트 port_list에 미처리된 포트가 없다면, 컨트롤은 박스(515)로 진행하고; 만약 있다면 박스(510)로 진행하여, 변수 port를 리스트 port_list 내의 다음 미처리 포트로 설정하고, 구성 레코드들로부터 모듈 mod 상의 포트 port에 대한 참조 연결을 획득하고, 그 참조 연결에 대한 부울 표현식에 포함된 모든 신호들을 리스트 signal_list에 추가한다. 그 후 임의의 남아 있는 포트들을 처리하기 위해 박스(505)로 되돌아간다.
박스(515)로부터 시작하여, 리스트 signal_list에 미처리 신호가 있는지를 묻는다. 만약 그렇지 않다면, 박스(535)로 진행하여, 두 번째로 리스트 signal_list를 처리할 것이고; 만약 그렇다면, 박스(520)로 진행하여, 변수 sig를 리스트 signal_list 내의 다음 미처리 신호로 설정한다. 다음으로, 박스(525)는 HDL 로컬 신호들을 참조 연결의 일부로서 허용하는 실시예에서 신호 sig가 로컬 신호인지를 묻는다. 만약 sig가 로컬 신호가 아니라면, 박스(515)로 되돌아가고; 만약 sig가 로컬 신호라면 박스(530)로 진행하여, 리스트 signal_list로부터 신호 sig를 삭제한다. 그 후 HDL 코드에서 신호 sig를 구동하기 위해 사용되는 모든 표현식들을 찾고 그 표현식들에서 사용된 모든 신호들을 리스트 signal_list에 추가한 후에 박스(515)로 되돌아간다.
박스(535)로부터 속행하여, 두 번째로 처리되지 않은 신호가 signal_list에 있는지를 조사한다. 만약 그렇지 않다면, 종료하고; 만약 그렇다면, 박스(540)로 진행한다. 변수 sig를 리스트 signal_list의 다음 미처리된 엘리먼트로 설정하고, 참조 래퍼 및 설계 래퍼 양쪽 모두에서 sig를 구동하는 주 입력을 추가하고, 그 후 박스(545)로 진행한다. 여기서 도 12의 방법을 이용하여 그의 계층적 표현이 sig에 있는 신호로의 입력 경로를 카브(carve)하고 그 후 박스(535)로 되돌아간다.
도 12는 도 11의 박스(545)의 방법을 설명한다. 그것의 제1 성분은 참조 모델 또는 설계 모델이고, 그것의 마지막은 신호 이름이고, 그것의 나머지는 인스턴스 이름들인, 어떤 신호에의 계층적 경로로 변수 sig가 설정되었다고 가정한다. 이 방법의 목적은 sig에 포함되어 있는 만큼 많은 계층 레벨들을 통과하는 계층적 경로 sig에 의해 특정된 내부 신호를 구동하기 위한 입력 포트들의 세트를 참조 또는 설계 모듈 상에 생성하는 것이다.
이 방법은 박스(600)에서 신호 sig에의 계층적 경로를 취하고 그것을 리스트 path_list로 분해하는 것으로 시작한다. 그것은 그 후 path_list의 제1 엘리먼트를 current_mod 안에 넣고, 그것을 리스트로부터 삭제하고, path_list의 마지막 엘리먼트를 sig2 안에 넣고, 그것을 리스트로부터 삭제한다. 다음으로, 박스(605)로 진행하여, 그것의 경로가 path_list에 포함되어 있는 모듈 current_mod의 서브-인스턴스에 위치하는 신호 sig2를 구동하기 위한 포트가 이미 모듈 current_mod에 있는지를 묻는다. 만약 있다면, 종료하고; 그렇지 않다면 컨트롤은 박스(610)로 진행하여, 모듈 current_mod에 입력 포트 p를 추가한다. 이 입력 포트는 결국 모듈 current_mod로부터의 그것의 경로가 path_list에 포함되어 있는 서브-인스턴스 내의 신호 sig2를 구동할 것이다. 박스(615)로 진행하여, 리스트 modified_mods에 모듈 current_mod를 추가하고, 그 후 박스(620)로 진행하여, 리스트 path_list가 아직 공백인지를 묻는다. 만약 그렇다면, 박스(630)로 진행하고; 만약 그렇지 않다면 박스(625)로 진행하여, path_list 내의 다음 엘리먼트를 처리한다. 그렇게 하기 위해, 그것은 그것이 리스트로부터 삭제하는, path_list의 다음 엘리먼트를 포함하도록 inst를 설정한다. 이름 inst는 모듈 current_mod 내의 인스턴스를 나타내고; 그의 inst가 인스턴스인 모듈을 조회하고 이 모듈을 next_mod 안에 넣는다. 다음으로, 그의 이름을 next_p에 저장하는 입력 포트를 모듈 next_mod에 추가하고 입력 포트 p를 인스턴스 inst의 포트 next_p에 연결한다. current_mod를 next_mod로 및 p를 next_p로 설정한 후에, 컨트롤은 박스(615)로 되돌아간다.
박스(630)에서 계속하여, 도 13의 방법을 이용하여 입력 포트 p로부터 모듈 current_mod의 신호 sig2를 구동하고 종료한다.
도 13은 도 12의 박스(630)의 방법을 나타낸다. 변수 current_mod는 모듈의 이름을 포함하고, p는 모듈 current_mod의 입력 포트의 이름을 포함하고, sig2는 모듈 current_mod의 내부 신호의 이름을 포함한다고 가정한다. 이 방법의 목적은 신호 sig2를 그것을 구동하는 모듈 current_mod의 문들(statements) 중 임의의 것으로부터 분리하고 대신에 그것을 입력 포트 p로부터 구동하는 것이다. 전에 sig2를 구동한 문들은 새로이 생성된 신호를 구동하도록 수정된다.
도 13은 박스(700)에서 신호 sig2 대신에 구동될 새로운 신호 sig_new를 모듈 current_mod에 생성하는 것으로 시작한다. 그것은 그 후 신호 sig2를 구동하는 문들의 리스트를 리스트 stmt_list 안에 넣는다. 박스(705)에서, 리스트 stmt_list에 미처리된 문이 있는지를 묻는다. 만약 그렇지 않다면, 박스(715)로 진행하고; 만약 그렇다면, 박스(710)로 진행하여, stmt를 리스트 stmt_list 내의 다음 미처리된 문으로 설정하고 대신에 신호 sig_new를 구동하기 위해 신호 sig2가 구동되는 문 stmt 내의 모든 곳들을 수정한다. 그 후 박스(705)로 되돌아간다.
박스(715)로부터 계속하여, 지금은 모듈 current_mod 내의 최초의 논리 중 어느 것에 의해서도 구동되지 않는 신호 sig2를 취하고, 그것을 대신에 입력 포트 p로부터 구동한다.
도 14는 도 9의 박스(310)의 방법을 나타낸다. 이 방법의 목적은 참조 래퍼 및 설계 래퍼에 모든 주 출력들을 생성하는 것이다.
이 방법은 박스(800)에서 변수 mod를 설계 모듈을 포함하도록 설정하고 리스트 port_list를 모듈 mod의 출력 포트들의 리스트를 포함하도록 설정하는 것으로 시작한다. 다음으로, 박스(805)에서, 도 15의 방법을 이용하여 모듈 mod의 출력들에 대한 주 출력들을 생성한다. 박스(810)로 진행하여, 설계 내에 블랙박스 인스턴스들로서 간주할 미처리된 서브-인스턴스들이 있는지를 알기 위해 조사한다. 만약 없다면, 종료하고; 만약 있다면, 박스(815)로 진행하여, 변수 mod를 다음 미처리된 블랙박스 인스턴스의 모듈로 설정하고, 리스트 port_list를 다음 블랙박스 인스턴스의 입력 포트들의 리스트로 설정한다. 블랙박스의 입력들은 래퍼들의 주 출력들에 대응한다는 것을 상기한다. 그 후 도 15의 방법을 이용하여 박스(820)에서 블랙박스 인스턴스 mod에의 입력들에 대한 주 출력들을 생성하고 박스(810)로 되돌아간다.
도 15는 도 14의 박스(805) 및 박스(820)의 방법을 나타낸다. 변수 mod는 모듈을 포함하고 리스트 port_list는, 설계 모듈이거나 또는, 서브-인스턴스들의 블랙박싱을 지원하는 이 발명의 실시예에서, 그것의 서브-인스턴스를 나타내는 모듈인, 모듈 mod 상의 포트들의 리스트를 포함한다고 가정한다. 이 발명의 목적은 모듈 mod 상의 port_list 내의 포트들의 세트에 대한 참조 래퍼 및 설계 래퍼 양쪽 모두에 대한 주 출력들의 세트를 생성하는 것이다. 그것은 또한 내부 신호들에의 액세스를 허용하도록 수정되어 있는 참조 모델 내의 모듈들에 대한 계층적 오버라이드 파일들을 정의하는 효과를 갖는다.
이 방법은 박스(900)에서 리스트 signal_list를 공백 리스트이도록 설정하는 것으로 시작하고 그 후 박스(905)로 진행하여 리스트 port_list 내의 미처리된 포트들에 대하여 조사한다. 만약 리스트 port_list에 미처리된 포트가 없다면, 컨트롤은 박스(915)로 진행하고; 만약 있다면 박스(910)로 진행한다. 여기서, 변수 port를 리스트 port_list 내의 다음 미처리된 포트로 설정하고, 모듈 mod 상의 포트 port에 대한 구성 레코드 내의 참조 연결을 획득하고, 또한 그 참조 연결에 대한 부울 표현식에 포함된 모든 신호들을 리스트 signal_list에 추가한다. 유효 마스크들을 지원하는 이 발명의 실시예에서, 모듈 mod 상의 포트 port에 대한 구성 레코드 내의 유효 마스크를 획득하고 또한 그것에 포함된 모든 신호들을 리스트 signal_list에 추가한다. 마지막으로 주 출력으로서 port를 참조 래퍼 및 설계 래퍼 양쪽 모두에 추가하고 남아 있는 포트들을 처리하기 위해 박스(905)로 되돌아간다.
박스(915)로부터 시작하여, 리스트 signal_list에 미처리된 신호들이 있는지를 묻는다. 만약 그렇지 않다면, 박스(935)로 진행하여, 두 번째로 리스트 signal_list를 처리할 것이고; 만약 그렇다면, 박스(920)에서 변수 sig를 다음 미처리된 신호로 설정한다. 다음으로, 박스(925)는 HDL 로컬 신호들을 참조 연결의 일부로서 허용하는 실시예에서 신호 sig가 로컬 신호인지를 묻는다. 만약 sig가 로컬 신호가 아니라면, 박스(915)로 되돌아가고; 만약 sig가 로컬 신호라면 박스(930)로 진행하여, 리스트 signal_list로부터 신호 sig를 삭제한다. 그 후 HDL 코드에서 신호 sig를 구동하기 위해 사용되는 모든 표현식들을 찾고 그 표현식들에서 사용된 모든 신호들을 리스트 signal_list에 추가한 후에 박스(915)로 되돌아간다.
박스(935)로부터 속행하여, 두 번째로 처리되지 않은 신호가 signal_list에 있는지를 조사한다. 만약 그렇지 않다면, 종료하고; 만약 그렇다면, 박스(940)로 진행하여, 변수 sig를 리스트 signal_list의 다음 미처리된 신호로 설정하고 그 후 박스(945)로 진행한다. 여기서 도 16의 방법을 이용하여 그의 계층적 표현이 sig에 있는 참조 모델 내의 신호로부터의 출력 경로를 카브하고 그 후 박스(935)로 되돌아간다
도 16은 도 15의 박스(945)의 방법을 설명한다. 그것의 제1 성분은 참조 모델 또는 설계 모델이고, 그것의 마지막은 신호 이름이고, 그것의 나머지는 인스턴스 이름들인, 어떤 신호에의 계층적 경로로 변수 sig가 설정되었다고 가정한다. 이 방법의 목적은 sig에 포함되어 있는 만큼 많은 계층 레벨들을 통과하는 계층적 경로 sig에 의해 특정된 내부 신호에 액세스하기 위한 참조 모듈들 상의 출력 포트들의 세트를 생성하는 것이다.
이 방법은 박스(1000)에서 신호 sig에의 계층적 경로를 취하고 그것을 리스트 path_list로 분해하는 것으로 시작한다. 그것은 그 후 path_list의 제1 엘리먼트를 current_mod 안에 넣고, 그것을 리스트로부터 삭제하고, path_list의 마지막 엘리먼트를 sig2 안에 넣고, 그것을 리스트로부터 삭제한다. 다음으로, 박스(1005)로 진행하여, 그것의 경로가 path_list에 포함되어 있는 모듈 current_mod의 서브-인스턴스에 위치하는 신호 sig2를 샘플링하기 위한 포트가 이미 모듈 current_mod에 있는지를 묻는다. 만약 있다면, 종료하고; 만약 그렇지 않다면 컨트롤은 박스(1010)로 진행하여, 모듈 current_mod에 출력 포트 p를 추가한다. 이 출력 포트는 결국 모듈 current_mod로부터의 그것의 경로가 리스트 path_list에 포함되어 있는 서브-인스턴스 내의 신호 sig2로부터 구동될 것이다. 박스(1015)로 진행하여, 리스트 modified_mods에 모듈 current_mod를 추가하고, 그 후 박스(1020)로 진행하여, 리스트 path_list가 이미 공백인지를 묻는다. 만약 그렇다면, 박스(1030)로 진행하고; 만약 그렇지 않다면 박스(1025)로 진행하여, 리스트 path_list의 다음 엘리먼트를 처리한다. 그렇게 하기 위해, 그것은 그것이 리스트로부터 삭제하는, 리스트 path_list의 다음 엘리먼트를 포함하도록 inst를 설정한다. 이름 inst는 모듈 current_mod 내의 인스턴스를 나타내고; 그의 inst가 인스턴스인 모듈을 조회하고 이 모듈을 next_mod 안에 넣는다. 다음으로, 그의 이름을 next_p에 저장하는 출력 포트를 모듈 next_mod에 추가하고 인스턴스 inst의 출력 포트 next_p를 포트 p에 연결한다. current_mod를 next_mod로 및 p를 next_p로 설정한 후에, 컨트롤은 박스(1015)로 되돌아간다.
박스(1030)에서 계속하여, 모듈 current_mod의 신호 sig2로부터 출력 포트 p를 구동하고 종료한다.
도 17에서, 도 9의 박스(315)의 방법을 설명한다. 이 방법의 목적은 설계 모듈의 모든 입력 포트들에 대한 구성 레코드에서 요구되는 가장 작은(가장 음수) 지연을 계산하는 것이다.
박스(1100)에서 시작하여, 변수 min_delay를 0으로 초기화하고 리스트 port_list를 설계 모듈의 입력 포트들의 리스트로 설정한다. 박스(1105)로 계속하여, 리스트 port_list에 미처리된 포트가 있는지를 묻는다. 만약 없다면, 종료하고; 만약 있다면, 방법은 박스(1110)로 진행하여, 변수 port를 리스트 port_list의 다음 미처리된 포트이도록 설정하고 delay를 입력 포트 port 상의 지연에 대한 구성 레코드 내의 값이도록 설정한다. 그 후 박스(1115)로 진행하여 지연이 min_delay보다 작은지를 묻는다. 만약 그렇지 않다면, 박스(1105)로 되돌아가고; 만약 그렇다면 박스(1120)에서 min_delay를 delay로 설정하고 그 후 박스(1105)로 되돌아간다.
도 18은 도 9의 박스(320)의 방법을 나타낸다. 이 방법의 목적은 참조 래퍼 내의 참조 모델의 입력들에 연결하기 위해 및 설계 래퍼 내의 설계 모듈을 위해 필요한 모든 신호들을 생성하는 것이다.
이 방법은 박스(1200)에서 시작하고, 여기서 도 19의 방법을 이용하여 참조 래퍼의 모든 주 입력들을 참조 모델 인스턴스에 와이어링하고, 박스(1205)로 진행하여, 여기서 도 21의 방법을 이용하여 설계 래퍼의 모든 주 입력들을 설계 모듈 인스턴스에 와이어링하고, 종료한다.
도 19는 도 18의 박스(1200)의 방법을 설명한다. min_delay는 임의의 설계 모듈 입력 상의 최소의 요구되는 지연을 나타내는 제로 또는 음수인 수를 포함한다고 가정한다. 이 방법의 목적은 참조 래퍼 내의 참조 모델의 인스턴스의 입력 포트들을 구동하기 위해 필요한 모든 신호들을 생성하는 것이다.
이 방법은 박스(1300)에서 mod를 참조 래퍼로 설정하고 도 10의 방법을 이용하여 계산된 주 입력들의 그것의 리스트를 리스트 input_list 안에 넣는 것으로 시작한다. 그것은 그 후 박스(1305)로 진행하여, 리스트 input_list에 미처리된 입력들이 있는지를 묻는다. 만약 그렇지 않다면, 종료하고; 만약 그렇다면 컨트롤은 박스(1310)로 진행한다. 그 후 변수 input을 리스트 input_list의 다음 미처리된 입력으로 설정하고, sig_delay를 0으로부터 빼어 sig_delay를 min_delay의 음수로 설정하고, expr을 입력 input으로 설정한다. 그 후 박스(1315)로 진행하고, 여기서 도 20의 방법을 이용하여 sig_delay 클록들만큼 지연된 표현식 expr인 신호 s를 모듈 mod에 생성한다. 다음으로, 박스(1320)로 진행하여, 제약 모듈을 이용하여 참조 입력들이 제한되게 하는 이 발명의 실시예에서, 모듈 mod의 입력 input이 그러한 제약 모듈의 출력이어야 하는지를 묻는다. 만약 그렇지 않다면, 박스(1325)에서 s2를 s로 설정하고 박스(1340)로 진행하고; 만약 그렇다면 박스(1330)로 진행하여 그것의 출력이 입력 input의 제한된 버전을 생성하는 제약 모듈의 인스턴스 i를 생성하고 박스(1335)로 진행한다. 여기서, s2를 인스턴스 i의 제한된 출력으로 설정한다. 마지막으로, 박스(1320)로부터 어느 분기를 취하든지 관계없이, 박스(1340)에 도달하고, 여기서 s2를 참조 모델의 인스턴스의 입력 input에 연결하고, 여기서 그것은 내부 신호를 구동하기 위해 계층 구조의 몇몇 층들을 통하여 내려갈 수 있다. 박스(1305)로 되돌아간다.
도 20은 도 19의 박스(1315), 도 24의 박스(1815), 도 28의 박스(2245), 및 도 29의 박스(2325)의 방법을 나타낸다. 변수 expr은 모듈 mod 내의 sig_delay에 포함된 음수가 아닌 수의 클록들만큼 그의 값이 지연될 표현식으로 설정되었다고 가정한다. 이 방법의 목적은 sig_delay 클록 사이클들만큼 지연된 expr의 값인 신호 s를 생성하는 것이다.
그것은 박스(1400)에서 시작하고, 여기서 표현식 expr에 의해 구동되는 모듈 mod 내의 신호 s를 생성하고 d를 0으로 설정한다. 그 후 박스(1405)에서 d가 소망의 신호 지연 sig_delay보다 작은지를 묻는다. 만약 그렇지 않다면, 종료하고; 만약 그렇다면, 박스(1410)로 진행하여, 플롭에 의해 지연된 신호 s인 신호 s2를 모듈 mod에 생성하고, 변수 s를 s2로 설정하고, d를 1만큼 증가시키고, 박스(1405)로 되돌아간다.
도 21은 도 18의 박스(1205)의 방법을 설명한다. min_delay는 임의의 설계 모듈 입력 상의 최소의 요구되는 지연을 나타내는 제로 또는 음수인 수를 포함한다고 가정한다. 이 방법의 목적은 참조 래퍼 내의 설계 모델의 인스턴스의 입력 포트들을 구동하기 위해 필요한 모든 신호들을 생성하는 것이다.
그것은 박스(1500)에서 시작하고, 여기서 변수 mod를 설계 래퍼로 설정하고 설계 모듈 입력들의 리스트를 리스트 input_list 안에 넣는다. 그 후 박스(1505)로 진행하여 input_list에 미처리된 입력이 더 있는지를 묻는다. 만약 없다면, 종료하고; 만약 있다면, 박스(1510)로 진행한다. 여기서, 변수 input을 리스트 input_list의 다음 미처리된 입력으로 설정하고, delay를 입력 input에 대한 구성 레코드에서 특정된 지연 값으로 설정하고, sig_delay를 delay와 min_delay 사이의 차이로 설정하고, conn을 입력 input에 대한 구성 레코드에서 특정된 참조 연결로 설정하고, f를 입력 input에 대한 구성 레코드에서 특정된 인코딩 함수로 설정한다. 만약 인코딩 함수가 없다면, f는 항등 함수(identity function)로 간주되어야 한다. 다음으로, 박스(1515)로 진행하여 도 22의 방법을 이용하여 sig_delay의 지연을 갖는 conn의 변환된 표현식으로서 conn2를 계산한다. 마지막으로, 박스(1520)에서, 모듈 mod 내에 신호 s를 생성하고, 그것을 f(conn2)로 구동하고, s를 설계 인스턴스의 입력 input으로 연결한 후에 박스(1505)로 되돌아간다.
도 22는 도 21의 박스(1515)의 방법을 설명한다. conn은 설계 입력의 어떤 입력 포트에 대한 구성 레코드들로부터의 참조 연결을 포함하고 sig_delay는 설계 래퍼의 주 입력들에 관하여 신호의 요구되는 지연을 나타내는 음수가 아닌 수를 포함한다고 가정한다. 이 방법의 목적은 설계 모듈의 어떤 입력 포트와 연관된 참조 연결을 그 참조 연결에서 특정된 임의의 참조 신호들에 대한 주 입력들을 이용하여 평가하는 신호를 생성하는 것이다.
이 방법은 박스(1600)에서 시작하고, 여기서 변수 conn2를 conn으로 설정하고 리스트 signal_list를 표현식 conn2에 포함된 신호들의 리스트로 설정한다. 그 후 박스(1605)로 진행하여 리스트 signal_list에 미처리된 신호들이 있는지를 묻는다. 만약 없다면, 컨트롤은 두 번째로 리스트 signal_list를 처리하기 위해 이용되는 박스(1615)로 진행하고; 만약 있다면 컨트롤은 박스(1610)로 진행한다. 여기서, sig를 리스트 signal_list 내의 다음 미처리된 신호로 설정하고 conn2를 신호 sig의 지시 대상(referent)으로 표시한 후에 박스(1605)로 되돌아간다.
박스(1615)로부터 계속하여, 리스트 signal_list의 두 번째 처리에서 미처리된 신호들이 있는지를 묻는다. 만약 없다면, 종료하고; 만약 있다면, 박스(1620)로 진행하여, sig를 리스트 signal_list 내의 다음 미처리된 신호로 설정하고 박스(1625)로 계속하고, 여기서 로컬 신호들을 지원하는 이 발명의 실시예에서 sig가 로컬 신호를 나타내는지를 묻는다. 만약 그렇다면, 박스(1630)로 진행하고, 여기서 도 23의 방법을 이용하여 sig_delay의 지연을 갖는 sig에 대한 로컬 신호 s를 설계 래퍼 mod에 생성하고; 만약 그렇지 않다면, 박스(1635)로 진행하고, 여기서 도 24의 방법을 이용하여 참조 신호 sig를 나타내는 설계 래퍼에의 주 입력의 지연된, 어쩌면 제한된 버전인 신호 s를 설계 래퍼 mod에 생성한다. 어느 쪽의 경우이든, 다음으로 박스(1640)에 도달하고, 여기서 도 25의 방법을 이용하여 sig의 지시 대상들인 문들의 각각에서 sig를 s로 대체하고, 박스(1615)로 되돌아간다.
도 23은 도 22의 박스(1630) 및 도 28의 박스(2230)의 방법을 설명한다. 변수 sig는 참조 연결들에서 로컬 와이어들을 지원하는 본 발명의 실시예에서 로컬 와이어의 이름을 포함하고 mod는 참조 래퍼 또는 설계 래퍼를 나타낸다고 가정한다. 이 방법의 목적은 sig에 의해 기술된 로컬 와이어를 지원하기 위한 필요한 정의들을 모듈 mod에 생성하는 것이다.
컨트롤은 박스(1700)에서 시작하고, 여기서 로컬 신호 sig에 대한 구성 레코드로부터 정의 d를 획득하고, 그것을 수정하여, 설계 래퍼의 주 입력들의 어쩌면 제한된 버전들과 함께 sig_delay 사이클들만큼 지연된 후에 sig의 값을 보유할 새로운 로컬 신호 s를 정의하고, s의 그 정의를 설계 래퍼 mod에 추가하고, 그것을 구동하는 신호 sig에 대한 구성 파일로부터의 문들의 리스트를 리스트 stmt_list 안에 넣는다. 박스(1705)로 진행하여, 리스트 stmt_list에 미처리된 문들이 더 있는지를 묻는다. 만약 그렇지 않다면, 종료하고; 만약 그렇다면 박스(1710)로 계속된다. 여기서, stmt를 리스트 stmt_list 내의 다음 미처리된 문으로 설정하고 stmt2를 stmt와 동일하도록 초기화한다. 그 후 stmt2에서 sig가 구동되는 곳들을 새로이 생성된 신호 s로 대체하고 stmt2를 설계 래퍼 mod에 추가한다. 마지막으로, 리스트 signal_list2를 stmt에서 구동되지 않는 stmt의 신호들의 리스트로 설정하고 signal_list2를 리스트 signal_list에 추가한 다음 박스(1715)로 진행하여, signal_list2에 미처리된 신호들이 있는지를 묻는다. 만약 없다면, 박스(1705)로 되돌아가고; 만약 있다면 박스(1720)로 진행하여 sig2를 리스트 signal_list2 내의 다음 미처리된 신호로 설정하고, stmt2를 신호 sig2의 지시 대상들의 리스트에 추가하고 박스(1715)로 되돌아간다.
도 24는 도 22의 박스(1635)의 방법을 설명한다. mod는 설계 래퍼를 나타내고, sig는 모듈 mode의 주 입력에 의해 나타내어지는 참조 신호의 이름을 포함하고, sig_delay는 신호 s를 생성하기 위해 주 입력을 몇 개의 클록 사이클 지연시킬지를 결정하는 음수가 아닌 수를 포함한다고 가정한다. 이 방법의 목적은 sig_delay 클록 사이클들만큼 지연된 참조 모델의 내부 신호 sig를 나타내는 주 입력의 어쩌면 제한된 버전인 신호 s를 모듈 mod에 생성하는 것이다.
그것은 박스(1800)에서 모듈 mod 내에 sig를 나타내는 주 입력에 대한 sig_delay 클록 사이클들만큼 지연된 어쩌면 제한된 신호가 이미 존재하는지를 묻는 것으로 시작한다. 만약 그렇다면, 박스(1805)로 진행하여, s를 기존 신호로 설정하고 종료하고; 만약 그렇지 않다면 박스(1810)로 진행하여 expr을 신호 참조 sig에 대응하는 모듈 mod의 주 입력으로 설정한다. 컨트롤은 그 후 박스(1815)로 진행하고, 여기서 도 20의 방법을 이용하여 sig_delay 클록들만큼 지연되고 표현식 expr로 초기화되는 신호 s를 모듈 mod에 생성한다. 그 후 박스(1820)로 진행하여, 제약 모듈들을 지원하는 이 발명의 실시예에서 참조 신호 sig가 제약 모듈의 출력이어야 하는지를 묻는다. 만약 그렇지 않다면, 종료하고; 만약 그렇다면, 박스(1825)로 진행하여 신호 s에 대한 상기 제약 모듈의 인스턴스 i를 모듈 mod에 생성하고, s를 인스턴스 i의 입력에 연결하고, 그 후 s를 sig의 제한된 버전을 나타내는 인스턴스 i의 출력으로 설정한 다음 종료한다.
도 25는 도 22의 박스(1640) 및 도 28의 박스(2240)의 방법을 설명한다. s 및 sig는 신호 이름들이라고 가정한다. 이 방법의 목적은 sig의 지시 대상들인 모든 문들에서 신호 sig에의 비구동 참조들(non-driving references)을 신호 s로 대체하는 것이다.
이 방법은 박스(1900)에서 시작하여, 리스트 refstmt_list를 신호 sig의 지시 대상들로서 표시된 문들의 리스트로 설정한다. 그 후 박스(1905)로 진행하여, 리스트 refstmt_list에 신호 sig에의 미처리된 지시 대상들이 더 있는지를 묻는다. 만약 그렇지 않다면, 종료하고; 만약 그렇다면, 박스(1910)로 진행하여, refstmt를 리스트 refstmt_list 내의 다음 미처리된 지시 대상으로 설정하고 ref_list를 문 refstmt 내의 신호 sig에의 참조들의 리스트로 설정한다. 다음으로, 박스(1915)는 리스트 ref_list에 미처리된 참조들이 더 있는지를 묻는다. 만약 없다면, 컨트롤은 박스(1905)로 되돌아가고; 만약 있다면, 박스(1920)로 진행하여, ref를 리스트 ref_list 내의 다음 미처리된 참조로 설정한다. 그 후 박스(1925)로 진행하여, 신호 sig가 문 refstmt에서 참조 ref에 의해 구동되는지를 묻는다. 예를 들면, 신호 sig는 대입문(assignment statement)의 양쪽에 또는 인스턴스의 입력 및 출력 단자 양쪽 모두에 나타날 수 있다. 만약 신호가 이 참조에 의해 구동된다면, 컨트롤은 박스(1915)로 되돌아가고; 만약 그렇지 않다면, 박스(1930)에서 문 refstmt에서 신호 sig의 참조 ref를 s로 대체한 다음 박스(1915)로 되돌아간다.
도 26은 도 9의 박스(325)의 방법을 설명한다. 이 방법의 목적은 참조 래퍼 및 설계 래퍼의 주 출력들을 구동하기 위해 필요한 모든 신호들을 생성하는 것이다.
그것은 박스(2000)에서 시작하고, 여기서 도 27의 방법을 이용하여 참조 인스턴스의 출력들을 참조 래퍼의 주 출력들에 와이어링한다. 그 후 박스(2005)로 진행하고, 여기서 도 29의 방법을 이용하여 설계 인스턴스의 출력들을 설계 래퍼의 주 출력들에 와이어링하고, 종료한다.
도 27은 도 26의 박스(2000)의 방법을 설명한다. 이 방법의 목적은 참조 래퍼의 주 출력들을 구동하기 위해 필요한 신호들을 생성하는 것이다. 각 주 출력은 설계 모듈의 출력 포트에 대응하고, 그것은 참조 모델에 대한 계층적 오버라이드 파일의 출력 포트들을 이용하여 상기 출력 포트에 대하여 특정된 참조 연결에 따라 참조 래퍼에 구축되어야 한다.
그것은 박스(2100)에서 시작하고, 여기서 mod를 참조 래퍼이도록 설정하고 참조 래퍼 mod의 주 출력들의 리스트를 리스트 output_list 안에 넣는다. 박스(2105)로 계속하여, 리스트 output_list에 미처리된 출력들이 더 있는지를 묻는다. 만약 없다면, 종료하고; 만약 있다면, 박스(2110)로 진행하여, output를 리스트 output_list 내의 다음 미처리된 출력으로 설정한다. 래퍼들의 주 출력들은 설계 모듈의 출력들에 대응하는 것을 상기하여, 주 출력 output에 관련이 있는 정보에 대하여 구성 레코드에 문의(query)할 수 있다. 따라서, sig_delay, conn, 및 f를, 각각, 모듈 mod의 출력 output에 대한 구성 레코드에서 특정된 지연, 참조 연결, 및 인코딩 함수로 설정한다. 만약 인코딩 함수가 없다면, f는 항등 함수로 간주되어야 한다. 그 후 박스(2115)로 진행하여, 변수 sig_delay가 0보다 작은지를 묻는다. 만약 그렇지 않다면, 박스(2125)로 진행하고; 만약 그렇다면 박스(2120)에서 sig_delay를 0으로 설정한 후에 박스(2125)로 진행한다. 다음으로, 도 28의 방법을 이용하여 sig_delay 클록 사이클들만큼 지연된 conn의 변환된 버전으로서 s를 계산한다. 박스(2130)에서 계속하여, 주 출력 output을 f(s)로 구동하고 박스(2135)로 진행하여, 유효 마스크가 특정되는 것을 허용하는 이 발명의 실시예에서 모듈 mod의 출력 output에 대한 구성 레코드가 유효 마스크를 특정하는지를 묻는다. 만약 그렇지 않다면, 박스(2105)로 되돌아가고; 만약 그렇다면 박스(2140)로 진행하여, conn을 모듈 mod의 출력 output에 대한 구성 레코드에서 특정된 유효 마스크에 대한 표현식으로 설정한다. 그 후, 박스(2145)로 진행하고, 여기서 도 28의 방법을 이용하여 sig_delay 클록 사이클들만큼 지연된 conn의 변환된 버전으로서 s를 계산한다. 마지막으로, 박스(2150)에서, s를 출력 output에 대한 마스크 레코드에 마스크 신호로서 기록하고 박스(2105)로 되돌아간다.
도 28은 도 27의 박스(2125) 및 박스(2145)의 방법을 설명한다. conn은 그것의 변환된 표현식이 계산될 출력에 대한 참조 연결로 설정되고, sig_delay는 변환된 표현식이 지연될 필요가 있는 클록들의 수이고, mod는 참조 래퍼로 설정된다고 가정한다. 이 방법의 목적은 참조 래퍼의 특정한 주 출력을 구동하기 위해 필요한 신호들을 생성하는 것이다. 이 주 출력은 설계 모듈의 출력 포트에 대응하고, 그것은 참조 모델에 대한 계층적 오버라이드 파일의 출력 포트들을 이용하여 상기 출력 포트에 대하여 구성 파일에서 특정된 참조 연결에 따라 참조 래퍼에 구축되고 그것의 구성 레코드에서 특정된 클록들의 수만큼 지연되어야 한다.
이 방법은 박스(2200)에서 시작하고, 여기서 expr을 conn으로 설정하고 리스트 signal_list를 expr 내의 신호들의 리스트로 설정한다. 그 후 박스(2205)로 계속하여, 리스트 signal_list에 미처리된 신호들이 있는지를 묻는다. 만약 그렇지 않다면, 컨트롤은 박스(2215)로 진행하여, 두 번째로 리스트 signal_list를 처리할 것이고; 만약 그렇다면, 박스(2210)로 진행하여 sig를 리스트 signal_list 내의 다음 미처리된 신호로 설정하고 expr을 신호 sig의 지시 대상들의 리스트에 추가한 후에 박스(2205)로 되돌아간다. 박스(2215)에서는, 리스트 signal_list에 두 번째로 처리되지 않은 신호들이 있는지를 묻는다. 만약 없다면, 박스 2245로 진행하고, 여기서 도 20의 방법을 이용하여 signal_delay 클록 사이클들만큼 지연된 expr로 초기화되는 신호 s를 참조 래퍼 mod에 생성하고, 종료하고; 만약 있다면, 박스(2220)로 진행하여, sig를 리스트 signal_list 내의 다음 미처리된 신호로 설정한다. 따라서 박스(2225)로 진행하여, 로컬 와이어들을 지원하는 이 발명의 실시예에서 신호 sig가 로컬 와이어를 나타내는지를 묻는다. 만약 그렇다면, 박스(2230)로 진행하고 도 23의 방법을 이용하여 신호 sig의 값을 포함하도록 모듈 mod에 로컬 신호 s를 생성한 후에 박스(2240)로 진행하고; 만약 그렇지 않다면, 박스(2235)로 진행한다. sig가 참조 모델 내의 내부 신호를 나타낸다는 것을 안다. 도 15의 박스(945)에서 sig에 액세스하기 위해 참조 인스턴스의 새로운 출력을 생성한 것을 상기한다. s를 참조 인스턴스의 상기 출력으로 설정하고 박스(2240)로 진행한다. 여기서 도 25의 방법을 이용하여 신호 sig의 지시 대상들에서 sig를 s로 대체한 다음 박스(2215)로 되돌아간다.
도 29는 도 26의 박스(2005)의 방법을 설명한다. 이 방법의 목적은 설계 래퍼의 주 출력들을 구동하기 위해 필요한 신호들을 생성하는 것이다. 각 주 출력은 설계 모듈의 출력 포트에 대응하고, 그것은 지연을 지원하는 이 발명의 실시예에서 만약 구성 레코드에서 그 포트에 대하여 특정된 지연이 음수인 경우 지연될 필요가 있다.
그것은 박스(2300)에서 mod를 설계 래퍼이도록 설정하고 설계 래퍼의 주 출력들의 리스트를 리스트 output_list 안에 넣는 것으로 시작한다. 그것은 그 후 박스(2305)로 진행하여, 리스트 output_list에 미처리된 출력들이 있는지를 묻는다. 만약 그렇지 않다면, 종료하고; 만약 그렇다면 박스(2310)로 진행하여, output를 리스트 output_list의 다음 미처리된 출력으로 설정한다. 설계 래퍼의 출력들은, 그것의 구성 레코드에 정의들을 갖는, 설계 인스턴스의 출력들에 대응한다는 것을 상기한다. 따라서, sig_delay를 이 출력에 대한 구성 레코드에서 특정된 지연으로 설정한다. 그 후 sig_delay를 (제로 마이너스 sig_delay)로 설정하는 것에 의해 이 양을 음수로 한다(negate). 이 동작을 수행하는 이유는 참조 모델에 관하여 출력들 상의 음수 지연들은 설계 래퍼에서 양수 지연들로서 구현되기 때문이다. 또한 expr을 주 출력 output에 대응하는 설계 인스턴스의 출력이도록 설정하고 박스(2315)로 진행하여, sig_delay가 0보다 작은지를 묻는다. 만약 그렇지 않다면, 박스(2325)로 진행하고; 만약 그렇다면, 박스(2320)에서 sig_delay를 0으로 설정한 후에 박스(2325)로 진행한다. 어느 경우이든, 그 후 도 20의 방법을 이용하여 설계 인스턴스 출력 expr로 초기화되고 sig_delay 클록들만큼 지연되는 신호 s를 설계 래퍼 mod에 생성한다. 마지막으로, 박스(2330)에서 s로 주 출력 output을 구동한 후에 박스(2305)로 되돌아간다.
도 30은 도 7의 박스(110)의 방법을 설명한다. 리스트 modified_mods는 참조 모델에서 내부 신호들을 구동하거나 내부 신호들에 액세스하기 위해 수정된 참조 모듈들의 리스트를 포함한다고 가정한다. 이 방법의 목적은 순차적 등가성 검사를 실행하기 위해 필요한 모든 출력 파일들을 기록하는 것이다.
그것은 박스(2400)에서 변수 wrap을 참조 래퍼로 설정하는 것으로 시작하고 그 후 박스(2405)로 진행하여 도 31의 방법을 이용하여 참조 래퍼 wrap을 기록한다. 다음으로, 그것은 박스(2410)에서 wrap을 설계 래퍼로 설정하고 박스(2415)로 진행하여 도 31의 방법을 이용하여 설계 래퍼 wrap을 기록한다. 그것은 그 후 박스(2420)로 진행하여, 리스트 modified_mods에 미처리된 모듈들이 있는지를 묻는다. 만약 없다면, 박스(2430)로 진행하고, 여기서 도 32의 방법을 이용하여, 출력 유효 마스크들을 지원하는 이 발명의 실시예에서, 출력 유효 마스크들을 포함하는 파일을 기록하고, 종료하고; 만약 있다면, 박스(2425)로 진행한다. 여기서, mod를 리스트 modified_mods 내의 다음 미처리된 모듈로 설정하고 모듈 mod의 수정된 버전을 기록한 후에 박스(2420)로 되돌아간다.
도 31은 도 30의 박스(2405) 및 박스(2415)의 방법을 설명한다. wrap은 기록될 래퍼로 설정된다고 가정한다. 이 방법의 목적은 참조 래퍼 또는 설계 래퍼 중 어느 한쪽에 대하여 계산된 정보를 파일 안에 기록하는 것이다.
이 방법의 모든 작업은, 래퍼 wrap에 대한 출력 파일 outfile을 여는, 박스(2500)에서 수행된다. 파일 outfile은 이 방법에 의해 수행되는 모든 기록들의 수령자(recipient)이다. 그것은 그 후 그것의 모듈 I/O 리스트와 함께 모듈 wrap에 대한 모듈 정의의 시작을 기록한다. 다음으로, 그것은 임의의 다른 신호 선언들을 기록한다. 로컬 신호들이 정의되는 것을 허용하는 이 발명의 실시예에서, 그것은 로컬 신호들을 정의하고 구동하는 문들을 기록한다. 다음으로, 그것은 모듈 wrap에서 생성되었고 로컬 신호와 연관되지 않은 출력들 및 임의의 다른 신호들을 구동하는 문들을 기록한다. 이후, 그것은 지연들을 지원하는 이 발명의 실시예에서 래퍼 내의 지연들을 다루기 위해 생성된 임의의 플롭들을 기록한다. 그 후, 제약 모듈들을 허용하는 이 발명의 실시예에서, 그것은 그것에서 생성된 제약 모듈들의 임의의 인스턴스들을 기록한다. 다음으로, 그것은 wrap이 참조 래퍼인 경우 참조 모델의 또는 wrap이 설계 래퍼인 경우 설계 모듈의, 래퍼 인스턴스의 인스턴스를 기록한다. 마지막으로, 그것은 모듈 wrap의 정의의 종료를 기록하고 파일 outfile을 닫은 후에 종료한다.
도 32는 도 30의 박스(2430)의 방법을 설명한다. 이 방법의 목적은 유효 마스크들을 지원하는 이 발명의 실시예에서 유효 마스크들에 관한 정보를 기록하는 것이다.
이 방법은 박스(2600)에서 유효 마스크들에 관한 정보를 포함할 파일 f를 여는 것으로 시작한다. 그 후 박스(2605)로 이동하여, 마스크 레코드들을 갖는 참조 래퍼의 미처리된 주 출력들이 있는지를 묻는다. 만약 없다면, 박스(2615)로 진행하여, 파일 f를 닫고 종료하고; 만약 있다면, 박스(2610)로 진행한다. 여기서, output을 마스크 레코드를 갖는 참조 래퍼의 다음 미처리된 출력으로 설정하고 그 출력 output을 출력 output에 대한 마스크 레코드 내의 그것의 연관된 신호와 함께 파일 f에 기록한다. 그 후 박스(2605)로 되돌아간다.
요약하면, 이 발명은 순차적 등가성 검사를 위한 재구성된 디지털 논리 설계들을 준비하는 방법이다. 이 방법은 설계 계층 구조 내의 레벨들의 경계들을 변경하는 것을 포함하여, 보다 높은 성능을 위해 기존의 "귀중한"(golden) 설계가 최적화될 때 적용될 수 있다. 그러한 방법이 없다면, 등가성 검사 도구들이 2개의 설계들이 동등하다는 것을 증명할 때 포트들 사이에 일대일 매핑을 필요로 하기 때문에, 최적화들이 단일 계층적 경계 안에 남아 있을 필요가 있을 것이다. 이 방법은 또한 설계 신호들을 생성하기 위한 참조 신호들의 임의의 인코딩들 및 신호들의 리타이밍을 다룰 수 있다.
본 발명의 다른 실시예들은 이 기술 분야의 숙련자들이 이 명세서를 고찰하고 개시된 발명을 실시한 후에 명백할 것이다. 이 명세서 및 상기 예들은 단지 예시적인 것이고, 본 발명의 참된 범위는 하기의 청구항들에 의해 결정된다.

Claims (18)

  1. 참조 래퍼 파일(reference wrapper file), 설계 래퍼 파일(design wrapper file), 및 반도체 제조시에 전기 설계 모듈(electrical design module)을, 상기 전기 설계 모듈과 매칭하는 서브-회로(sub-circuit)를 포함하는 전기 참조 모델(electrical reference model)과 대조하여 검증하기 위한 0개 이상의 계층적 오버라이드 파일들(hierarchical override files)을 생성하는 순차적 등가성 검사(sequential equivalence checking)를 위한 재구성된 설계들(re-architected designs)을 준비하기 위한 방법으로서, 상기 전기 설계 모듈이 상기 계층적 오버라이드 파일들에 의해 수정된 구성 파일(configuration file)에 의해 특정된 상기 전기 참조 모델의 상기 서브-회로를 정확하게 구현하는 경우에만 상기 2개의 래퍼 파일들이 순차적으로 동등하도록 상기 래퍼 파일들은 동일한 주 입력들 및 출력들(primary inputs and outputs)을 갖고, 각각의 계층적 오버라이드 파일은 상기 전기 참조 모델의 계층 구조 내의 개별 모듈을, 상기 모듈 내의 내부 신호들을 구동하거나 샘플링하기 위한 하나 이상의 추가적인 포트들로 보강하는 것에 의해 수정하고, 상기 방법은,
    복수의 포트들을 포함하는 전기 설계 모듈의 기술(description)을 제공하는 단계;
    하나 이상의 참조 모듈들의 계층 구조를 포함하는 전기 참조 모델의 기술을 제공하는 단계 - 각각의 상기 참조 모듈은 복수의 내부 신호들을 포함함 -;
    인스턴스 정의(instance definition)를 포함하는 구성 파일을 제공하는 단계 - 상기 인스턴스 정의는 복수의 포트 정의들을 포함하고, 각각의 상기 포트 정의는 상기 전기 설계 모듈의 포트의 이름 및 참조 연결(reference connection)을 포함하고, 상기 참조 연결은 부울 상수들(Boolean contants) 0 및 1 및 복수의 참조 모듈들 내의 복수의 신호들의 부울 조합(Boolean combination)을 포함함 -;
    상기 구성 파일을 처리하는 단계;
    생성될 복수의 파일들의 콘텐츠를 계산하는 단계 - 상기 파일들은 참조 래퍼 파일, 설계 래퍼 파일, 및 반도체 제조시에 상기 전기 설계 모듈을, 상기 전기 설계 모듈과 매칭하는 상기 서브-회로를 포함하는 상기 전기 참조 모델과 대조하여 검증하기 위한 0개 이상의 계층적 오버라이드 파일들을 포함하고, 상기 전기 설계 모듈이 상기 계층적 오버라이드 파일들에 의해 수정된 상기 구성 파일에 의해 특정된 상기 전기 참조 모델의 상기 서브-회로를 정확하게 구현하는 경우에만 상기 래퍼 파일들이 순차적으로 동등하도록 상기 래퍼 파일들은 동일한 주 입력들 및 출력들을 갖고, 각각의 상기 계층적 오버라이드 파일은 상기 전기 참조 모델의 계층 구조 내의 개별 모듈을, 상기 모듈 내의 내부 신호들을 구동하거나 샘플링하기 위한 하나 이상의 추가적인 포트들로 보강하는 것에 의해 수정함 -; 및
    상기 복수의 파일들을 기록하는 단계
    를 포함하는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  2. 제1항에 있어서, 상기 구성 파일 내의 각각의 상기 포트 정의는 상기 참조 연결이 정수의 클록 사이클들(an integral number of clock cycles)만큼 지연되는 것을 더 특정하고, 상기 정수는 양수(positive), 음수(negative) 또는 제로일 수 있는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  3. 제1항에 있어서, 상기 구성 파일 내의 각각의 상기 포트 정의는 출력 유효 마스크를 더 특정하고, 상기 출력 유효 마스크는 상기 부울 상수들 0 및 1 및 복수의 참조 모듈들 내의 복수의 신호들의 부울 조합을 포함하고, 상기 출력 유효 마스크가 부울 0일 때는 언제나 상기 포트의 순차적 등가성이 요구되지 않는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  4. 제1항에 있어서, 상기 구성 파일은 상기 래퍼 파일들 내의 하나 이상의 로컬 신호들을 정의하고 구동하는 논리를 더 포함하고, 상기 부울 조합은 상기 로컬 신호들에의 참조들을 더 포함하는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  5. 제1항에 있어서, 상기 구성 파일은 하나 이상의 서브-인스턴스 정의들을 더 포함하고, 각각의 상기 서브-인스턴스 정의는 복수의 포트 정의들 및 상기 전기 설계 모듈의 서브-인스턴스로의 경로를 포함하고, 각각의 상기 포트 정의는 상기 서브-인스턴스의 포트의 이름 및 참조 연결을 포함하고, 상기 참조 연결은 상기 전기 참조 모델 내의 내부 신호로의 계층적 경로를 포함하고, 상기 서브-인스턴스의 논리는 상기 설계 래퍼로부터 제거되고 상기 서브-인스턴스의 입력 포트들은 상기 래퍼들의 출력 포트들로서 생성되고 상기 서브-인스턴스의 출력 포트들은 상기 래퍼들의 입력 포트들로서 생성되는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  6. 제1항에 있어서, 상기 구성 파일은 하나 이상의 입력 제약 모듈 정의들(input constraint module definitions)을 더 포함하고, 각각의 입력 제약 모듈 정의는 복수의 포트들을 포함하는 전기 모듈을 참조하고, 각각의 포트는 상기 전기 참조 모델 내의 내부 신호를 참조하고, 상기 제약 모듈의 출력 포트에 의해 참조되는 상기 전기 참조 모델 내의 각각의 내부 신호에 대하여 상기 래퍼 파일들 내에 상기 입력 제약 모듈의 인스턴스가 생성되고, 참조 연결 내의 상기 내부 신호에의 각각의 참조는 상기 내부 신호 대신에 상기 제약 모듈의 상기 출력 포트를 사용하는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  7. 참조 래퍼 파일, 설계 래퍼 파일, 및 반도체 제조시에 전기 설계 모듈을, 상기 전기 설계 모듈과 매칭하는 서브-회로를 포함하는 전기 참조 모델과 대조하여 검증하기 위한 0개 이상의 계층적 오버라이드 파일들을 이용하는 순차적 등가성 검사를 위한 재구성된 설계들을 준비하기 위한 방법으로서, 상기 전기 설계 모듈이 상기 계층적 오버라이드 파일들에 의해 수정된 구성 파일에 의해 특정된 상기 전기 참조 모델의 상기 서브-회로를 정확하게 구현하는 경우에만 상기 2개의 래퍼 파일들이 순차적으로 동등하도록 상기 래퍼 파일들은 동일한 주 입력들 및 출력들을 갖고, 각각의 계층적 오버라이드 파일은 상기 전기 참조 모델의 계층 구조 내의 개별 모듈을, 상기 모듈 내의 내부 신호들을 구동하거나 샘플링하기 위한 하나 이상의 추가적인 포트들로 보강하는 것에 의해 수정하고, 상기 방법은,
    복수의 포트들을 포함하는 전기 설계 모듈의 기술을 제공하는 단계;
    하나 이상의 참조 모듈들의 계층 구조를 포함하는 전기 참조 모델의 기술을 제공하는 단계 - 각각의 상기 참조 모듈은 복수의 내부 신호들을 포함함 -;
    인스턴스 정의를 포함하는 구성 파일을 제공하는 단계 - 상기 인스턴스 정의는 복수의 포트 정의들을 포함하고, 각각의 상기 포트 정의는 상기 전기 설계 모듈의 포트의 이름 및 참조 연결을 포함하고, 상기 참조 연결은 부울 상수들 0 및 1 및 복수의 참조 모듈들 내의 복수의 신호들의 부울 조합을 포함함 -;
    상기 구성 파일을 처리하는 단계;
    생성될 복수의 파일들의 콘텐츠를 계산하는 단계 - 상기 파일들은 참조 래퍼 파일, 설계 래퍼 파일, 및 반도체 제조시에 상기 전기 설계 모듈을, 상기 전기 설계 모듈과 매칭하는 상기 서브-회로를 포함하는 상기 전기 참조 모델과 대조하여 검증하기 위한 0개 이상의 계층적 오버라이드 파일들을 포함하고, 상기 전기 설계 모듈이 상기 계층적 오버라이드 파일들에 의해 수정된 상기 구성 파일에 의해 특정된 상기 전기 참조 모델의 상기 서브-회로를 정확하게 구현하는 경우에만 상기 래퍼 파일들이 순차적으로 동등하도록 상기 래퍼 파일들은 동일한 주 입력들 및 출력들을 갖고, 각각의 상기 계층적 오버라이드 파일은 상기 전기 참조 모델의 계층 구조 내의 개별 모듈을, 상기 모듈 내의 내부 신호들을 구동하거나 샘플링하기 위한 하나 이상의 추가적인 포트들로 보강하는 것에 의해 수정함 -; 및
    상기 복수의 파일들을 기록하는 단계
    를 포함하는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  8. 제7항에 있어서, 상기 구성 파일 내의 각각의 상기 포트 정의는 상기 참조 연결이 정수의 클록 사이클들만큼 지연되는 것을 더 특정하고, 상기 정수는 양수, 음수 또는 제로일 수 있는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  9. 제7항에 있어서, 상기 구성 파일 내의 각각의 상기 포트 정의는 출력 유효 마스크를 더 특정하고, 상기 출력 유효 마스크는 상기 부울 상수들 0 및 1 및 복수의 참조 모듈들 내의 복수의 신호들의 부울 조합을 포함하고, 상기 출력 유효 마스크가 부울 0일 때는 언제나 상기 포트의 순차적 등가성이 요구되지 않는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  10. 제7항에 있어서, 상기 구성 파일은 상기 래퍼 파일들 내의 하나 이상의 로컬 신호들을 정의하고 구동하는 논리를 더 포함하고, 상기 부울 조합은 상기 로컬 신호들에의 참조들을 더 포함하는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  11. 제7항에 있어서, 상기 구성 파일은 하나 이상의 서브-인스턴스 정의들을 더 포함하고, 각각의 상기 서브-인스턴스 정의는 복수의 포트 정의들 및 상기 전기 설계 모듈의 서브-인스턴스로의 경로를 포함하고, 각각의 상기 포트 정의는 상기 서브-인스턴스의 포트의 이름 및 참조 연결을 포함하고, 상기 참조 연결은 상기 전기 참조 모델 내의 내부 신호로의 계층적 경로를 포함하고, 상기 서브-인스턴스의 논리는 상기 설계 래퍼로부터 제거되고 상기 서브-인스턴스의 입력 포트들은 상기 래퍼들의 출력 포트들로서 생성되고 상기 서브-인스턴스의 출력 포트들은 상기 래퍼들의 입력 포트들로서 생성되는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  12. 제7항에 있어서, 상기 구성 파일은 하나 이상의 입력 제약 모듈 정의들을 더 포함하고, 각각의 입력 제약 모듈 정의는 복수의 포트들을 포함하는 전기 모듈을 참조하고, 각각의 포트는 상기 전기 참조 모델 내의 내부 신호를 참조하고, 상기 제약 모듈의 출력 포트에 의해 참조되는 상기 전기 참조 모델 내의 각각의 내부 신호에 대하여 상기 래퍼 파일들 내에 상기 입력 제약 모듈의 인스턴스가 생성되고, 참조 연결 내의 상기 내부 신호에의 각각의 참조는 상기 내부 신호 대신에 상기 제약 모듈의 상기 출력 포트를 사용하는, 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법.
  13. 참조 래퍼 파일, 설계 래퍼 파일, 및 반도체 제조시에 전기 설계 모듈을, 상기 전기 설계 모듈과 매칭하는 서브-회로를 포함하는 전기 참조 모델과 대조하여 검증하기 위한 0개 이상의 계층적 오버라이드 파일들을 이용하는 순차적 등가성 검사를 위한 재구성된 설계들을 준비하기 위한 방법을 수행하기 위해 컴퓨팅 장치에 의해 실행 가능한 명령어들의 프로그램을 실체적으로 구현하는 상기 컴퓨팅 장치에 의해 판독 가능한 프로그램 저장 장치로서, 상기 전기 설계 모듈이 상기 계층적 오버라이드 파일들에 의해 수정된 구성 파일에 의해 특정된 상기 전기 참조 모델의 상기 서브-회로를 정확하게 구현하는 경우에만 상기 2개의 래퍼 파일들이 순차적으로 동등하도록 상기 래퍼 파일들은 동일한 주 입력들 및 출력들을 갖고, 각각의 계층적 오버라이드 파일은 상기 전기 참조 모델의 계층 구조 내의 개별 모듈을, 상기 모듈 내의 내부 신호들을 구동하거나 샘플링하기 위한 하나 이상의 추가적인 포트들로 보강하는 것에 의해 수정하고, 상기 방법은,
    복수의 포트들을 포함하는 전기 설계 모듈의 기술을 제공하는 단계;
    하나 이상의 참조 모듈들의 계층 구조를 포함하는 전기 참조 모델의 기술을 제공하는 단계 - 각각의 상기 참조 모듈은 복수의 내부 신호들을 포함함 -;
    인스턴스 정의를 포함하는 구성 파일을 제공하는 단계 - 상기 인스턴스 정의는 복수의 포트 정의들을 포함하고, 각각의 상기 포트 정의는 상기 전기 설계 모듈의 포트의 이름 및 참조 연결을 포함하고, 상기 참조 연결은 부울 상수들 0 및 1 및 복수의 참조 모듈들 내의 복수의 신호들의 부울 조합을 포함함 -;
    상기 구성 파일을 처리하는 단계;
    생성될 복수의 파일들의 콘텐츠를 계산하는 단계 - 상기 파일들은 참조 래퍼 파일, 설계 래퍼 파일, 및 반도체 제조시에 상기 전기 설계 모듈을, 상기 전기 설계 모듈과 매칭하는 상기 서브-회로를 포함하는 상기 전기 참조 모델과 대조하여 검증하기 위한 0개 이상의 계층적 오버라이드 파일들을 포함하고, 상기 전기 설계 모듈이 상기 계층적 오버라이드 파일들에 의해 수정된 상기 구성 파일에 의해 특정된 상기 전기 참조 모델의 상기 서브-회로를 정확하게 구현하는 경우에만 상기 래퍼 파일들이 순차적으로 동등하도록 상기 래퍼 파일들은 동일한 주 입력들 및 출력들을 갖고, 각각의 상기 계층적 오버라이드 파일은 상기 전기 참조 모델의 계층 구조 내의 개별 모듈을, 상기 모듈 내의 내부 신호들을 구동하거나 샘플링하기 위한 하나 이상의 추가적인 포트들로 보강하는 것에 의해 수정함 -; 및
    상기 복수의 파일들을 기록하는 단계
    를 포함하는, 프로그램 저장 장치.
  14. 제13항에 있어서, 상기 구성 파일 내의 각각의 상기 포트 정의는 상기 참조 연결이 정수의 클록 사이클들만큼 지연되는 것을 더 특정하고, 상기 정수는 양수, 음수 또는 제로일 수 있는, 프로그램 저장 장치.
  15. 제13항에 있어서, 상기 구성 파일 내의 각각의 상기 포트 정의는 출력 유효 마스크를 더 특정하고, 상기 출력 유효 마스크는 상기 부울 상수들 0 및 1 및 복수의 참조 모듈들 내의 복수의 신호들의 부울 조합을 포함하고, 상기 출력 유효 마스크가 부울 0일 때는 언제나 상기 포트의 순차적 등가성이 요구되지 않는, 프로그램 저장 장치.
  16. 제13항에 있어서, 상기 구성 파일은 상기 래퍼 파일들 내의 하나 이상의 로컬 신호들을 정의하고 구동하는 논리를 더 포함하고, 상기 부울 조합은 상기 로컬 신호들에의 참조들을 더 포함하는, 프로그램 저장 장치.
  17. 제13항에 있어서, 상기 구성 파일은 하나 이상의 서브-인스턴스 정의들을 더 포함하고, 각각의 상기 서브-인스턴스 정의는 복수의 포트 정의들 및 상기 전기 설계 모듈의 서브-인스턴스로의 경로를 포함하고, 각각의 상기 포트 정의는 상기 서브-인스턴스의 포트의 이름 및 참조 연결을 포함하고, 상기 참조 연결은 상기 전기 참조 모델 내의 내부 신호로의 계층적 경로를 포함하고, 상기 서브-인스턴스의 논리는 상기 설계 래퍼로부터 제거되고 상기 서브-인스턴스의 입력 포트들은 상기 래퍼들의 출력 포트들로서 생성되고 상기 서브-인스턴스의 출력 포트들은 상기 래퍼들의 입력 포트들로서 생성되는, 프로그램 저장 장치.
  18. 제13항에 있어서, 상기 구성 파일은 하나 이상의 입력 제약 모듈 정의들을 더 포함하고, 각각의 입력 제약 모듈 정의는 복수의 포트들을 포함하는 전기 모듈을 참조하고, 각각의 포트는 상기 전기 참조 모델 내의 내부 신호를 참조하고, 상기 제약 모듈의 출력 포트에 의해 참조되는 상기 전기 참조 모델 내의 각각의 내부 신호에 대하여 상기 래퍼 파일들 내에 상기 입력 제약 모듈의 인스턴스가 생성되고, 참조 연결 내의 상기 내부 신호에의 각각의 참조는 상기 내부 신호 대신에 상기 제약 모듈의 상기 출력 포트를 사용하는, 프로그램 저장 장치.
KR1020117012932A 2008-11-07 2009-10-28 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법 KR101275486B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11253708P 2008-11-07 2008-11-07
US61/112,537 2008-11-07
PCT/US2009/062337 WO2010053779A1 (en) 2008-11-07 2009-10-28 A method for preparing re-architected designs for sequential equivalence checking

Publications (2)

Publication Number Publication Date
KR20110086587A true KR20110086587A (ko) 2011-07-28
KR101275486B1 KR101275486B1 (ko) 2013-06-17

Family

ID=42153187

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117012932A KR101275486B1 (ko) 2008-11-07 2009-10-28 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법

Country Status (4)

Country Link
US (1) US8443319B2 (ko)
EP (1) EP2350892A4 (ko)
KR (1) KR101275486B1 (ko)
WO (1) WO2010053779A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010038387A1 (ja) * 2008-09-30 2010-04-08 株式会社アドバンテスト 回路設計方法、回路設計システム及び記録媒体
US8429580B2 (en) 2008-11-07 2013-04-23 Apple Inc. Method for preparing for and formally verifying a modified integrated circuit design
CA2786220C (en) * 2011-08-18 2020-02-18 Valydate Inc. Validation of circuit definitions
US8930877B1 (en) * 2013-06-27 2015-01-06 Zipalog, Inc. Method and system of change evaluation of an electronic design for verification confirmation
US10606979B1 (en) * 2018-06-06 2020-03-31 Xilinx, Inc. Verifying equivalence of design latency

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7092864B2 (en) * 2000-12-29 2006-08-15 International Business Machines Corporation Signal override for simulation models
JP2003045574A (ja) 2001-07-30 2003-02-14 Canon Inc カードアダプタ
US6742174B1 (en) * 2001-10-19 2004-05-25 Cadence Design Systems, Inc. Similarity-driven synthesis for equivalence checking of complex designs
US6668362B1 (en) * 2002-01-09 2003-12-23 Synopsys, Inc. Hierarchical verification for equivalence checking of designs
US7567892B2 (en) * 2002-05-29 2009-07-28 Broadcom Corporation Method and system for realizing a logic model design
JP2006048525A (ja) * 2004-08-06 2006-02-16 Toshiba Corp シミュレーション方法
US7890901B2 (en) * 2006-03-24 2011-02-15 International Business Machines Corporation Method and system for verifying the equivalence of digital circuits
US8453083B2 (en) * 2006-07-28 2013-05-28 Synopsys, Inc. Transformation of IC designs for formal verification
US7624363B2 (en) * 2007-02-27 2009-11-24 International Business Machines Corporation Method and apparatus for performing equivalence checking on circuit designs having differing clocking and latching schemes
US8429580B2 (en) * 2008-11-07 2013-04-23 Apple Inc. Method for preparing for and formally verifying a modified integrated circuit design

Also Published As

Publication number Publication date
WO2010053779A1 (en) 2010-05-14
US20110214097A1 (en) 2011-09-01
EP2350892A1 (en) 2011-08-03
US8443319B2 (en) 2013-05-14
EP2350892A4 (en) 2014-07-23
KR101275486B1 (ko) 2013-06-17

Similar Documents

Publication Publication Date Title
US9892223B1 (en) System and method for designing system on chip (SoC) circuits by synchronizing a hierarchy of SMDPs
US10372859B2 (en) System and method for designing system on chip (SoC) circuits using single instruction multiple agent (SIMA) instructions
US5493508A (en) Specification and design of complex digital systems
KR100186869B1 (ko) 회로와 시스템들의 고레벨의 의미론적 명세들과 기술들로부터 회로와 시스템들의 실행가능한 저레벨의 구조적 기술과 정당한물리적구현들을추론하는방법론
Große et al. Proving transaction and system-level properties of untimed SystemC TLM designs
US5572437A (en) Method and system for creating and verifying structural logic model of electronic design from behavioral description, including generation of logic and timing models
Riesgo et al. Design methodologies based on hardware description languages
US6321363B1 (en) Incremental simulation using previous simulation results and knowledge of changes to simulation model to achieve fast simulation time
US7890901B2 (en) Method and system for verifying the equivalence of digital circuits
Graham The SECD Microprocessor: A verification case study
Große et al. Quality-driven SystemC design
US20110307848A1 (en) Method for preparing for and formally verifying a modified integrated circuit design
KR101275486B1 (ko) 순차적 등가성 검사를 위한 재구성된 설계를 준비하기 위한 방법
Wiśniewski et al. C-exact hypergraphs in concurrency and sequentiality analyses of cyber-physical systems specified by safe Petri nets
US7433813B1 (en) Embedding a co-simulated hardware object in an event-driven simulator
US20110016442A1 (en) Method of Performing Static Timing Analysis Considering Abstracted Cell's Interconnect Parasitics
Devadas et al. Verification of asynchronous interface circuits with bounded wire delays
Kartika Analysis of “SystemC” design flow for FPGA implementation
CN104636509A (zh) 门级仿真中验证时序问题的方法
US7328415B2 (en) Modeling blocks of an integrated circuit for timing verification
KR20060101127A (ko) Esl 설계 방식에서의 효과적인 함수적 설계 검증 장치 및이를 이용한 검증 방법
Lööw Reconciling verified-circuit development and Verilog development
US7107201B2 (en) Simulating a logic design
Baguma High level synthesis of fpga-based digital filters
Kalsing et al. Towards consistency checking between HDL and UPF descriptions

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160517

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee