[go: up one dir, main page]

KR100928134B1 - 주문형 vcd 시스템 및 방법 - Google Patents

주문형 vcd 시스템 및 방법 Download PDF

Info

Publication number
KR100928134B1
KR100928134B1 KR1020037002218A KR20037002218A KR100928134B1 KR 100928134 B1 KR100928134 B1 KR 100928134B1 KR 1020037002218 A KR1020037002218 A KR 1020037002218A KR 20037002218 A KR20037002218 A KR 20037002218A KR 100928134 B1 KR100928134 B1 KR 100928134B1
Authority
KR
South Korea
Prior art keywords
simulation
logic
hardware
user
design
Prior art date
Application number
KR1020037002218A
Other languages
English (en)
Other versions
KR20040028598A (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 KR20040028598A publication Critical patent/KR20040028598A/ko
Application granted granted Critical
Publication of KR100928134B1 publication Critical patent/KR100928134B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Debugging And Monitoring (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

본원 발명은 소위 주문형 VCD에 관한 것이다. 일반적인 시스템에서, 주문형 VCD 기술을 통합하는 EDA 툴은 다음의 상위 레벨 속성들을 가지고 있다: (1) RCC-기반 병렬 시뮬레이션 히스토리 압축 및 기록, (2) RCC-기반 병렬 시뮬레이션 히스토리 압축 및 VCD 파일 발생, 및 (3) 선택된 시뮬레이션 타겟 범위에 대한 주문형 소프트웨어 재생성 및 시뮬레이션 재실행 없는 설계 리뷰. 이러한 속성들 각각이 상세히 기술될 것이다. 사용자가 시뮬레이션 세션 범위를 선택할 때, RCC 시스템은 테스트 벤치 프로세스로부터 1차 입력들에 대해 높게 압축된 버젼을 기록한다. 그리고 나서 사용자는 보다 집중된 분석을 위해 시뮬레이션 세션 범위 내에 소위 시뮬레이션 타겟 범위로 불려지는 보다 협소한 영역을 선택한다. RCC 시스템은 하드웨어 모델의 하드웨어 상태 정보(즉, 1차 입력들)를 VCD 파일내에 덤핑한다. 그리고 RCC 시스템은 시뮬레이션 세션 범위의 시작부터 완전한 시뮬레이션을 재실행할 필요없이 사용자가 시뮬레이션 타겟 범위의 시작으로부터 VCD 파일을 바로 관찰하는 과정으로 진행할 수 있도록 하여준다.

Description

주문형 VCD 시스템 및 방법{VCD-ON-DEMAND SYSTEM AND METHOD}
본 발명은 1998년 8월 31일에 미국특허청(USPTO)에 제출된 미국 특허 출원 제09/144,222호의 일부 연속 출원(CIP)과 관련된 출원이다.
본 발명은 일반적으로 전자 설계 자동화(Electronic Design Automation: EDA)에 관한 것이다. 더욱 상세하게는, 본 발명은 설계 디버그 세션들을 가속화하기 위한 VCD(value change dump) 개선에 관한 것이다.
일반적으로, 전자 설계 자동화(EDA)는 사용자의 주문 회로 설계를 설계하고 검증하기 위한 자동 또는 반자동 툴을 설계자에게 제공하기 위하여 다양한 워크스테이션에서 구현되는 컴퓨터 기반의 툴이다. EDA는 일반적으로 시뮬레이션, 에뮬레이션, 프로토타이핑, 실행 또는 컴퓨팅을 목적으로 임의의 전자 설계를 생성하고, 분석하며 컴파일하기 위하여 사용된다. EDA 기술은 또한 사용자 설계되는 서브 시스템 또는 컴포넌트를 사용하는 시스템(즉, 타겟 시스템)을 개발하는데 사용될 수 있다. EDA의 최종 결과는 통상 독립된 집적회로 또는 인쇄회로기판의 형태인 변형되고 보완된 설계로서, 원래의 설계 범주를 유지하면서 원래의 설계를 개선하는 것이다.
하드웨어 에뮬레이션 이후에 회로 설계를 시뮬레이션하는 소프트웨어의 가치는 EDA 기술을 사용하고 EDA 기술의 이점을 이용하는 여러 가지 산업에서 인식되어 있다. 그럼에도 불구하고, 현재 소프트웨어 시뮬레이션 및 하드웨어 에뮬레이션/가속은 이러한 프로세스들의 분리되고 독립적인 특성 때문에 사용자에게 번거롭다. 예컨대, 사용자는 모든 하나의 디버그/테스트 세션에서, 시간의 일부분 동안 소프트웨어 시뮬레이션을 이용하여 회로 설계를 시뮬레이션하거나 디버깅하고, 그들 결과를 이용하여 다른 시간동안 하드웨어 모델을 이용하여 시뮬레이션 프로세스를 가속하며, 이후 시간에서 소프트웨어 시뮬레이션으로 리턴한다. 게다가, 시뮬레이션 시간이 진행됨에 따라 내부 레지스터와 조합 로직값이 변화하기 때문에, 사용자는 그 변화가 하드웨어 가속/에뮬레이션 프로세스 동안 하드웨어 모델에 발생한다 하더라도 이들 변화를 모니터링할 수 있어야 한다.
공동-시뮬레이션(Co-simulation)은 두개의 분리되고 독립적인 순수 소프트웨어 시뮬레이션 프로세스와 순수 에뮬레이션/가속 프로세스를 이용하는 번거로운 특성의 몇가지 문제점을 바로잡고, 전반적인 시스템을 보다 사용자 친화적으로 만들 필요성에서 발생되었다. 그러나, 공동-시뮬레이션은 여전히 많은 결점이 있다: (1)공동-시뮬레이션 시스템은 수동 분할(manual partitioning)을 필요로 하고, (2)공동-시뮬레이션은 두개의 소결합 엔진을 사용하며, (3)공동-시뮬레이션 속도는 소프트웨어 시뮬레이션 속도만큼 느리고, (4)공동-시뮬레이션 시스템은 레이스 컨디션(race condition)과 충돌한다.
우선, 소프트웨어와 하드웨어 사이의 분할은 자동이 아닌 수동으로 수행되어, 사용자에게는 더 부담이다. 본질적으로, 공동-시뮬레이션은 사용자가 설계를 분할(동작 레벨에서 시작하고, 그 후 RTL, 및 게이트 레벨)하고, 소프트웨어와 하드웨어 중에서 매우 큰 기능 블럭으로 상기 모델을 자체적으로 테스트하는 것을 요구한다. 이러한 제한은 사용자에게 어느 정도 범위의 지능화를 요구한다.
두 번째로, 공동-시뮬레이션 시스템은 두개의 소결합되고 독립된 엔진을 이용하며, 이것은 내부-엔진 동기화, 조정, 및 융통성 문제를 유발한다. 공동-시뮬레이션은 두개의 다른 검증 엔진 - 소프트웨어 시뮬레이션 및 하드웨어 에뮬레이션의 동기화를 요구한다. 소프트웨어 시뮬레이션측이 하드웨어 가속측에 연결되어 있다고 해도, 외부의 핀아웃 데이터(pin-out data)만을 검사 및 로딩에 이용할 수 있다. 레지스터에서 모델링되는 회로 내부의 값과 조합 로직 레벨은 용이한 검사 및 일측에서 타측으로의 다운로딩을 위해 사용할 수 없으므로, 이들 공동-시뮬레이션 시스템의 이용을 제한한다. 통상적으로 사용자가 소프트웨어 시뮬레이션에서 하드웨어 가속으로 전환하면 전체 설계를 다시 시뮬레이션해야 할 수도 있다. 따라서, 사용자가 레지스터와 조합 로직값을 검사하면서 단일 디버그 세션 동안 소프트웨어 시뮬레이션과 하드웨어 에뮬레이션간의 전환을 원할 경우, 공동-시뮬레이션 시스템은 이러한 능력을 제공하지 않는다.
세번째로, 공동-시뮬레이션 속도는 시뮬레이션 속도만큼 느리다. 공동-시뮬레이션은 두개의 다른 검증엔진- 소프트웨어 시뮬레이션 및 하드웨어 에뮬레이션의 동기화를 요구한다. 각각의 엔진은 시뮬레이션 또는 에뮬레이션을 구동하기 위한 그자신의 제어 메커니즘을 가진다. 이것은 소프트웨어와 하드웨어 사이의 동기화가 전체적인 성능을 소프트웨어 시뮬레이션만큼 느린 속도로 억지시킨다는 것을 의미한다. 이들 두개의 엔진의 동작을 조정하기 위한 부가적인 부담이 공동-시뮬레이션 시스템의 느린 속도에 부가된다.
네번째로, 공동-시뮬레이션 시스템은 클럭 신호 사이의 레이스 컨디션으로 인해 셋업, 유지시간 및 클럭 글리치(glitch) 문제를 일으킨다. 공동-시뮬레이션은 서로 다른 배선 길이로 인하여 다른 시간에서 다른 로직 엘리먼트로의 입력일 수 있는 하드웨어 구동 클럭을 이용한다. 이들 로직 엘리먼트가 데이터를 함께 평가하여야 하는 경우, 몇몇 로직 엘리먼트들은 임의의 시간 주기에서 데이터를 평가하고 다른 로직 엘리먼트들은 다른 시간 주기에서 데이터를 평가하기 때문에, 불확신한 레벨의 평가 결과를 초래한다.
통상적인 설계자에 의해 직면한 다른 문제점은, 디버깅동안 설계문제를 분리하여 인식하는 비교적 느린 프로세스이다. 설계자 자신의 제한된 문제 해결 능력이 몇가지 이러한 흩트러진 페이스(pace)에 기여할 수도 있지만, 이러한 문제의 주요 원인은 시뮬레이터 자체이다. 소프트웨어 기반 엔진 때문에 느린 시뮬레이터뿐만 아니라, 시뮬레이터에 있어서의 디버깅은 전체 시뮬레이션의 리턴을 필요로 한다. 이러한 문제들에 대해서는 더 설명될 것이다.
통상의 ASIC 칩 설계자는 시뮬레이터를 이용하여 설계를 디버깅한다: 즉, 설계자는 다른 것중에서 다양한 스티멀러스에 대한 그들의 반응을 관찰하기 위하여 테스트 벤치 프로세스(test bench process)를 이용하여 그 설계를 시뮬레이션하거나 테스트한다. 그 설계의 몇가지 키노드(key nodes) 및 출력의 심사를 기초로 하여, 설계자는 일반적으로 그들 설계의 결함 유무를 결정할 수 있다. 물론, 설계가 초기 단계에 있다면, 그것은 늘 몇가지 문제를 가진다.
그러나, 버그의 위치를 알아내는 것은 쉽지 않다. 상당히 크고 복잡한 설계(예컨대 수백만 게이트이상)에 있어서, 시뮬레이터는 버그중의 하나가 명백하게 드러나기 전에 수백만 시뮬레이션 시간 주기의 스텝을 진행해야 한다. 분명히, 이러한 설계에 있어서, 설계자가 각각의 시뮬레이션 시간 스텝을 검토하는 것을 기대할 수는 없다. 솔직히 이러한 작업은 제품 설계의 개발 사이클에 있어서 주어진 짧은 시간 범위에는 불가능할 것이다.
일단 시뮬레이터가 일반적으로 버그의 존재를 발견하면, 실제 버그(actual bug)는 버그의 결함있는 설계를 제거하기 위하여 구체적으로 위치되어야 한다. 언제(즉, 시뮬레이션 시간 스텝) 문제가 발생하였는가? 시뮬레이션 초기(예컨대, t10), 중기(예컨대, t1000) 또는 말기(예컨대, t1000000)에 발생하였는가? 또한, 교정가 제공될 수 있는 곳(즉, 회로 설계의 물리적 위치)에 문제가 위치하는가? 초기에, 설계자가 정확하게 어디(시뮬레이션 시간 스텝)에서 버그가 발생했는지를 알 수는 없지만, 합리적인 추정을 할 수 있다. 설계자는 문제가 위치한다고 생각되는 정확한 시뮬레이션 시간으로 진행하기 위한 몇가지 방법을 가질 수 있다. 시뮬레이터는 두가지 종래의 방법- 풀(full) VCD 및 선택적인 VCD 중 하나를 통하여 VCD(Value Change Dump) 파일을 제공함으로써, 이러한 작업에 있어서 설계자를 보조할 수 있다.
풀 VCD 방법에 있어서, 시뮬레이터는 시뮬레이션 시간 t0 에서 시뮬레이션 끝까지 VCD 파일로서 전체 시뮬레이션을 저장한다. 그 후, 이러한 VCD 파일은 설계자에 의해 분석되어 버그를 분리시킨다. 설계자는 그 일반적인 위치에 대하여 합리적인 추정을 하여 몇가지 정교한 스텝핑으로 그 위치를 분석할 수 있다: 즉, 설계자가 버그가 시뮬레이션 시간 t350 과 t400 사이의 어느 곳에서 발생했다고 다소 의심한다면, 시뮬레이션 시간 t345와 같이, 의심되는 시뮬레이션 시간 직전에 위치하는 시뮬레이션 시간으로 진행할 것이다. 그리고, 설계자는 이러한 의심되는 영역(즉, t345 내지 t400)에 대해 매우 조심스럽게 검사를 진행할 것이다.
그러나, 이러한 시뮬레이션 시간에 도달하기 위해서는, 설계자는 버그가 발생된 곳과 상관없이 VCD 파일을 갖는 시작(즉, t0)부터 전체 시뮬레이션을 리턴해야 한다. 만약 버그의 위치에 대한 초기 추정이 틀렸다면, 다른 추정을 하여 처음부터 시뮬레이션을 다시 리턴해야 한다. 백만 이상의 게이트 및 백만 이상의 시뮬레이션 시간 스텝을 갖는 설계에 있어서, 시작부터 시뮬레이션을 리턴하는 이러한 디버깅 프로세스는 잘못된 추정에 의해 비롯되는 매우 큰 시간낭비이다.
그러나, 백만이상의 게이트와 백만 이상의 시뮬레이션 시간 스텝을 가진 설계는 많은 디스크 공간을 필요로 한다. 통상, 대략 100 GB의 풀 VCD 파일이 일반적이다. 이러한 VCD 파일은 대부분의 파일 시스템에서 너무 크다. 더욱이, 이러한 큰 VCD 파일은 너무 커서 대부분의 파형 뷰어가 충분히 처리할 수 없다.
또한, 풀 VCD에서 시뮬레이션 프로세스는 3배 더 느려진다. 각 시뮬레이션 시간(또는 값이 변할 때) 이후, 풀 VCD는 상태값들이 기록되는 것을 요구한다. 스토리지에 액세스하는 이러한 프로세스는 시간을 필요로 하며, 결과적으로 시뮬레이션은 스토리지 동작이 주어진 시뮬레이션 시간에서 종료될 때까지 중단되어야 한다. 오늘날, 풀 VCD 방법은 더 이상 실용적이지 않다.
선택적인 VCD방법에 있어서, 전체 시뮬레이션은 저장되지 않는다; 오히려, 시뮬레이터는 설계자가 선택한 부분의 시뮬레이션을 저장한다. 그러나, 선택적인 VCD는 설계자가 시작부터 전체 시뮬레이션을 리턴해야 하는 것을 줄여주지는 않는다. 초기에, 설계자는 시뮬레이션을 가동하고 반드시 그 설계에 있어서 문제점을 관찰하여야 한다. 그리고 나서, 어디 문제점이 위치하는지에 대하여 추정한다. 만약 설계자가 시뮬레이션 시간 t350과 t400사이의 어디엔가 문제점이 발생할 것이라는 추정을 한다면, 설계자는 시뮬레이션을 재가동하여 시뮬레이터에게 VCD 파일로서 이러한 시뮬레이션 시간 범위를 저장하도록 지시한다. 그후에, 설계자는 그의 추정에 해당하는 VCD 파일을 검사할 수 있다. 만약 문제의 위치를 알아내는데 있어서 그의 추정이 틀렸다면, 그는 다른 추정을 하여, VCD 파일로서 새로운 시뮬레이션 범위를 저장하도록 시뮬레이터에게 지시하고, 그리고 나서 그 시뮬레이션을 재가동하여야 한다. 그리고 나서, 설계자는 VCD 파일을 다시 분석한다.
풀 VCD 방법과는 달리, 선택적인 VCD는 전체 시뮬레이션이 저장되지 않기 때문에 많은 디스크 공간을 필요로 하지 않는다. 그러나, 선택적인 VCD는 여전히 전체 시뮬레이션을 재가동하는 것을 요구한다. 만약 설계자가 그 버그의 위치를 알아내는데 있어서 잘못된 추정을 한다면, 그는 VCD 파일에 있어서 새로운 시뮬레이션 범위를 저장하도록 다시 시뮬레이션을 재가동하여야 한다. 어느 경우에도, 선택적인 VCD 방법은 잘못된 추정에 의해 악화된 시간낭비는 여전하다.
따라서, 현재 알려진 시뮬레이션 시스템, 하드웨어 에뮬레이션 시스템, 하드웨어 가속기, 공동-시뮬레이션, 및 공동 검증(coverification) 시스템에 의해 유발된 문제점을 바로 잡는 시스템 또는 방법에 대한 필요성이 산업 분야에 존재한다.
본 발명의 하나의 실시예는 시뮬레이션 리턴 없이 주문형 VCD 파일을 제공하는 것이다. 주문형 VCD 특징은 RCC 컴퓨팅 시스템 및 RCC 하드웨어 가속기를 포함하는 RCC 시스템에 병합되는 것이다. RCC 컴퓨팅 시스템은 사용자가 소프트웨어로 사용자의 전체 소프트웨어-모델링되는 소프트웨어 설계를 시뮬레이션하고, 하드웨어-모델링 설계 부분의 하드웨어 가속을 제어하는데 필요한 컴퓨팅 리소스를 포함한다. RCC 하드웨어 가속기는 사용자 하드웨어 설계의 적어도 일부분을 모델링하여 사용자가 디버깅 프로세스를 가속시킬 수 있도록 하는 리컨피규러블(reconfigurable) 어레이의 로직 엘리먼트(예, FPGA)를 포함한다. RCC 컴퓨팅 시스템은 소프트웨어 클럭을 통하여 RCC 하드웨어 가속기에 밀착 결합된다.
주문형 VCD는 사용자가 시뮬레이션을 재가동하지 않고 상세한 디버깅 분석을 위하여 시뮬레이션 히스토리의 일부를 선택하도록 한다. RCC 시스템은 사용자가 두개의 시뮬레이션 시간 범위, 보다 넓은 "시뮬레이션 세션 범위"와 "시뮬레이션 타겟 범위"라고 불리는 보다 좁은 서브셋의 이러한 범위를 선택하도록 한다. VCD 파일은 이러한 좁은 "시뮬레이션 타겟 범위" 동안 생성될 것이다. "시뮬레이션 세션 범위"의 선택 후에, RCC 시스템은 테스트 벤치 프로세스에서 평가를 위한 RCC 하드웨어 가속기내의 하드웨어 모델로 1차 입력을 제공함으로써, 시뮬레이션 세션 범위의 전체 주기동안 설계를 신속하게 시뮬레이션한다. 또한, 이들 동일한 1차 입력은 시뮬레이션 히스토리 파일에 압축되고 기록된다. 이러한 시뮬레이션 히스토리 파일을 가지고, RCC 시스템은 언제라도 시뮬레이션 세션 범위내에서 임의의 시뮬레이션 부분을 재생할 수 있다.
시뮬레이션 세션 범위의 시작에서, RCC 시스템은 사용자가 필요하다면 오프라인 시뮬레이션을 할 수 있도록 상기 지점에서 설계의 하드웨어 상태 정보를 저장한다. 시뮬레이션 세션 범위의 종료에서, RCC 시스템은 사용자가 시뮬레이션을 리와인딩하지 않고 언제라도 이러한 시뮬레이션 세션 범위를 넘어서 시뮬레이션하기 위해 중지(left off)된 지점으로 빨리 리턴할 수 있도록 상기 지점에서 설계의 하드웨어 상태 정보를 저장한다.
사용자가 "시뮬레이션 타겟 범위"를 선택하면, RCC 시스템은 시뮬레이션 히스토리 파일의 압축된 1차 입력을 압축해제하고, 평가용 RCC 하드웨어 가속기에 이러한 압축해제된 1차 입력을 제공함으로써, 시뮬레이션 타겟 범위의 초기에 신속히 시뮬레이션한다. 시뮬레이션 타겟 범위에서, RCC 시스템은 하드웨어 모델에서 시스템 디스크내의 저장용 VCD 파일로의 1차 출력 또는 평가 결과를 덤프(dump)한다. 시뮬레이션 타겟 범위의 종료에서, RCC 시스템은 덤프 프로세스를 중지한다.
VCD 파일이 생성되면, 사용자는 설계를 디버깅하기 위한 파형 뷰어를 통해 VCD 파일을 보다 상세히 관찰할 수 있다. 이는 시뮬레이션을 재가동시키지 않고 달성된다. 버그가 이러한 시뮬레이션 타겟 범위에 위치하지 않는다면, 사용자는 동일한 시뮬레이션 세션 범위내의 다른 시뮬레이션 타겟 범위를 선택할 수 있다. 일단 새로운 시뮬레이션 타겟 범위가 선택되면, RCC 시스템은 상술한 방법으로 새로운 VCD 파일을 생성한다. 그리고 나서, 사용자는 버그를 분리하기 위하여 이 새로운 VCD 파일을 분석할 수 있다.
버그가 분리되어 치료되면, 사용자는 현재 시뮬레이션 세션 범위를 지나서 다음 시뮬레이션 범위까지 계속 시뮬레이션 할 수 있다. 현재 시뮬레이션 세션 범위의 종료 시점에서의 저장된 하드웨어 상태 정보는 RCC 시스템으로 로딩된다. 그리고 나서, 사용자는 시뮬레이션을 착수할 수 있다. 주문형 VCD 특성은 온라인과 오프라인 모두에서 이용할 수 있다는 것이다.
이들 및 다른 실시예는 이하의 상세한 설명에 의해 충분히 논의되고 설명된다.
도 1은 워크스테이션, 리컨피규러블 하드웨어 에뮬레이션 모델, 에뮬레이션 인터페이스 및 PCI 버스에 결합된 타겟 시스템을 포함하는, 본 발명의 하나의 실시예의 상위 개략도를 나타내고,
도 2는 본 발명의 하나의 특정된 이용 흐름도를 나타내며,
도 3은 본 발명의 일실시예에 따라 컴파일링 시간 및 런타임동안 소프트웨어 컴파일레이션 및 하드웨어 컨피규레이션의 상위도를 나타내며,
도 4는 소프트웨어/하드웨어 모델 및 소프트웨어 커널 코드 생성을 포함하는 컴파일레이션 프로세스의 흐름도를 나타내고,
도 5는 전체 SEmulation 시스템을 제어하는 소트프웨어 커널을 나타내며,
도 6은 맵핑, 배치, 및 라우팅(routing)을 통하여 하드웨어 모델을 리컨피규러블보드에 맵핑하는 방법을 나타내고,
도 7은 도 8에 나타낸 FPGA 어레이를 위한 연결성 매트릭스를 나타내며,
도 8은 4x4 FPGA 어레이 및 그들의 내부 액세스의 일실시예를 나타내고,
도 9(A), (B) 및 (C)는 다수의 핀대신 하나의 핀이 칩내의 와이어 그룹에 대하여 사용될 수 있도록 타임 멀티플렉싱 방식으로 일단의 와이어가 함께 결합되는 시분할 다중 회로의 일실시예를 나타낸다. 도 9(A)는 핀아웃 문제의 개략을 나타내고, 도 9(B)는 발신측에 있어서의 TDM 회로를 제공하며, 도 9(C)는 수신측에서에서의 TDM회로를 제공한다.
도 10은 본 발명의 일실시예에 따라서 SEmulation 시스템 구조를 나타내고,
도 11은 본 발명의 어드레스 포인터의 일실시예를 나타내며,
도 12는 도 11의 어드레스 포인터를 위한 어드레스 포인터 초기화의 상태변이를 나타내며,
도 13은 어드레스 포인터를 위한 다양한 MOVE 신호를 파생적으로 발생하는 MOVE신호 발생기의 일실시예를 나타내고,
도 14는 FPGA칩 각각에서 멀티플레싱된 어드레스 포인터 체인을 나타내며,
도 15는 본 발명의 일실시예에 따라서 멀티플렉싱된 크로스 칩 어드레스 포인터 체인의 일실시예를 나타내고,
도 16은 하드웨어 모델의 로직 컴포넌트의 소프트웨어 클럭 실행과 평가에 중요한 클럭/데이터 네트워크 분석의 흐름도를 나타내며,
도 17은 본 발명의 일실시예에 따라서 하드웨어 모델의 기본 구축 블럭을 나타내며,
도 18(A)와 (B)는 래치와 플립플롭에 대한 레지스터 모델 실행을 나타내고,
도 19는 본 발명의 일실시예에 따라서 클럭 에지 검출 로직의 일실시예를 나타내며,
도 20은 본 발명의 일실시예에 따라서 도 19의 클럭 에지 검출 로직을 제어하기 위한 4가지 상태의 한정 상태 머신을 나타내고,
도 21은 본 발명의 일실시예를 따라서 FPGA칩 각각에 대하여, 내부 액세스, JTAG, FPGA, 버스 및 전체 신호 핀 지정을 나타내고,
도 22는 PCI 버스와 FPGA 어레이 사이의 FPGA 컨트롤러의 일실시예를 나타내며,
도 23은 도 22에 대하여 논의된 CTRL_FPGA 유닛과 데이터 버퍼의 보다 상세한 설명을 나타내고,
도 24는 4x4 FPGA 어레이, FPGA에 대한 그 관계, 및 확장 능력을 나타내고,
도 25는 하드웨어 개시 방법의 일실시예를 나타내며,
도 26은 모델링되고 시뮬레이션될 사용자 회로 설계의 일예에 대한 HDL코드를 나타내고,
도 27은 도 26의 HDL코드의 회로 설계를 기호로 나타낸 회로도이며,
도 28은 도 26의 HDL코드에 대한 컴포넌트 형태 분석을 나타내고,
도 29는 도 26에 나타낸 사용자 주문 회로 설계에 기초한 구조화된 RTL HDL 코드의 신호 네트워크 분석을 나타내며,
도 30은 동일한 가상예의 소프트웨어/하드웨어 분할 결과를 나타내며,
도 31은 동일한 가상예에 대한 하드웨어 모델을 나타내고,
도 32는 사용자 주문 회로 설계의 동일한 가상예에 대한 하나의 특정한 하드웨어 모델 대 칩 분할 결과를 나타내며,
도 33은 사용자 주문 회로 설계의 동일한 가상예의 다른 특정 하드웨어 모델 대 칩 분할 결과를 나타내며,
도 34는 사용자 주문 회로 설계의 동일한 가상예에 대한 로직 패칭 동작을 나타내고,
도 35(A) 내지 35(D)는 두개의 예에 있어서 "홉(hops)"과 내부 액세스 원리를 설명하며,
도 36은 본원 발명에서 사용된 FPGA칩의 개략을 나타내고,
도 37은 FPGA칩상의 FPGA 내부 액세스 버스를 나타내며,
도 38(A) 내지 (B)는 본 발명의 일실시예에 따라서 FPGA보드 액세스의 측면도를 나타내며,
도 39는 본 발명의 일실시예에 따라서 FPGA 어레이의 다이렉트-네이버(direct-neighbor) 및 원홉 식스보드(one-hop, six-board) 내부액세스 레이아웃을 나타내고,
도 40(A) 및 40(B)는 FPGA 내부 보드 내부액세스 구성을 나타내며,
도 41(A) 내지 41(F)는 보드 내부 액세스 커넥터의 상면도를 나타내고,
도 42는 대표적인 FPGA 보드에 있어서 보드상 커넥터 및 몇가지 컴포넌트를 나타내며,
도 43은 도 41(A) 내지 41(F) 및 도 42의 커넥터의 사용 설명을 나타내고,
도 44는 본 발명의 다른 실시예에 따라서 FPGA 어레이의 다이렉트-네이버 및 원홉 듀얼보드 내부액세스 레이아웃을 나타내며,
도 45는 본 발명의 다른 실시예에 따라서 멀티프로세서를 가진 워크스테이션을 나타내고,
도 46은 시간 공유 기반으로 다수의 사용자가 단일 시뮬레이션/에뮬레이션 시스템을 공유하는 본 발명의 다른 실시예에 따르는 환경을 나타내며,
도 47은 본 발명의 일실시예에 따라서 시뮬레이션 서버의 상위 구조를 나타내고,
도 48은 본 발명의 일실시예를 따라서 시뮬레이션 서버의 구조를 나타내고,
도 49는 시뮬레이션 서버의 흐름도를 나타내고,
도 50은 잡 스와핑(job swapping) 프로세스의 흐름도를 나타내며,
도 51은 디바이스 드라이버와 리컨피규러블 하드웨어 유닛 사이의 신호를 나타내며,
도 52는 다양한 레벨의 우선 순위를 가진 다중 잡(job)을 조정하기 위한 시뮬레이션 서버의 시간 공유 특징을 도시하며,
도 53은 디바이스 드라이버와 리컨피규러블 하드웨어 유닛 사이의 통신 핸드쉐이크 신호를 나타내고,
도 54는 통신 핸드쉐이크 프로토콜의 상태도를 나타내며,
도 55는 본 발명의 일실시예에 따라서 시뮬레이션 서버의 클라이언트-서버 모델의 개략도를 나타내고,
도 56은 본 발명의 일실시예에 따라서 메모리 맵핑을 실행하기 위한 시뮬레이션 시스템의 상위 블럭도를 나타내며,
도 57은 각각의 FPGA 로직장치에 대한 평가 한정 상태 머신(EVALFSMx)과 메모리 한정 상태 머신(MEMFSM)용 지원 컴퍼넌트를 가진 시뮬레이션 시스템의 메모리 맵핑 태양의 보다 상세한 블럭도를 나타내고,
도 58은 본 발명의 일실시예를 따라서 CTRL_FPGA 유닛내의 MEMFSM의 한정상태 머신의 상태도를 나타내며,
도 59는 본 발명의 일실시예를 따라서 FPGA칩 각각에서의 한정 상태 머신의 상태도를 나타내며,
도 60은 메모리 판독 데이터 이중 버퍼를 나타내며,
도 61은 본 발명의 일실시예를 따라서 시뮬레이션 기록/판독 사이클을 나타내며,
도 62는 CLK_EN 신호 후에 DMA 판독 동작이 일어날 때의 시뮬레이션 데이터 전송 동작의 타이밍도를 나타내고,
도 63은 EVAL 주기의 끝 부근에서 DMA 판독 동작이 일어날 때의 시뮬레이션 데이터 전송 동작의 타이밍도를 나타내며,
도 64는 PCI 추가 카드로서 실행된 통상적인 사용자 설계를 나타내고,
도 65는 테스트중인 장치로서 ASIC을 이용하는 하드웨어/소프트웨어 공동 검증 시스템을 나타내고,
도 66은 테스트중인 장치가 에뮬레이터에 프로그래밍된 때의 에뮬레이터를 사용하는 통상적인 공동 검증 시스템을 나타내며,
도 67은 본 발명의 일실시예를 따라서 시뮬레이션 시스템을 나타내고,
도 68은 RCC 컴퓨팅 시스템이 다양한 I/O 장치의 소프트웨어 모델과 타겟시스템을 포함하는, 본 발명의 일실시예를 따라서 외부 I/O 장치없는 공동 검증 시스템을 나타내며,
도 69는 본 발명의 다른 실시예에 따라서 실제 외부 I/O 장치 및 타겟 시스템을 가진 공동 검증 시스템을 나타내며,
도 70은 본 발명의 일실시예에 따라서 제어로직 내부 데이터의 보다 상세한 로직도를 나타내고,
도 71은 본 발명의 일실시예에 따라서 제어로직 외부 데이터의 보다 상세한 로직도를 나타내며,
도 72는 제어로직 내부 데이터의 타이밍도를 나타내고,
도 73은 제어로직 외부 데이터의 타이밍도를 나타내며,
도 74는 본 발명의 일실시예에 RCC 하드웨어 어레이의 보드 레이아웃을 나타내고,
도 75(A)는 유지 시간 및 클럭 글리치 문제를 설명하는데 사용될 시프트 레지스터 회로의 일예를 나타내고,
도 75(B)는 유지 시간을 설명하기 위해 도 76(A)에 나타낸 시프트 레지스터 회로의 타이밍도를 나타내며,
도 76(A)는 다중 FPGA 칩을 가로질러 배치된 도 75(A)에 나타낸 동일한 시프트 레지스터 회로를 나타내고,
도 76(B)는 유지시간 침해를 설명하기 위한 도 76(A)에 나타낸 시프트 레지스터 회로의 타이밍도를 나타내며,
도 77(A)는 클럭 글리치 문제를 설명하는데 사용될 로직 회로의 일예를 나타내고,
도 77(B)는 클럭 글리치 문제를 설명하기 위한 도 77(A)의 로직 회로의 타이밍도를 나타내며,
도 78은 유지시간 침해 문제를 해결하기 위한 종래 기술의 타이밍 조정 기술을 나타내고,
도 79는 유지시간 침해문제를 해결하기 위한 종래 기술의 타이밍 재통합기술을 나타내며,
도 80(A)는 오리지널 래치를 나타내고, 도 80(B)는 본 발명의 일실시예에 따라서, 타이밍에 영향을 받지 않고, 글리치가 없는 래치를 나타내고,
도 81(A)는 오리지널 설계 플립플롭을 나타내며, 도 81(B)는 본 발명의 일실시예에 따라서 타이밍에 영향을 받지 않고 글리치 없는 설계형 플립플롭을 나타내고,
도 82는 본 발명의 일실시예를 따라서 타이밍에 영향을 받지 않고 글리치가 없는 래치 및 플립플롭의 트리거 메카니즘의 타이밍도를 나타낸다.
이러한 도면들에서 본 발명의 여러가지 다양한 관점 및 실시예와 관련하여 이하에서 논의될 것이다.
도 83은 본 발명의 일실시예를 병합하는 RCC 시스템의 컴포넌트의 상위도를 나타내며,
도 84는 본 발명의 일실시예에 따라서 주문형 VCD 동작을 설명하는 몇가지 시뮬레이션 시간 주기을 나타낸다.
본 발명의 상기 목적 및 상세한 설명은 이하의 본문과 첨부 도면으로부터 보다 명백하게 이해될 것이다.
본 명세서는 "SEmulator"또는 "SEmulation" 시스템으로 칭하는 시스템을 통하여 상기 시스템내에서 본 발명의 다양한 실시예를 설명할 것이다. 명세서 전반에 걸쳐, "SEmulator system", "SEmulator" 또는 단순히 시스템이라는 용어가 사용될 수 있다. 이들 용어는 4가지 동작 모드의 임의의 조합을 위한 본 발명에 따른 다양한 장치 및 방법 실시예들을 나타내는 것이다: (1) 소프트웨어 시뮬레이션, (2) 하드웨어 가속을 통한 시뮬레이션, (3) 회로-내부 에뮬레이션(ICE), 및 (4) 그들 각각의 셋업 또는 전-처리 단계를 포함하는 포스트-시뮬레이션 분석. 다른 때는, "SEmulation"이라는 용어가 사용될 수 있다. 이 용어는 여기에서 설명되는 새로운 프로세스를 언급한다.
유사하게, "리컨피규러블 컴퓨팅(RCC, reconfigurable computing) 어레이 시스템", 또는 "RCC 컴퓨팅 시스템"과 같은 용어는 메인 프로세서, 사용자 설계(user design)의 소프트웨어 커널 및 소프트웨어 모델을 포함하는 시뮬레이션/공동 검증 시스템 부분을 나타낸다. "리컨피규러블 하드웨어 어레이" 또는 "RCC 하드웨어 어레이"와 같은 용어는 일실시예에서, 사용자 설계의 하드웨어 모델을 포함하고 리컨피규러블 로직 엘리먼트의 어레이를 포함하는 시뮬레이션/공동 검증 시스템 부분을 나타낸다.
삭제
삭제
또한, 본 명세서는 "사용자", 및 사용자의 "회로 설계" 또는 "전자설계"등에 대하여 언급하고 있다. "사용자"는 그 인터페이스를 통하여 SEmulation 시스템을 사용하는 사람이며, 설계 프로세스에 거의, 또는 전혀 참여하지 않은 회로 또는 테스트/디버거의 설계자일 수 있다. "회로 설계" 또는 "전자 설계"는 소프트웨어 또는 하드웨어에서 테스트/디버그 목적을 위해 SEmulation 시스템에 의해 모델링될 수 있는 주문형 설계 시스템 또는 컴포넌트이다. 많은 경우에, "사용자"도 "회로설계" 또는 "전자설계"를 설계하였다.
또한, 본 명세서는 "와이어", "와이어 라인", "와이어/버스 라인" 및 "버스"라는 용어를 사용한다. 이들 용어는 다양한 전기적으로 도전성인 라인을 언급한 것이다. 각 라인은 두개의 지점사이의 단일 와이어 또는 지점들 사이의 여러 개의 와이어일 수 있다. 이들 용어는 와이어가 하나 이상의 도전성 라인을 포함할 수 있고, 버스가 하나 이상의 도전성 라인을 또한 포함할 수 있다는 점에서 상호 교환가능하다.
본 명세서는 개략적인 형태로 표현되어 있다. 우선, 본 명세서는 4개의 작동 모드 및 하드웨어 실행 구성의 개략을 포함하는 SEmulator 시스템의 일반적인 개략을 나타낸다. 두번째로, 본 명세서는 SEmulator 시스템의 상세한 논의를 제공한다. 몇가지 경우에 있어서, 하나의 도면은 이전의 도면에 나타낸 실시예의 변형을 제공할 수 있다. 이들 경우에, 유사한 참조부호가 유사한 컴포넌트/유닛/프로세스에 대하여 사용될 수 있다. 본 명세서의 개요는 이하와 같다:
I. 개요
A. 시뮬레이션/하드웨어 가속모드
B. 타겟 시스템 모드에 의한 에뮬레이션
C. 포스트-시뮬레이션 분석 모드
D. 하드웨어 구현 수단
E. 시뮬레이션 서버
삭제
F. 메모리 시뮬레이션
G. 공동 검증 시스템
II. 시스템 설명
III. 시뮬레이션/하드웨어 가속모드
IV. 타겟시스템 모드에 의한 에뮬레이션
V. 포스트-시뮬레이션 분석 모드
VI. 하드웨어 구현 수단
A. 개요
B. 어드레스 포인터
C. 게이트 데이터/클럭 네트워크 분석
D. FPGA 어레이 및 제어
E. 고밀도 FPGA칩을 이용하는 선택적 실시예
F. TIGF 로직 소자
VII. 시뮬레이션 서버
VIII. 메모리 시뮬레이션
IX. 공동 검증 시스템
X. 실예
I. 개요
본 발명의 다양한 실시예는 4개의 일반적인 동작모드를 가진다: (1) 소프트웨어 시뮬레이션, (2) 하드웨어 가속을 통한 시뮬레이션, (3) 회로내 에뮬레이션, (4) 포스트-시뮬레이션 분석. 다양한 실시예는 이하의 특징 중 적어도 몇가지를 가진 이들 모드의 시스템 및 방법을 포함한다:
(1) 사이클마다 소프트웨어 및 하드웨어 모델을 제어하는, 단일의 엄격하게 결합된 시뮬레이션 엔진, 소프트웨어 커널을 가지는 소프트웨어 및 하드웨어 모델, (2) 소프트웨어 및 하드웨어 모델 발생 및 분할을 위한 컴파일레이션 프로세스동안의 자동 컴포넌트 형태 분석, (3) 하드웨어 가속 모드, 회로내 에뮬레이션 모드, 및 포스트-시뮬레이션 분석 모드를 통한, 소프트웨어 시뮬레이션 모드 사이에서 (사이클마다)의 전환 능력, (4) 소프트웨어 결합 컴포넌트 재발생을 통한 완전한 하드웨어 모델 가시성, (5) 레이스 컨디션을 피하기 위한 소프트웨어 클럭 및 게이트 클럭/데이터 로직에 의한 이중 버퍼 클럭 모델링, 및 (6) 경과된 시뮬레이션 세션 내에서 임의로 선택된 지점으로부터 사용자의 회로설계를 다시 시뮬레이션하거나 또는 하드웨어 가속하는 능력. 최종 결과는 완전 HDL 기능성 및 에뮬레이터 실행 성능을 갖는 융통성있고 신속한 시뮬레이터/에뮬레이터 시스템 및 방법이다.
A. 시뮬레이션/하드웨어 가속 모드
자동 컴포넌트 타입 분석을 통해 SEmulator 시스템은 소프트웨어 및 하드웨어에 있어서 사용자 주문 회로 설계를 모델링할 수 있다. 전체 사용자 회로 설계는 소프트웨어에서 모델링되는 반면, 평가 컴포넌트(즉, 레지스터 컴퍼넌트, 결합 컴포넌트)는 하드웨어에서 모델링된다. 하드웨어 모델링은 컴포넌트 타입 분석에 의해 용이하게 이루어진다.
범용의 프로세스 시스템의 메인 메모리에 귀속된 소프트웨어 커널은 다양한 모드와 특징의 실행 및 전체 동작을 제어하는 SEmulator 시스템의 메인 프로그램 으로서 작용한다. 임의의 테스트 벤치 프로세스가 작동하는 한, 커널은 액티브 테스트 벤치 컴포넌트를 평가하고, 클럭 컴포넌트를 평가하며, 클럭 에지(clock edge)를 검출하여 조합 로직 데이터를 전송할 뿐만 아니라 레지스터와 메모리를 업데이트하고, 시뮬레이션 시간을 진행시킨다. 이러한 소프트웨어 커널은 밀착 결합되는 특성의 시뮬레이터 엔진을 위해 하드웨어 가속 엔진을 제공한다. 소프트웨어/하드웨어 경계에 있어서, SEmulator 시스템은 많은 I/O 어드레스 공간 - REG(레지스터), CLK(소프트웨어 클럭), S2H(소프트웨어 대 하드웨어) 및 H2S(하드웨어 대 소프트웨어)를 제공한다.
SEmulator는 4개 동작 모드 중에서 선택적으로 전환할 수 있는 능력을 가진다. 이러한 시스템의 사용자는 시뮬레이션을 시작하고, 시뮬레이션을 중단하며, 입력값을 발생(assert)하고, 값을 검사하며, 사이클마다 단일 단계를 진행하며, 4개의 다른 모드 사이에서 전후 전환한다. 예컨대, 상기 시스템은 시간 주기동안 소프트웨어로 회로를 시뮬레이션하고, 하드웨어 모델링을 통해 시뮬레이션을 가속하며, 소프트웨어 시뮬레이션 모드로 다시 리턴한다.
일반적으로 SEmulation 시스템은 소프트웨어로 모델링되는지 또는 하드웨어로 모델링되는지에 상관없이 모든 모델링되는 컴포넌트를 "인식"할 수 있는 능력을 사용자에게 제공한다. 여러가지의 이유로, 결합 컴포넌트는 레지스터와 같이 가시적이지 않으며, 따라서 결합 컴포넌트 데이터의 획득은 어렵다. 하나의 이유는, 실제의 결합 컴포넌트 대신에, 통상적으로 룩업 테이블(LUT)과 같은 결합 컴포넌트를 사용자 회로설계의 하드웨어 부분을 모델링하기 위하여 리컨피규러블 보드내에 사용되는 FPGA가 모델링한다는 것이다. 따라서, SEmulation 시스템은 레지스터 값을 판독하여, 결합 컴포넌트를 재생성한다. 결합 컴포넌트를 재생성하기 위해서는 경비가 필요하므로, 이러한 재생성 프로세스는 항상 수행되는 것은 아니며, 오히려 사용자의 요청에 의해서만 수행된다.
소프트웨어 커널은 소프트웨어 측에 존재하기 때문에, 클럭 에지 검출 메카니즘은 하드웨어 모델내의 다양한 레지스터로 인에이블 입력을 구동하는 소위 소프트웨어 클럭의 발생을 트리거하도록 제공된다. 그 타이밍은 소프트웨어 클럭 인에이블 신호가 이들에 대한 데이터의 모델링 전에 레지스터 모델로 진입하도록 이중 버퍼 회로 구현을 통하여 엄격하게 제어된다. 일단 이들 레지스터 모델에 대한 데이터 입력이 안정화되면, 소프트웨어 클럭은 유지시간 위반의 어떠한 위험도 없이 모든 데이터 값이 함께 게이트되는 것을 보장하기 위하여 동기식으로 데이터를 게이트한다.
소프트웨어 시뮬레이션은 또한 상기 시스템이 모든 입력값 및 선택된 레지트터값/상태만을 로그하기 때문에 빠르고, 따라서 I/O 동작 수를 감소시킴으로써 오버헤드가 최소화된다. 사용자는 선택적으로 로깅(logging) 주파수를 선택할 수 있다.
B. 타겟 시스템 모드에 의한 에뮬레이션
SEmulation 시스템은 그 타겟 시스템 환경내에서 사용자의 회로를 에뮬레이팅할 수 있다. 타겟 시스템은 평가용 하드웨어 모델에 데이터를 출력하고, 하드웨어 모델은 또한 타겟 시스템으로 데이터를 출력한다. 부가적으로, 소프트웨어 커널은 사용자가 개시하고, 중단하며, 값을 발생하고, 단일 단계를 진행하며, 한 모드에서 다른 모드로 전환하기 위한 옵션을 가질 수 있도록 이러한 모드의 동작을 제어한다.
C. 포스트-시뮬레이션 분석 모드
로그는 시뮬레이션 세션의 히스토리 기록을 사용자에게 제공한다. 공지된 시뮬레이션 시스템과는 달리, SEmulation 시스템은 단일값, 내부 상태, 또는 시뮬레이션 프로세스 동안 값 변화마다 로깅하지는 않는다. SEmulation 시스템은 오직 로깅 주파수(즉, N사이클 마다 log 1 기록)에 근거하여 선택된 값과 상태를 로그한다. 포스트-시뮬레이션 단계 동안, 사용자가 방금 종료한 시뮬레이션 세션 내의 X 지점 근방의 다양한 데이터를 검사하기 원한다면, 사용자는 로깅된 지점들 중의 하나, 즉 지점 X에 가장 가깝고 그 이전에 일시적으로 위치하는 로깅된 지점 Y로 간다. 그리고 나서, 사용자는 시뮬레이션 결과를 얻기 위하여 선택되는 로깅된 지점 Y로부터 원하는 지점 X까지 시뮬레이션한다.
또한, 주문형 VCD 시스템은 이하에 설명될 것이다. 이러한 주문형 VCD 시스템은 사용자가 시뮬레이션 리턴 없이 주문되는 임의의 시뮬레이션 타겟 범위(즉, 시뮬레이션 시간)를 관찰할 수 있도록 한다.
D. 하드웨어 구현 수단
SEmulation 시스템은 리컨피규러블 보드 상에 FPGA칩 어레이를 구현한다. 하드웨어 모델에 근거하여, SEmulation 시스템은 사용자의 회로 설계의 선택된 부분 각각을 FPGA칩 상으로 분할하고, 맵핑하며, 배치하고 라우팅(routing:경로설정)한다. 따라서, 예컨대, 4x4 어레이의 16개의 칩은 이들 16개의 칩 전체에 대해 확장된 대형회로의 모델링일 수 있다. 상호접속 수단은 각각의 칩이 2 "점프" 또는 링크 내에서 다른 칩으로 액세스하는 것을 허용한다.
각각의 FPGA칩은 I/O 어드레스 공간(즉, REG, CLK, S2H, H2S) 각각에 대한 어드레스 포인터를 실행한다. 특정 어드레스 공간과 연동되는 모든 어드레스 포인터의 조합은 서로 연결되어 있다. 그래서, 데이터 전송 동안, 각각의 칩의 워드 데이터는 메인 FPGA 버스 및 PCI 버스로부터/로 각 칩의 선택된 어드레스 공간에 대하여 한번에 하나의 워드가, 한번에 하나의 칩이, 원하는 워드 데이터가 선택된 어드레스 공간에 액세스될 때까지 순차적으로 선택된다. 이러한 워드데이터의 순차적인 선택은 워드 선택 신호의 전달에 의해 달성된다. 이러한 워드 선택 신호는 칩내의 어드레스 포인터를 통하여 진행하여, 다음 칩의 어드레스 포인터까지 전파되며, 마지막 칩 또는 시스템이 어드레스 포인터를 초기화할 때까지 계속된다.
리컨피규러블 보드 내의 FPGA 버스 시스템은 PCI 버스 대역폭의 두배의 대역폭, PCI 버스 속도의 절반 속도에서 동작한다. 따라서, FPGA 칩은 보다 큰 대역폭의 버스를 이용하기 위하여 뱅크로 분리된다. 이러한 FPGA 버스 시스템의 처리율은 PCI 버스 시스템의 처리율을 따를 수 있어서, 버스 속도를 줄임으로써 성능이 저하되지 않는다. 확장은 뱅크 길이를 연장하는 피기백(piggyback) 보드를 통하여 가능하다.
본 발명의 다른 실시예에 있어서, 고밀도의 FPGA칩이 사용된다. 이러한 고밀도의 칩의 일 예는 Altera 10K130V 및 10K250V 칩이다. 이들 칩의 사용으로 8개의 저밀도 FPGA 칩대신에 단지 4개의 FPGA칩(Altera 10K 100)이 보드당 사용되도록 보드 설계를 변경할 수 있다.
시뮬레이션 시스템의 FPGA 어레이가 특정 보드 상호접속 구조를 통하여 마더보드상에 제공된다. 각각의 칩은 8개 세트의 상호접속부를 가질 수 있으며, 여기서 상호접속부는 인접 다이렉트-네이버(direct neighbor) 상호접속부(즉, N[73:0],W[73:0], E[73:0]), 및 하나의 단일 보드 내부와 다른 보드 전체에 대한 로컬 버스 커넥션을 제외한 원-홉 네이버 상호접속부(즉,NH[27:0], SH[27:0], XH[36:0], XH[72:37])에 따라서 배열된다. 각각의 칩은 인접한 네이버 칩에 바로 상호접속되거나, 위, 아래, 좌우에 위치한 인접하지 않은 칩으로 하나의 홉내에 상호접속될 수 있다. X 방향(동-서)에서 어레이는 토러스(torus)구조이다. Y 방향(북-남)에서 어레이는 매쉬(mesh)구조이다.
상기 상호접속부는 단일 보드 내에서 로직 소자 및 다른 컴포넌트들과 결합할 수 있다. 그러나, (1) 마더 보드와 어레이 보드를 통한 PCI 버스, 및 (2) 임의의 2개의 어레이 보드 사이에서 신호를 전달하기 위하여 서로 다른 보드에 대해 이러한 보드와 상호접속부들을 함께 결합시키도록 내부 보드 커넥터가 제공된다.
마더보드 커넥터는 보드를 마더모드에 연결시켜서, PCI 버스, 전력, 및 접지에 연결한다. 몇개의 보드에 있어서, 마더보드 커넥터는 마더보드로의 직접적인 커넥션에는 사용되지 않는다. 6개의 보드 구성에 있어서, 단지 보드 1, 3 및 5 만이 마더보드에 직접 액세스되는 반면에, 나머지 보드 2, 4, 및 6은 마더보드 연결성을 위하여 그들의 인접 보드에 의존한다. 따라서, 다른 모든 보드는 마더 보드에 직접 연결되며, 이들 보드의 로컬 버스 및 상호접속부들은 솔더 측 내지 컴포넌트 측에 배열되는 내부 보드 커넥터를 통하여 함께 결합된다. PCI신호는 단지 하나의 보드(통상적으로 첫번째의 보드)를 통해 라우팅된다. 전력 및 접지는 상기 보드들을 위한 다른 마더보드 커넥터에 인가된다. 솔더 측 내지 컴포넌트 측에 배치되면, 다양한 내부 보드 커넥터는 PCI 버스 컴포넌트, FPGA 로직 소자, 메모리 소자 및 다양한 시뮬레이션 시스템 제어 회로간의 통신을 허용한다.
E. 시뮬레이션 서버
본 발명의 다른 실시예에서, 시뮬레이션 서버는 다수의 사용자가 동일한 리컨피규러블 하드웨어 유닛을 액세스하는 것을 허용하도록 제공된다. 하나의 시스템 구조에 있어서 하나의 네트워크에 대한 다수의 워크스테이션, 또는 비-네트워크 환경내의 다수의 사용자/프로세스가 동일한 또는 다른 사용자 회로 설계를 리뷰/디버그하도록 동일한 서버 기반 리컨피규러블 하드웨어 유닛을 액세스할 수 있다. 상기 액세스는 스케쥴러가 다수의 사용자에 대한 액세스 우선순위를 결정하고, 잡(job)을 스와핑하며, 예정된 사용자 사이에서 선택적으로 하드웨어 모델 액세스를 로크(lock)하는 시간 공유 프로세스를 통하여 달성된다. 하나의 시나리오에서, 각 사용자는 처음으로 리컨피규러블 하드웨어 모델로 각각의 사용자 설계를 맵핑하기 위하여 서버에 액세스할 수 있으며, 그 경우 시스템은 소프트웨어 및 하드웨어 모델을 생성하기 위하여 설계를 컴파일하고, 클러스터링 동작을 수행하며, 플레이스-및-라우트(place-and-route) 동작을 수행하고, 비트스트림 컨피규레이션 파일을 생성하고, 사용자 설계의 하드웨어 부분을 모델링하기 위하여 리컨피규러블 하드웨어 유닛의 FPGA칩을 리컨피규러블한다. 하나의 사용자가 하드웨어 모델, 및 소프트웨어 시뮬레이션동안 자신의 메모리로 다운로드되는 하드웨어 상태을 이용하여 그 설계를 가속하면, 하드웨어 유닛은 다른 사용자에 의한 액세스를 위해 개방될 수 있다.
서버는 가속 및 하드웨어 상태 스와핑 목적으로 리컨피규러블 하드웨어 유닛을 액세스하기 위하여 다수의 사용자 또는 프로세스를 제공한다. 시뮬레이션 서버는 스케쥴러 또는 하나 이상의 디바이스 드라이버, 및 리컨피규러블 하드웨어 유닛을 포함한다. 시뮬레이션 서버 내의 스케쥴러는 선점형 라운드 로빈(preemptive round robin) 알고리즘을 기반으로 한다. 서버 스케쥴러는 시뮬레이션 잡 큐 테이블(simulation job queue table), 우선순위 분류기 및 잡 스와퍼를 포함한다. 본 발명의 복원 및 재생 기능은 네트워크 다중 사용자 환경뿐만 아니라 비-네트워크 멀티프로세싱 환경을 용이하게 하고, 이전의 체크포인트 상태 데이터가 다운로드될 수 있으며, 그 체크포인트와 관련된 전체 시뮬레이션 상태는 재생 디버깅 또는 매사이클별 스텝핑을 위해 복원될 수 있다.
F. 메모리 시뮬레이션
본 발명의 메모리 시뮬레이션 또는 메모리 맵핑 실시예는 리컨피규러블 하드웨어 유닛내의 FPGA 칩 어레이로 프로그래밍된, 사용자 설계의 구성된 하드웨어 모델과 연동되는 다양한 메모리 블럭을 관리하기 위하여 시뮬레이션 시스템에 대하여 효과적인 방안을 제공한다. 본 발명의 상기 메모리 시뮬레이션 실시예는 사용자 설계와 연동되는 수많은 메모리 블럭이 로직 소자 내부 대신에 시뮬레이션 시스템 의 SRAM 메모리 소자들로 맵핑되며, 그것은 사용자 설계를 구성하고 모델링하는데 이용된다. 메모리 시뮬레이션 시스템은 메모리 상태 머신, 평가 상태 머신, 및 제어와 인터페이스를 위해 연동되는 로직: (1) 메인 컴퓨팅 시스템 및 그와 연관된 메모리 시스템, (2) 시뮬레이션 시스템내의 FPGA 버스에 결합된 SRAM 메모리 소자, 및 (3) 디버깅되는 구성(configured) 및 프로그래밍된 사용자 설계를 포함하는 FPGA 로직 소자를 포함한다. 본 발명의 일 실시예에 따른 메모리 시뮬레이션 시스템의 동작은 일반적으로 이하와 같다. 시뮬레이션 기록(write)/판독(read) 사이클은 3주기-DMA 데이터 전송, 평가 및 메모리 액세스로 분할된다.
메모리 시뮬레이션 시스템의 FPGA 로직 소자측은 평가 상태 머신, FPGA 버스 드라이버, 및 사용자 설계 내의 사용자 자신의 메모리 인터페이스와 인터페이싱하기 위하여 각각의 메모리 블럭 N에 대한 로직 인터페이스를 포함한다: (1) FPGA 로직 소자사이에서 데이터 평가, (2) FPGA 로직 소자 및 SRAM 메모리 소자 사이에서 기록/판독 메모리 액세스를 조정한다. FPGA 로직 소자측과 연계하여, FPGA I/O 컨트롤러 측은 (1) 메인 컴퓨팅 시스템과 SRAM 메모리 소자, 및 (2) FPGA 로직 소자와 SRAM 메모리 소자 사이의 DMA, 기록 및 판독 동작을 처리하기 위한 메모리 상태 머신 및 인터페이스 로직을 포함한다.
G. 공동 검증 시스템(coverification system)
본 발명의 일실시예는 리컨피규러블 컴퓨팅 시스템(이하, "RCC 컴퓨팅 시스템"이라고 함)과, 리컨피규러블 컴퓨팅 하드웨어 어레이(이하, "RCC 하드웨어 어레이"라고 함)를 포함하는 공동검증 시스템이다. 몇가지 실시예에서, 타겟 시스템 및 외부 I/O 장치는 그들이 소프트웨어로 모델링될 수 있기 때문에 필수적이지는 않다. 다른 실시예에 있어서, 타겟 시스템 및 외부 I/O 장치는 사실상 시뮬레이션된 테스트 벤치 데이터보다는 실제 데이터를 사용하고 속도를 얻기 위하여 공동 검증 시스템에 결합되어 있다. 따라서, 하나의 공동 검증 시스템은 사용자 설계의 소프트웨어 부분 및 하드웨어 부분을 디버깅하기 위하여 다른 기능과 함께 RCC 컴퓨팅 시스템 및 RCC 하드웨어 어레이를 포함시키고, 실제 타겟 시스템 및/또는 I/O 장치를 사용할 수 있다.
RCC 컴퓨팅 시스템은 또한 클럭 로직(에지 검출 및 소프트웨어 클럭 발생용), 사용자 설계의 테스트를 위한 테스트 벤치 프로세스 및, 사용자가 실제 물리적 I/O 장치를 사용하는 대신에 소프트웨어로 모델링하도록 결정하는 임의의 I/O 장치를 위한 디바이스 모델을 포함한다. 물론, 사용자는 하나의 디버그 세션에서 모델링된 I/O 디바이스뿐만 아니라 실제의 I/O 장치를 사용하도록 결정할 수 있다. 소프트웨어 클럭은 타겟 시스템 및 외부 I/O 장치를 위한 외부 클럭 소스로서 기능하기 위하여 인터페이스에 제공되어 있다. 이러한 소프트웨어 클럭의 이용은 입출력되는 데이터를 처리하는데 필수적인 동기화를 제공한다. RCC 컴퓨팅 시스템-발생된 소프트웨어 클럭은 디버그 세션을 위한 시간 기반이므로, 시뮬레이션되고 하드웨어 가속된 데이터는 공동 검증 시스템 및 외부 인터페이스 사이에서 전달되는 임의의 데이터와 동기화된다.
타겟 시스템 및 외부 I/O 장치가 공동 검증 시스템에 결합되면, 핀아웃 데이터는 공동 검증 시스템 및 그 외부 인터페이스사이에 제공되어야 한다. 공동 검증 시스템은 (1) RCC 컴퓨팅 시스템과 RCC 하드웨어 어레이, 및 (2) (타겟 시스템 및 외부 I/O 장치에 결합된) 외부 인터페이스와 RCC 하드웨어 어레이 사이에서 트래픽 제어를 제공하는 제어로직을 포함한다. RCC 컴퓨팅 시스템은 RCC 하드웨어 어레이에 모델링되는 사용자 설계 부분을 포함하는, 소프트웨어로 전체 설계의 모델을 가지므로, RCC 컴퓨팅 시스템은 또한 외부 인터페이스 및 RCC 하드웨어 어레이 사이를 통과하는 모든 데이터에 대하여 액세스하여야 한다. 제어 로직은 RCC 컴퓨팅 시스템이 이들 데이터를 액세스하는 것을 보장한다.
II. 시스템 설명
도 1은 본 발명의 일실시예의 상위 개략도를 나타낸다. 워크스테이션(10)은 PCI 버스 시스템(50)을 통해 리컨피규러블 하드웨어 모델(20) 및 에뮬레이션 인터페이스(30)에 결합되어 있다. 리컨피규러블 하드웨어 모델(20)은 케이블(61) 뿐만 아니라, PCI 버스(50)를 통하여 에뮬레이션 인터페이스(30)에 결합되어 있다. 타겟 시스템(40)은 케이블(60)을 통하여 에뮬레이션 인터페이스(30)에 결합되어 있다. 다른 실시예에서, 에뮬레이션 인터페이스(30) 및 타겟 시스템(40)(점선 박스로 나타낸)을 포함하는 내부-회로 에뮬레이션 셋업(70)은 특정 테스트/디버그 세션동안 타겟 시스템 환경내의 사용자 회로 설계의 에뮬레이션이 요구되지 않는 경우, 이러한 셋업에 제공되지 않는다. 내부-회로 에뮬레이션 셋업(70) 없이, 리컨피규러블 하드웨어 모델(20)은 PCI 버스(50)를 통하여 워크스테이션(10)과 통신한다.
내부-회로 에뮬레이션 셋업(70)과 함께, 리컨피규러블 하드웨어 모델(20)은 타겟 시스템 내의 몇개의 전자 서브시스템의 사용자의 회로 설계를 에뮬레이션하거나 모사한다. 타겟 시스템의 환경 내에서 전자 서브시스템의 사용자의 회로 설계의 정확한 동작을 보장하기 위하여, 타겟 시스템(40) 및 모델링된 전자 서브시스템 사이의 입력 및 출력 신호는 평가를 위한 리컨피규러블 하드웨어 모델(20)에 제공되어야 한다. 따라서, 리컨피규러블 하드웨어 모델(20)로부터/리컨피규러블 하드웨어 모델(20)로의 타겟 시스템(40)의 입력 및 출력 신호가 에뮬레이션 인터페이스(30) 및 PCI 버스(50)를 통과하여 케이블(60)을 통하여 전달된다. 선택적으로, 타겟 시스템(40)의 입력/출력 신호는 에뮬레이션 인터페이스(30) 및 케이블(61)을 통하여 리컨피규러블 하드웨어 모델(20)에 전달될 수 있다.
제어 데이터 및 몇몇 본체 시뮬레이션 데이터는 PCI 버스(50)를 통하여 리컨피규러블 하드웨어 모델(20) 및 워크스테이션(10) 사이를 통과한다. 실제로, 워크스테이션(10)은 전체 SEmulation 시스템의 동작을 제어하고, 리컨피규러블 하드웨어 모델(20)로 액세스(기록/판독)해야 하는 소프트웨어 커널을 실행한다.
컴퓨터, 키보드, 마우스, 모니터 및 적절한 버스/네트워크 인터페이스로 완성되는 하나의 워크스테이션(10)은 사용자가 전자 시스템의 회로 설계를 기술하는 데이터를 입력하고 교정하게 한다. 예시되는 워크스테이션은 썬마이크로 시스템즈 SPRAC 또는 ULTRA-SPARC 워크스테이션 또는 인텔/마이크로소프트 기반 컴퓨팅 스테이션을 포함한다. 당업자에게 공지된 바와 같이, 워크스테이션(10)은 CPU(11), 로컬 버스(12), 호스트/PCI 브릿지(13), 메모리 버스(14) 및 메인 메모리(15)를 포함한다. 본 발명의 다양한 소프트웨어 시뮬레이션, 하드웨어 가속에 의한 시뮬레이션, 내부-회로 에뮬레이션 및 포스트-시뮬레이션 분석의 실시예들은 워크스테이션(10), 리컨피규러블 하드웨어 모델(20), 및 에뮬레이션 인터페이스(30)내에 제공된다. 소프트웨어에 내장되는 알고리즘은 테스트/디버그 세션동안 메인 메모리(15)내에 저장되어, 워크스테이션의 운영 시스템에 의해 CPU(11)를 통해 실행된다.
당업자에게 이미 알려진 바와 같이, 운영 시스템이 초기 펌웨어에 의해 워크스테이션(10)의 메모리내로 로딩된 후에, 제어가 필수 데이터 구조를 셋업하기 위한 그 초기화 코드를 패스하여, 디바이스 드라이버를 로드하고 초기화한다. 그리고 나서, 제어가 명령 라인 해석기(CLI)로 패스되어, 사용자가 프로그램을 실행하도록 지시한다. 그후, 운영 시스템이 프로그램을 가동하는 데 필요한 메모리의 양을 결정하고, 메모리 블럭의 위치를 정하거나, 또는 메모리 블럭을 할당하고 BIOS를 통하여 또는 직접 메모리를 액세스한다. 메모리 로딩 프로세스의 종료 후에, 응용 프로그램이 실행을 개시한다.
본 발명의 일실시예는 SEmulation의 특정 응용 프로그램이다. 그 실행과정동안, 응용 프로그램은 그것에 제한되지는 않지만, 디스크 파일로부터의 판독 및 기록, 데이터 교신 수행 및 디스플레이/키보드/마우스와 인터페이싱을 포함하는 운영 시스템으로부터의 수많은 서비스를 필요로 할 수 있다.
워크스테이션(10)은 사용자가 회로설계 데이터를 입력하고, 회로설계 데이터를 컴파일하며, 시뮬레이션 및 에뮬레이션 프로세스를 모니터링하는 한편 결과를 얻고, 본질적으로 시뮬레이션 및 에뮬레이션 프로세스를 제어하도록 하는 적절한 사용자 인터페이스를 가진다. 도 1에는 나타나 있지 않지만, 사용자 인터페이스는 모니터로 보여지며 키보드와 마우스로 입력될 수 있는 사용자 액세스가능한 메뉴방식 옵션(menu-driven option) 및 명령어 세트를 포함한다. 통상, 사용자는 키보드(90)로 컴퓨팅 시스템(80)을 이용한다.
사용자는 통상적으로 전자시스템의 특정 회로 설계를 만들어내고, 워크스테이션(10)으로 그의 설계된 시스템의 HDL(보통은 RTL 레벨로 구성된) 코드 기술을 입력한다. 본 발명의 SEmulation 시스템은 소프트웨어 및 하드웨어 사이의 모델링을 분할하기 위하여, 다른 동작들 사이에서 컴포넌트 형태 분석을 수행한다. SEmulation 시스템은 소프트웨어의 작용, RTL 및 게이트 레벨 코드를 모델링한다. 하드웨어 모델링에 있어서, 시스템은 RTL 및 게이트 레벨 코드를 모델링할 수 있으나, RTL레벨은 하드웨어 모델링 이전에 게이트 레벨에 통합되어야 한다. 게이트 레벨 코드는 하드웨어 모델링을 위한 사용가능한 소스 설계 데이터 베이스 포맷으로 바로 프로세싱될 수 있다. RTL 및 게이트 레벨 코드를 사용하여, 시스템은 자동적으로 분할 단계를 완성하기 위하여 컴포넌트 형태 분석을 수행한다. 소프트웨어 컴파일 시간동안의 분할 분석을 기반으로, 시스템은 하드웨어 가속을 통하여 신속한 시뮬레이션을 위한 하드웨어로 회로설계의 몇개 부분을 맵핑한다. 사용자는 모델링된 회로 설계를 회로 에뮬레이션 내의 실제 환경을 위한 타겟 시스템에 결합할 수도 있다. 소프트웨어 시뮬레이션과 하드웨어 가속 엔진은 밀접하게 결합되어 있기 때문에, 소프트웨어 커널을 통하여, 사용자는 소프트웨어 시뮬레이션을 사용하여 전체 회로 설계를 시뮬레이션하고, 맵핑된 회로 설계의 하드웨어 모델을 사용하여 테스트/디버그 프로세스를 가속시키며, 시뮬레이션부로 리턴하며, 그리고 테스트/디버그 프로세스가 수행될 때 까지 하드웨어 가속으로 리턴할 수 있다. 매 사이클당 및 사용자 임의로 소프트웨어 시뮬레이션 및 하드웨어 가속간에 스위치를 할 수 있는 능력은 본 실시예의 중요한 특징중의 하나이다. 이러한 특징은 사용자가 하드웨어 가속 모드를 이용하여 특정 지점 또는 사이클로 신속히 간 후, 소프트웨어 시뮬레이션을 이용하여 다양한 지점을 검사하고 회로 설계를 디버깅할 수 있도록 하기 때문에, 디버그 프로세스에 특히 유용하다. 더욱이, SEmulation 시스템은 컴포넌트의 내부 구현이 하드웨어 또는 소프트웨어로 이루어지는지 사용자에게 모든 컴포넌트를 볼 수 있게 한다. SEmulation 시스템은 사용자가 그러한 판독을 요구할 때, 하드웨어 모델로부터 레지스터 값을 판독하며, 그리고 나서 소프트웨어 모델을 사용하여 결합 컴포넌트를 재형성함으로써 성취한다. 이러한 특징 및 다른 특징은 상세한 설명에서 더욱 상세히 논의될 것이다.
워크스테이션(10)는 버스 시스템(50)에 연결된다. 버스 시스템은 워크스테이션(10), 리컨피규러블 하드웨어 모델(20) 및 에뮬레이션 인터페이스(30)와 같은 다양한 에이전트가 함께 결합하여 동작 가능하게 하는 임의의 이용가능한 버스 시스템이 사용될 수 있다. 바람직하게는, 버스 시스템은 실시간 또는 거의 실시간으로 사용자에게 제공할 정도로 빠르다. 그러한 버스 시스템중 하나는 본 명세서에서 참조되는 주변회로 컴포넌트 상호접속(PCI) 표준에서 상술된 버스 시스템이다. 최근, PCI 표준 개정 2.0은 33㎒ 버스 속도를 제공한다. 개정 2.1은 66㎒ 버스 속도 지원을 제공한다. 따라서, 워크스테이션(10), 리컨피규러블 하드웨어 모델(20) 및 에뮬레이션 인터페이스(30)는 PCI 표준에 따른다.
일 실시예에서, 워크스테이션(10)과 리컨피규러블 하드웨어 모델(20)간의 통신은 PCI 버스로 이루어진다. 다른 PCI 수행 디바이스는 이러한 버스 시스템에서 발견될 수 있다. 이러한 디바이스는 워크스테이션(10), 리컨피규러블 하드웨어 모델(20) 및 에뮬레이션 인터페이스(30)와 같은 레벨 또는 다른 레벨에서 PCI 버스에 결합될 수 있다. PCI 버스(52)와 같이, 다른 레벨에서의 각 PCI 버스는 만약 모두 존재한다면, PCI-대-PCI 브릿지(51)를 통하여 PCI 버스(50)와 같은 다른 PCI 버스 레벨에 연결된다. PCI 버스(52)에서, 2개의 PCI 디바이스(53, 54)가 결합될 수 있다.
삭제
삭제
리컨피규러블 하드웨어 모델(20)은 사용자의 전자 시스템 설계의 하드웨어부를 설계하기 위하여 프로그래머블하게 구성되고, 리컨피규러블 필드-프로그래머블 게이트 어레이(FPGA)칩 어레이를 포함한다. 이러한 실시예에서, 하드웨어 모델은 리컨피규러블하다; 즉, 특정 계산 또는 사용자 회로 설계를 직접 적합하게 하도록 하드웨어를 리컨피규러블할 수 있다. 예를 들면, 만약 많은 가산기 또는 멀티플렉서가 요구된다면, 시스템은 많은 가산기 및 멀티플렉서를 포함하도록 구성된다. 다른 컴퓨팅 엘리먼트 또는 기능이 요구될 때, 그것들은 시스템내에서 모델링되거나 또는 형성될 수도 있다. 이러한 방식으로, 시스템은 특정 계산 또는 로직 동작을 실행하기 위하여 최적화될 수 있다. 리컨피규러블 시스템은 플렉서블하여, 사용자는 제조, 테스팅 또는 사용 동안에 일어나는 소수의 하드웨어 결점을 해결할 수 있다. 일 실시예에서, 리컨피규러블 하드웨어 모델(20)은 다양한 사용자 회로 설계 및 애플리케이션을 위한 컴퓨팅 자원을 제공하기 위하여 FPGA 칩을 포함하는 컴퓨팅 엘리먼트의 2차원 어레이를 포함한다. 하드웨어 컨피규레이션 프로세스가 더욱 상세히 제공될 것이다.
그러한 2개의 FPGA 칩은 Altera 및 Xilinx에 의해 판매된 것을 포함한다. 일부 실시예에서, 리컨피규러블 하드웨어 모델은 필드 프로그래머블 디바이스의 사용을 통하여 리컨피규러블하다. 그러나, 본 발명의 다른 실시예는 주문형 집적회로 (ASIC)기술을 사용하여 구현될 수 있다. 다른 실시예는 주문형 집적 회로(custom IC)의 형태로 이루어질 수 있다.
통상적인 테스트/디버그 시나리오에서, 리컨피규러블 디바이스는 실제 원형 제조 전에 적절한 변화가 행해지도록 사용자의 회로 설계를 시뮬레이션/에뮬레이션하도록 사용될 것이다. 다른 예에서, 그러나 이것은 재시뮬레이션 및 재에뮬레이션을 위한 비기능적 회로 설계를 신속하고, 비용 효과적으로 변화시킬 수 있는 능력을 사용자로부터 박탈하지만, 실제 ASIC 또는 주문형 집적 회로가 사용될 수 있다. 그러한 ASIC 또는 주문형 IC가 이미 제조되어 용이하게 이용가능하더라도, 실제 리컨피규러블이 불가능한 칩으로 에뮬레이션을 하는 것이 더 바람직할 수 있다.
본 발명에 따르면, 외부 하드웨어 모델의 집적도에 따라, 워크스테이션 내의 소프트웨어는 존재하는 시스템 상의 최종 사용자를 위해 더 큰 유연성, 제어 및 성능을 제공한다. 시뮬레이션 및 에뮬레이션을 실행하기 위하여, 회로 설계의 모델 및 관련 파라미터(예를 들면, 입력 테스트-벤치 스티멀러스, 전체 시스템 출력, 중간 결과)이 결정되며, 시뮬레이션 소프트웨어 시스템에 제공된다. 사용자는 시스템 회로 설계를 정의하기 위하여 스키메틱 캡쳐 장치나 분석 장치를 사용할 수 있다. 사용자는 통상적으로 드래프트 스키메틱 형태로 전자 시스템 회로 설계를 시작하며, 그리고 나서 분석 장치를 사용하여 HDL로 전화된다. HDL은 사용자에 의해 직접 기입될 수도 있다. 예시적인 HDL 언어는 Verilog 및 VHDL을 포함한다; 그러나 다른 언어도 사용 가능하다. HDL에 표현된 회로 설계는 많은 협력 컴포넌트를 포함한다. 각각의 컴포넌트는 회로 소자의 동작을 정의하거나 또는 시뮬레이션 실행을 제어하는 코드 시퀀스이다.
SEmulation 시스템은 그것들의 컴포넌트 형태를 결정하기 위하여 분석하며, 컴파일러는 소프트웨어 및 하드웨어 내의 상이한 실행 모델을 만들기 위하여 이러한 컴포넌트 형태 정보를 사용한다. 그리고 나서, 사용자는 본 발명의 SEmulation 시스템을 사용할 수 있다. 설계자는 입력 신호와 같은 다양한 스티멀러스를 인가함으로써 시뮬레이션을 통하여 회로의 정확성을 확인하고, 시뮬레이션된 모델의 벡터 패턴을 테스트할 수 있다. 만약 시뮬레이션 동안에, 회로가 계획대로 동작하지 않으면, 사용자는 회로 스키메틱 또는 HDL 파일을 조정함으로써 회로를 재정의할 수 있다.
본 발명의 이러한 실시예의 사용은 도 2의 흐름도에 도시된다. 알고리즘은 단계 100에서 시작한다. 시스템으로 HDL 파일을 로딩한 후에, 시스템은 하드웨어 모델에 적합하도록 회로 설계를 컴파일, 분할, 및 맵핑한다. 컴파일, 분할 및 맵핑 단계는 이하에서 더욱 상세히 논의될 것이다.
시뮬레이션 실행 전에, 시스템은 하드웨어 가속 모델이 기능할 수 있기 전에, 소프트웨어 내의 모든 미지의 "x" 값을 제거하기 위하여 리셋 시퀀스를 실행해야 한다. 본 발명의 일 실시예는 버스 신호 "00"는 로직 로우, "01"은 로직 하이, "10"은 "z" 및 "11"은 "x"-를 위해 4 상태 값을 제공하기 위해 2-비트 와이드 데이터 경로를 사용한다. 당업자가 알 수 있는 바와 같이, 소프트웨어 모델은 "0", "1", "x"(버스 충돌 또는 미지값), 및 "z"(드라이버 없음 또는 하이 임피던스)를 처리할 수 있다. 그와 반대로, 하드웨어는 미지값 "x"를 처리할 수 없어서, 특정 적용가능한 코드에 의존하여 변화하는 리셋 시퀀스는 레지스터 값을 모두 "0" 또는 "1"로 리셋시킨다.
단계 105에서, 사용자는 회로 설계를 시뮬레이션할 것인지를 결정한다. 통상적으로, 사용자는 먼저 소프트웨어 시뮬레이션으로 시스템을 시작할 것이다. 그러므로, 만약 단계 105에서 결정이 "예" 라면, 소프트웨어 시뮬레이션은 단계 110에서 발생한다.
사용자는 단계 115에서 도시된 바와 같이, 값을 검사하기 위하여 시뮬레이션을 중단한다. 실제로, 사용자는 단계 115에서 하드웨어 가속 모드, ICE 모드 및 포스트-시뮬레이션 모드내의 다양한 노드로 연장되는 점선 라인에 의해 도시된 바와 같이 테스트/디버그 세션 동안의 임의의 시간에 시뮬레이션을 중단할 수 있다. 실행 단계 115는 사용자를 단계 160으로 유도한다.
중단 후에, 사용자가 결합 컴포넌트 값을 검사하기를 원한다면, 시스템 커널은 결합 컴포넌트를 포함하는 전체 소프트웨어 모델을 재생성하기 위하여 하드웨어 레지스터 컴포넌트의 상태를 재판독한다. 전체 소프트웨어 모델을 저장한 후에, 사용자는 시스템내의 임의의 신호 값을 검사할 수 있다. 중단 및 검사 후에, 사용자는 시뮬레이션 모드 또는 하드웨어 가속 모드에서 계속 실행할 수 있다. 흐름도에 도시된 것처럼, 단계 115는 중단/값 검사 루틴으로 분기된다. 중단/값 검사 루틴은 단계 160에서 시작한다. 단계 165에서, 사용자는 이러한 포인트에서 시뮬레이션을 중단하고, 값을 검사할 것인지를 결정해야 한다. 만약 단계 165가 "예"를 결정한다면, 단계 170은 현재 진행될 시뮬레이션을 중단하고, 회로 설계의 정확성을 점검하기 위해 다양한 값을 검사한다. 단계 175에서, 알고리즘은 단계 115로 분기되어 있는 지점으로 리턴된다. 여기서, 사용자는 테스트/디버그 세션의 나머지를 위해 시뮬레이션 및 중단/ 값 검사를 계속하거나 또는 회로내의 에뮬레이션 단계로 진행할 수 있다.
유사하게, 만약 단계 105가 "아니오"를 결정하면, 알고리즘은 하드웨어 가속 결정 단계 120을 진행할 것이다. 단계 120에서, 사용자는 모델링된 회로 설계의 하드웨어부를 통한 시뮬레이션을 가속함으로써 테스트/디버그 프로세스를 가속할 것인지를 결정한다. 만약 단계 120에서의 결정이 "예"라면, 그러면 하드웨어 모델 가속은 단계 125에서 발생한다. 시스템 컴파일 프로세스 동안에, SEmulation 시스템은 하드웨어 모델 안으로 일부 맵핑된다. 여기서, 하드웨어 가속이 요구되면, 시스템은 레지스터 및 결합 컴포넌트가 하드웨어 모델로 이동하며, 입력 및 평가 값이 하드웨어 모델로 이동한다. 그러므로, 하드웨어 가속 동안에, 가속된 속도로 긴 시간 주기동안에 하드웨어 모델에서 평가가 일어난다. 커널은 테스트-벤치 출력을 하드웨어 모델에 기록하고, 소프트웨어 클럭을 업데이트하며, 그리고 나서 하드웨어 모델 출력값을 사이클마다 판독한다. 만약 사용자에 의해 요구된다면, 전체 회로 설계인 사용자의 회로 설계의 전체 소프트웨어 모델로부터의 값은 레지스터 값과 결합 컴포넌트를 출력하고, 레지스터 값으로 결합 컴포넌트를 재생성함으로써 이용가능하게 할 수 있다. 이러한 결합 컴포넌트를 재생성하기 위한 소프트웨어 개입의 필요성 때문에, 전체 소프트웨어 모델을 위한 출력값은 매 사이클마다 제공되지 않으며, 값은 사용자가 그러한 값을 원하는 경우에만 제공된다. 이러한 설명은 결합 컴포넌트 재생성 프로세서에서 논의할 것이다.
삭제
삭제
다시, 사용자는 단계 115에 개시된 바와 같이, 임의의 시간에 하드웨어 가속 모드를 중단시킬 수 있다. 만약 사용자가 중단하기를 원한다면, 알고리즘은 중단/값 검사 루틴을 분기하기 위하여 단계 115 및 160을 진행한다. 여기서, 단계 115에서와 같이, 사용자는 임의의 시간에 하드웨어 가속된 시뮬레이션 프로세스를 중단할 수 있으며, 시뮬레이션 프로세스로부터 발생되는 값을 검사할 수 있거나, 또는 사용자는 하드웨어-가속 시뮬레이션 프로세스를 계속할 수 있다. 중단/값 검사 루틴은 단계 160, 165, 170 및 175에 분기되며, 이러한 단계는 시뮬레이션 중단에서 언급되었다. 단계 125후에 주요 루틴으로 리턴하며, 사용자는 하드웨어-가속 시뮬레이션을 계속할 것인지 또는 대신에 단계 135에서 순수 시뮬레이션을 실행할 것인지를 결정할 수 있다. 만약 사용자가 시뮬레이션을 더 하기를 원하면, 알고리즘은 단계 105를 진행한다. 만약, 그렇지 않다면, 알고리즘은 단계 140에서 포스트-시뮬레이션 분석을 진행한다.
단계 140에서, SEmulation 시스템은 많은 포스트-시뮬레이션 분석 특징으로 제공한다. 시스템은 모든 입력은 하드웨어 모델에 로그(log)한다. 하드웨어 모델 출력을 위하여, 시스템은 사용자 정의 로깅 주파수(예를 들면, 1/10,000 기록/사이클)에서 하드웨어 레지스터 컴포넌트의 모든 값을 기입한다. 로깅 주파수는 출력값이 얼마나 자주 기록되는지를 결정한다. 1/10,000 기록/사이클의 로깅 주파수 동안에, 출력값은 10,000 사이클마다 한 번 기록된다. 로깅 주파수가 더 높으면, 나중의 포스트-시뮬레이션 분석 동안에 더 많은 정보가 기록된다. 선택된 로깅 주파수는 SEmulation 속도와 임시의 관계를 갖기 때문에, 사용자는 주의 깊게 로깅 주파수를 선택한다. 시스템은 더 많은 시뮬레이션이 실행되기 전에 I/O 동작을 메모리에 실행함으로써 출력 데이터를 기록하기 위한 자원과 시간을 소비해야만 하기 때문에, 더 높은 로깅 주파수는 SEmulation 속도를 감소시킬 것이다.
포스트-시뮬레이션 분석에 관하여, 사용자는 시뮬레이션이 요구하는 특정 지점을 선택한다. 그리고 나서, 사용자는 SEmulation 후에, 값 변화와 모든 하드웨어 컴포넌트의 내부 상태를 계산하기 위하여 하드웨어 모델에 입력 로그를 갖는 소프트웨어 시뮬레이션을 실행시킴으로써 분석한다. 시뮬레이션 결과를 분석하기 위하여 선택된 로깅 지점으로부터 데이터를 시뮬레이션하기 위하여 하드웨어 가속기가 사용된다는 것을 유의한다. 이러한 포스트-시뮬레이션 분석 방법은 포스트-시뮬레이션을 위한 어떤 시뮬레이션 파형 뷰어로 링크될 수 있다. 이하에서 더욱 상세히 논의될 것이다.
단계 145에서, 사용자는 타겟 시스템 환경내에서 시뮬레이션된 회로 설계를 에뮬레이션하기 위하여 선택할 수 있다. 만약 단계 145가 "아니오"로 결정하면, 알고리즘은 종료되고 SEmulation 프로세스는 단계 155에서 종료된다. 만약 타겟 시스템을 갖는 에뮬레이션이 요구된다면, 알고리즘은 단계 150을 진행한다. 이러한 단계는 에뮬레이션 인터페이스 보드 액티브화, 케이블 및 칩 핀 어댑터를 타겟 시스템에 플러깅 및 타겟 시스템으로부터 시스템 I/O를 획득하기 위하여 타겟 시스템을 실행하는 단계를 포함한다. 타겟 시스템으로부터 시스템 I/O는 타겟 시스템 및 회로 설계의 에뮬레이션 사이의 신호를 포함한다. 에뮬레이션된 회로 설계는 타겟 시스템으로부터 입력 신호를 수신하고, 이것을 처리하며, 다른 프로세싱을 위하여 SEmulation 시스템에 보내며, 처리된 신호를 타겟 시스템에 출력한다.
이와는 반대로, 에뮬레이션된 회로 설계는 출력 신호를 타겟 시스템에 보내며, 이러한 신호를 처리하며, 에뮬레이션된 회로 설계에 처리된 신호를 역 출력한다. 이러한 방식으로, 회로 설계의 성능은 본래 타겟 시스템 환경에서 평가될 수 있다. 타겟 시스템으로 에뮬레이션을 한 후에, 사용자는 회로 설계를 확인하거나 기능적인 면을 나타내는 결과를 갖는다. 이러한 지점에서, 사용자는 단계 135에서 개시된 바와 같이, 다시 시뮬레이션/에뮬레이션하거나, 회로 설계를 변형하기 위하여 중단하거나, 또는 유효한 회로 설계에 근거하여 집적 회로 제조를 진행할 수 있다.
삭제
삭제
삭제
삭제
Ⅲ. 시뮬레이션/하드웨어 가속 모드
본 발명의 일 실시예에 따라, 컴파일 시간 및 실행 시간 동안에 소프트웨어 컴파일 또는 하드웨어 컨피규레이션의 상위 레벨 블록도가 도 3에 도시된다. 도 3은 2세트의 정보를 도시하며; 한 세트의 정보는 컴파일 시간 및 시뮬레이션/에뮬레이션 실행 시간 동안에 실행된 동작을 구별하며; 다른 세트의 정보는 소프트웨어 모델 및 하드웨어 모델 사이의 분할을 도시한다. 처음에, 본 발명의 일 실시예에 따른 SEmulation 시스템은 입력 데이터(200)로서 사용자 회로 설계를 요구한다. 사용자 회로 설계는 HDL 파일(예를 들면, Verilog, VHDL)의 형태이다. SEmulation 시스템은 HDL 파일을 축소하여, 동작 레벨 코드, 레지스터 전달 레벨 코드 및 게이트 레벨 코드는 SEmulation 시스템에 의해 사용할 수 있는 형태로 감소될 수 있다. 시스템은 전처리 단계 205를 위하여 소스 설계 데이터베이스를 생성한다. 처리된 HDL 파일은 SEmulation 시스템에 의해 사용 가능하다. 파싱 프로세스(parsing process)는 ASCII 데이터를 내부 이진 데이터 구조로 변환시키며, 이는 당업자에게 공지되어 있다. 본 발명에 참조로 포함될 수 있는 ALFRED V.AHO, RAVISETHI, JEFFREY D.ULLMAN 편저, PRINCIPLE, THEHNIQUE AND TOOLS(1988)를 참조한다.
컴파일 시간은 프로세스 225에 의해 표현되며, 실행 시간은 프로세스/소자 (230)에 의해 표현된다. 프로세스 (225)에 의해 도시된, 컴파일 시간 동안에, SEmulation 시스템은 컴포넌트 타입 분석을 실행함으로써 처리된 HDL 파일을 컴파일한다. 컴포넌트 형태 분석은 HDL 컴포넌트를 결합 컴포넌트, 레지스터 컴포넌트, 클럭 컴포넌트, 메모리 컴포넌트 및 테스트-벤치 컴포넌트로 분류한다. 시스템은 사용자 회로 설계를 제어 및 평가 컴포넌트로 분할한다.
SEmulation 컴파일러(210)는 시뮬레이션의 제어 컴포넌트를 소프트웨어에 맵핑시키며, 평가 컴포넌트를 소프트웨어 및 하드웨어에 맵핑시킨다. 컴파일러(210)는 모든 HDL 컴포넌트를 위한 소프트웨어 모델을 생성한다. 소프트웨어 모델은 코드(215)에 배정된다. 추가적으로, SEmulation 컴파일러(210)는 HDL 파일의 컴포넌트 형태 정보를 사용하며, 라이브러리나 모듈 생성기로부터 하드웨어 로직 블록/소자를 선택 또는 생성하며, 그리고 특정 HDL 컴포넌트를 위한 하드웨어 모델을 생성한다. 최종 결과는 소위 "비트스트림" 컨피규레이션 파일(220)이다.
실행 시간의 준비시, 코드 형태의 소프트웨어 모델은 본 발명의 일 실시예에 따른 SEmulation 프로그램과 연동되는 응용 프로그램이 저장되는 메인 메모리에 저장된다. 이러한 코드는 범용 프로세서나 워크스테이션(240)내에서 처리된다. 거의 동시에, 하드웨어 모델을 위한 컨피규레이션 파일(220)은 사용자 회로 설계를 리컨피규러블 하드웨어 보드(250)에 맵핑하기 위하여 사용된다. 여기서, 하드웨어 내에 모델링된 회로 설계의 부분은 리컨피규러블 하드웨어 보드(250)내의 FPGA 칩안에 맵핑되고, 분할된다.
상기에서 설명된 바와 같이, 사용자 테스트-벤치 스티멀러스(stimulus) 및 테스트 벡터 데이터 및 다른 테스트-벤치 자원(235)은 시뮬레이선 목적을 위하여 범용 프로세서 또는 워크스테이션(240)에 제공된다. 게다가, 사용자는 소프트웨어 제어를 통하여 회로 설계의 에뮬레이션을 실행할 수 있다. 리컨피규러블 하드웨어 보드(250)는 사용자의 에뮬레이션된 회로 설계를 포함한다. 이러한 SEmulation 시스템은 사용자가 소프트웨어 시뮬레이션 및 하드웨어 에뮬레이션 사이의 선택적으로 스위치하며, 임의의 시간에 시뮬레이션 또는 에뮬레이션 프로세스를 중단하며, 모델내에서 모든 컴포넌트로부터 값을 검사하기 위한 능력을 갖는다. 그러므로, SEmulation 시스템은 테스트-벤치(235)와 시뮬레이션을 위한 프로세서/워크스테이션 (240) 사이의 데이터를 패스시키며, 에뮬레이션을 위한 프로세서/워크스테이션(240)과 데이터 버스(245)를 통하여 테스트-벤치(235)와 리컨피규러블 하드웨어 보드(250) 사이의 데이터를 패스시킨다. 만약, 사용자 타겟 시스템(260)이 포함된다면, 에뮬레이션 데이터는 리컨피규러블 하드웨어 보드(250)및 에뮬레이션 인터페이스(255) 및 데이터 버스(245)를 통하여 타겟 시스템(260) 사이를 패스할 수 있다. 커널은 프로세서/워크스테이션(240)의 메모리 내의 소프트웨어 시뮬레이션 모델 내에서 발견되어, 데이터는 프로세서/워크스테이션(240)과 데이터 버스(245)를 통하여 리컨피규러블 하드웨어 보드(250) 사이를 패스한다.
도 4는 본 발명의 일 실시예에 따른 컴파일 프로세스의 흐름도를 도시한다. 컴파일 프로세스는 도 3에 도시된 프로세스 205 및 210이다. 도 4의 컴파일 프로세스는 단계 300에서 시작한다. 단계 301은 전단 정보를 처리한다. 여기서 게이트 레벨 HDL 코드가 생성된다. 사용자는 코드의 게이트 레벨 HDL 표현을 생성하기 위하여 스키메틱 또는 분석 장치를 사용하거나 또는 코드를 직접 기입함으로써 초기 회로 설계를 HDL 형태로 변화시킨다. SEmulation 시스템은 HDL 파일(ASCII 포맷)을 이진 포맷으로 파싱(parsing)하여, 동작 레벨 코드, 레지스터 전달 레벨(RTL) 및 게이트 레벨 코드가 SEmulation 시스템에 의해 허용가능한 내부 데이터 구조 형태로 감소될 수 있다. 시스템은 파싱된 HDL 코드를 함유하는 소스 설계 데이터베이스를 생성한다.
단계 302는 HDL 컴포넌트를 컴포넌트 형태 자원(303)으로 도시된 결합 컴포넌트, 레지스터 컴포넌트, 클럭 컴포넌트, 메모리 컴포넌트 및 테스트-벤치 컴포넌트로 분류함으로써 컴포넌트 형태 분석을 실행한다. SEmulation 시스템은 이하에서 논의되는 예외를 갖는, 레지스터 및 결합 컴포넌트를 위한 하드웨어 모델을 생성한다. 테스트-벤치 및 메모리 컴포넌트는 소프트웨어로 맵핑된다. 일부 클럭 컴포넌트(예를 들면, 유도된 클럭)는 하드웨어내에 모델링되며, 다른 컴포넌트들은 소프트웨어/하드웨어 경계(예를 들면, 소프트웨어 클럭)내에 존재한다.
결합 컴포넌트는 비상태(stateless) 로직 컴포넌트이며, 그것의 출력값은 현재 입력값의 함수이며, 과거 입력 값에 의존하지 않는다. 결합 컴포넌트의 예는 원시 게이트(예를 들면, AND, OR, XOR, NOT), 선택기, 어댑터, 멀티플렉서, 시프터, 및 버스 드라이버를 포함한다.
레지스터 컴포넌트는 간단한 저장 소자이다. 레지스터의 상태 변이는 클럭 신호에 의해 제어된다. 레지스터의 한 형태는 에지가 검출될 때 상태가 변화하는 에지-트리거 레지스터이다. 다른 형태의 레지스터는 레벨 트리거되는 래치이다. 예는 플립-플롭(D-타입, JK-타입) 및 레벨-검출(level-detect) 래치를 포함한다.
클럭 컴포넌트는 로직 소자의 동작을 제어하기 위하여 로직 소자에 주기적인 신호를 보내는 소자이다. 통상적으로 클럭 신호는 레지스터의 업데이트를제어한다. 주요 클럭은 셀프-타임 테스트-벤치 프로세스로부터 발생된다. 예를 들면, Verilog 내의 클럭 발생을 위한 통상적인 테스트-벤치 프로세스는 다음과 같다.
시작
클럭 = 0;
#5;
클럭 = 1;
#5;
끝;
이러한 코드에 따라, 클럭 신호는 최초에 로직 "0"이다. 5 타임 유닛 후에, 클럭 신호는 로직 "1"로 변화한다. 5 타임 유닛 후에, 클럭 신호는 다시 로직 "0"으로 변한다. 통상적으로, 주요 클럭 신호는 소프트웨어에서 생성되며, 단지 몇몇(즉, 1-10) 주요 클럭은 통상적인 사용자 회로 설계에서 생긴다. 유도된 또는 게이트된 클럭은 주요 클럭에 의해 차례대로 유도되는 레지스터 및 조합 로직의 네트워크로부터 생성된다. 많은(즉, 1000 이상) 유도된 클럭은 통상적인 사용자 회로 설계내에서 생긴다.
메모리 컴포넌트는 어드레스를 갖는 블록 저장 컴포넌트이며, 특정 메모리 위치내의 개별 데이터를 액세스하기 위하여 라인을 제어한다. 예로서, ROM, 비동기식식 RAM, 동기식 RAM이 있다.
테스트-벤치 컴포넌트는 시뮬레이션 프로세스를 제어하고 모니터하기 위하여 사용된 소프트웨어 프로세스이다. 따라서, 이러한 컴포넌트는 테스트 동안의 하드웨어의 일부가 아니다. 테스트-벤치 컴포넌트는 클럭 신호를 제어하고, 시뮬레이션 데이터를 초기화하며, 디스크/메모리로부터 시뮬레이션 테스트 벡터 패턴을 판독함으로써 시뮬레이션을 제어한다. 테스트-벤치 컴포넌트는 값 변화를 점검하고, 값 변화 덤프를 실행하며, 신호 값 관계상의 제한을 점검하고, 출력 테스트 벡터를 디스크/ 메모리에 기록하며, 다양한 파형 뷰어 및 디버거와 인터페이스함으로써 시뮬레이션을 모니터한다.
SEmulation 시스템은 컴포넌트 형태 분석을 다음과 같이 행한다. 시스템은 2진 소스 설계 데이터베이스를 시험한다. 소스 설계 데이터베이스에 근거하여, 시스템은 상기 컴포넌트 형태중 하나의 소자로서 분류할 수 있다. 연속 할당 진술은 결합 컴포넌트로서 분류된다. 원시 게이트는 언어 정의에 의하여 레지스터 형태의 래치 또는 조합 형태이다. 초기화 코드는 초기화 형태의 테스트-벤치로서 처리된다.
네트를 사용하지 않고 네트를 구동하는 프로세스는 드라이버 형태의 테스트-벤치이다. 네트를 구동하지 않고 네트를 판독하는 프로세스는 모니터 형태의 테스트-벤치이다. 지연 제어 또는 다중 이벤트 제어를 갖는 프로세스는 일반적인 형태의 테스트-벤치이다.
단일 이벤트 제어 및 단일 네트를 구동하는 프로세스는 이하의 것중 하나가 될 수 있다 : (1) 이벤트 제어는 에지-트리거된 이벤트라면, 프로세스는 에지-트리거된 형태의 레지스터 컴포넌트이다. (2) 프로세스 내에서 구동된 네트가 모든 가능한 실행 경로내에서 정의되지 않는다면, 네트는 래치 형태의 레지스터이다. (3) 프로세스 내에서 구동된 네트가 모든 가능한 실행 경로내에서 정의된다면, 네트는 결합 컴포넌트이다.
다중 네트 구동없이 단일 이벤트 제어를 갖는 프로세스는 각각의 네트를 개별적으로 구동하는 몇몇 프로세스로 분해되어, 개별적인 컴포넌트 형태가 구동된다. 분해된 프로세스는 컴포넌트 형태를 결정하기 위하여 사용될 수 있다.
단계 304는 컴포넌트 형태와는 상관없이, 모든 HDL 컴포넌트를 위한 소프트웨어 모델을 생성한다. 적절한 사용자 인터페이스를 사용하면, 사용자는 완전한 소프트웨어 모델을 사용하여 전체 회로 설계를 시뮬레이션할 수 있다. 테스트-벤치 프로세스는 스티멀러스 입력을 구동하고, 벡터 패턴을 테스트하고, 전체 시뮬레이션을 제어하며, 그리고 시뮬레이션 프로세스를 모니터하기 위하여 사용된다.
단계 305는 클럭 분석을 실행한다. 클럭 분석은 2가지 일반적인 단계; (1) 클럭 추출 및 연속 맵핑, 및 (2) 클럭 네트워크 분석을 포함한다. 클럭 추출 및 연속 맵핑 단계는 사용자의 레지스터 컴포넌트를 SEmulation 시스템의 하드웨어 레지스터 모델에 맵핑한 다음, 클럭 신호를 시스템의 하드웨어 레지스터 컴포넌트 외부로 추출하는 단계를 포함한다. 클럭 네트워크 분석 단계는 주요 클럭 및 추출된 클럭 신호에 근거하여 유도된 클럭을 결정하며, 게이트 클럭 네트워크 및 게이트 데이터 네트워크를 분리하는 단계를 포함한다. 더욱 상세한 상술은 도 16과 관련하여 제공될 것이다.
단계 306은 거주지(residence) 선택을 수행한다. 사용자와 관련하여, 시스템은 하드웨어 모델을 위한 컴포넌트를 선택한다; 즉, 사용자의 회로 설계의 하드웨어 모델내에서 구현될 수 있는 하드웨어 컴포넌트중에서, 일부 하드웨어 컴포넌트는 다양한 이유로 인하여 하드웨어 내에서 모델링되지 않을 것이다. 이러한 이유는 컴포넌트 형태, 하드웨어 자원 제한(즉, 소프트웨어의 플로팅 포인트 동작 및 많은 곱셈 동작), 시뮬레이션 및 통신 오버헤드(즉, 소프트웨어에 있는 테스트-벤치 프로세스들, 및 소프트웨어에 있는 테스트-벤치 프로세스에 의해 모니터되는 신호간의 작은 브릿지 로직), 및 사용자의 선택을 포함한다. 성능 및 시뮬레이션 모니터링을 포함하는 다양한 이유를 위하여, 사용자는 소프트웨어에 상주하도록 하드웨어내에서 모델링되는 특정 컴포넌트가 되도록 할 수 있다.
단계 307은 선택된 하드웨어 모델을 리컨피규러블 하드웨어 에뮬레이션 보드에 맵핑시킨다. 특히, 단계 307 맵은 네트리스트를 취하며, 회로 설계를 특정 FPGA 칩에 맵핑시킨다. 이러한 단계는 로직 엘리먼트를 함께 그룹화하거나 클러스터하는 단계를 포함한다. 그리고 나서, 시스템은 각 그룹에 단일 FPGA 칩을 할당하거나, 또는 몇몇 그룹에 단일 FPGA 칩을 할당한다. 시스템은 상이한 FPGA 칩에 할당하기 위하여 그룹을 분리하기도 한다. 일반적으로, 시스템은 그룹을 FPGA 칩에 할당한다. 더욱 상세한 논의는 도 6과 관련하여 제공될 것이다. 시스템은 내부-칩 통신 오버헤드를 최소화하기 위하여 하드웨어 모델 컴포넌트를 FPGA 칩의 매쉬에 배치한다. 일 실시예에서, 어레이는 FPGA의 4 ×4 어레이, PCI 인터페이스 유닛 및 소프트웨어 클럭 제어 유닛을 포함한다. FPGA 어레이는 이러한 소프트웨어 컴파일 프로세스의 단계 302-306에서 결정된 바와 같이, 사용자의 하드웨어 회로 설계의 부분을 구현한다. PCI 인터페이스 유닛은 리컨피규러블 하드웨어 에뮬레이션 모델이 PCI 버스를 통하여 워크스테이션과 통신하도록 한다. 소프트웨어 클럭은 FPGA의 어레이에 다양한 클럭 신호를 위하여 레이스 조건을 회피한다. 더욱이, 단계 307은 하드웨어 모델중에서 통신 스케쥴에 따라 FPGA 칩을 라우트한다.
단계 308은 제어 회로를 삽입한다. 이러한 제어 회로는 시뮬레이터로의 DMA 엔진과 통신하기 위한 I/O 어드레스 포인터와 데이터 버스 로직(도 11, 12 및 14와 관련하여 이하에서 논의됨), 및 하드웨어 상태 변이와 와이어 멀티플렉싱(도 19 및 20과 관련하여 논의됨)을 제어하기 위한 평가 제어 로직을 포함한다. 당업자에게 공지된 바와 같이, 직접 메모리 액세스(DMA) 유닛은 주변장치 및 메인 메모리 사이의 추가적인 데이터 채널을 제공하며, 주변장치는 CPU의 개입없이 메인 메모리와 직접적으로 액세스(즉, 리드, 라이트)할 수 있다. 각각의 FPGA 칩내의 어드레스 포인터는 버스 크기 제한에 따라 소프트웨어 모델 및 하드웨어 모델 사이에 데이터를 이동하도록 한다. 평가 제어 로직은 클럭과 데이터 입력이 이러한 레지스터를 입력하기 전에 클럭이 입력을 레지스터에 입력할 수 있도록 보장하는 한정된 상태 머신이다.
단계 309는 하드웨어 모델을 FPGA 칩에 맵핑하기 위한 컨피규레이션 파일을 생성한다. 본질적으로, 단계 309는 회로 설계 컴포넌트를 각 칩내의 특정 셀 또는 게이트 레벨 컴포넌트에 할당한다. 단계 307은 하드웨어 모델 그룹을 특정 FPGA 칩에 맵핑하는 것을 결정하는 반면에, 단계 309는 이러한 맵핑 결과를 취하여, 각 FPGA 칩을 위한 컨피규레이션 파일을 생성한다.
단계 310은 소프트웨어 커널 코드를 생성한다. 커널은 전체 SEmulation 시스템을 제어하는 소프트웨어 코드의 시퀀스이다. 커널은 코드의 일부가 업데이트 및 하드웨어 컴포넌트 평가를 요구하기 때문에 이러한 포인트까지 생성될 수 없다. 단계 309 후에만 하드웨어 모델과 FPGA 칩에 적절한 맵핑이 발생한다. 더욱 상세한 논의는 도 5와 관련하여 이하에서 제공될 것이다. 컴파일은 단계 311에서 종료된다.
도 4에 관하여 상술한 바와 같이, 소프트웨어 커널 코드는 소프트웨어와 하드웨어 모델이 결정된 후에 단계 310에서 생성된다. 커널은 전체 시스템의 동작을 제어하는 SEmulation 시스템내의 소프트웨어 일부이다. 커널은 소프트웨어 시뮬레이션과 하드웨어 에뮬레이션의 실행을 제어한다. 커널은 하드웨어 모델의 중앙에 위치하기 때문에, 시뮬레이터는 에뮬레이터에 집적된다. 다른 공지된 공동-시뮬레이션 시스템과는 달리, 본 발명의 일 실시예에 따른 SEmulation 시스템은 외부로부터 에뮬레이터와 상호작용하기 위한 시뮬레이터를 요구하지 않는다. 커널의 일 실시예는 도 5에 도시된 제어 루프이다.
도 5를 참조하면, 커널은 단계 330에서 시작된다. 단계 331은 초기화 코드를 평가한다. 단계 332에서의 시작하여, 결정 단계 339에 도달하면, 제어 루프가 시작하여, 시스템이 액티브 테스트-벤치 프로세스를 관측하지 못할 때까지, 사이클이 반복되며, 그러한 경우 시뮬레이션 또는 에뮬레이션 세션은 종료된다. 단계 332는 시뮬레이션 또는 에뮬레이션을 위한 액티브 테스트-벤치 컴포넌트를 평가한다.
단계 333은 클럭 컴포넌트를 평가한다. 이러한 클럭 컴포넌트는 테스트-벤치 프로세스로부터 생긴다. 보통, 사용자는 시뮬레이션 시스템에 무슨 형태의 클럭 신호가 생성될 것인지를 지시한다. (컴포넌트 형태 분석과 관련하여 상술되고 여기서 재생산된) 일 예에서, 테스트-벤치 프로세스에서 사용자에 의해서 지정된 클럭 컴포넌트는 다음과 같다 :
시작
클럭 = 0;
#5;
클럭 = 1;
#5;
종료;
이러한 클럭 컴포넌트에서, 사용자는 로직 "0" 신호가 먼저 생성되고, 그리고 나서 5 시뮬레이션 시간 후에, 로직 "1" 신호가 생성될 것이라는 것을 결정한다. 이러한 클럭 생성 프로세스는 사용자에 의해 중단될 때까지 사이클이 계속된다. 이러한 시뮬레이션 시간은 커널에 의해 진행된다.
결정 단계 334는 임의의 액티브 클럭 에지가 검출되었는지를 문의하고, 소프트웨어 및 가능한 하드웨어 모델에서 몇가지 종류의 로직 평가가 일어난다(만약, 에뮬레이션이 실행중이라면). 커널은 액티브 클럭 에지를 검출하기 위하여 사용하며, 클럭 신호는 테스트-벤치 프로세스로부터의 클럭 신호이다. 만약 결정 단계 334가 "아니오"라고 평가한다면, 커널은 단계 337로 진행한다. 결정 단계 334가 "예"라고 평가한다면, 레지스터와 메모리를 업데이트하는 단계 335와 결합 컴포넌트를 전파하는 단계 336으로 진행된다. 단계 336은 클럭 신호가 나타난 후에 조합 로직 네트워크를 통하여 값을 전파하기 위하여 시간을 요구하는 조합 로직을 처리한다. 값이 결합 컴포넌트를 통하여 전파되어 안정화되면, 커널은 단계 337로 진행한다.
레지스터와 결합 컴포넌트가 하드웨어내에서 모델링되며, 그러므로 커널은 SEmulation 시스템의 에뮬레이터 부분을 제어한다는 것을 유의한다. 실제로, 커널은 임의의 액티브 클럭 에지가 검출될 때마다, 단계 334와 335에서 하드웨어 모델의 평가를 가속시킬 수 있다. 그러므로, 종래기술과는 달리, 본 발명의 일 실시예에 따른 SEmulation 시스템은 컴포넌트 형태(예를 들면, 레지스터, 조합)를 기반으로 소프트웨어 커널을 통해 하드웨어 에뮬레이터을 가속할 수 있다. 더욱이, 커널은 사이클마다 소프트웨어와 하드웨어 모델의 실행을 제어한다. 필수적으로, 에뮬레이터 하드웨어 모델은 시뮬레이션 커널을 실행하는 범용 프로세서의 시뮬레이션 공동프로세서로서 특징될 수 있다. 공동프로세서는 시뮬레이션 작업을 가속시킨다.
단계 337은 액티브 테스트-벤치 컴포넌트를 평가한다. 단계 338은 시뮬레이션 시간을 개선시킨다. 단계 339는 단계 332에서 시작하는 제어 루프를 위한 경계를 제공한다. 단계 339는 임의의 테스트-벤치 프로세스가 액티브인지를 결정한다. 만약 그렇다면, 시뮬레이션 및/또는 에뮬레이션은 여전히 동작하며, 더 많은 데이터가 평가된다. 그러므로, 커널은 임의의 액티브 테스트-벤치 컴포넌트를 평가하기 위하여 단계 332로 루프시킨다. 만약, 테스트-벤치 프로세스가 액티브가 아니라면, 시뮬레이션과 에뮬레이션 프로세스는 종료된다. 단계 340은 시뮬레이션/에뮬레이션 프로세스는 종료한다. 또한, 커널은 전체 SEmulation 시스템의 동작을 제어하는 메인 제어 루프이다. 임의의 테스트-벤치 프로세스가 액티브이면, 커널은 액티브 테스트-벤치 컴포넌트를 평가하고, 클럭 컴포넌트를 평가하며, 레지스터및 메모리를 업데이트하고 조합 로직 데이터를 전파하기 위해, 클럭 에지를 검출하고, 시뮬레이션 시간을 진행시킨다.
도 6은 하드웨어 모델을 리컨피규러블 보드로 자동 맵핑하는 방법의 일 실시예를 도시한다. 네트리스트 파일은 하드웨어 구현 프로세스로의 입력을 제공한다. 네트리스트는 로직 기능과 그것들의 상호접속을 상술한다. 하드웨어 모델-대-FPGA 구현 프로세스는 3가지 독립적인 작업: 맵핑, 배치 및 라우팅을 포함한다. 상기 툴들은 일반적으로 "플레이스-및-라우트" 툴로서 언급된다. 사용되는 설계 툴은 Viewlogic Viewdraw, 스키메틱 캡쳐 시스템 및 Xilinx Xact 배치 및 라우트 소프트웨어 또는 Altera's MAX+PLUS Ⅱ 시스템일 수 있다.
맵핑 작업은 회로 설계를 로직 블록, I/O 블록 및 다른 FPGA 자원으로 분할한다. 플립-플롭 및 버퍼와 같은 일부 로직 기능은 직접적으로 상응하는 FPGA 자원으로 맵핑하지만, 조합 로직과 같은 다른 로직 기능은 맵핑 알고리즘을 사용하여 로직 블록에서 구현되어야만 한다. 사용자는 일반적으로 최적 밀도 또는 최적 성능을 위한 맵핑을 선택할 수 있다.
배치 작업은 맵핑 작업으로부터 로직 및 I/O 블록을 취하며, FPGA 어레이내에 물리적인 위치로 할당하는 것을 포함한다. 현재 FPGA 장치는 일반적으로 3가지 기술; 민컷(mincut), 어닐링 시뮬레이션 및 GFDR(general force-directed relaxation)의 조합을 사용한다. 이러한 기술은 상호접속부의 전체 네트 길이 또는 다양한 변수 중에서 임계 신호 경로의 세트에 따른 지연에 좌우되는 다양한 비용 함수를 기초로 최적 배치를 결정한다. Xilinx XC4000 시리즈 FPGA 장치는 배치시 개선을 위한 GFDR에 의해 일어나는 최초 배치를 위한 민컷 기술의 변수를 사용한다.
라우팅 작업은 다양한 맵핑 및 배치된 블록을 상호접속하기 위하여 사용된 라우팅 경로를 결정하는 것을 포함한다. 소위 메이즈 라우터(maze router)인 그러한 라우터는 2개의 지점간의 최단 경로를 탐색한다. 라우팅 작업은 칩중에 직접 상호접속을 제공하므로, 칩과 관련된 회로의 배치가 중요하다.
초기에, 하드웨어 모델은 게이트 네트리스트 350 또는 RTL 357로 상술될 수 있다. RTL 레벨 코드는 게이트 레벨 네트리스트에 합성될 수 있다. 맵핑 프로세스 동안에, Altera MAX+PLUSⅡ 프로그래머블 로직 개발 툴 시스템 및 소프트웨어와 같은 합성기 서버(360)는 맵핑 목적을 위한 출력 파일을 생산하기 위하여 사용될 수 있다. 합성기 서버(360)는 사용자의 회로 설계 컴포넌트를 라이브러리(361)내에 있는 임의의 표준 로직 엘리먼트(예를 들면, 표준 가산기나 표준 곱셈기)에 매칭되며, 파라미터화되며 종종 사용되는 로직 모듈(362)(예를 들면, 비표준 멀티플렉서 또는 비표준 가산기)을 생성하며, 그리고 임의의 로직 엘리먼트(363)(예를 들면, 주문된 로직 함수를 구현하는 룩-업 테이블 기반의 로직)를 합성하는 능력을 갖는다. 합성기 서버는 여분의 로직과 사용되지 않는 로직을 제거한다. 출력 파일은 사용자의 회로 설계에 의해 요구된 로직을 합성하거나 최적화한다.
HDL의 일부 또는 모두가 RTL 레벨일 때, 회로 설계 컴포넌트는 상위 레벨에 있어서, SEmulation 시스템이 SEmulation 레지스터나 컴포넌트를 사용하여 이러한 컴포넌트를 용이하게 모델링할 수 있게된다. HDL의 일부 또는 모두가 게이트 네트리스트 레벨에 있을 때, 회로 설계 컴포넌트는 더 많은 회로 설계-특정이 되며, 사용자 회로 설계 컴포넌트가 SEmulation 컴포넌트에 맵핑하는 것을 더욱 어렵게 한다. 따라서, 합성기 서버는 표준 로직 엘리먼트의 변화에 근거한 임의의 로직 엘리먼트 또는 이러한 변화나 라이브러리 표준 로직 엘리먼트와 병행하지 않는 임의의 로직 엘리먼트를 생성할 수 있다.
회로 설계가 게이트 네트리스트 형태에 있다면, SEmulation 시스템은 그룹핑 또는 클러스터링 동작(351)을 최초로 수행할 것이다. 하드웨어 모델 구조는 조합 로직과 레지스터가 클럭으로부터 분리되기 때문에, 클러스터링 프로세스에 기초한다. 그러므로, 일반적인 주요 클럭 또는 게이트된 클럭 신호를 공유하는 로직 엘리먼트는 함께 그룹화하여, 칩 상에 배치됨으로써 더욱 양호하게 작용할 수 있다. 클러스터링 알고리즘은 유도된 액세스, 계층적 추출 및 규직적인 구조물 추출에 기초한다. 구조화된 RTL 358내에 기재되어 있다면, SEmulation 시스템은 기능을 로직 기능 분해 동작(359)에 의해 표현되는 더 작은 유닛으로 분해할 수 있다. 임의의 단계에서, 로직 합성이나 로직 최적화가 요구된다면, 합성기 서버(360)는 회로 설계를 사용자 지시에 기초한 더욱 효율적인 표현으로 변환할 수 있다. 클러스터링 동작(351)을 위하여, 합성기 서버에 링크는 점선 화살표(364)에 의해 표현된다. 구조화된 RTL(358)을 위하여, 합성기 서버(360)에 링크는 화살표(365)로 표현된다. 로직 기능 분해 동작(359)을 위하여, 합성기 서버(360)에 링크는 화살표(366)로 표현된다.
삭제
삭제
삭제
삭제
삭제
삭제
삭제
클러스터링 동작(351)은 기능과 크기에 기초한 선택적인 방식으로 로직 컴포넌트를 그룹화한다. 클러스터링은 큰 회로 설계를 위한 몇몇 클러스터나 작은 회로 설계를 위한 하나의 클러스터를 포함한다. 이러한 로직 엘리먼트의 클러스터는 지정된 FPGA 칩으로 맵핑하기 위하여 다음 단계에서 사용될 것이다; 즉, 하나의 클러스터는 특정 칩을 위하여 목표가 정해질 것이며, 다른 클러스터는 상이한 칩 또는 제 1 클러스터로서 동일한 칩을 위하여 목표가 정해질 것이다. 일반적으로, 클러스터내의 로직 엘리먼트는 칩 내에서 클러스터와 함께 놓이지만, 최적화 목적을 위하여, 클러스터는 하나 이상의 칩에 분리된다.
클러스터가 클러스터링 동작(351)에서 형성된 후에, 시스템은 플레이스-및-라우트 동작을 수행한다. 우선, FPGA 칩 내에 클러스터의 거친-그레인(coarse-grain) 배치 동작(352)이 수행된다. 거친-그레인 배치 동작(352)은 우선 로직 엘리먼트의 클러스터를 선택된 FPGA 칩에 배치한다. 만약, 필요하다면, 시스템은 합성기 서버(360)가 화살표(367)에 의해 표현된 바와 같이 거친-그레인 배치 동작(352)에 이용가능하게 한다. 미세-그레인(fine-grain) 배치 동작은 최초 배치를 미세-조정하기 위하여, 거친-그레인 배치 동작을 한 후에 수행된다. SEmulation 시스템은 거친-그레인 배치 및 미세-그레인 배치 동작을 위한 최적 배치를 결정하기 위하여, 핀 사용 요구, 게이트 사용 요구 및 게이트-대-게이트 홉(hop)에 기초한 비용 함수를 사용한다.
특정 칩내에 배치되는 클러스터 결정 방법은 배치 비용에 기초하며, 2개이상의 회로(즉, CKTQ = CKT1, CKT2,...,CKTN) 및 FPGA 칩 어레이내의 개별 위치를 위한 비용 함수(P, G, D)를 통하여 계산되며, 여기서 P는 일반적으로 핀 사용/이용가능성, G는 일반적으로 게이트 이용/이용가능성 및 D는 (도 8과 관련하여 도 7에 도시된 )연결 매트릭스 M에 의해 정의되는 게이트 대 게이트 "홉"의 거리 또는 수이다. 하드웨어 모델내에 모델링되는 사용자의 회로 설계는 회로 CKTQ의 전체 조합이다. 각각의 비용함수는 계산된 배치 비용의 계산된 값이 일반적으로 (1) FPGA 어레이내의 임의의 2개의 회로 CKTN-1과 CKTN 사이의 "홉"의 최소 수 및 (2) FPGA 어레이내의 회로 CKTN-1과 CKTN 의 배치가 핀 사용이 최소가 되도록하는 경향이 있다.
삭제
삭제
일 실시예에서, 비용 함수 F(P, G, D)는 다음과 같이 정의된다.
Figure 112003005208091-pct00001
이러한 등식은 다음과 같이 간략화될 수 있다.
f(P, G, D) = C0*P + C1*G + C2*D
제 1 항(즉, C0*P)는 사용된 핀의 수와 사용가능한 핀의 수에 기초한 제 1 배치 비용 값을 만든다. 제 2 항(즉, C1*G)은 사용된 게이트의 수와 사용가능한 게이트의 수에 기초한 제 2 배치 비용값을 만든다. 제 3 항(즉, C2*D)은 회로 CKTQ(즉, CKT1, CKT2,...,CKTN)내의 다양한 상호접속 게이트 사이의 존재하는 홉의 수에 기초한 배치 비용 값을 만든다. 전체 배치 비용 값은 이러한 3개의 배치 비용 값을 반복적으로 가산함으로써 만들어진다. 상수 CO, C1및 C2는 임의의 배치 비용 계산 동안에 가장 중요한 인자 또는 인자들(즉, 핀 사용량, 게이트 사용량 또는 게이트-대-게이트 홉)에 대한 비용 함수로부터 발생된 전체 배치 비용 값을 선택적으로 왜곡하는 가중 상수를 나타낸다.
배치 비용은 시스템이 가중 상수 C0, C1 및 C2를 위한 상이한 상대값을 선택할 때 반복적으로 계산된다. 그러므로, 일 실시예에서, 거친-그레인 배치 동작 동안에, 시스템은 C2에 비하여 CO 및 C1를 위하여 큰 값을 선택한다. 이러한 반복에서, 시스템은 핀 사용량/이용가능성 및 게이트 사용량/이용가능성의 최적화가 FPGA 칩의 어레이내의 회로 CKTQ의 초기 배치에서의 게이트-대-게이트 홉의 최적화보다 더욱 중요하다는 것을 결정한다. 순차적인 반복에서, 시스템은 C2에 비해 작은 값의 C0 및 C1을 선택한다. 이러한 반복에서, 시스템은 게이트-대-게이트 홉의 최적화가 핀 사용량/이용가능성 및 게이트 사용량/이용가능성의 최적화보다 더 중요하는 것을 결정한다.
미세-그레인 배치 동작동안에, 시스템은 동일한 비용 함수를 사용한다. 일 실시예에서, CO, C1 및 C2의 선택에 관한 반복 단계는 거친-그레인 동작을 위한 것과 동일하다. 다른 실시예에서, 미세-그레인 배치 동작은 시스템이 C2에 비하여 CO 및 C1을 위하여 적은 값을 선택하는 단계를 포함한다.
이러한 변수와 등식의 설명은 이하에서 논의될 것이다. (다른 FPGA 칩중의) FPGA 칩 x 또는 FPGA 칩 y내의 특정 회로 CKTQ를 배치할 것인지를 결정할 시, 비용 함수는 핀 사용량/이용가능성(P), 게이트 사용량/이용가능성(G) 및 게이트-대-게이 트 홉(D)을 시험한다. 비용 함수 변수 P, G, D에 기초하여, 비용 함수 f(P, G, D)는 FPGA 어레이내의 특정 위치에서 회로 CKTQ를 위한 배치 비용 값을 만든다.
핀 사용량/이용가능성(P)는 I/O 용량을 나타내기도 한다. Pused는 각각의 FPGA 칩을 위한 회로 CKTQ에 의해 사용된 핀의 개수이다. Pavailable은 FPGA 칩내에서 이용가능한 핀의 개수이다. 일 실시예에서, Pavailable은 264(44핀 ×6 상호접속/칩)인데 반하여, 다른 실시예에서는 Pavailable은 265이다(44핀 ×6 상호접속/칩 + 1 여분 핀). 그러나, 이용가능한 핀의 특정 수는 사용된 FPGA 칩의 형태, 칩당 사용된 상호접속의 전체 수 및 각각의 상호접속을 위해 사용된 핀의 개수에 의존한다. 그러므로, Pavailable은 상당히 변화할 수 있다. 제 1 항의 비용 함수 F(P, G, D) 방정식(즉, C0*P)을 평가하기 위하여, Pused/Pavailable 비율이 각각의 FPGA 칩에 대해 계산된다. 그러므로, FPGA 칩의 4×4 어레이를 위하여, Pused/Pavailable 비율은 16이 된다. 소정 개수의 이용가능한 핀을 위하여 더 많은 핀이 사용되면, 비율은 더 높아진다. 16 계산된 비율중, 비율을 양산하는 가장 높은 수가 선택된다. 제 1 배치 비용값은 선택된 최대 비율 Pused/Pavailable 과 가중 상수 C0가 곱해짐으로써 제 1 항 C0*P로부터 계산된다. 이러한 제 1 항은 계산된 비율 Pused/Pavailable 과 각각의 FPGA 칩을 위해 계산된 비율중 특정 최대 비율에 의존하기 때문에, 배치 비용 값은 더 높은 핀 사용을 위하여 더 높아지며, 다른 모든 인자는 같아진다. 시스템은 가장 낮은 배치 비용을 양산하는 배치를 선택한다. 다양한 배치를 위하여 계산된 모든 최대치중에서 가장 낮은 특정 배치를 만드는 Pused/Pavailable 는 FPGA 어레이내에서 최적 배치로서 일반적으로 고려되며, 다른 모든 인자는 같다.
게이트 사용량/이용가능성(G)은 각각의 FPGA 칩에 의해 허용가능한 게이트의 개수에 기초한다. 어레이내의 회로 CKTQ의 위치에 근거한 일 실시예에서, 만약 사용된 게이트의 수(Gused)는 특정 임계값 이상이며, 그리고 나서 제 2 배치 비용(C1*G)은 배치가 실행할 수 없다는 것을 나타내는 값으로 할당될 것이다. 유사하게, 회로 CKTQ를 함유하는 각각의 칩내에 사용된 게이트의 개수가 특정 임계값 이하이면, 그러면 이러한 제 2 항(C1*G)은 배치가 실행가능한 것을 나타내는 값으로 할당될 것이다. 그러므로, 초기에 시스템이 특정 칩내에 회로 CKTQ를 배치하기를 원하며, 칩은 회로 CKT1를 수용할 정도의 게이트가 충분치 못하다면, 시스템은 이러한 배치는 실행 가능하지 않은 비용 함수로 결론짓는다. 일반적으로, G를 위한 높은 수(예를 들면, 무한대)는 비용 함수가 회로 CKTQ의 바람직한 배치가 실행 불가능한 것을 나타내는 높은 배치 비용값을 나타낼 것이며, 다른 배치가 결정되어야 한다는 것을 보장한다.
어레이내의 회로 CKTQ의 위치에 기초한 다른 실시예에서, 비율 Gused/Gavailable 은 각 칩을 위하여 계산되며, 여기서 Gused 는 각각의 FPGA 칩내의 회로 CKTQ에 의해 사용된 게이트의 개수이며, Gavailable은 각 칩내에 이용가능한 게이트의 개수이다. 일 실시예에서, 시스템은 FPGA 어레이를 위하여 FLEX 10K100 칩을 사용한다. FLEX 10K100 칩은 대략 100,000 게이트를 포함한다. 그러므로, 이러한 실시예에서, Gavailable은 100,000 게이트와 같다. 따라서 FPGA 칩의 4×4 어레이를 위하여, 16 비율 Gused/Gavailable가 계산된다. 소정 개수의 이용가능한 게이트를 위하여 많은 게이트가 사용되면, 비율은 더 높아진다. 계산된 16 비율중에서, 가장 높은 수가 선택된다. 제 2 배치 비용값은 선택된 최대 비율 Gused/Gavailable 과 가중 상수 C1을 곱함으로써 제 2 항 C1*G로부터 계산된다. 이러한 제 2 항은 각각의 FPGA 칩에 대해 계산된 비율중에서 특정 최대 비율과 계산된 비율 Gused/Gavailable 에 의존하기 때문에, 배치 비용값은 더 높은 게이트 사용량을 위하여 더 높아지며, 다른 인자는 동일해질 것이다. 시스템은 가장 낮은 비용을 양산하는 회로 배치를 선택한다. 다양한 배치를 위하여 계산된 모든 최대치중에서 가장 낮은 최대 비율 Gused/Gavailable를 만드는 특정 배치는 일반적으로 FPGA 어레이내의 최적 배치로서 고려되며, 다른 모든 인자는 동일하다.
다른 실시예에서, 시스템은 C1을 위한 일부 값을 선택한다. 만약 비율 Gused/Gavailable가 "1"보다 더 크다면, 이러한 특정 배치는 실행 불가능하다(즉, 적어도 하나의 칩은 회로의 이러한 특정 배치를 위해 게이트가 충분치 못하다). 그 결과, 시스템은 C1을 매우 높은 수(예를 들면, 무한대)로 조절하며, 제 2 항(C1*G)는 매우 높은 수가 되며, 전체 배치 비용 값 f(P, G, D)은 매우 높아질 것이다. 다른 한편, 만약 비율 Gused/Gavailable가 "1" 이하이면, 이러한 특정 배치는 실행가능하다(즉, 각각의 칩은 회로 구현을 지원하기에 충분한 게이트를 갖는다). 그 결과, 시스템은 C1을 변형하지 않으며, 제 2 항(C1*G)는 특정 수를 결정할 것이다.
제 3항(C2*D)은 상호접속을 요구하는 모든 게이트들 사이의 홉의 개수를 나타낸다. 홉의 개수는 상호접속 매트릭스에 의존하기도 한다. 접속 매트릭스는 칩 대 칩 상호접속을 요구하는 임의의 2개 게이트 사이의 회로 경로를 결정하기 위한 기초를 제공한다. 모든 게이트가 게이트 대 게이트 상호접속을 요구하는 것은 아니다. 사용자의 최초 회로 설계와 특정 칩으로의 클러스터의 분할에 기초하여, 일부 게이트는 그것들의 개별 입력과 출력이 동일한 칩에 위치하기 때문에, 임의의 상호접속이 필요하지 않게 된다. 그러나, 다른 게이트는 그적들의 개별 입력과 출력에 연결된 로직 엘리먼트가 상이한 칩에 배치되므로 상호접속이 요구된다.
"홉"을 이해하기 위하여, 도 7의 테이블 형태의 접속 매트릭스와 도 8의 화보 형태의 도면을 참조한다. 도 8에서, 칩 F11과 칩 F14 사이의 상호접속(602)과 같은 칩들 사이의 각각의 상호접속은 44핀 또는 44 와이어 라인을 나타낸다. 다른 실시예에서, 각각의 상호접속은 44핀 이상을 나타낸다. 다른 실시예에서, 각각의 상호접속은 44핀 미만을 나타낸다.
이러한 상호접속 기술을 사용하여, 데이터는 한 칩에서 다른 칩으로 2 "홉" 또는 "점프"내에서 통과할 수 있다. 그러므로, 데이터는 상호접속부(601)를 통하여 하나의 홉내에서 칩 F11에서 칩 F12로 통과할 수 있으며, 데이터는 상호접속부(600, 606) 또는 상호접속부(603, 610)중 어느 하나를 통하여 2 홉내에서 칩 F11에서 칩 F 33으로 통과할 수 있다. 이러한 예시적인 홉은 이러한 칩의 세트들 사이의 최단 경로 홉이다. 일부 예에서, 신호는 다양한 신호를 통하여 라우트되어, 한 칩내의 게이트와 다른 칩내의 게이트 사이의 홉의 개수는 최단 경로를 초과하게 된다. 게이트-대-게이트 홉의 개수를 결정할 때 시험되어야만 하는 회로 경로는 상호접속을 요구하는 것들이다.
접속은 내부 칩 상호접속을 요구하는 게이트들 사이의 모든 홉의 합에 의해서 표현된다. 임의의 2개 칩간의 최단 경로는 도 7과 8의 접속 매트릭스를 사용하여 하나 또는 두 개의 "홉"에 의해 표현될 수 있다. 그러나, 특정 하드웨어 모델 구현을 위하여, I/O 용량은 어레이내의 임의의 2 게이트 사이의 직접적인 최단 경로 접속의 개수를 제한하며, 그러므로 이러한 신호는 그것들의 목표지점에 도달하기 위하여 더 긴 경로(2개 이상의 홉)를 통하여 라우팅되어야만 한다. 따라서, 홉의 개수는 일부 게이트-대-게이트 접속을 위하여 2개를 초과할 수 있다. 일반적으로, 모든 것은 동일하며, 홉의 더 적은 수는 더 적은 배치 비용을 가져온다.
제 3 항(즉, C2*D)은 다음과 같이 긴 형태로 표현된다.
Figure 112003005208091-pct00002
제 3 항은 가중 상수(C2)와 컴포넌트(S...)의 합계의 곱이다. 합 성분은 칩 대 칩 상호접속을 필요로 하는 사용자의 회로 설계에서 각각의 게이트 i와 게이트 j 사이의 모든 홉의 합이다. 상술한 바와 같이, 모든 게이트가 내부 칩 상호접속을 필요로 하는 것은 아니다. 내부 칩 상호접속을 요구하는 게이트 i와 게이트 j에 대해, 홉의 개수가 결정된다. 모든 게이트 i와 게이트 j에 대해, 홉의 전체 개수는 모두 합해진다.
거리 계산은 다음과 같이 정의될 수도 있다.
Figure 112003005208091-pct00003
여기서, M은 접속 매트릭스이다. 접속 매트릭스의 일 실시예는 도 7에 도시된다. 거리는 상호접속을 요구하는 각각의 게이트-대-게이트 접속을 위해 계산된다. 그러므로, 각각의 게이트 i와 게이트 j 비교를 위하여, 접속 매트릭스 M이 검사된다. 더욱, 구체적으로는
Figure 112003005208091-pct00004
매트릭스는 각각의 칩이 확인가능한 번호화되도록 어레이내의 모든 칩과 함께 설정된다. 이러한 확인 번호는 칼럼 헤더로서 매트릭스의 상부에 설정된다. 유사하게, 이러한 확인 번호는 로우 헤더로서 매트릭스의 측면을 따라 설정된다. 이러한 매트릭스내의 로우와 칼럼의 교차점에서의 특정 엔트리는 로우에 의해 확인된 칩과 칼럼에 의해서 확인된 칩 사이의 접속 데이터를 직접 제공하며, 이는 교차점에서 발생한다. 칩 i와 칩 j 사이의 임의의 거리 계산을 위하여, 매트릭스 Mij내의 엔트리는 직접 접속을 위한 "1" 또는 직접 접속이 아닌 것을 위한 "0"를 포함한다. 지수 k는 상호접속을 요구하는 칩 j내의 임의의 게이트와 칩 i내의 임의의 게이트를 상호접속하기 위하여 필요한 홉의 개수를 나타낸다.
우선, k=1을 위한 접속 매트릭스 Mij가 검사되어야만 한다. 만약 엔트리가 "1"이라면, 직접 접속은 칩 i내의 이러한 게이트를 위하여 칩 j내의 선택된 게이트에 존재한다. 그러므로, 지수 또는 홉 k=1은 Mij의 결과로서 지정되며, 이러한 결과는 이러한 2 게이트 사이의 거리이다. 이러한 지점에서, 다른 게이트-대-게이트 접속이 검사될 수 있다. 그러나, 만약 엔트리가 "0"이라면, 직접 접속이 존재하지 않는다.
직접 접속이 존재하지 않는다면, 다음 k가 검사되어야 한다. 이러한 새로운 k(즉, k=2)는 그 자체와 매트릭스 Mij를 곱함으로써 계산될 수 있다; 즉, M2 = M*M, 여기서 k=2이다.
칩 i와 칩 j를 위한 특정 로우 및 칼럼 엔트리까지 M을 곱하는 이러한 프로세스는 계산된 결과가 "1"이 될 때까지 계속되며, 지수 k는 홉의 수로서 선택된다. 동작은 매트릭스 M과 AND하며, AND된 결과를 OR하는 것을 포함한다. 매트릭스 mi,l 및 ml,j 사이의 AND 동작이 로직 "1" 값으로 나오면, 그러면 칩 i내의 선택된 게이트과 칩 j내의 선택된 게이트 사이에 홉 k를 통하여 임의의 칩 l을 통하여 액세스가 존재한다; 만약 그렇지 않으면, 이러한 특정 홉 k내에서 접속이 존재하지 않으며, 다른 계산이 필요하게 된다. 매트릭스 mi,l 및 ml,j 는 이러한 하드웨어 모델링을 위해 정의된 접속 매트릭스 M이다. 상호접속을 필요로 하는 소정의 게이트 i와 게이트 j를 위하여, 매트릭스 mi,l 내의 게이트 i를 위한 FPGA 칩을 함유하는 로우는 로직적으로 게이트 j와 ml,j 를 위한 FPGA 칩을 함유하는 칼럼에 AND된다. 개별적으로 AND된 컴포넌트는 지수 또는 홉 k을 위한 Mij 값이 "1"또는 "0" 인지를 결정하기 위하여 OR된다. 만약, 결과가 "1"이라면, 접속이 존재하며, 지수 k는 홉의 수로서 지정된다. 만약 결과가 "0"이라면, 그러면 접속은 존재하지 않는다.
삭제
삭제
이하의 예는 이러한 원칙을 도시한다. 도 35(A) 내지 35(D)를 참조하라. 도 35(A)는 클라우드(1090)으로서 표현된 사용자의 회로 설계를 도시한다. 이러한 회로 설계(1090)은 간단하거나 복합할 수 있다. 회로 설계(1090)의 부분은 OR 게이트(1091) 및 2개의 AND 게이트(1092 및 1093)을 포함한다. AND 게이트(1092, 1093)의 출력은 OR 게이트(1091)의 입력에 연결된다. 이러한 게이트(1091, 1092, 1093)는 회로 설계(1090)의 다른 부분에 연결될 수도 있다.
도 35(B)를 참조하면, 3 게이트(1091, 1092, 1093)를 함유하는 부분을 포함하는 이러한 회로(1090)의 컴포넌트는 FPGA 칩(1094, 1095, 1096)내에 구성되고 배치될 수 있다. FPGA 칩의 이러한 특정 어레이는 도시된 바와 같은 상호접속 기술을 갖는다; 즉, 상호접속(1097) 세트는 칩(1094)와 칩(1095)를 연결하며, 다른 상호접속 세트(1098)은 칩(1095)와 칩(1096)을 연결한다. 칩(1094)와 칩(1096) 사이에는 직접 상호접속이 제공되지 않는다. 이러한 회로 설계(1090)의 컴포넌트가 칩에 배치될 때, 시스템은 상이한 칩의 회로 경로를 연결하기 위하여 미리 지정된 상호접속 기술을 사용한다.
도 35(C)를 참조하면, 한 가지 가능한 구성 및 배치는 칩 (1094)내에 배치된 OR 게이트(1091), 칩(1095)내에 배치된 AND 게이트(1092) 및 칩(1096)내에 배치된 AND 게이트(1093)이다. 회로(1090)의 다른 부분들은 교육상 목적으로 도시되지 않는다. OR 게이트(1091)와 AND 게이트(1092) 사이의 접속은 상이한 칩들내에 위치하므로 상호접속이 필요하고, 이에 따라 상호접속부(1097) 세트가 사용된다. 이러한 상호접속부를 위한 홉의 수는 "1"이다. OR 게이트(1091)와 AND 게이트(1093) 사이의 액세스도 상호접속이 필요하며, 그러므로 상호접속부(1097, 1098) 세트가 사용된다. 홉의 수는 "2"이다. 이러한 배치를 위한 예의 경우, 전체 홉의 수는 "3"이며, 도시되지 않은 회로(1090)의 나머지에서 상호접속과 다른 게이트로부터의 기여가 감소된다.
도 35(D)는 다른 배치 예를 도시한다. 여기서, OR 게이트(1091)는 칩 (1094)내에 배치되며, AND 게이트(1092, 1093)는 칩(1095)내에 배치된다. 또한, 회로(1090)의 다른 부분은 교육 목적을 위해 도시되지 않는다. OR 게이트(1091) 및 AND 게이트(1092) 사이의 접속은 이들이 상이한 칩들에 위치되기 때문에 상호접속부를 요구하고, 이에 따라 상호접속부들(1097)의 세트가 사용된다. 이런 상호접속부에 대한 홉(hop)의 수는 "1"이다. OR 게이트(1091) 및 AND 게이트(1093) 사이의 접속은 상호접속부를 필요로 하여 상호접속부(1097) 세트가 사용된다. 홉의 수는 역시 "1"이다. 이런 배치예에 대하여, 홉의 총 수는 "2"이고, 도시되지 않은 회로(1090) 나머지에서 다른 게이트 및 상기 게이트들의 기여도를 미리 계산한다. 따라서, 다른 인자들이 동일하다고 가정하고 거리 D 파라미터를 바탕으로, 비용 함수는 도 35(C)의 배치예보다 도 35(D)의 배치예에 대해 보다 비용 함수를 계산한다. 그러나, 모든 다른 인자는 동일하지 않다. 보다 유사하게, 도 35(D)의 비용 함수는 게이트 사용량/이용가능성 G를 바탕으로 한다. 도 35(D)에서, 하나 이상의 게이트는 도 35(C)의 동일한 칩에 사용되기 보다 칩(1095)에서 사용된다. 게다가, 도 35(C)에 도시된 배치예에서 칩(1095)에 대한 핀 사용량/이용가능성 P은 도 35(D)에 도시된 다른 배치 예에서의 동일한 칩에 대한 핀 사용량/이용가능성 보다 크다.
거친-그레인(coarse-grain) 배치후, 평탄화된 클러스터 배치의 미세 조절은 추가로 배치 결과를 최적화할 것이다. 이런 미세-그레인(fine-grain) 배치 동작(353)은 거친-그레인 배치 동작(352)에 의해 처음에 선택된 배치를 정교하게 한다. 여기서, 초기 클러스터는 만약 배치의 최적화를 증가시키면 분할될 수 있다. 예를들어, 로직 엘리먼트 X 및 Y가 클러스터(A)의 본래 부분이고 FPGA 칩(10)을 위해 지정된다고 가정한다. 미세-그레인 배치 동작(353)으로 인해, 로직 엘리먼트(X 및 Y)는 분리된 클러스터(B) 또는 다른 클러스터(C)의 일부로서 설계되거나 FPGA 칩(2)의 배치를 위해 지정될 수 있다. 따라서, 특정 FPGA에 대한 사용자의 회로 설계를 묶는 FPGA 네트리스트(netlist)(354)가 생성된다.
클러스터 분할 및 임의의 칩내에 배치 방법의 결정은 회로 CKTQ에 대한 비용 함수 f(P, G, D)를 통하여 계산된 배치 비용을 바탕으로 이루어진다. 일실시예에서, 미세-그레인 배치 처리에 사용된 비용 함수는 거친-그레인 배치 처리에 사용된 비용 함수와 같다. 단지 두개의 배치 처리 사이의 차는 처리 자체가 아니라 배치되는 클러스트 크기이다. 거친-그레인 배치 처리는 미세-그레인 배치 처리보다 큰 클러스트를 사용한다. 다른 실시예에서, 거친-그레인 및 미세-그레인 배치 처리에 대한 비용 함수는 가중 상수(C0, C1 및 C2)를 선택하는 것과 관련하여 상기된 바와같이 서로 다르다.
삭제
삭제
삭제
배치가 종료되면, 칩 사이의 라우팅 작업(355)이 수행된다. 만약 다른 칩에배치된 회로들을 접속시키기 위한 라우팅 와이어의 수가 칩-대-칩 라우팅을 위해 할당된 FPGA 칩내의 이용 가능한 핀을 초과하면, 시분할 멀티플렉스(TDM) 회로가 사용된다. 예를 들어, 만약 각각의 FPGA 칩이 두개의 다른 FPGA 칩에 배치된 회로를 접속시키기 위해 단지 44개의 핀만이 허용되고, 특정 모델 실행에서 칩 사이에 45 와이어가 요구되면, 특정 시분할 멀티플렉스 회로는 각각의 칩에서 실행될 것이다. 이런 특정 TDM 회로는 적어도 두개의 와이어를 서로 결합시킨다. TDM 회로의 일실시예는 추후에 논의될 도 9(A), 9(B), 및 9(C)에 도시된다. 따라서, 라우팅 작업은 핀이 칩 사이에서 시분할 멀티플렉스로 배열되기 때문에 항상 완성될 수 있다.
각각의 FPGA의 배치 및 라우팅이 결정되면, 각각의 FPGA는 최적화된 작업 회로로 구성되고 따라서, 시스템은 "비트스트림" 컨피규레이션 파일(356)을 생성한다. Altera 기술에서, 시스템은 하나 이상의 프로그래머 오브젝트 파일(-pof)을 생성한다. 다른 생성된 파일은 SRAM 오브젝트 파일(.sof), JECED 파일(.jed), 16진법(인텔-포맷) 파일(.hex) 및 테이블 텍스트 파일(.ttf)을 포함한다. Altera MAX+PLUS Ⅱ 프로그래머는 FPGA 어레이를 프로그램하기 위하여 Altera 하드웨어 프로그래머블 장치와 함께 POF, SOF 및 JEDEC 파일을 사용한다. 선택적으로, 시스템은 하나 이상의 로(raw) 이진 파일(.rbf)을 생성한다. CPU는 .rbf 파일을 변경하고 PCI 버스를 통하여 FPGA 어레이를 프로그램한다.
이런 포인트에서, 구성된 하드웨어는 하드웨어 스타트-업(start-up)(370)을 준비한다. 이것은 리컨피규러블 보드상에서 하드웨어 모델의 자동 구조를 종료한다.
하나의 핀 출력만이 실제로 사용되도록 핀 출력 그룹이 함께 시분할 멀티플렉스되도록 하는 TDM 회로를 다시 참조하여, TDM 회로는 필수적으로 적어도 두개의 입력(두개의 와이어에 대해)을 가진 멀티플렉서, 하나의 출력, 및 선택기 신호로서 루프에 구성된 레지스터 커플이다. 만약 SEmulation 시스템이 서로 그룹지도록 보다 많은 와이어를 요구하면, 보다 많은 입력 및 루프 레지스터가 제공될수있다. TDM 회로에 대한 선택기 신호처럼, 루프에 구성된 몇몇 레지스터는 멀티플렉서에 대한 적당한 신호를 제공하여, 임의의 시간 주기에, 상기 입력중 하나는 출력으로서 선택되고, 다른 시간 주기에 다른 입력은 출력으로서 선택된다. 따라서, TDM 회로는 칩 사이의 하나의 출력 와이어만을 사용하도록 관리하여, 이런 실시예에 대한 특정 칩에서 실행된 회로의 하드웨어 모델은 45 핀 대신 44 핀을 사용하여 달성된다. 따라서, 라우팅 작업은 상기 핀들이 칩에서 시분할 멀티플렉스 형태로 분할될 수 있기 때문에 항상 종료될 수 있다.
삭제
삭제
삭제
도 9(A)는 핀-아웃 문제의 개요를 도시한다. 이것은 TDM 회로를 요구하기 때문에, 도 9(B)는 전송측에 대한 TDM 회로를 제공하고, 도 9(C)는 수신측에 대한 TDM 회로를 제공한다. 이들 도면은 SEmulation 시스템이 칩 사이에 두개의 와이어 대신 하나의 와이어를 요구하는 단지 하나의 특정 실시예를 도시한다. 만약 두개 이상의 와이어가 시간 멀티플렉스 배열에 함께 결합되야 한다면, 당업자는 하기 기술로 인해 적당한 변형을 형성할 수 있다.
도 9(A)는 SEmulation 시스템이 TDM 구성에서 두개의 와이어를 결합하는 TDM 회로의 일실시예를 도시한다. 두개의 칩(990 및 991)이 제공된다. 완성된 사용자 회로 설계의 일부인 회로(960)는 칩(991)에서 모델링 및 배치된다. 완성된 사용자 회로 설계의 일부인 회로(973)는 칩(990)에서 모델링 및 배치된다. 상호접속부(994), 상호접속부(992), 및 상호접속부(993)의 그룹을 포함하는 몇몇 상호접속부는 회로(960 및 973) 사이에 제공된다. 이런 실시예에서 상호접속부의 수는 총 45이다. 만약 일실시예에서, 각각의 칩이 이들 상호접속부를 위해 단지 44 핀만을 제공하면, 본 발명의 하나의 실시예는 이들 칩(990 및 991) 사이에 단지 하나의 상호접속부만을 요구하도록 시분할 멀티플렉스되는 적어도 두개의 상호접속부를 제공한다.
이런 실시예에서, 상호접속부(994)의 그룹은 43 핀을 계속 사용할것이다. 44번째 및 마지막 핀에 대하여, 본 발명의 일실시예에 따른 TDM 회로는 시분할 멀티플렉스된 형태로 함께 상호접속부(992 및 993)를 결합하기 위하여 사용될 수 있다.
도 9(B)는 TDM 회로의 일실시예를 도시한다. FPGA 칩(991)내의 모델링된 회로(또는 그것의 일부)(960)는 와이어(966 및 967)상에 두개의 신호를 제공한다. 회로(960)에서 이들 와이어(966 및 967)는 출력이다. 이들 출력은 칩(990)(도 9A 및 9C 참조)의 모델링된 회로(973)에 일반적으로 결합된다. 그러나, 이들 두개의 출력 와이어(966 및 967)에 대하여 단지 하나의 핀의 이용 가능성은 직접적인 핀 대 핀 접속을 방해한다. 출력(966 및 967)은 다른 칩으로 단일방향으로 전송되기 때문에, 적당한 전송 및 수신기 TDM 회로는 이들 라인을 서로 결합하도록 제공된다. 전송측 TDM 회로의 일실시예는 도 9(B)에 도시된다.
전송측 TDM 회로는 AND 게이트(961 및 962)를 포함하고, 상기 게이트들의 각각의 출력(970 및 971)은 OR 게이트(963)의 입력에 결합된다. OR 게이트(963)의 출력(972)은 하나의 핀에 할당되고 다른 칩(990)에 액세스된 칩의 출력이다. AND 게이트(961 및 962)로의 하나의 세트의 입력(966 및 967)은 각각 회로 모델(960)에 의해 제공된다. 다른 세트의 입력(968 및 969)은 시분할 멀티플렉스 선택 신호로서 기능하는 루프 레지스터 수단에 의해 제공된다.
루프 레지스터 방법은 레지스터(964 및 965)를 포함한다. 레지스터(964)의 출력(995)은 레지스터(965)의 입력 및 AND 게이트(961)의 입력(968)에 제공된다. 레지스터(965)의 출력(996)은 레지스터(964)의 입력 및 AND 게이트(962)의 입력(968)에 제공된다. 각각의 레지스터(964 및 965)는 공통 클럭 소스에 의해 제어된다. 임의의 주어진 시간에, 단지 하나의 출력(995 또는 996)은 로직 "1"을 제공한다. 다른 출력은 로직 "0"을 제공한다. 따라서, 각각의 클럭 에지후, 로직 "1"은 출력(995 및 996) 사이에서 시프트한다. 이것은 차례로 AND 게이트(961)에 대해 "1" 또는 AND 게이트(962)에 대해 "1"을 제공하고, 와이어(966) 또는 와이어(967)중 어느 하나를 "선택"한다. 따라서, 와이어(972)상의 데이터는 와이어(966) 또는 와이어(967)상의 회로(960)로부터 출력된다.
TDM 회로의 수신측 일실시예는 도 9(C)에 도시된다. 칩(991)(도 9(A) 및 9(B))에서 와이어(966 및 967)상 회로(960)로부터의 신호는 도 9(C)의 회로(973)에 대한 적당한 와이어(985 또는 986)에 결합되어야 한다. 칩(991)로부터의 시분할 멀티플렉스 신호는 와이어/핀(978)로부터 진입한다. 수신측 TDM 회로는 와이어/핀(978)상 이들 신호를 회로(973)에 대한 적당한 와이어(985 및 986)에 결합한다.
TDM 회로는 입력 레지스터(974 및 975)를 포함한다. 와이어/핀(978)상 신호는 각각 와이어(979 및 980)를 통하여 이들 입력 레지스터(974 및 975)에 제공된다. 입력 레지스터(974)의 출력(985)은 회로(973)의 적당한 포트에 제공된다. 유사하게, 입력 레지스터(975)의 출력(986)은 회로(973)의 적당한 포트에 제공된다. 이들 입력 레지스터(974 및 975)는 루프 레지스터(976 및 977)에 의해 제어된다.
레지스터(976)의 출력(984)은 레지스터(977)의 입력 및 레지스터(974)의 클럭 입력(981)에 결합된다. 레지스터(977)의 출력(983)은 레지스터(976)의 입력 및 레지스터(975)의 클럭 입력(982)에 결합된다. 각각의 레지스터(976 및 977)는 공통 클럭 소스에 의해 제어된다. 임의의 주어진 시간에서, 단지 하나의 인에이블 입력(981 또는 982)은 로직 "1"이 된다. 다른 입력은 로직 "0"이 된다. 따라서, 각각의 클럭 에지후, 로직 "1"은 인에이블 입력(981) 및 출력(982) 사이에서 시프트한다. 이것은 교대로 와이어(979 또는 980)상의 신호를 "선택"한다. 따라서, 회로(960)로부터 와이어(978) 상의 데이터가 와이어(985 또는 986)를 통해 회로(973)에 적절히 결합될 수 있다.
도 4와 관련하여 간략히 논의된 바와같이, 본 발명의 일실시예에 따른 어드레스 포인터는 지금 더 상세히 논의될 것이다. 반복하기 위하여, 몇몇 어드레스 포인터는 하드웨어 모델의 각각의 FPGA 칩에 배치된다. 일반적으로, 어드레스 포인터를 실행하는 제 1 목적은 32 비트 PCI 버스(328)(도 10 참조)를 통하여 하드웨어 모델(325)내의 특정 FPGA 칩 및 소프트웨어 모델(315) 사이에서 데이터를 전달하기 위하여 시스템을 인에이블하는 것이다. 보다 특히, 어드레스 포인터의 제 1 목적은 32 비트 PCI 버스의 대역폭 제한으로 인해 FPGA 칩의 뱅크(326a-326d)중 각각의 FPGA 칩과 소프트웨어/하드웨어 경계내의 각각의 어드레스 공간(즉, REG, S2H, H2S 및 CLK) 사이에서 데이터 전달을 선택적으로 제어하는 것이다. 비록 64 비트 PCI 버스가 실행되더라도, 이들 어드레스 포인터는 데이터 전달을 제어하기 위하여 여전히 필요하다. 따라서, 만약 소프트웨어 모델이 5 어드레스 공간(즉, REG 판독, REG 기록, S2H 판독, H2S 기록, 및 CLK 기록)을 가지면, 각각의 FPGA 칩은 이들 5 어드레스 공간에 해당하는 5 어드레스 포인터를 가진다. 각각의 FPGA는 처리되는 선택된 어드레스 공간내의 특정 선택된 워드가 임의의 하나 이상의 FPGA 칩에 잔류하기 때문에 이들 5 어드레스 포인터를 필요로 한다.
FPGA I/O 컨트롤러(381)는 공간 지수(SPACE index)를 사용함으로써 소프트웨어/하드웨어 경계에 해당하는 특정 어드레스 공간(즉, REG, S2H, H2S 및 CLK)을 선택한다. 일단 어드레스 공간이 선택되면, 각각의 FPGA 칩내의 선택된 어드레스 공간에 해당하는 특정 어드레스 포인터는 선택된 어드레스 공간내의 동일한 워드에 해당하는 특정 워드를 선택한다. 각각의 FPGA 칩내의 어드레스 포인터 및 소프트웨어/하드웨어 경계내의 어드레스 공간의 최대 크기는 선택된 FPGA 칩의 메모리/워드 용량에 따른다. 예를들어, 본 발명의 일실시예는 FPGA 칩의 Altera FLEX 10K 패밀리를 사용한다. 따라서, 각각의 어드레스 공간에 대한 평가된 최대 크기는 : REG, 3,000 워드; CLK, 1 워드; S2H, 10 워드; 및 H2S, 10 워드이다. 각각의 FPGA 칩은 대략 100 워드를 수용할 수 있다.
삭제
삭제
SEmulation 시스템은 사용자가 시작, 종료하고, 입력 값을 발생하고, SEmulation 처리시 임의의 시간에 값을 검사하도록 하는 특징을 가진다. 시뮬레이터의 적응성을 제공하기 위하여, SEmulator는 컴포넌트의 내부 구현형태가 소프트웨어인지 하드웨어인지에 관계없이 사용자에게 모든 컴포넌트이 가시적이어야 한다. 소프트웨어에서, 결합 컴포넌트는 모델링되고 값은 시뮬레이션 프로세스동안 계산된다. 따라서, 이들 값은 시뮬레이션 프로세스 동안 임의의 시간에 사용자가 액세스하도록 완전히 "가시적"이다.
그러나, 하드웨어 모델에서 결합 컴포넌트는 직접적으로 "가시적"이지 않다. 비록 레지스터가 소프트웨어 커널에 의해 쉽고 직접적으로 액세스 가능(즉, 판독/기록) 하지만, 결합 컴포넌트은 결정하기가 보다 어렵다. FPGA에서, 대부분의 결합 컴포넌트은 룩업 테이블로서 모델링되어 게이트 활용도를 높인다. 결과적으로, 룩업 테이블 맵핑은 효과적인 하드웨어 모델링을 제공하지만 대부분의 조합 로직 신호의 가시도(visibility)를 손상시킨다.
결합 컴포넌트의 가시도 부족으로 인한 이들 문제에도 불구하고, SEmulation 시스템은 하드웨어 가속 모드후 사용자에 의한 검사를 위해 결합 컴포넌트을 보강하거나 재생성할 수 있다. 만약 사용자의 회로 설계가 단지 결합 및 레지스터 컴포넌트만을 가지면, 모든 결합 컴포넌트의 값은 레지스터 컴포넌트으로부터 유도될수있다. 즉, 결합 컴포넌트은 회로 설계에 의해 요구된 특정 로직 함수에 따라 다양한 배열의 레지스터로부터 구성되고, 상기 레지스터를 포함한다. SEmulator는 레지스터 및 결합 컴포넌트만의 하드웨어 모델을 가지며, 결과적으로 SEmulator는 하드웨어 모델로부터 모든 레지스터 값을 판독하고 그 다음 모든 결합 컴포넌트을 보강하거나 재생성한다. 이런 재생성 처리를 수행하기 위하여 요구된 오버헤드로 인해, 결합 컴포넌트 재생성은 모든 시간에서 수행되지 못하고; 오히려, 사용자에 의해 요구시에만 수행된다. 실제로, 하드웨어 모델을 사용하는 장점중 하나는 시뮬레이션 프로세스를 가속시키는 것이다. 모든 사이클(또는 심지어 대부분의 사이클)에서 결합 컴포넌트 값을 결정하는 것은 시뮬레이션 속도를 추가로 감소시킨다. 임의의 이벤트에서, 레지스터 값 단독의 검사는 대부분의 시뮬레이션 분석을 위해 충분해야 한다.
레지스터 값으로부터 결합 컴포넌트 값을 재생성하는 처리는 SEmulation 시스템가 하드웨어 가속 모드 또는 ICE 모드에 있다는 것을 보장한다. 그렇지 않으면, 소프트웨어 시뮬레이션은 사용자에게 결합 컴포넌트 값을 제공한다. SEmulation 시스템은 하드웨어 가속의 시작 전에 소프트웨어 모델에 잔류하는 레지스터 값 뿐만 아니라 결합 컴포넌트 값을 유지한다. 이들 값은 시스템에 의한 추가 오버 기록 동작때까지 소프트웨어 모델에 잔류한다. 소프트웨어 모델이 하드웨어 가속 시작 바로전 시간 주기로부터 결합 컴포넌트 값 및 레지스터 값을 가지기 때문에, 결합 컴포넌트 재생성 처리는 업데이트된 입력 레지스터 값에 응답하여 소프트웨어 모델의 일부 값 또는 모든 값을 업데이트하는 것을 포함한다.
결합 컴포넌트 생성 처리는 다음과 같다: 첫째, 만약 사용자에 의해 요구되면, 소프트웨어 커널은 FPGA 칩으로부터 REG 버퍼로 하드웨어 레지스터 컴포넌트의 모든 출력 값을 판독한다. 이런 처리는 어드레스 포인터의 체인을 통하여 REG 어드레스 공간으로 FPGA 칩내의 레지스터 값의 DMA 전달을 포함한다. 소프트웨어/하드웨어 경계내에 있는 REG 버퍼로 하드웨어 모델내에 있는 레지스터 값을 배치하는 것은 소프트웨어 모델이 추가 처리를 위하여 데이터를 액세스하도록 한다.
둘째, 소프트웨어 커널은 하드웨어 가속이 시작되기전 및 하드웨어 가속이 된후 레지스터 값을 비교한다. 만약 하드웨어 가속전 레지스터값이 하드웨어 가속후 값과 동일하면, 결합된 컴포넌트의 값은 변하지 않는다. 재생성되는 결합 컴포넌트에 대한 시간 및 리소스를 연장하는 대신, 이들 값은 하드웨어 가속 바로전 시간으로부터 저장된 결합 컴포넌트 값을 가진 소프트웨어 모델로부터 판독될 수 있다. 다른 한편, 만약 하나 이상의 이들 레지스터 값이 변하면, 변화된 레지스터 값에 따르는 하나 이상의 결합 컴포넌트는 값을 변화시킬 수 있다. 이들 결합 컴포넌트는 다음 제 3 단계를 통하여 재생성되어야 한다.
셋째, 가속전 및 가속후 비교로부터 다른 값을 가진 레지스터에 대하여, 소프트웨어 커널은 팬-아웃(fan-out) 결합 컴포넌트를 이벤트 큐에 스케쥴링한다. 여기서, 가속동안 값을 변화시킨 레지스터는 이벤트를 검출한다. 보다 유사하게, 이들 변화된 레지스터 값에 따른 이들 결합 컴포넌트은 다른 값을 생성할 것이다. 이들 결합 컴포넌트의 값의 임의의 변화에도 불구하고, 상기 시스템은 이들 결합 컴포넌트이 다음 단계에서 이들 변화된 레지스터 값을 평가하는 것을 보장한다.
넷째, 그다음 소프트웨어 커널은 레지스터로부터의 값 변화를 소프트웨어 모델의 모든 결합 컴포넌트로 전달하기 위하여 표준 이벤트 시뮬레이션 알고리즘을 실행한다. 다른 말로, 가속전에서 가속후 시간 간격동안 변화된 레지스터 값은 이들 레지스터 값에 의존하는 하부쪽 모든 결합 컴포넌트로 전달된다. 그 다음 이들 결합 컴포넌트는 이들 새로운 레지스터 값을 평가한다. 팬-아웃 및 진행 원리에 따라, 변화된 레지스터 값에 차례로 직접적으로 의존하는 제 1 레벨 결합 컴포넌트으로부터 아래에 배치된 다른 제 2 레벨 결합 컴포넌트는 변화된 데이터를 평가하여야 한다. 영향을 받을 수 있는 아래에 배치된 다른 컴포넌트로의 레지스터 값의 이런 진행은 팬-아웃 네트워크의 목적에 공헌한다. 따라서, 아래에 배치되고 변화된 레지스터 값에 의해 영향을 받는 이들 결합 컴포넌트는 소프트웨어 모델에서 업데이트된다. 결합 컴포넌트 값 어느 것도 영향을 받지 않는다. 따라서, 만약 가속전에서 가속후의 시간 간격 동안 변화된 단지 하나의 레지스터 값, 및 단지 하나의 결합 컴포넌트이 이런 레지스터 값 변화에 의해 영향을 받으면, 단지 이런 결합 컴포넌트은 이런 변화된 레지스터 값을 기반으로 값을 재평가할 것이다. 모델링된 회로의 다른 부분은 영향을 받지 않을 것이다. 이런 작은 변화를 위해, 결합 컴포넌트 재생성 처리는 비교적 빠르게 발생할 것이다.
마지막으로, 이벤트 진행이 종료될때, 시스템은 임의의 운영 모드를 위해 준비된다. 일반적으로, 사용자는 긴 실행후 값을 검사하고자 한다. 결합 컴포넌트 재생성 처리후, 사용자는 디버그/테스트 목적을 위해 순수 소프트웨어 시뮬레이션을 계속한다. 그러나, 다른 시점에서, 사용자는 다음 목표된 포인트로 하드웨어 가속한다. 다른 경우에도, 사용자는 ICE 모드로 추가로 진행하고자 한다.
요약하여, 결합 컴포넌트 재생성은 소프트웨어 모델에서 결합 컴포넌트 값을 업데이트하기 위하여 레지스터 값을 사용하는 것을 포함한다. 임의의 레지스터 값이 변화될때, 변화된 레지스터 값은 값이 업데이트될때 레지스터의 팬-아웃 네트워크를 통하여 진행될 것이다. 레지스터 값이 변화되지 않을때, 소프트웨어 모델 값은 변하지 않을것이고, 따라서 시스템은 결합 컴포넌트를 재성할 필요가 없다. 일반적으로, 하드웨어 가속 운행은 몇몇 시간 동안 발생할것이다. 결과적으로, 많은 레지스터 값은 변화하여, 변화된 값을 가지는 이들 레지스터의 팬-아웃 네트워크 하부에 배치된 많은 결합 컴포넌트 값에 영향을 미친다. 이런 경우, 결합 컴포넌트 재생성 처리는 비교적 느릴수있다. 다른 경우, 하드웨어 가속 운행후, 단지 몇개의 레지스터 값이 변할수있다. 변화된 레지스터 값을 가진 레지스터에 대한 팬-아웃 네트워크는 작을수있고, 결합 컴포넌트 재생성 처리는 비교적 빠를 수 있다.
삭제
삭제
Ⅳ. 타켓 시스템 모드를 사용한 에뮬레이션(emulation)
도 10은 본 발명의 일실시예에 따른 SEmulation 시스템 아키텍쳐를 도시한다. 도 10은 시스템이 회로내 에뮬레이션 모드에서 동작할때 소프트웨어 모델, 하드웨어 모델, 에뮬레이션 인터페이스 및 타켓 시스템 사이의 관계를 도시한다. 상기된 바와 같이, SEmulation 시스템은 PCI 버스 같은 고속 버스에 의해 상호접속되는 범용 마이크로프로세서 및 리컨피규러블 하드웨어 보드를 포함한다. SEmulation 시스템은 사용자 회로 설계를 컴파일하고 하드웨어 모델 대 리컨피규러블 보드 맵핑 처리 동안 에뮬레이션 하드웨어 컨피규레이션 데이터를 생성한다. 그 다음 사용자는 범용 프로세서를 통하여 회로를 시뮬레이션하고, 시뮬레이션 프로세스를 하드웨어 가속하고, 에뮬레이션 인터페이스를 통하여 타켓 시스템으로 회로 설계를 에뮬레이션하고, 추후 포스트 시뮬레이션 분석을 수행한다.
소프트웨어 모델(315) 및 하드웨어 모델(325)은 컴파일 처리 동안 결정된다. 에뮬레이션 인터페이스(382) 및 타켓 시스템(387)은 회로내 에뮬레이션 모드 동안 시스템에 제공된다. 사용자의 분리하에서, 에뮬레이션 인터페이스 및 타켓 시스템은 최초에 시스템에 결합될 필요가 없다.
소프트웨어 모델(315)은 모든 시스템, 및 소프트웨어/하드웨어 경계-REG, S2H, H2S 및 CLK에 대한 4 어드레스 공간을 제어하는 커널(316)을 포함한다. SEmulation 시스템은 하드웨어 모델을 다른 컴포넌트 타입 및 제어 기능에 따른 메인 메모리의 4 어드레스 공간에 맵핑한다 : REG 공간(317)은 레지스터 컴포넌트을 위해 설계되고; CLK 공간(320)은 소프트웨어 클럭을 위해 설계되고; S2H 공간(318)은 하드웨어 모델에 대한 소프트웨어 테스트 벤치 컴포넌트의 출력을 위해 설계되고; H2S 공간(319)은 소프트웨어 테스트 벤치 컴포넌트에 대한 하드웨어 모델의 출력을 위하여 설계된다. 이들 전용 I/O 버퍼 공간은 시스템 초기화 시간 동안 커널의 메인 메모리 공간에 맵핑된다.
하드웨어 모델은 FPGA 칩 및 FPGA I/O 컨트롤러(327)의 FPGA 칩의 몇몇 뱅크(326a-326d)를 포함한다. 각각의 뱅크(예를들어, 326b)는 적어도 하나의 FPGA 칩을 포함한다. 일 실시예에서, 각각의 뱅크는 4 FPGA 칩으로 구성된다. FPGA 칩의 4×4 어레이에서, 뱅크(326b 및 326d)는 로우 뱅크이고 뱅크(326a 및 326c)는 하이 뱅크일수있다. 특정 칩 및 그것의 상호접속부에 대한 특정 하드웨어 모델링 사용자 회로 설계 엘리먼트의 맵핑, 배치 및 라우팅은 도 6을 참조하여 논의된다. 소프트웨어 모델(315) 및 하드웨어 모델(325) 사이의 상호접속부(328)는 PCI 버스 시스템이다. 하드웨어 모델은 PCI 버스의 작업처리량을 유지하는 동안 PCI 버스 및 FPGA 칩의 뱅크(326a-326d) 사이의 데이터 트래픽을 제어하기 위하여 PCI 인터페이스(380) 및 제어 유닛(381)를 포함한다. 각각의 FPGA 칩은 추가로 몇몇 어드레스 포인터를 포함하고, 여기서 각각의 어드레스 포인터는 소프트웨어/하드웨어 경계내의 각각의 어드레스 공간(즉, REG, S2H, H2S 및 CLK)에 해당하여,FPGA 칩의 뱅크(326a-326d)내에서 각각의 이들 어드레스 공간 및 각각의 FPGA 칩 사이의 데이터를 결합한다.
소프트웨어 모델(315) 및 하드웨어 모델(325) 사이의 통신은 하드웨어 모델의 DMA 엔진 또는 어드레스 포인터를 통하여 발생한다. 선택적으로, 통신은 하드웨어 모델에서 어드레스 포인트 및 DMA 엔진 양쪽을 통하여 발생한다. 커널은 직접적인 맵핑 I/O 컨트롤 레지스터를 통하여 평가 요구와 함께 DMA 전달을 시작한다. REG 공간(317), CLK 공간(320), S2H 공간(318), 및 H2S 공간(319)은 소프트웨어 모델(315) 및 하드웨어 모델(325) 사이의 데이터 전달을 위하여 각각 I/O 데이터 경로 라인(321, 322, 323 및 324)을 사용한다.
이중 버퍼링은 이들 공간이 업데이트 처리를 종료하기 위하여 몇몇 클럭 사이클이 걸리기 때문에 S2H 및 CLK 공간에 대한 모든 1차 입력을 위해 요구된다. 이중 버퍼링은 레이스 조건을 유발할수있는 내부 하드웨어 모델 상태를 혼란시키는 것을 방지한다.
S2H 및 CLK 공간은 커널로부터 하드웨어 모델로의 1차 입력이다. 상기된 바와같이, 하드웨어 모델은 사용자의회로 설계의 결합 컴포넌트 및 레지스터 컴포넌트 모두를 실질적으로 홀딩한다. 게다가, 소프트웨어 클럭은 소프트웨어로 모델링되고 하드웨어 모델과 인터페이스하도록 CLK I/O 어드레스에 제공된다. 커널은 시뮬레이션 시간을 앞당기고, 액티브 테스트 벤치 컴포넌트을 찾고, 클럭 컴포넌트을 평가한다. 임의의 클럭 에지가 커널에 의해 검출될때, 레지스터 및 메모리는 업데이트되고 결합 컴포넌트를 통해 값은 전달된다. 따라서, 이들 공간에서 값의 임의 변화는 만약 하드웨어 가속 모드가 선택되면 하드웨어 모델을 트리거하여 로직 상태를 변경시킨다.
내부-회로 에뮬레이션 모드 동안, 에뮬레이션 인터페이스(382)는 PCI 버스(328)에 결합되어 하드웨어 모델(325) 및 소프트웨어 모델(315)와 통신한다. 커널(316)은 하드웨어 가속 시뮬레이션 모드 및 회로 에뮬레이션 모드동안 소프트웨어 모델뿐 아니라, 하드웨어 모델을 제어한다. 에뮬레이션 인터페이스(382)은 케이블(390)을 통하여 타켓 시스템(387)에 결합된다. 에뮬레이션 인터페이스(382)는 인터페이스 포트(385), 에뮬레이션 I/O 제어(386), 타켓 대 하드웨어 I/O 버퍼(T2H)(384), 및 하드웨어 대 타켓 I/O 버퍼(H2T)(383)를 포함한다.
타켓 시스템(387)은 커넥터(389), 신호 입출력 인터페이스 소켓(388), 및 타켓 시스템(387)의 일부인 다른 모듈 또는 칩을 포함한다. 예를들어, 타켓 시스템(387)은 EGA 비디오 컨트롤러일수있고 사용자의 회로 설계는 하나의 특정 I/O 컨트롤러 회로일수있다. EGA 비디오 컨트롤러에 대한 I/O 컨트롤러의 사용자 회로 설계는 소프트웨어 모델(315)에서 완전히 모델링되고 하드웨어 모델(325)에서 부분적으로 모델링된다.
소프트웨어 모델(315)의 커널(316)은 내부-회로 에뮬레이션 모드를 제어한다. 에뮬레이션 클럭의 제어는 소프트웨어 클럭을 통한 소프트웨어, 게이트 클럭 로직, 및 게이트 데이터 로직에 존재하여 셋업 및 홀딩 시간은 회로내 에뮬레이션 모드동안 발생할 것이다. 따라서, 사용자는 회로내 에뮬레이션 처리 동안 임의의 시간에 시작, 정지, 단일 단계, 값 발생, 및 값 검사를 할 수 있다.
삭제
삭제
삭제
삭제
이런 작업을 위해, 타켓 시스템 및 하드웨어 모델 사이의 모든 클럭 노드는 식별된다. 타켓 시스템에서 클럭 생성기는 디스에이블되고, 타켓 시스템으로부터의 클럭 포트는 비접속되거나, 타켓 시스템으로부터의 클럭 신호는 하드웨어 모델에 도달되는 것이 방지된다. 대신, 클럭 신호는 소프트웨어 생성 클럭의 다른 형태 또는 테스트 벤치 프로세스로부터 시작하여, 소프트웨어 커널은 액티브 클럭 에지를 검출하고 따라서 데이터 평가를 트리거한다. 따라서, ICE 모드에서, SEmulation 시스템은 소프트웨어 클럭을 사용하여 타켓 시스템 클럭 대신 하드웨어 모델을 제어한다.
타켓 시스템의 환경내에서 사용자 회로 설계 동작 시뮬레이션하기 위하여, 타켓 시스템(40) 및 모델링된 회로 설계 사이의 1차 입력(신호 입력) 및 출력(신호 출력) 신호는 평가를 위하여 하드웨어 모델(325)에 제공된다. 이것은 두개의 버퍼, 즉 타켓 대 하드웨어 버퍼(T2H)(384) 및 하드웨어 대 타켓 버퍼(H2T)(383)를 통하여 달성된다. 타켓 시스템(387)은 입력 신호를 하드웨어 모델(325)에 인가하기 위하여 T2H 버퍼(384)를 사용한다. 하드웨어 모델(325)은 H2T 버퍼(383)를 사용하여 출력 신호를 타켓 시스템(387)에 전달한다. 이런 내부-회로 에뮬레이션 모드에서, 하드웨어 모델은 S2H 및 H2S 버퍼 대신 T2H 및 H2T 버퍼를 통하여 I/O 신호를 송신 및 수신한다. 왜냐하면, 시스템은 데이터를 평가하기 위하여 소프트웨어 모델(315)내의 테스트 벤치 프로세스 대신 타켓 시스템(387)을 사용하기 때문이다. 타켓 시스템이 소프트웨어 시뮬레이션의 속도보다 대체로 빠르게 실행되기 때문에, 내부-회로 에뮬레이션 모드는 보다 높은 속도로 실행될 것이다. 이들 입력 및 출력 신호의 전송은 PCI 버스(328)에서 발생한다.
게다가, 버스(61)는 에뮬레이션 인터페이스(382) 및 하드웨어 모델(325) 사이에 제공된다. 이 버스는 도 1의 버스(61)와 유사하다. 이 버스(61)는 에뮬레이션 인터페이스(382) 및 하드웨어 모델(325)가 T2H 버퍼(384) 및 H2T 버퍼(383)을 통하여 통신하도록 하게 한다.
통상적으로, 타켓 시스템(387)은 PCI 버스에 결합되지 않는다. 그러나, 상기 결합은 만약 에뮬레이션 인터페이스(382)가 타켓 시스템(387)의 설계에 통합되면 실현될수있다. 이러한 셋업에서, 케이블(390)은 없을 것이다. 타켓 시스템(387) 및 하드웨어 모델(325) 사이의 신호는 여전히 에뮬레이션 인터페이스를 통하여 통과할 것이다.
삭제
삭제
삭제
Ⅴ. 포스트 시뮬레이션 분석 모드
본 발명의 SEumlation 시스템은 값 변화 덤프(VCD)를 지원하고, 포스트 시뮬레이션 분석을 위해 폭넓게 사용된 시뮬레이터 기능을 지원한다. 필수적으로, VCD는 추후 포스트 시뮬레이션 분석동안, 사용자가 시뮬레이션 프로세스의 다양한 입력 및 결과적인 출력을 검토할 수 있도록 하드웨어 모델의 모든 입력 및 선택된 레지스터 출력의 히스토리 기록을 제공한다. VCD를 지원하기 위하여, 시스템은 하드웨어 모델에 대한 모든 입력을 로그한다. 출력에 대하여, 시스템은 사용자 정의 로깅 주파수(예를들어, 1/10,000 기록/사이클)에서 하드웨어 레지스터 컴포넌트의 모든 값을 로그한다. 로깅 주파수는 출력 값을 기록하는 방법을 결정한다. 1/10,000 기록/사이클의 로깅 주파수에 대하여, 출력 값에는 매 10,000 사이클이 기록된다. 로깅 주파수가 높아질수록, 추후 포스트 시뮬레이션 분석을 위하여 정보가 보다 많이 기록된다. 로깅 주파수가 낮아질수록, 추후 포스트 시뮬레이션 분석을 위하여 정보가 보다 적게 저장된다. 선택된 로깅 주파수가 SEmulation 속도와 인과 관계를 가지기 때문에, 사용자는 주의깊게 로깅 주파수를 선택하여야 한다. 보다 높은 로깅 주파수는 추가 시뮬레이션이 수행되기 전에 메모리에 대한 I/O 동작을 수행함으로써 출력 데이터를 기록하기 위하여 시스템이 시간과 자원을 소비하기 때문에 SEmulation 속도를 감소시킨다.
포스트 시뮬레이션 분석과 관련하여, 사용자는 시뮬레이션이 목표되는 특정 포인트를 선택한다. 만약 로깅 주파수가 1/500 기록/사이클이면, 레지스터 값은 매 500 사이클에서 포인트 0, 500, 1000, 1500 등을 기록한다. 만약 사용자가 포인트 610에서의 결과를 원하면, 예를들어 사용자는 기록된 포인트 500을 선택하고, 시뮬레이션이 포인트 610에 도달할때까지 시뮬레이션한다. 분석 단계 동안, 분석 속도는 사용자가 처음에 포인트 500에 대한 데이터를 액세스하고 그 다음 포인트 610으로 시뮬레이션하기 때문에 시뮬레이션 속도와 같다. 보다 높은 로깅 주파수에서, 보다 많은 데이터가 포스트 시뮬레이션 분석을 위하여 저장된다는 것이 주의된다. 따라서, 1/300 기록/사이클의 로깅 주파수에 대하여, 매 300 사이클에서 포인트 0, 300, 600, 900 등에 대한 데이터가 기록된다. 포인트 610에서의 결과를 얻기 위하여, 사용자는 처음에 기록된 포인트 600을 선택하고, 포인트 610으로 시뮬레이션한다. 로깅 주파수가 1/500보다 오히려 1/300일때 포스트 시뮬레이션 분석 동안 목표된 포인트 610으로 보다 빨리 도달한다. 그러나, 이것은 항상 그렇지는 않다. 로깅 주파수와 결합하여 특정 분석 포인트는 얼마나 빨리 포스트 시뮬레이션 분석 포인트에 도달하는지를 결정한다. 예를 들어, 시스템은 만약 VCD 로깅 주파수가 1/300보다 오히려 1/500이면 보다 빨리 포인트 523에 도달할 수 있다.
그 다음 사용자는 SEmulation 이후 모든 하드웨어 컴포넌트의 값 변화 덤프(VCD)를 계산하기 위해 하드웨어 모델에 대한 입력 로그를 가진 소프트웨어 시뮬레이션을 운행함으로써 분석을 수행한다. 사용자는 적시에 임의의 레지스터 로그 포인트를 선택하고 적시에 로그 포인트가 진행하는 값 변화 덤프를 시작한다. 이런 값 변화 덤프(VCD) 방법은 포스트 시뮬레이션 분석을 위해 임의의 시뮬레이션 파형 뷰어에 링크할 수 있다.
주문형 VCD 시스템
본 발명의 일 실시예는 시뮬레이션 리턴없이 주문형 VCD를 생성하는 시스템이다. 본 발명의 일 실시예에 따라, 여기에 기술된 바와 같은 주문형 VCD 기술은 다음의 상위 레벨 속성을 통합한다; (1) RCC 기반의 병렬 시뮬레이션 히스토리 압축 및 기록, (2) RCC 기반의 병렬 시뮬레이션 히스토리 압축해제 및 VCD 파일 생성, 및 (3) 시뮬레이션 리턴없이 선택된 시뮬레이션 타켓 범위 및 설계 개요에 대한 주문 소프트웨어 재생성. 각각의 이들 속성은 하기에 더 상세히 기술될 것이다.
디버그 세션 동안, EDA 툴(이후 본 발명의 다양한 측면을 통합하는 RCC 시스템이라 함)은 임의의 시뮬레이션 부분이 재생되도록 테스트 벤치 프로세스로부터 1차 입력을 기록한다. 사용자는 추후 분석 동안 임의의 시뮬레이션 시간 범위로부터 VCD 파일로 하드웨어 상태 정보를 덤프하기 위하여 EDA 툴, 또는 RCC 시스템에게 선택적으로 명령할수있다. 이후, 사용자는 선택된 시뮬레이션 시간 범위내에 그의 설계를 디버깅하는 것을 즉각적으로 시작할 수 있다. 만약 상기 선택된 시뮬레이션 시간 범위가 사용자가 교정하고자 하는 버그를 포함하지 않으면, 상기 사용자는 VCD 파일로 덤프하기 위하여 다른 시뮬레이션 시간 범위를 선택할 수 있다. 그 다음 사용자는 이런 새로운 VCD 파일을 분석할 수 있다. 이런 주문형 VCD 특징으로 인해, 사용자는 임의의 포인트에서 시뮬레이션을 중단하고 임의의 목표된 시뮬레이션 시간 시작 포인트로부터 임의의 시뮬레이션 시간 종료 포인트로 주문형 다른 선택적 VCD 파일의 생성을 요구한다.
통상적인 디버그 세션에서, 사용자는 도 83에 도시된 RCC 시스템을 사용하여 그의 설계를 디버깅한다. 제 1 시뮬레이션 동안, 사용자는 여기서 시뮬레이션 세션 범위라 불리는 목표된 시작 시뮬레이션 시간으로부터 임의의 목표된 종료 시뮬레이션 시간에서 그의 설계를 빠르게 시뮬레이션한다. 이런 빠른 시뮬레이션 동안, 1차 입력의 고도로 압축된 형태는 "입력 히스토리" 파일에 기록되어 시뮬레이션 세션의 일부는 재생될 수 있다. 시뮬레이션 세션 범위의 끝 부분에서, RCC 시스템은 원한다면 사용자가 이런 종료 포인트를 지난 설계를 디버깅하는 하는 것으로 리턴할 수있도록 "시뮬레이션 히스토리" 파일에서 이런 종료 포인트로부터의 하드웨어 상태 정보를 저장한다.
빠른 시뮬레이션 실행의 끝 부분에서, 사용자는 결과를 분석하고 그의 설계가 가지는 몇몇 문제를 예외없이 검출한다. 그 다음 사용자는 문제(즉, 버그)의 원인이 보다 넓은 시뮬레이션 세션 범위내에 있는 이후 시뮬레이션 타켓 범위라 불리는 특정 좁은 시뮬레이션 시간 범위내에 배치되는 것을 추측한다. 예를들어, 만약 시뮬레이션 세션 범위가 1,000 시뮬레이션 시간 단계를 포함한다면, 보다 좁은 시뮬레이션 타켓 범위는 보다 넓은 시뮬레이션 세션 범위내의 특정 위치에서 단지 100 시뮬레이션 시간 단계만을 포함한다.
일단 사용자가 버그를 격리시키기 위하여 시뮬레이션 타켓 범위의 정확한 위치에 대해 추측하면, RCC 시스템은 입력 히스토리 파일에서 압축된 1차 입력을 압축해제하고 평가를 위한 하드웨어 모델에 압축해제된 1차 입력을 전달함으로써 시작부터 빠르게 시뮬레이션한다. RCC 시스템이 시뮬레이션 타켓 범위에 도달할 때, VCD 파일로 평가된 결과(예를들어, 하드웨어 노드 값 및 레지스터 상태)을 덤프한다. 그 후, 사용자는 시뮬레이션 세션 범위의 시작으로부터 시뮬레이션을 리턴하기 보다 시뮬레이션 타켓 범위의 시작에서, 또는 심지어 시뮬레이션의 시작 직후로부터 시작하는 VCD 파일을 사용하여 그의 설계를 재생함으로써 보다 주의 깊게 이 영역을 분석할수있다. 시뮬레이션 타켓 범위에서 VCD 파일로서 하드웨어 상태를 저장하는 이런 특징은 시뮬레이션 리턴 중에 낭비되는 상당한 양의 디버깅 시간을 절약한다.
도 83을 다시 참조하여, 본 발명의 일 실시예를 통합한 상위 레벨의 RCC 시스템이 도시된다. RCC 시스템은 RCC 컴퓨팅 시스템(2600) 및 RCC 하드웨어 가속기(2620)를 포함한다. 본 특허 명세서의 여러곳에 기재된 바와 같이, RCC 게산 시스템(2600)은 사용자가 소프트웨어에서 사용자의 전체 소프트웨어 모델링 설계를 시뮬레이션하게 하고 상기 설계에서 하드웨어 모델링 부분의 하드웨어 가속을 제어하도록 하기에 필요한 컴퓨팅 리소스를 포함한다. 이런 목적을 위해, RCC 컴퓨팅 시스템(2600)은 CPU(2601), RCC 시스템의 다양한 컴포넌트에 의해 필요한 다양한 클럭(2602)(특허 명세서 여러곳에 기술된 소프트웨어 클럭 포함), 테스트 벤치 프로세스(2603), 및 시스템 디스크(2604)를 포함한다. 몇몇 통상적인 하드웨어 바탕 이벤트 히스토리 버퍼와 대조하여, 시스템 디스크는 작은 하드웨어 RAM 버퍼보다 압축된 데이터를 기록하기 위하여 사용된다. 비록 도시되지 않았지만, RCC 컴퓨팅 시스템(2600)은 컴퓨팅 시스템이 수행하는 여러 작업중 진단, 다양한 소프트웨어, 및 관리 파일을 실행하기 위하여 컴퓨팅 전력을 회로 설계자에게 제공하는 다른 로직 컴포넌트 및 버스 서브시스템을 포함한다.
본 특허 명세서의 다른 세션에서 RCC 어레이라 불리는 RCC 하드웨어 가속기(2620)는 사용자가 디버깅 프로세스를 가속하도록 하드웨어에서 사용자 설계의 적어도 일부를 모델링할 수 있는 리컨피규러블 어레이의 로직 엘리먼트(예를들어, FPGA)를 포함한다. 이런 목적을 위하여, RCC 하드웨어 가속기(2620)는 사용자 설계 부분의 하드웨어 모델을 제공하는 리컨피규러블 로직 엘리먼트(2621)의 어레이를 포함한다. RCC 컴퓨팅 시스템(2600)은 본 명세서의 여러 곳에 기술된 바와 같은 소프트웨어 클럭 및 버스 시스템을 통하여 RCC 하드웨어 가속기(2620)에 밀착 결합되고, 상기 버스의 일부는 도 83에서 라인(2610 및 2611)로서 도시된다.
본 발명의 주문형 VCD는 도 84와 관련하여 논의될것이다. 도 84는 몇몇 시뮬레이션 시간의 시간라인 t0, t1, t2 및 t3을 도시한다. 시뮬레이션 세션 범위는 시뮬레이션 시간 t0 및 시뮬레이션 시간 t3 사이에 있고, 그것의 경로는 시뮬레이션 시간 t1 및 t2를 포함한다. 시뮬레이션 시간 t0는 빠른 시뮬레이션 시작하는 시뮬레이션 세션 범위내의 제 1 시뮬레이션 시간을 나타낸다. 이 시뮬레이션 시간 t0은 임의의 분리 가능한 시뮬레이션 세션, 또는 시뮬레이션 세션 범위 동안 제 1 시뮬레이션 시간을 나타낸다. 다른 말로, 오늘의 디버그 세션이 t=10,000 내지 t=12,000의 시뮬레이션 세션 범위를 시험하는 것을 가정한다. 사용자는 특정 버그가 t=10,500 및 t=10,750 사이에 배치된다는 것을 가정한다. 이런 시뮬레이션 세션 범위에 대하여, 시뮬레이션 시간 t0는 t=10,000이다. 특정 버그가 배치되고 시뮬레이션 세션 범위 t=10,000 내지 t=12,000 동안 교정된다는 것이 가정된다. 그다음, 내일 사용자는 다음 시뮬레이션 세션 범위 t=12,000 내지 t=15,000으로 이동한다. 여기서, 시뮬레이션 시간 t0는 t=12,000이다. 몇몇 경우, 시뮬레이션 시간 t0는 사용자 설계의 제 1 버그 세션 동안(즉, t0가 t=0에 대응한다) 바로 제 1 시뮬레이션 시간을 나타낸다.
유사하게, 시뮬레이션 시간 t3은 선택된 시뮬레이션 세션 범위 동안 최종 시뮬레이션 시간을 나타낸다. 다른 말로, 오늘날의 디버그 세션은 t=14,555 내지 t=16,750의 시뮬레이션 세션 범위 확장을 포함한다. 이런 시뮬레이션 세션 범위에 대하여, 시뮬레이션 시간 t3는 t=16,750이다. 특정 버그가 이런 시뮬레이션 세션 범위 t=14,555 내지 t=16,750 동안 배치되고 교정되는 것이 가정된다. 그 다음 사용자는 다음 시뮬레이션 세션 범위 t=16,750 내지 t=19,100상에서 이동한다. 여기서, 시뮬레이션 시간 t3는 t=19,100이다. 몇몇 경우, 시뮬레이션 시간 t3은 사용자 설계자의 최종 디버그 세션 동안 최종 시뮬레이션 시간을 나타낸다.
사용자는 만약 원한다면 이런 시뮬레이션 시간 t3 넘어서 시뮬레이션을 계속할수있지만, 이동을 위하여 사용자는 시뮬레이션 시간 t0 내지 t3, 즉 현재 시뮬레이션 세션 범위 동안 그의 설계를 디버깅하는 것에 집중된다. 통상적으로, 버그가 현재 시뮬레이션 세션 범위 동안 교정(iron out)될 때, 사용자는 시뮬레이션 시간 t3를 넘어 다음 시뮬레이션 세션 범위로 그 설계를 시뮬레이션할 것이다.
시뮬레이션 세션 범위의 이런 요약적인 표현에서, 이들 시뮬레이션 시간 주기 t0-t3는 필수적으로 서로 인접한다; 즉, 시뮬레이션 시간 t0 및 t1은 서로 바로 인접하지 않는다. 사실상, 시뮬레이션 시간 t0 및 t1은 수천의 개별적인 시뮬레이션 시간 주기일 수 있다.
본 발명의 일 실시예가 RCC 시스템에서 실행되기 때문에, 도 83에 도시된 RCC 시스템의 여러 컴포넌트에 대한 참조가 이루어질 것이다. 첫째, RCC 시스템의입력 및 시뮬레이션 히스토리 생성 동작은 논의될 것이다. 이런 생성 동작은 1차 입력에 대한 데이터 압축의 몇몇 형태 및 압축된 1차 입력의 몇몇 기록 형태를 포함한다. 둘째, RCC 시스템의 VCD 생성 동작은 논의될 것이다. 이런 VCD 생성 동작은 시뮬레이션 히스토리를 재생하기 위하여 1차 입력을 압축해제하고 시뮬레이션 타켓 범위 동안 하드웨어 상태를 VCD 파일로 덤핑하는 것을 포함한다. 셋째, VCD 검토 과정은 논의될 것이다. 비록 용어 "시뮬레이션 히스토리"가 때때로 사용되지만, 이것은 전체 디버그 세션이 소프트웨어 시뮬레이션을 포함하는 것을 의미하지 않는다. 정말로, RCC 시스템은 하드웨어 상태로부터 VCD 파일을 생성하고 소프트웨어 모델은 VCD 파일의 추후 분석을 위해서만 사용된다.
입력 및 시뮬레이션 히스토리 생성-압축 및 기록
최초에, 사용자는 도 83의 RCC 컴퓨팅 시스템(2600)내의 소프트웨어 설계를 모델링한다. 상기 설계의 몇몇 부분에 대하여, RCC 컴퓨팅 시스템(2600)은 하드웨어 설명 언어(예를들어, VHDL)를 바탕으로 설계의 하드웨어 모델을 생성한다. 하드웨어 모델은 RCC 하드웨어 가속기(2620)의 일부인 리컨피규러블 로직 엘리먼트(2621)의 어레이에 구성된다. 이런 셋업으로, 사용자는 RCC 컴퓨팅 시스템(2600)내의 소프트웨어 설계를 시뮬레이션하고, RCC 하드웨어 가속기(2620)를 사용하여 설계의 일부(즉, 시뮬레이션 시간 단계 또는 회로의 구별되는 물리적 섹션)를 가속하고, 또는 시뮬레이션 및 하드웨어 가속을 결합한다.
사용자는 그의 최종 회로 설계를 막 종료하였다. 이 때가 결함을 찾기 위해 설계를 디버깅하는 시간이다. 만약 사용자가 설계의 이전 버젼을 미리 디버깅했다면, 그는 버그가 배치된 몇몇 장소를 생각한다. 다른 한편, 만약 이것이 새로운 설계에 대한 최초 디버그 세션이면, 사용자는 잠재적 버그의 위치에 대해 몇몇 생각을 가져야 한다. 어느 경우에서나, 몇몇 추측 작업은 일반적으로 버그를 배치시키기 위해 필요하다. 이런 논의를 위해, 최초 시간동안 설계를 디버깅하는 것을 가정한다.
설계를 디버깅할때, 사용자는 시뮬레이션 세션 범위를 선택한다. 이론적으로, 이런 시뮬레이션 세션 범위는 임의의 길이의 시뮬레이션 시간일 수 있다. 그러나 실제로, 시뮬레이션 세션 범위는 설계에서 약간의 버그를 격리시키기에 충분하게 짧고 빠르게 디버깅 처리를 이동시키고 설게를 완전히 디버깅할 필요가 있는 디버그 세션의 수를 최소화하기에 충분하게 길도록 선택되어야 한다. 분명히, 두개 또는 세개의 시뮬레이션 시간 단계의 시뮬레이션 세션 범위는 임의의 버그의 존재를 나타내지 않을 것이다. 게다가, 이런 작은 시뮬레이션 세션 범위는 디버깅 프로세스를 느리게할 많은 반복 작업을 수행하도록 사용자에게 강요할 것이다. 만약 선택된 시뮬레이션 세션 범위가 백만번의 시뮬레이션 단계이면, 너무 많은 버그가 자체적으로 나타나서 사용자가 문제 부분의 보다 집중된 공격을 구현하기 어렵게 만든다.
일단 사용자가 시뮬레이션 세션 범위를 선택하면, 그는 RCC 시스템에게 명령하여 도 84에 도시된 바와같이 시뮬레이션 시간 t0로부터 시뮬레이션 시간 t3로의 시뮬레이션을 빠르게 한다. 상술한 바와 같이, 시뮬레이션 시간 t0 내지 t3의 분리는 임의의 선택된 범위일수있지만, 시뮬레이션 시간 t0는 시뮬레이션의 시작을 나타내고 시뮬레이션 시간 t3는 시뮬레이션 세션 범위에 대한 최종 시뮬레이션 시간을 나타낸다.
시뮬레이션 시간 t0에서, 빠른 시뮬레이션은 RCC 컴퓨팅 시스템(2600)에서 시작한다. 빠른 시뮬레이션은 소프트웨어 모델의 재생성이 이런 시간 주기동안 필요하지 않기 때문에 일반적인 시뮬레이션 모드 대신 시뮬레이션 시간 t0 내지 시뮬레이션 시간 t3에서 수행된다. 본 특허 명세서 여러곳에서 논의된 바와같이, 재성성 동작은 하드웨어 상태 정보(예를들어, 노드 값, 레지스터 상태)를 수신하기 위하여 RCC 컴퓨팅 시스템(2620)을 요구하여, 보다 지능화된 로직 엘리먼트(예를들어, 결합 로직)는 사용자에 의한 추가 분석을 위해 소프트웨어에서 재성성된다. 물론, 몇몇 사용자는 시뮬레이션 프로세스 동안 소프트웨어 모델을 관찰하기를 원하고, 이 경우, RCC 컴퓨팅 시스템(2600)은 빠른 시뮬레이션을 수행하지 않는다. 이 경우, 시뮬레이션 프로세스는 하드웨어 모델의 1차 출력으로부터 소프트웨어 모델을 재생성하기 위한 RCC 컴퓨팅 시스템(2600)에 의해 필요한 추가 시간으로 인해 보다 느려진다.
처음에, 소프트웨어 모델 상태 및 하드웨어 모델 레지스터 및 노드 값 같은 완전한 상태의 설계는 시스템 디스크에서 "시뮬레이션 히스토리" 파일이라 불리는 하나의 파일로 시뮬레이션 시간 t0에서 저장된다. 이것은 사용자가 디버깅을 위해 미래의 임의의 시간에 설계 상태를 RCC 시스템에 로딩하도록 한다. 시뮬레이션 시간 t0 내지 시뮬레이션 시간 t3의 시뮬레이션 세션 범위에 대한 이런 빠른 시뮬레이션 주기 동안, RCC 컴퓨팅 시스템(2600)은 두개의 구별되는 처리는 병렬로 1차 입력(IP)에 인가한다. 테스트 벤치 프로세스(2603)로부터의 원시(raw) 1차 입력은 평가를 위한 RCC 하드웨어 가속기(2620)에 대한 라인(2610)에 제공된다. 동시에, 테스트 벤치 프로세스로부터의 동일한 1차 입력은 압축되고 "입력 히스토리" 파일이라 불리는 독립된 파일로서 시스템 디스크에 기록되어, 1차 입력의 전체 히스토리는 사용자가 추후 시뮬레이션의 임의의 일부를 재생하도록 수집될 수 있다. 특히, 시뮬레이션 시간 t0 내지 시뮬레이션 시간 t3에 해당하는 1차 입력은 시스템 디스크에 압축 저장된다.
RCC 하드웨어 가속기(2620)가 테스트 벤치 프로세스(2603)로부터 1차 입력(IP)을 수신하면, 상기 가속기는 1차 입력을 처리한다. 결과적으로, 하드웨어 모델의 하드웨어 상태는 다양한 로직 및 다른 회로 소자들이 데이터를 평가할때 변할 것이다. 시뮬레이션 시간 t0 내지 시뮬레이션 시간 t3의 시간 주기 동안, RCC 시스템은 빠른 시뮬레이션 주기 동안 사용자가 설계에서 정교하게 디버깅하는데 이득이 없기 때문에 로직 생성을 수행하기 위하여 RCC 컴퓨팅 시스템(2600)을 기다릴 필요가 없다. RCC 시스템은 또한 1차 출력(예를 들어, 하드웨어 노드 값 및 레지스터 상태)을 전혀 저장하지 않는다. RCC 컴퓨팅 시스템(2600)이 "입력 히스토리" 파일에 기록하기 위하여 1차 입력을 압축하는 동안, RCC 하드웨어 가속기(2620)이 로우 및 압축되지 않는 1차 입력을 평가하지 않는다는 것을 주의한다. 다른 실시예에서, RCC 시스템은 입력 히스토리 파일에 기록하기 위하여 1차 입력을 압축하지 않는다.
출력이 빠른 시뮬레이션 주기 동안 전혀 저장되지 않을때 RCC 컴퓨팅 시스템(2600)이 평가를 위해 RCC 하드웨어 가속기에 1차 입력을 전달하는 이유는 무엇인가? RCC 시스템은 시뮬레이션의 시작부터 시뮬레이션 시간 t3까지 1차 입력의 평가를 바탕으로 설계의 하드웨어 상태를 저장할 필요가 있다. 하드웨어 모델 상태의 정확한 스냅샷(snapshot)은 만약 하드웨어 모델이 시뮬레이션 시간 t3로부터 입력이 아닌 시작으로부터 포인트 t3으로의 1차 입력의 전체 히스토리를 평가하지 않으면 시뮬레이션 시간 t3에서 얻어질 수 없다. 로직 회로는 입력 순서를 바탕으로 평가 결과에 영향을 미치는 메모리 속성을 가진다. 따라서, 만약 시뮬레이션 시간 t3(또는 시뮬레이션 시간 t3 바로 전 시뮬레이션 시간)로부터의 1차 입력이 평가를 위해 하드웨어 모델에 공급되면, 하드웨어 모델은 시뮬레이션 시간 t3에서 잘못된 상태를 나타낼 것이다.
하드웨어 모델 상태가 왜 시뮬레이션 시간 t3 동안 저장되는가? 백만개 이상의 게이트 및 백만번 이상의 시뮬레이션 단계를 갖는 큰 설계는 비교적 짧은 시간 주기내에서 디버깅될 수 없다. 사용자는 이런 설계를 디버깅하기 위하여 다수의 시뮬레이션 세션을 필요로한다. 하나의 시뮬레이션 세션으로부터 다음 시뮬레이션 세션으로 빠르게 이동하기 위하여, RCC 시스템은 시뮬레이션 시간 t3로부터 하드웨어 상태(압축된 1차 입력과 함께)를 저장하여, 사용자는 시뮬레이션 시간 t3에서 시작하는 다음 시뮬레이션 세션 범위를 디버깅할 수 있다. 저장된 하드웨어 모델 상태로 인해, 사용자는 시뮬레이션의 시작 직후 시뮬레이션하는 것을 필요로 하지 않는다; 오히려, 사용자는 시뮬레이션 시간 t0에서 시뮬레이션 t3로의 설계를 디버깅한후 시뮬레이션 시간 t3로 빠르고 편리하게 리턴할 수 있다. 시뮬레이션 히스토리 파일에 저장된 시뮬레이션 시간 t3에서의 하드웨어 모델 상태는 상기 포인트까지 1차 입력의 전체 히스토리 반영인 설계의 올바른 스냅샷을 나타낸다.
RCC 하드웨어 가속기(2620)에서의 하드웨어 모델은 라인(2611)상의 내부 하드웨어 상태를 RCC 컴퓨팅 시스템(2600)에 제공하여, RCC 컴퓨팅 시스템(2600)은 만약 필요하고 사용자에 의해 목표되면 소프트웨어 모델의 다양한 로직 엘리먼트(예를들어, 결합 로직)를 형성 또는 재생성할 수 있다. 그러나, 상기된 바와 같이 사용자는 시뮬레이션 세션 범위의 빠른 시뮬레이션 동안 소프트웨어 시뮬레이션을 관찰하는 것에 관심을 갖지 않는다. 따라서, 내부 하드웨어 상태가 사용자에 의해 현재 버그에 대해 시험되지 않기 때문에, RCC 하드웨어 가속기로부터의 이들 내부 하드웨어 상태는 시스템 디스크에 저장되지 않는다.
시뮬레이션 시간 t3, 또는 시뮬레이션 세션 범위의 끝에서, 이런 특정 빠른 시뮬레이션 동작은 중단된다. 시뮬레이션 시간 t3에 대응하는 RCC 하드웨어 가속기(2620)내의 설계 하드웨어 모델로부터의 평가 결과 또는 1차 출력(예를 들어, 레지스터 값)은 시뮬레이션 히스토리 파일에 저장된다. 이것은 사용자가 시뮬레이션 시간 t0 내지 시뮬레이션 시간 t3에서 설계를 디버깅할때, 사용자가 필요한만큼 추가 디버깅을 위해 시뮬레이션 시간 t3로 바로 진행하도록 행해진다. 사용자는 시뮬레이션 시간 t3 넘어 몇몇 포인트에서 그의 설계를 디버깅하기 위하여 시뮬레이션 시간 t0로부터 시뮬레이션을 재실행할 필요가 없다.
요약하여, 시뮬레이션 시간 t0 내지 시뮬레이션 시간 t3(즉, 시뮬레이션 세션 범위)에서, 사용자는 향후 참조를 위해 시스템 디스크에 동일한 1차 입력을 압축하여 저장함과 동시에 라인(2610)상에서 테스트 벤치 프로세스(2603)로부터의 1차 입력을 RCC 하드웨어 가속기(2620)에 공급함으로써 설계를 가속한다. RCC 컴퓨팅 시스템(2600)은 디버그 세션을 재생하기 위하여 입력 히스토리 파일에 1차 입력(압축된 또는 압축되지 않은)을 저장을 필요로 한다. 압축 동작은 RCC 하드웨어 가속기(2620)내에서 데이터 평가와 동시에 발생한다. 마지막으로, 시뮬레이션 세션 범위의 끝인 시뮬레이션 시간 t3에서, RCC 시스템은 하드웨어 모델의 상태 정보를 시뮬레이션 히스토리 파일에 저장한다.
본 발명의 일 실시예에서, 시뮬레이션 세션 범위로부터의 모든 기록되고 압축된 1차 입력은 시뮬레이션 시간 t3로부터의 하드웨어 상태 정보에 대해 추후에 변형될 동일 파일의 일부이다. 다른 실시예에서, 시뮬레이션 세션 범위로부터 저장된 정보 및 시뮬레이션 시간 t3에서의 하드웨어 상태 정보는 시스템 디스크에서 구별되는 파일로서 저장된다. 유사하게, 임의의 상기된 파일은 시뮬레이션 타켓 범위를 위해 추후 생성되는 주문형 VCD 정보로 변형될 수 있다. 선택적으로, 주문형 VCD형 정보는 압축된 1차 입력 파일 및 시뮬레이션 시간 t3에서 하드웨어 상태 정보 파일로부터 분리된 시스템 디스크내의 구별되는 VCD 파일로 저장될 수 있다. 다른 말로, 본 발명의 일실시예에 따라, 입력 히스토리 파일, 시뮬레이션 히스토리 파일 및 VCD 파일은 하나의 파일에서 서로 통합될 수 있다. 다른 실시예에서, 입력 히스토리 파일, 시뮬레이션 히스토리 파일 및 VCD 파일은 독립된 파일일 수 있다. 또한, 입력 히스토리 파일 및 시뮬레이션 히스토리 파일은 VCD 파일로부터 분리된 하나의 파일에 통합될 수 있다.
압축 방법은 지금 논의될 것이다. 본 발명의 일 실시예에 따라, RCC 시스템의압축은 시뮬레이션 시간 단계 당 10% 입력 이벤트를 가진 1차 입력 이벤트에 대한 20X의 압축 비율을 허용한다. 따라서, 백만개의 게이트 이상의 큰 ASIC 설계는 200개의 1차 입력 이벤트를 요구할 수 있다. 시뮬레이션 시간 단계 당 10% 입력 이벤트에 대하여, 대략 20 입력이 압축되고 기록될 필요가 있다. 만약 각각의 입력 신호가 2 바이트이고, 20 입력 신호는 40 바이트의 데이터가 시뮬레이션 시간 단계 당 1차 입력에서 처리될 필요가 있게 한다. 20X의 압축율에 대하여, 40 바이트 데이터는 시뮬레이션 시간 단계당 2 바이트의 데이터로 압축될 수 있다. 따라서, 약 백만번의 시뮬레이션 단계를 요구하는 설계에 대하여, RCC 시스템은 2메가 바이트의 데이터로 1차 입력을 압축한다. 이런 크기의 파일은 임의의 컴퓨팅 파일 시스템 및 파형 뷰어에 의해 쉽게 관리될 수 있다. 일 실시예에서, ZIP 압축이 사용된다.
일 실시예에 따라, 1차 입력 압축은 RCC 하드웨어 가속기(2620)에 의해 1차 입력 평가와 동시에 수행되고; 입력 스토리 파일 생성은 1차 입력 평가와 동시에 발생한다. 따라서, 압축 방법은 RCC 시스템 성능에 직접적인 악영향을 제공하지 않는다. 하나의 가능한 병목 현상은 시스템 디스크에 압축된 1차 입력을 기록하는 처리이다. 그러나, 데이터가 고압축되었기 때문에, RCC 시스템은 초당 50,000 시뮬레이션 시간 단계로 운행하는 대부분의 설계에 대해 5% 이하의 감속을 경험한다.
기록이 RCC 시스템에서 제어되는 특정 방식에 대하여, 사용자는 본 발명의 일실시예에 따라 RCC 기록 특징을 초기화하기 위하여 $rcc(기록)을 우선 사용하여 한다 :
$rcc(record, name, <disk space>, <checkpoint control>);
이제, 인수(argument) 이름, <디스크 공간(disk space)>, 및 <체크포인트 제어(checkpoint control)>에 대해 설명될 것이다. "이름" 인수는 현재 시뮬레이션 세션 범위에 대한 기록 이름이다. 동일한 설계의 다른 시뮬레이션 실행을 구별하기 위하여 서로 다른 이름들이 요구된다. 구별되는 기록 이름은 오프 라인 주문형 VCD형 디버깅을 위하여 요구된다.
<디스크 공간> 인수는 RCC 시스템 기록 프로세스를 위해 할당된 최대 디스크 공간(MB 유닛에서)을 나타내기 위한 선택적 파라미터이다. 결합 값은 100MB이다. RCC 시스템은 특정 디스크 공간내의 현재 시뮬레이션 세션 범위의 최후 부분만을 기록한다. 다른 말로, 만약 <디스크 공간> 값이 100 MB로서 지정되지만 현재 시뮬레이션 세션 범위가 140 MB로 정해지면, RCC 시스템은 최후 100 MB만을 기록하고 압축된 1차 입력의 처음 40 MB를 버린다. 본 발명의 이런 측면은 결함 분석을 위한 하나의 장점이다. 본 발명의 일 실시예에서, 테스트 벤치 프로세스는 시뮬레이션 결함을 검출하고 시뮬레이션을 중지하기 위하여 자체 검사 기능을 가진다. RCC 시뮬레이션의 최종 히스토리는 상기 결함 분석을 위한 대부분의 정보를 제공할수 있다.
<체크포인트 제어> 인수는 전체 상태 검사 포인트를 수행하기 위하여 필요한 시뮬레이션 시간 단계 수를 나타내는 선택적 파라미터이다. 디폴트는 1,000,000 번이다. 대부분의 통상적인 압축 알고리즘과 같이, 압축된 1차 입력은 연속적인 시뮬레이션 단계 사이에서 상태 차이를 바탕으로 한다. 긴 시뮬레이션 실행 동안, 주어진 저주파수에서 전체 RCC 상태에 대한 체크포인트는 시뮬레이션 히스토리 추출을 용이하게 할수있다. 매 일백만 단계에서 배치된 RCC 시스템 및 체크포인트에서 초당 20K 내지 200K 시뮬레이션 시간 단계의 압축해제율에 대하여, RCC 시스템은 5 내지 50 초 내에 임의의 시뮬레이션 히스토리를 추출(즉, 1차 입력 및 선택된 VCD 파일 생성으로부터의 시뮬레이션 재생)한다.
이런 $rcc(기록) 명령이 호출될때, RCC 시스템은 시뮬레이션 히스토리를 기록할것이다; 즉, 1차 입력에는 시스템 디스크의 저장을 위해 하나의 파일이 압축 기록될 것이다. RCC 하드웨어 가속기로부터의 1차 입력은 소프트웨어 로직 재생성이 이 시점에서 필요하지 않기 때문에 무시된다. 기록 처리는 $rcc(stop) 또는 $rcc(off) 명령으로 종료될 수 있고, 이 포인트에서 RCC 시스템은 소프트웨어 모델로 다시 시뮬레이션의 제어를 스위칭한다. 이런 포인트에서, 1차 출력은 소프트웨어 로직 재생성을 위하여 처리된다.
VCD 생성-압축 및 덤프
상기된 바와 같이, RCC 시스템은 시뮬레이션 시간 t0에서 시뮬레이션 세션 범위의 초기에 소프트웨어 모델 및 하드웨어 모델을 저장하고, 입력 히스토리 파일에서 전체 시뮬레이션 세션 범위 동안 압축된 1차 입력을 기록하고, 시뮬레이션 히스토리 파일내의 시뮬레이션 세션 범위의 끝에서 설계를 위한 하드웨어 모델 상태를 저장한다. 사용자는 시뮬레이션 시간 t0로부터의 설계 정보로부터 시뮬레이션 세션 범위의 시작시 설계를 로딩하기에 충분한 정보를 가진다. 압축된 1차 입력으로 인해, 사용자는 그의 설계의 임의의 일부를 소프트웨어 시뮬레이션할 수 있다. 그러나, 주문형 VCD의 특징으로 인해, 사용자는 이런 포인트에서 그의 설계를 소프트웨어 시뮬레이션하는 것을 원하지 않을 것이다. 오히려, 사용자는 버그를 격리 및 교정하기 위하여 미세 분석을 위한 선택된 시뮬레이션 타켓 범위 동안 VCD 파일을 생성하기를 원한다. 실제로, 기록된 압축 1차 입력으로 인해, RCC 시스템은 시뮬레이션 세션 범위내의 임의의 포인트를 재생할 수 있다. 게다가, RCC 시스템은 만약 목표된다면 시뮬레이션 시간 t3로부터 이전에 저장된 하드웨어 상태 정보를 로딩함으로써 현재 시뮬레이션 세션 범위 이상으로 시뮬레이션할 수 있다.
설계를 빠르게 시뮬레이션한 후, 사용자는 버그가 존재하는지를 결정하기 위하여 결과를 검토한다. 만약 버그가 사용자에게 나타나지 않으면, 상기 설계에는 현재 시뮬레이션 세션 범위 동안 버그가 없을 수 있다. 그 다음 사용자는 선택된 범위가 무엇이든 현재 시뮬레이션 세션 범위 넘어 다음 시뮬레이션 세션 범위로 시뮬레이션하도록 진행한다. 그러나, 만약 사용자가 설계에 일종의 문제를 가진다는 것을 결정하면, 사용자는 버그를 격리 및 교정하기 위하여 보다 주의깊게 시뮬레이션을 분석하여야 한다. 전체 시뮬레이션 세션 범위가 신중하고 상세한 분석을 위해 너무 크기 때문에, 사용자는 심화 학습을 위해 특정한 더 좁은 범위를 목표로 해야만 한다. 상기 설계와 과거의 디버깅 노력에 사용자가 친밀하다는 것을 근거로 하여, 사용자는 시뮬레이션 세션 범위 내에서 버그의 위치에 관한 적당한 추측을 행한다. 사용자는 버그의 위치(또는 버그가 자신을 나타낼 위치)에 관한 사용자의 추측에 대응하여야만 하는 선택된 시뮬레이션 타겟 범위에 초점을 맞출 것이다. 사용자는 시뮬레이션 타겟 범위가 도 84에 도시된 바와 같이, 시뮬레이션 시간(t1) 및 시뮬레이션 시간(t2) 사이에 존재한다는 것을 결정한다.
RCC 시스템은 시뮬레이션 상태(t0)로부터 이전에 저장된 구성 정보를 갖는 RCC 하드웨어 가속기(2620) 내의 하드웨어 모델 및 RCC 컴퓨팅 시스템(2600) 내의 설계의 소프트웨어 모델을 로딩한다. 그리고 나서, RCC 시스템은 시뮬레이션 시간(t0)으로부터 시뮬레이션 시간(t1)으로 고속으로 시뮬레이션한다. 고속 시뮬레이션 동작 동안, RCC 컴퓨팅 시스템은 압축된 1차 입력을 포함하는 이전 저장된 파일을 로딩한다. RCC 컴퓨팅 시스템은 압축된 1차 입력을 압축해제하여 상기 압축해제된 1차 입력을 평가를 위해 RCC 하드웨어 가속기(2620)로 입력한다. 시뮬레이션 세션 범위에 대해 1차 입력을 압축하여 저장한 초기 고속 시뮬레이션 동작과 같이, 평가된 결과인 1차 출력(예를 들어, 하드웨어 모델 노드값 및 레지스터 상태)은 시뮬레이션 시간(t0)으로부터 시뮬레이션 시간(t1)으로의 고속 시뮬레이션 동안 저장되지 않는다.
일단 고속 시뮬레이션 동작이 시뮬레이션 타겟 범위의 도입부, 즉 시뮬레이션 시간(t1)에 도달하면, RCC 시스템은 평가된 결과(즉, 1차 출력(Op))를 RCC 하드웨어 가속기(2620)내의 하드웨어 모델로부터 시스템 디스크 내의 VCD 파일 내로 덤핑한다. 시뮬레이션 세션 범위에 대한 초기의 고속 시뮬레이션 동작과 달리,RCC 컴퓨팅 시스템(2600)은 임의의 압축을 수행하지 않는다. 다시, RCC 컴퓨팅 시스템(2600)은 사용자가 이 시간에 평가 결과를 볼 필요가 없기 때문에 소프트웨어 모델에 대한 재생성 동작을 수행하지 않는다. 소프트웨어 모델에 대한 임의의 재생성 동작을 수행하지 않음으로써, RCC 시스템은 VCD 파일을 신속하게 생성시킬 수 있다.
그러나, 다른 실시예에서, 사용자는 1차 출력을 저장하면서 t1로부터 t2로의 시뮬레이션 시간 주기 동안 사용자 설계 소프트웨어 모델을 함께 볼 수 있다. 만약 그런 경우, RCC 컴퓨팅 시스템(2600)은 소프트웨어 모델 재생성 동작을 수행하여 사용자가 임의의 형태의 사용자 설계로부터 임의의 상태 및 모든 상태를 보도록 한다.
시뮬레이션 시간(t2)에서, RCC 컴퓨팅 시스템(2600)은 RCC 하드웨어 가속기(2620)로부터 VCD 파일로 평가 출력을 저장하는 것을 중단한다. 이 지점에서, 사용자는 고속 시뮬레이션을 중단할 수 있다. RCC 시스템은 이제 시뮬레이션 타겟 범위에 대한 완전한 VCD 파일을 가지며 VCD 파일을 더 상세하게 분석하는 것을 진행할 수 있다.
사용자가 VCD 파일을 분석하고자 할 때, 사용자는 그 시작(예를 들어, 시뮬레이션 시간(t0))으로부터 시뮬레이션을 재실행시킬 필요가 없다. 그 대신에, 사용자는 RCC 시스템에게 시뮬레이션 타겟 범위의 시작으로부터 저장된 하드웨어 상태 정보를 로딩하도록 명령하고 소프트웨어 모델을 갖는 시뮬레이션된 결과를 볼 수 있다. 이것은 이하의 시뮬레이션 히스토리 리뷰 섹션에서 보다 상세히 기술될 것이다.
VCD 파일을 분석시, 사용자는 버그를 발견하거나 또는 발견하지 않을 수 있다. 버그가 발견된 경우, 사용자는 물론 설계 수정을 개시한다. 버그가 발견되지 않는 경우, 사용자는 자신이 버그를 갖는다고 의심하는 시뮬레이션 타겟 범위에 잘못된 추측을 할 수 있다. 사용자는 압축해제 및 VCD 파일 덤프(dump)에 관하여 위에서 사용한 동일한 프로세스를 사용해야만 한다. 사용자는 잘하면 시뮬레이션 세션 범위 내에 더 좋은 시뮬레이션 타겟 범위가 있다는 다른 추측을 행한다. 그렇게 함으로써, RCC 시스템은 시뮬레이션 세션 범위의 시작으로부터 새로운 시뮬레이션 타겟 범위로 고속 시뮬레이션하고, 1차 입력을 압축해제하여 평가를 위해 RCC 하드웨어 가속기(2620)로 전달한다. RCC 시스템이 새로운 시뮬레이션 타겟 범위의 시작에 도달할때, RCC 하드웨어 가속기(2620)로부터의 1차 출력이 VCD 파일 내로 덤핑된다. 새로운 시뮬레이션 타겟 범위의 끝에서, RCC 시스템은 VCD 파일 내로 하드웨어 상태 정보를 덤핑하는 것을 중단한다. 이 지점에서, 사용자는 버그를 격리시키기 위한 VCD 파일을 볼 수 있다.
요컨대, 시뮬레이션 시간(t0)으로부터 시뮬레이션 시간(t1)으로, RCC 시스템은 이전에 압축된 1차 입력을 압축해제하고 이를 평가를 위해 하드웨어 모델로 전달함으로써 고속 시뮬레이션한다. 시뮬레이션 시간(t1)으로부터 시뮬레이션 시간 (t2)으로의 시뮬레이션 타겟 범위 동안, RCC 시스템은 하드웨어 모델로부터의 1차 출력을 VCD 파일로 덤핑한다. 시뮬레이션 타겟 범위의 끝에서, 사용자는 상기 설계를 고속으로 시뮬레이션하는 것을 중단할 수 있다. 그리고 나서, 이 지점에서, 사용자는 시뮬레이션 시간(t0)에서 바로 그 시작으로부터 시뮬레이션을 재실행함이 없이 시뮬레이션 시간(t1)으로 직접 진행함으로써 VCD 파일을 볼 수 있다.
상기 시뮬레이션 타겟 범위의 검토가 종료되고 버그가 격리되어 제거될때, 사용자는 다음 시뮬레이션 세션 범위로 진행할 수 있다. 이 새로운 시뮬레이션 세션 범위는 시뮬레이션 시간(t3)에서 시작한다. 이전 시뮬레이션 시간 세션 범위와 동일한 길이일 수 있는 특정 길이의 새로운 시뮬레이션 타겟 범위가 사용자에 의해 선택된다. RCC 시스템은 시뮬레이션 시간(t3)에 대응하는 이전에 저장된 하드웨어 상태 정보를 로딩한다. RCC 시스템은 이제 이 새로운 시뮬레이션 세션 범위를 고속으로 시뮬레이션할 준비가 되어 있다. 이 새로운 시뮬레이션 세션 범위는 시뮬레이션 시간 t0로부터 t3로의 범위에 대응한다는 것을 주의하고, 여기서 로딩된 하드웨어 상태는 이제 시뮬레이션 시간(t0)에 대응한다. 고속 시뮬레이션, 주문형 VCD 덤프(VCD on-demand dump) 및 VCD 검토 프로세스는 상술된 것과 유사하다.
본 발명의 일 실시예에 따라서, 압축해제 단계는 성능에 부정적으로 영향을 주지 않는다. RCC 시스템은 시뮬레이션 히스토리(즉, 압축되고 기록된 1차 입력)를 초당 20,000 내지 200,000 시뮬레이션 시간 단계의 비율로 압축해제한다. 적절한 체크포인트 제어를 사용하여, RCC 시스템은 50초 내에서 시뮬레이션 히스토리를 추출(즉, 1차 입력으로부터의 시뮬레이션 재생 선택된 VCD 파일 재생)할 수 있다.
주문형 VCD 특성이 RCC 시스템에서 제어되는 특정 방식에 대하여, 사용자는 $axis_rpd 명령을 사용해야만 한다. $axis_rpd는 RCC 평가 기록을 추출하여 요구시 VCD 파일을 생성하기 위한 대화식 명령이다. 종래의 시뮬레이션 리와인드 기술과 달리, $axis_rpd 명령의 수행은 내부 시뮬레이션 상태를 리와인딩하지도 않고 외부 PLI 및 파일 I/O 상태에 오류를 일으키지도 않는다. 사용자는 자신이 $stop 명령 이후에 시뮬레이션할 수 있는 것과 동일한 방식으로 $axis_rpd 명령을 실행한 후에 시뮬레이션을 지속할 수 있다.
인수(argument)가 규정되지 않을 때, $axis_rpd 명령은 시뮬레이션 세션 범위 내의 모든 이용 가능한 시뮬레이션 시간 주기를 디스플레이한다; 즉, 사용자는 시뮬레이션 타겟 범위를 선택할 수 있다. 시간 유닛은 명령 라인 인터페이스에서 동일한 시간 유닛이다. 시뮬레이션 로그(log)의 예는 다음과 같다:
C1>$rcc(record, r1);
C2>#1000 $rcc(xt0,run);
C3>#50000$rcc(off);
C4>#50500 $rcc(run);
C5>#60000 $rcc(stop);
…100500에서 RCC 엔진 시작
…SIM으로 되돌아감:5000000에서 RCC 엔지 정지
…5050500에서 RCC 엔진 시작
…SIM으로 되돌아감:6000000에서 RCC 엔진 정지
시뮬레이션 시간 60000.0000ns에서 인터럽트
C6>$axis_rpd;
이용 가능한 시뮬레이션 히스토리:
1005.000000 내지 50000.000000
50505.000000 내지 60000.000000
시뮬레이션 시간 60000.0000ns에서 인터럽트
이 시뮬레이션 로그로부터, 사용자가 사용한 RCC 엔진은 1000 내지 50000 직후의 시간 및 50500 내지 60000 직후의 시간을 형성한다. 그러므로, $axis_rpd는 기록된 시뮬레이션 윈도우(window)를 나타낸다.
시뮬레이션 히스토리로부터 VCD 파일을 생성하기 위하여, 사용자는 다음의 제어 인수를 갖는 $axis_rpd 명령을 사용한다:
$axis_rpd(start-time, end-time, "dump-file-name", <level and scope control>);
시작-시간(start-time) 및 종료-시간(end-time)은 VCD 파일에 대한 시뮬레이션 시간 윈도우, 즉 시뮬레이션 타겟 범위를 규정한다. 시간 제어 인수의 유닛은 명령 라인 인터페이스에서 사용된 시간 유닛이다. "dump-file-name"은 VCD 파일의 명칭이다. 덤프<level and scope control> 파라미터는 IEEE Verilog에서의 표준 $dumpvars 명령과 동일하다.
$axis_rpd 명령의 예로서:
C7>$axis_rpd(50505,50600, "fl.dump");
…50505.010000에서 RCC VCD 시작 !!
…50600.000000에서 RCC VCD 종료 !!
시뮬레이션 시간 60000.0000ns에서 인터럽트
이 $axis_rpd 명령은 시뮬레이션 시간 50505로부터 50600으로의 시뮬레이션 타겟 범위에 대한 "fl.dump"라 칭하는 VCD 파일을 생성한다. $dumpvars와 같이, <level and scope control> 파라미터가 제공되지 않는 경우, $axis_rpd 명령은 전체 하드웨어 상태 또는 1차 출력을 덤핑할 것이다.
$axis_rpd 명령을 사용하는 다른 예는 다음과 같다:
C8>$axis_rpd(40444,50600,"fl.dump",2,dp0)
…40000.000000에서 RCC VCD 시작 !!
…시간 50000.000000에서 스킵
…시간 50505.000000에서 계속 !!
…50600.000000에서 RCC VCD 종료 !!
시뮬레이션 시간 60000.0000ns에서 인터럽트
이 $axis_rpd 명령은 시간 40000 내지 50600의 범위 dp0 상에서 2-레벨 VCD 파일 "f2.dump"를 생성한다. 상기 시뮬레이션이 시간 50000 내지 50500 동안 소프트웨어 제어로 다시 교환되기 때문에, $axis_rpd는 그 윈도우를 스킵하는데, 그 이유는 시뮬레이션 기록이 이용 가능하지 않게 때문이다.
주문형 VCD는 또한 사용자가 시뮬레이션 프로세스를 종료한 이후에 유용하다. 오프-라인 주문형 VCD를 수행하기 위하여, 사용자는 +rccplay 옵션을 갖는 "vlg"라 칭하는 시뮬레이션 프로그램을 시작한다. 이 옵션으로, RCC 시스템은 시뮬레이션을 위해 통상적인 초기화 시퀀스를 수행하는 대신에 시뮬레이션 기록을 추출하도록 명령받는다. 일단 사용자가 시뮬레이션 프로그램으로 들어가면, 사용자는 주문형 VCD를 달성하기 위하여 동일한 $axis_rpd 명령을 사용할 수 있다. 이 절차의 예는 다음과 같다:
axis15:3-dpo_rtlc>vlg +rccplay+rl -s
…시간 100500에서 재생 기록 ./AxisWork/rl 시작
C1>$axis_rpd;
이용 가능한 시뮬레이션 히스토리:
1005.000000 내지 50000.000000
50505.000000 내지 60000.000000
시뮬레이션 시간 100500에서 인터럽트
C2>$axis_rpd(40000,45000, "f2.dump");
…40000.000000에서 RCC VCD 시작 !!
…45000.000000에서 RCC VCD 종료 !!
시뮬레이션 시간 4500000에서 인터럽트
C3>
상기 예에서, 시뮬레이션 기록("rl")이 사용되어 시뮬레이션 히스토리를 추출하고 시간 40000 내지 45000으로 전체 설계 상에 VCD를 생성시킨다.
시뮬레이션 히스토리 리뷰
일단, 시뮬레이션 타겟 범위(즉, 시뮬레이션 시간 t1 내지 t2)의 VCD 파일이 RCC 시스템에 의해 생성되면, 사용자는 시뮬레이션 시간 t2로부터 t3로 고속으로 시뮬레이션할 필요가 없다. 그 대신에, RCC 시스템은 사용자가 시뮬레이션 중단하도록 하며 시뮬레이션 타겟 범위, 즉 시뮬레이션 시간(t1)의 시작으로 직접 진행하도록 한다. 그러므로, 종래 기술과 대조적으로, 사용자는 그 시작(예를 들어, 시뮬레이션 시간(t0))으로부터 시뮬레이션을 리턴할 필요가 없다. VCD 파일 내로 덤핑된 하드웨어 상태는 시뮬레이션 시간 t0로부터 1차 입력의 전체 히스토리의 평가를 반영하며, 시뮬레이션 시간 t1으로부터 t2로 1차 입력을 포함한다.
RCC 시스템은 VCD 파일을 로딩한다. 그 후에, 저장된 1차 출력이 RCC 컴퓨팅 시스템(2600)으로 전달되어 소프트웨어 모델 및 이의 많은 결합 로직 회로 모두가 정확한 상태 정보에 의해 재생성될 수 있다. 그리고 나서, 사용자는 디버깅을 위한 파형 뷰어(waveform viewer)로 소프트웨어 모델을 본다. VCD로, 사용자는 버그가 격리될때까지 자신의 소프트웨어 모델에 걸쳐 매우 신중하게 단계를 진행할 수 있다.
이러한 주문형 VCD 특성으로, 사용자는 시뮬레이션 세션 범위 내에서 임의의 시뮬레이션 타겟 범위를 선택할 수 있다. 버그가 선택된 시뮬레이션 타겟 범위 내에서 발견될 수 없는 경우, 사용자는 요구시 다른 상이한 시뮬레이션 타겟 범위를 선택할 수 있다. 테스트 벤치 프로세스로부터의 모든 1차 입력이 전체 시뮬레이션 세션 범위에 대해 기록될 수 있기 때문에, 이 시뮬레이션의 임의의 부분은 재생될 수 있고 시뮬레이션을 재실행함이 없이 요구시 보여질 수 있다. 이 특성은 사용자로 하여금 사용자가 이 시뮬레이션 세션 범위 내에서 버그를 교정할때까지 다중 그리고 상이한 시뮬레이션 타겟 범위에 반복적으로 초점을 맞추도록 한다.
더구나, 이 주문형 VCD 특성은 시뮬레이션 프로세스 도중에 온-라인으로 지원될 뿐만 아니라, 시뮬레이션 프로세스가 종료된 이후에 오프-라인으로 지원될 수 있다. 이 온-라인 지원은 시뮬레이션 시간(t0)에서 하드웨어 상태가 시스템 디스크 내에 저장될 수 있고 1차 입력이 시뮬레이션 세션 범위의 임의의 길이에 대해 압축되어 기록될 수 있어서 가능하다. 그 후에, 사용자는 1차 출력의 더 초점이 맞춰진 분석을 위해 시뮬레이션 타겟 범위를 규정할 수 있다.
오프-라인 지원은 시뮬레이션 시간(t0)에서 시뮬레이션 세션 범위에 대한 전체의 1차 입력 및 시뮬레이션 시간(t1)에서 하드웨어 상태가 시스템 디스크 내에 모두 저장되기 때문에 가능하다. 그러므로, 사용자는 시뮬레이션 시간(t0)에 대응하는 설계를 로딩하고 나서 시뮬레이션 타겟 범위를 규정함으로써 자신의 설계를 디버깅하기 위하여 리턴할 수 있다. 또한, 사용자는 시뮬레이션 시간(t3)에 대응하는 하드웨어 상태를 로딩함으로써 다음 시뮬레이션 타겟 범위로 직접 진행할 수 있다.
Ⅵ. 하드웨어 구현 수단
A. 개요
SEmulation 시스템은 리컨피규러블 보드 상에 FPGA 칩의 어레이를 구현한다. 상기 하드웨어 모델을 토대로 하여, SEmulation 시스템은 사용자 회로 설계의 각각의 선택된 부분을 FPGA 칩 상으로 분할하고, 맵핑하고, 배치시키고 라우팅한다. 그러므로, 예를 들어, 16 칩의 4x4 어레이는 이러한 16 칩에 대해 배치되는 큰 회로를 모델링할 수 있다. 상호접속 방식은 각각의 칩이 2 "점프" 또는 링크 내에서 다른 칩에 액세스하도록 한다.
각각의 FPGA 칩은 각각의 I/O 어드레스 공간(즉, REG, CLK, S2H, H2S)을 위한 어드레스 포인터를 구현한다. 특정 어드레스 공간과 관련된 모든 어드레스 포인터의 조합은 함께 연결(chain)될 수 있다. 그래서, 데이터 전달 동안, 각각의 칩 내의 워드 데이터는 메인 FPGA 버스 및 PCI 버스로부터/PCI 버스로 각 칩에서 선택된 어드레스 공간에 대하여 한번에 한 워드 및 원하는 워드 데이터가 그 선택된 어드레스 공간에 대하여 액세스될 때까지 한번에 한 칩이 순차적으로 선택된다. 워드 데이터의 이 순차적인 선택은 전파되는 워드 선택 신호에 의해 달성된다. 이 워드 선택 신호는 칩 내의 어드레스 포인터를 통하여 이동하고 나서, 다음 칩 내의 어드레스 포인터로 전파되고 최종 칩 상으로 지속되거나 시스템이 어드레스 포인터를 초기화한다.
리컨피규러블 보드 내의 FPGA 버스 시스템은 PCI 버스 대역폭을 두배로 동작시키지만, PCI 버스 속도를 절반으로 동작시킨다. 그러므로, FPGA 칩은 더 큰 대역폭 버스를 사용하기 위하여 뱅크(bank)로 분리된다. 이 FPGA 버스 시스템의 처리량이 PCI 버스 시스템의 처리량을 비례하여 성능은 버스 속도를 감소시킴으로서 성능이 손실된다. 확장은 뱅크 길이를 확장시키는 더 많은 FPGA 칩 또는 피기백 보드를 포함하는 더 큰 보드를 통하여 가능하다.
B. 어드레스 포인터
도 11은 본 발명의 어드레스 포인터의 일 실시예를 도시한 것이다. 모든 I/O 동작은 DMA 스트리밍 수행한다. 시스템이 단지 하나의 버스를 가지기 때문에, 상기 시스템은 한번에 한 워드씩 순차적으로 데이터에 액세스한다. 그러므로, 어드레스 포인터의 일 실시예는 이러한 어드레스 공간에서 선택된 워드에 순차적으로 액세스하기 위하여 시프트 레지스터 체인을 사용한다. 어드레스 포인터(400)는 플립-플롭(401-405), AND-게이트(406), 및 제어 신호 결합, INITIALIZE(407) 및 MOVE(408)을 포함한다.
각각의 어드레스 포인터는 선택된 어드레스 공간 내의 동일한 워드에 대응하는 각각의 FPGA 칩에서 n 개의 가능한 워드로부터 한 워드를 선택하기 위하여 n 개의 출력(W0,W1,W2,...,Wn-1)을 갖는다. 모델링되는 특정 사용자 회로 설계에 따라서, 워드의 수(n)는 회로 설계마다 가변될 수 있고, 소정 회로 설계에 대하여, n은 FPGA 칩마다 가변이다. 도 11에서, 어드레스 포인터(400)는 단지 5 워드(즉, n=5) 어드레스 포인터이다. 그러므로, 특정 어드레스 공간에 대한 이 5-워드 어드레스 포인터를 포함하는 이 특정 FPGA 칩은 선택하기 위한 단지 5 워드만을 갖는다. 물론, 어드레스 포인터(400)는 임의의 수의 워드(n)를 구현할 수 있다. 이 출력 신호(Wn)는 워드 선택 신호로 호출될 수 있다. 이 워드 선택 신호가 이 어드레스 포인터 내의 최종 플립-플롭의 출력에 도달할 때, 이것은 다음 FPGA 칩의 어드레스 포인터의 입력으로 전파될 OUT 신호로 호출된다.
INITIALIZE 신호가 나타날 때, 어드레스 포인터는 초기화된다. 제 1 플립-플롭(401)은 "1"로 설정되고 모든 다른 플립-플롭(402-405)은 "0"으로 설정된다. 이 지점에서, 어드레스 포인터의 초기화는 임의의 워드 선택을 가능하게 하지는 않을 것이다;즉, 모든 Wn 출력은 초기화 후에 여전히 "0"이다. 어드레스 포인터 초기화 절차는 도 12와 관련하여 논의될 것이다.
MOVE 신호는 워드 선택을 위한 포인터의 진행을 제어한다. 이 MOVE 신호는 FPGA I/O 컨트롤러로부터의 READ, WRITE 및 SPACE 지수 제어 신호로부터 유도된다. 모든 동작이 본질적으로 판독 또는 기록이기 때문에, SPACE 지수 신호는 어느 어드레스 포인터가 MOVE 신호를 제공받을 것인지를 본질적으로 결정한다. 그러므로, 시스템은 한번에 선택된 I/O 어드레스 공간와 관련된 단지 하나의 어드레스 포인터를 동작시키며, 그 시간 동안, 시스템은 그 어드레스 포인터에 MOVE 신호를 제공한다. MOVE 신호 발생은 도 13과 관련하여 이하에 논의된다. 도 11을 참조하면, MOVE 신호가 나타나면, MOVE 신호는 AND 게이트(406)의 입력으로 제공되어 플립-플롭(401-405)의 입력을 인에이블시킨다. 그러므로, 로직 "1"은 시스템 클럭 사이클마다 워드 출력 Wi으로부터 Wi+1로 이동할 것이다; 즉, 포인터는 사이클마다 특정 워드를 선택하기 위하여 Wi로부터 Wi+1로 이동할 것이다. 시프팅 워드 선택 신호가 최종 플립-플롭(405)의 출력(413)(본원에서 "OUT"으로 표시됨)으로 진행할 때, 이 OUT 신호는 그 후에 어드레스 포인터가 다시 초기화되지 않는다면 도 14 및 15와 관련하여 서술되는 멀티플렉스된 교차 칩 어드레스 포인터 체인를 통하여 다음 FPGA 칩으로 진행되어야만 한다.
어드레스 포인터 초기화 절차가 이하에 서술될 것이다. 도 12는 도 11의 어드레스 포인터에 대한 어드레스 포인터 초기화의 상태 전이도를 도시한 것이다. 최초로, 상태(460)는 휴면(idle) 상태이다. DATA_XSFR이 "1"로 설정될때, 시스템은 상태(461)로 진행하며, 여기서 어드레스 포인터는 초기화된다. 여기서, INITIALIZE 신호가 나타난다. 각각의 어드레스 포인터 내의 제 1 플립-플롭이 "1"로 설정되고 어드레스 포인터 내의 모든 다른 플립-플롭이 "0"으로 설정된다. 이 지점에서, 어드레스 포인터의 초기화는 임의의 워드 선택을 인에이블시키지 않을 것이다: 즉, 모든 Wn 출력이 여전히 "0"이다. 다음 상태는 대기 상태(462)이며 DATA_XSFR은 여전히 "1"이다. DATA_XSFR이 "0"이 될 때, 어드레스 포인터 초기화 절차는 종료되고 시스템은 휴면 상태(460)로 리턴한다.
어드레스 포인터를 위해 다양한 MOVE 신호를 발생시키는 MOVE 신호 발생기가 이하에 논의될 것이다. FPGA I/O 컨트롤러(도 10; 도 22 내의 아이템(327))에 의해 발생되는 SPACE 지수는 특정 어드레스 공간(즉, REG 판독, REG 기록, S2H 판독, H2S 기록 및 CLK 기록)을 선택한다. 이러한 어드레스 공간 내에서, 본 발명의 시스템은 액세스되는 특정 워드를 순차적으로 선택한다. 순차적인 워드 선택은 MOVE 신호에 의하여 각각의 어드레스 포인터 내에서 달성된다.
MOVE 신호 발생기의 일실시예가 도 13에 도시되어 있다. 각각의 FPGA 칩(450)은 다양한 소프트웨어/하드웨어 경계 어드레스 공간(즉, REG, S2H, H2S 및 CLK)에 대응하는 어드레스 포인터를 갖는다. FPGA 칩(450)에서 모델링되어 구현되는 사용자의 회로 설계 및 어드레스 포인터 이외에, MOVE 신호 발생기(470)가 FPGA 칩(450) 내에 제공된다. MOVE 신호 발생기(470)는 어드레스 공간 디코더(451) 및 몇 개의 AND 게이트(452-456)를 포함한다. 입력 신호는 와이어 라인(457) 상의 FPGA 판독 신호(F_RD), 와이어 라인(458) 상의 FPGA 기록 신호 (F_WR) 및 어드레스 공간 신호(459)이다. 각각의 어드레스 포인터에 대한 출력 MOVE 신호는 와이어 라인(464) 상의 REGR-이동, 와이어 라인(465) 상의 REGW-이동, 와이어 라인(466) 상의 S2H-이동, 와이어 라인(467) 상의 H2S-이동, 와이어 라인(468) 상의 CLK-이동에 대응하며, 이것들에 따라서 어드레스 공간의 어드레스 포인터는 적용 가능하다. 이러한 출력 신호는 와이어 라인(408)(도 11) 상의 MOVE 신호에 대응한다.
어드레스 공간 디코더(451)는 3-비트 입력 신호(459)를 수신한다. 이 디코더는 또한 단지 2-비트 입력 신호를 수신할 수 있다. 2-비트 신호는 4 개의 가능한 어드레스 공간를 제공하는 반면, 3-비트 입력은 8 개의 가능한 어드레스 공간를 제공한다. 일 실시예에서, CLK는 "00"으로 할당되고, S2H는 "01"로 할당되며, H2S는 "10"으로 할당되고 REG는 "11"로 할당된다. 입력 신호(459)에 따라서, 어드레스 공간 디코더의 출력부는 REG, H2S, S2H, 및 CLK에 각각 대응하는 와이어 라인(460-463)중 하나 상에 "1"을 출력하지만, 나머지 와이어 라인은 "0"으로 설정된다. 그러므로, 임의의 이러한 출력 와이어 라인(460-463)이 "0"인 경우, AND 게이트(452-456)의 대응하는 출력은 "0"이다. 마찬가지로, 임의의 이러한 입력 와이어 라인(460-463)이 "1"인 경우, AND 게이트(452-456)의 대응하는 출력은 "1"이다. 예를 들어, 어드레스 공간 신호(459)가 "10"인 경우, 어드레스 공간(H2S)가 선택된다. 와이어 라인(461)은 "1"이지만, 나머지 와이어 라인(460, 462 및 463)은 "0"이다. 따라서, 와이어 라인(466)이 "1"이지만, 나머지 출력 와이어 라인(464, 465, 467 및 468)은 "0"이다. 마찬가지로, 와이어 라인(460)이 "1"인 경우, REG 공간가 선택되며 판독(F_RD) 또는 기록(F_WR) 동작이 선택되는지에 따라서, 와이어 라인(464) 상의 REGR-이동 신호 또는 와이어 라인(465) 상의 REGW-이동 신호중 하나는 "1"일 것이다.
전술한 바와 같이, SPACE 지수는 FPGA I/O 컨트롤러에 의해 생성된다. 코드에서, MOVE 제어는:
REG 공간 판독 포인터: REGR-move = (SPACE-index==#REG)& READ;
REG 공간 기록 포인터: REGW-move = (SPACE-index==#REG)& WRITE;
S2H 공간 판독 포인터: S2H-move = (SPACE-index==#S2H)& READ;
H2S 공간 기록 포인터: H2S-move = (SPACE-index==#H2S)& WRITE;
CLK 공간 기록 포인터: CLK-move = (SPACE-index==#CLK)& WRITE;
이것은 도 13의 MOVE 신호 발생기의 로직도에 대한 등가 코드이다.
전술한 바와 같이, 각각의 FPGA 칩은 소프트웨어/하드웨어 경계에서의 어드레스 공간과 동일한 수의 어드레스 포인터를 갖는다. 소프트웨어/하드웨어 경계가 4 개의 어드레스 공간(즉, REG, S2H, H2S 및 CLK)를 갖는 경우, 각각의 FPGA 칩은 4 개의 어드레스 공간에 대응하는 4 개의 어드레스 포인터를 갖는다. 각각의 FPGA는 처리되고 있는 선택된 어드레스 공간 내의 특정 선택 워드가 임의의 하나 이상의 FPGA 칩에 존재하거나, 선택된 어드레스 공간 내의 데이터가 각각의 FPGA 칩에서 모델링되고 구현된 다양한 회로 엘리먼트에 영향을 주기 때문에, 이러한 4 개의 어드레스 포인터를 필요로 한다. 선택된 워드가 적절한 FPGA 칩(들) 내의 적절한 회로 엘리먼트(들)에 의해 처리되도록 하기 위하여, 소정 소프트웨어/하드웨어 경계 어드레스 공간(즉, REG, S2H, H2S 및 CLK)와 관련된 어드레스 포인터의 각 세트는 몇 개의 FPGA 칩에 대해 함께 "결합(chain)"된다. 도 11과 관련하여 전술한 바와 같은 MOVE 신호를 통한 특성 시프팅 또는 전파 워드 선택 메커니즘은 이 "체인" 실시예에서, 하나의 FPGA 칩 내의 특정 어드레스 공간와 관련된 어드레스 포인터가 다음 FPGA 칩 내의 동일한 어드레스 공간와 관련된 어드레스 포인터에 "결합"된다는 것을 제외하고, 여전히 사용된다.
어드레스 포인터를 연쇄하기 위하여 4 개의 입력 핀 및 4 개의 출력 핀을 구현하는 것은 동일한 목적을 달성할 것이다. 그러나, 이러한 구현은 자원의 효율적인 사용면에서 너무 비용이 많이 들게 될 것이다; 즉, 두 개의 칩들 사이에 4 개의 와이어가 필요할 것이고, 각 칩에서 4 개의 입력 핀 및 4 개의 출력 핀이 필요할 것이다. 본 발명에 따른 일 실시예는 하드웨어 모델이 칩들 사이에서 단지 하나의 와이어가 사용되도록 하고 각 칩에서 단지 1 입력 핀 및 1 출력 핀(칩 내에 2 I/O 핀)이 사용되도록 하는 멀티플렉스된 교차 칩 어드레스 포인터 체인을 사용한다. 멀티플렉스된 교차 칩 어드레스 포인터 체인의 일 실시예가 도 14에 도시되어 있다.
도 14에 도시된 실시예에서, 사용자의 회로 설계는 리컨피규러블 하드웨어 보드(470) 내의 세 개의 FPGA 칩(415-417)에서 맵핑되고 분할된다. 어드레스 포인터는 블럭(421-432)으로 도시된다. 얼마나 많은 워드가 사용자 주문 회로 설계에 대해 각 칩에서 구현될 있는지에 따라 워드수(Wn) 및 플립-플롭 수가 가변할 수 있다는 것을 제외하면, 각각의 어드레스 포인터, 예를 들어 어드레스 포인터(427)는 도 11에 도시된 어드레스 포인터와 유사한 구조 및 기능을 갖는다.
REGR 어드레스 공간에 대하여, FPGA 칩(415)은 어드레스 포인터(421)를 가지고, FPGA 칩(416)은 어드레스 포인터(425)를 가지며, FPGA 칩(417)은 어드레스 포인터(429)를 갖는다. REGW 어드레스 공간에 대하여, FPGA 칩(415)은 어드레스 포인터(422)를 가지고, FPGA 칩(416)은 어드레스 포인터(426)를 가지며, FPGA 칩(417)은 어드레스 포인터(430)를 갖는다. S2H 어드레스 공간에 대하여, FPGA 칩(415)은 어드레스 포인터(423)를 가지고, FPGA 칩(416)은 어드레스 포인터(427)를 가지며 FPGA 칩(417)은 어드레스 포인터(431)를 갖는다. H2S 어드레스 공간에 대하여, 어드레스 공간에 대하여, FPGA 칩(415)은 어드레스 포인터(424)를 가지고, FPGA 칩(416)은 어드레스 포인터(428)를 가지며 FPGA 칩(417)은 어드레스 포인터(432)를 갖는다.
각각의 칩(415-417)은 멀티플렉서(418-420)를 각각 갖는다. 이러한 멀티플렉서(418-420)는 모델일 수 있고 실제 구현은 당업자들에게 공지된 바와 같이, 레지스터 및 로직 엘리먼트의 조합일 수 있다. 예를 들어, 멀티플렉서는 도 15에 도시된 바와 같이 OR 게이트 내로 들어가는 몇 개의 AND 게이트일 수 있다. 멀티플렉서(487)는 4개의 AND 게이트(481-484) 및 OR 게이트(485)를 포함한다. 멀티플렉서(487)로의 입력은 칩 내의 각 어드레스 포인터로부터의 OUT 및 MOVE 신호이다. 멀티플렉서(487)의 출력(486)은 다음 FPGA 칩에 대한 입력부로 통과되는 체인-아웃 신호(chain-out signal)이다.
도 15에서, 이 특정 FPGA 칩은 I/O 어드레스 공간에 대응하는 네 개의 어드레스 포인터(475-478)를 갖는다. 어드레스 포인터의 출력, OUT 및 MOVE 신호는 멀티플렉서(487)로의 입력이다. 예를 들어, 어드레스 포인터(475)는 와이어 라인(479) 상의 OUT 신호 및 와이어 라인(480) 상의 MOVE 신호를 갖는다. 이러한 신호는 AND 게이트(481)로의 입력이다. 이 AND 게이트(481)의 출력은 OR 게이트 (485)로의 입력이다. OR 게이트(485)의 출력은 이 멀디플렉서(487)의 출력이다. 동작에서, 대응하는 MOVE 신호 및 SPACE 지수와 함께 각각의 어드레스 포인터의 출력에서의 OUT 신호는 멀티플렉서(487)에 대한 선택기 신호로서 동작한다; 즉, (SPACE 지수 신호로부터 유도되는) OUT 및 MOVE 신호 둘 모두는 멀티플렉서로부터의 워드 선택 신호를 체인-아웃 와이어 라인으로 전파하기 위하여 액티브(active)(예를 들어, 로직 "1")로 나타나야만 한다. MOVE 신호는 입력 MUX 데이터 신호로서 특성을 나타낼 수 있도록 어드레스 포인터 내의 플립-플롭을 통하여 워드 선택 신호를 이동시키기 위하여 주기적으로 나타날 것이다.
도 14를 참조하면, 이러한 멀티플렉서(418-420)는 네 개의 세트의 입력 및 하나의 출력을 갖는다. 각 입력 세트는 (1) 특정 어드레스 공간와 관련된 어드레스 포인터를 위한 최종 출력(Wn-1) 와이어 라인(예를 들어, 도 11에 도시된 어드레스 포인터 내의 와이어 라인(413)) 상에서 발견된 OUT 신호, 및 (2) MOVE 신호를 포함한다. 각 멀티플렉서(418-420)의 출력은 체인-아웃 신호이다. 각 어드레스 포인터 내의 플립-플롭은 통한 워드 선택 신호(Wn)는 어드레스 포인터 내의 최종 플립-플롭의 출력에 도달할때 OUT 신호가 된다. 와이어 라인(433-435) 상의 체인-아웃 신호는 동일한 어드레스 포인터와 관련된 OUT 신호 및 MOVE 신호가 둘 모두 액티브으로 나타날 때(예를 들어, "1"로 나타날 때)만, "1"이 될 것이다.
멀티플렉서(418)에 대하여 입력은 어드레스 포인터(421-424)로부터의 OUT 및 MOVE 신호에 각각 대응하는 MOVE 신호(436-439) 및 OUT 신호(440-443)이다. 멀티플렉서(419)에 대하여 입력은 어드레스 포인터(425-428)로부터의 OUT 및 MOVE 신호에 각각 대응하는 MOVE 신호(444-447) 및 OUT 신호(452-455)이다. 멀티플렉서 (420)에 대하여 입력은 어드레스 포인터(429-432)로부터의 OUT 및 MOVE 신호에 각각 대응하는 MOVE 신호(448-451) 및 OUT 신호(456-459)이다.
동작시에, 워드(Wn)의 임의의 제공된 시프트에 대하여, 소프트웨어/하드웨어 경계 내의 선택된 I/O 어드레스 공간와 관련된 단지 그러한 어드레스 포인터 또는 어드레스 포인터의 체인만이 액티브이다. 그러므로, 도 14에서, 어드레스 공간(REGR, REGW, S2H 또는 H2S)중 하나와 관련된 칩(415, 416 및 417) 내의 어드레스 포인터만이 제공된 시프트에 대해 액티브이다. 또한, 플립-플롭을 통한 워드 선택 신호(Wn)의 제공된 시프트에 대하여, 선택된 워드는 버스 대역폭 상의 제한으로 인하여 순차적으로 액세스된다. 일 실시예에서, 버스는 32 비트 폭이며 워드는 32비트이어서, 단지 하나의 워드가 한번에 액세스되어 적절한 리소스로 전달될 수 있다.
어드레스 포인터가 플립-플롭을 통하여 워드 선택 신호를 전파 또는 시프팅하고 있을때, 출력 체인-아웃 신호는 액티브화되지 않으므로(예를 들어, "1"이 아님), 이 칩 내의 이 멀티플렉서는 아직 다음 FPGA 칩으로 워드 선택 신호를 전파할 준비를 하지 않았다. OUT 신호가 액티브(예를 들어 "1")로 나타날때, 체인-아웃 신호는 시스템이 워드 선택 신호를 다음 FPGA 칩으로 전파하거나 시프팅할 준비가되었다는 것을 표시하는 액티브(예를 들어 "1")으로 나타난다. 그러므로, 액세스가 한번에 한칩에 대해 발생된다; 즉, 워드 선택 신호는 워드 선택 시프트 동작이 다른 칩에 대해 수행되기 전에 한 칩 내의 플립-플롭을 통하여 시프트된다. 체인-아웃 신호는 워드 선택 신호가 각 칩에서 어드레스 포인터의 끝에 도달할때만 나타난다. 코드에서, 체인-아웃 신호는:
Chain-out= (REGR-move&REGR-out)|(REGW-move*REGW-out)|(S2H-move&S2H-out)|(H2S-move&H2S-out);
요컨대, 시스템 내의 X 개수의 I/O 어드레스 공간(즉, REG, H2S, S2H, CLK)에 대하여, 각각의 FPGA는 각 어드레스 스페이서에 대하여 하나의 어드레스 포인터씩 X 개의 어드레스 포인터를 갖는다. 각각의 어드레스 포인터의 크기는 각각의 FPGA 칩에서의 사용자의 주문 회로 설계를 모델링하기 위하여 필요한 워드수에 따른다. 특정 FPGA 칩에 대해 n 개의 워드 및 어드레스 포인터에 대해 n 워드를 가정하면, 이 특정 어드레스 포인터는 n 개의 출력(즉, W0, W1, W2,...,Wn-1)을 갖는다. 이러한 출력(Wi)은 또한 워드 선택 신호라고 명명된다. 특정 워드(Wi)가 선택될때, Wi 신호는 액티브(즉, "1")로 나타난다. 이 워드 선택 신호는 이 칩 내의 어드레스 포인터의 끝에 도달할 때까지 이 칩의 어드레스 포인터를 아래로 시프트하거나 전파하며, 그 끝 지점에서, 상기 신호는 다음 칩 내의 어드레스 포인터를 통하여 워드 선택 신호(Wi)의 전파를 개시하는 체인-아웃 신호의 발생을 트리거한다. 이 방식에서, 소정 I/O 어드레스 공간와 관련된 어드레스 포인터의 체인은 이 리컨피규러블 하드웨어 보드 내의 모든 FPGA 칩에 대해 구현될 수 있다.
C. 게이트되는 데이터/클럭 네트워크 분석
본 발명의 다양한 실시예는 게이트되는 데이터 로직(gated data logic) 및 게이트된 클럭 로직 분석과 관련된 클럭 분석을 수행한다. 게이트된 클럭 로직(또는 클럭 네트워크) 및 게이트된 데이터 네트워크 결정은 에뮬레이션 동안 하드웨어 모델에서의 로직 평가 및 소프트웨어 클럭의 성공적인 구현에 대해 중요하다. 도 4와 관련하여 서술된 바와 같이, 클럭 분석을 단계(305)에서 수행된다. 이 클럭 분석 프로세스에 대해 더 부연하기 위하여, 도 16은 본 발명의 일 실시예에 따른 흐름도를 도시한 것이다. 도 16은 또한 게이트된 이미지 분석을 도시한다.
SEmulation 시스템은 소프트웨어에서 사용자 회로 설계의 완전한 모델 및 하드웨어에서 사용자 회로 설계의 일부분을 갖는다. 이러한 하드웨어 부분은 클럭 컴포넌트, 특히 유도된 클럭을 포함한다. 클럭 전달 타이밍 문제는 소프트웨어 및 하드웨어 사이의 경계로 인하여 발생한다. 완전 모델이 소프트웨어에 존재하기 때문에, 소프트웨어는 레지스터 값에 영향을 주는 클럭 에지를 검출할 수 있다. 레지스터의 소프트웨어 모델 이외에, 이러한 레지스터는 물리적으로 하드웨어 모델 내에 위치된다. 하드웨어 레지스터가 자신의 각각의 입력(즉, D 입력에서 Q 출력으로 데이터를 이동시키는 것)을 또한 평가하도록 하기 위하여, 소프트웨어/하드웨어 경계는 소프트웨어 클럭을 포함한다. 소프트웨어 클럭은 하드웨어 모델 내의 레지스터가 정확하게 평가한다는 것을 보증한다. 소프트웨어 클럭은 본질적으로 하드웨어 레지스터 컴포넌트로의 클럭 입력을 제어하기보다는 오히려 하드웨어 레지스터의 인에이블 입력을 제어한다. 상기 소프트웨어 클럭은 레이스 조건(race condition)이 없으므로, 유지-시간 위반을 피하기 위한 정확한 타이밍 제어가 필요하지 않다. 도 16에 도시된 클럭 네트워크 및 게이트된 데이터 로직 분석 프로세스은 레이스 조건이 피해지고 융통성있는 소프트웨어/하드웨어 경계 구현이 제공되도록 하드웨어 레지스터에 대한 클럭 및 데이터 전달 시스템을 모델링하고 구현하는 방식을 제공한다.
전술한 바와 같이, 제 1 클럭은 테스트-벤치 프로세스로부터의 클럭 신호이다. 조합한 소자로부터 유도된 그러한 클럭 신호와 같은 모든 다른 클럭은 유도되거나 게이트된 클럭이다. 제 1 클럭은 게이트된 클럭 및 게이트된 데이터 신호 둘 모두를 유도할 수 있다. 대부분에 대해, 단지 몇 개(예를 들어, 1-10)의 유도되거나 게이트된 클럭이 사용자의 회로 설계 내에 존재한다. 이러한 유도된 클럭은 소프트웨어 클럭으로 구현될 수 있고 소프트웨어 내에 있게 될 것이다. 상대적으로 큰 수(예를 들어 10 이상)의 유도 클럭이 회로 설계 내에 제공되는 경우, SEmulation 시스템은 I/O 오버헤드를 감소시키기 SEmulation 시스템의 성능을 유지시키기 위하여 이것을 하드웨어 내로 모델링할 것이다. 게이트된 데이터는 어떤 조합 로직를 통하여 제 1 클럭으로부터 유도된 클럭과는 다른 레지스터의 데이터 또는 제어 입력이다.
게이트된 데이터/클럭 분석 프로세스은 단계(500)에서 시작한다. 단계(501)는 HDL 코드로부터 발생된 유용한 자원 설계 데이터베이스 코드를 사용하고 SEmulation 시스템의 레지스터 컴포넌트로 사용자의 레지스터 엘리먼트를 맵핑한다. SEmulation 레지스터로의 사용자 레지스터의 이러한 일-대-일 맵핑은 이후의 모델링 단계를 용이하게 한다. 어떤 경우에, 이 맵핑은 특정 프리미티브(primitive)를 갖는 레지스터 엘리먼트를 설명하는 사용자 회로 설계를 처리하는 것을 필요로 한다. 그러므로, RTL 레벨 코드에 대하여, SEmulation 레지스터는 RTL 레벨 코드가 더 하위 레벨 구현을 가변시키도록 하는 충분히 상위 레벨에 있기 때문에 쉽게 고속으로 사용될 수 있다. 게이트 레벨 네트리스트에 대하여, SEmulation 시스템은 컴포넌트의 셀 라이브러리에 액세스하여 이를 특정 회로 설계-특정 로직 엘리먼트에 적합하게 하기 위하여 변경할 것이다.
단계(502)는 하드웨어 모델의 레지스터 컴포넌트로부터 클럭 신호를 추출한다. 이러한 단계는 시스템이 제 1 클럭 및 유도된 클럭을 결정하도록 한다. 이 러한 단계는 또한 회로 설계의 다양한 컴포넌트에 의해 필요한 모든 클럭 신호를 결정한다. 이 단계로부터의 정보는 소프트웨어/하드웨어 클럭 모델링 단계를 용이하게 한다.
단계(503)는 제 1 클럭 및 유도된 클럭을 결정한다. 제 1 클럭은 테스트-벤치 컴포넌트로부터 발생되어 소프트웨어에서만 모델링된다. 유도된 클럭은 결합 로직으로부터 유도되고, 이 로직은 차례로 제 1 클럭에 의해 유도된다. 디폴트(default)에 의해, 본 발명의 SEmulation 시스템은 유도된 클럭을 소프트웨어에 유지할 것이다. 유도된 클럭의 수가 작은 경우(예를 들어 10 이하), 이러한 유도된 클럭은 소프트웨어 클럭으로 모델링될 수 있다. 이러한 유도된 클럭을 발생시키기 위한 결합 컴포넌트의 수가 작아서, 이러한 결합 컴포넌트를 소프트웨어 내에 존재하도록 함으로써 상당한 I/O 오버헤드가 부가되지는 않는다. 그러나, 유도된 클럭의 수가 큰 경우(예를 들어 10 이상), 이러한 유도된 클럭은 I/O 오버헤드를 최소화하기 위하여 하드웨어에서 모델링될 수 있다. 종종, 사용자의 회로 설계는 제 1 클럭으로부터 유도된 상당히 많은 유도 클럭 컴포넌트를 사용한다. 그러므로, 시스템은 소프트웨어 클럭의 수를 작게 유지하기 위하여 하드웨어에서 클럭을 구성한다.
결정 단계(504)는 시스템에게 임의의 유도된 클럭이 사용자의 회로 설계에서 발견되는지를 결정할 것을 요구한다. 그렇지 않은 경우, 단계(504)는 "NO"로 결정하고 사용자 회로 설계의 모든 클럭이 제 1 클럭이고 이러한 클럭이 소프트웨어에서 간단하게 모델링되기 때문에 단계(508)에서 클럭 분석이 종료된다. 유도된 클럭이 사용자의 회로 설계에서 발견되는 경우, 단계(504)는 "YES"로 결정하여 알고리즘은 단계(505)로 진행한다.
단계(505)는 제 1 클럭으로부터 유도된 클럭으로의 팬-아웃(fan-out) 결합 컴포넌트를 결정한다. 즉, 이 단계는 결합 컴포넌트를 통하여 제 1 클럭으로부터 클럭 신호 데이터 경로를 트레이스한다. 단계(506)는 유도된 클럭으로부터 팬-인(fan-in) 결합 컴포넌트를 결정한다. 즉, 이 단계는 결합 컴포넌트로부터 유도된 클럭으로의 클럭 신호 데이터 경로를 트레이스한다. 상기 시스템에서 팬-아웃 및 팬-인 세트를 결정하는 것은 소프트웨어에서 반복적으로 행해진다. 넷(net) N의 팬-인 세트는 다음과 같다:
FanIn Set of a net N:
find all the components driving net N;
for each component X driving net N do:
if the component X is not a combinational component then
return;
else
for each input net Y of the component X
add the FanIn set W of net Y to the FanIn Set of net N
end for
add the component X into N;
end if
endfor
게이트된 클럭 또는 데이터 로직 네트워크는 넷 N의 팬-인 세트 및 팬-아웃 세트를 반복적으로 결정하고 이들의 인터섹션(intersection)을 결정함으로써 결정된다. 여기서 최종 목표는 소위 넷 N의 팬-인 세트를 결정하는 것이다. 넷 N은 통상적으로 팬-인 예상(perspective)으로부터 게이트된 클럭 로직을 결정하기 위한 클럭 입력 노드이다. 팬-인 예상으로부터 게이트된 데이터 로직을 결정하기 위하여, 넷 N은 가까이의 데이터 입력과 관련된 클럭 입력 노드이다. 노드가 레지스터 상에 존재하는 경우, 넷 N은 그 레지스터와 관련된 데이터 입력을 위한 그 레지스터로의 클럭 입력이다. 시스템은 넷 N을 구동시키는 모든 컴포넌트를 찾아낸다. 넷 N을 구동시키는 각각의 컴포넌트 X에 대하여, 상기 시스템은 컴포넌트 X가 결합 컴포넌트인지 아닌지 여부를 결정한다. 각각의 컴포넌트 X가 결합 컴포넌트가 아닌 경우, 넷 N의 팬-인 세트는 결합 컴포넌트를 가지지 않고 넷 N은 제 1 클럭이다.
그러나, 적어도 하나의 컴포넌트 X가 결합 컴포넌트인 경우, 시스템은 컴포넌트 X의 입력 넷 Y을 결정한다. 여기서, 상기 시스템은 컴포넌트 X로의 입력 노드를 찾아냄으로써 회로 설계를 고찰한다. 각각의 컴포넌트 X의 각 입력 넷 Y에 대하여, 넷 Y에 결합되는 팬-인 세트 W가 존재할 수 있다. 넷 Y의 이 팬-인 세트 W는 넷 N의 팬-인 세트에 부가되고 나서, 컴포넌트 X가 세트 N에 부가된다.
넷 N의 팬-아웃 세트가 유사한 방식으로 결정된다. 넷 N의 팬-아웃 세트는 다음과 같이 결정된다:
FanOut Set of a netN:
find all the components using the net N;
for each component X using net N do:
if the component X is not a combination component then
return;
else
for each output net Y of the component X
add the FanOut Set of net Y to the FanOut Set of net N
end for
add the component X into N;
end if
endfor
다시, 게이트된 클럭 또는 데이터 로직 네트워크는 넷 N의 팬-인 세트 및 팬-아웃 세트를 결정하고 이들의 인터섹션을 결정함으로써 결정된다. 여기서 최종 목표는 소위 넷 N의 팬-아웃 세트를 결정하는 것이다. 넷 N은 통상적으로 팬-아웃 예상(perspective)으로부터 게이트된 데이터 로직를 결정하기 위한 클럭 출력 노드이다. 그러므로, 넷 N을 사용하는 모든 로직 엘리먼트 세트가 결정될 것이다. 팬-아웃 예상으로부터 게이트된 데이터 로직를 결정하기 위하여, 넷 N은 가까이의 데이터 출력과 관련된 클럭 출력 노드이다. 노드가 레지스터 상에 존재하는 경우, 넷 N은 그 레지스터와 관련된 제 1 클럭-구동된 입력을 위한 그 레지스터의 출력이다. 시스템은 넷 N을 사용하는 모든 컴포넌트를 찾아낸다. 넷 N을 사용하는 각각의 컴포넌트 X에 대하여, 상기 시스템은 컴포넌트 X가 결합 컴포넌트인지 아닌지 여부를 결정한다. 각각의 컴포넌트 X가 결합 컴포넌트가 아닌 경우, 넷 N의 팬-아웃 세트는 결합 컴포넌트를 가지지 않고 넷 N은 제 1 클럭이다.
그러나, 적어도 하나의 컴포넌트 X가 결합 컴포넌트인 경우, 시스템은 컴포넌트 X의 출력 넷 Y를 결정한다. 여기서, 상기 시스템은 컴포넌트 X로부터의 출력 노드를 찾아냄으로써 회로 설계를 고찰한다. 각각의 컴포넌트 X로부터의 각 출력 넷 Y에 대하여, 넷 Y에 결합되는 팬-아웃 세트 W가 존재할 수 있다. 넷 Y의 이 팬-아웃 세트 W는 넷 N의 팬-아웃 세트에 부가되고 나서, 컴포넌트 X가 세트 N에 부가된다.
단계(507)는 클럭 네트워크 또는 게이트된 클럭 로직을 결정한다. 클럭 네트워크는 팬-인 및 팬-아웃 결합 컴포넌트의 인터섹션이다.
마찬가지로, 게이트된 로직 회로를 결정하는데 동일한 팬-인 및 팬-아웃 원리가 사용된다. 게이트된 클럭과 같이, 게이트된 데이터는 어떤 결합 로직를 통하여 제 1 클럭에 의해 구동된 레지스터의 데이터 또는 제어 입력(클럭을 제외한)이다. 게이트된 데이터 로직는 게이트된 데이터의 팬-인 및 제 1 클럭으로부터의 팬-아웃의 인터섹션이다. 그러므로, 클럭 분석 및 게이트된 데이터 분석은 어떤 결합 로직을 통한 게이트된 클럭 네트워크/로직 및 게이트된 데이터 로직를 발생시킨다. 후술되는 바와 같이, 게이트된 클럭 네트워크 및 게이트된 데이터 네트워크 결정은 에뮬레이션 동안 하드웨어 모델에서의 로직 평가 및 소프트웨어 클럭의 성공적인 구현에 중요하다. 클럭/데이터 네트워크 분석은 단계(508)에서 종료된다.
도 17은 본 발명의 일 실시예에 따른 하드웨어 모델의 기본적인 형성 블럭을 도시한 것이다. 레지스터 컴포넌트에 대하여, SEmulation 시스템은 에지 트리거(즉, 플립-플롭) 및 레벨 검출(즉, 래치) 레지스터 하드웨어 모델 둘 모두를 구성하기 위한 기본적인 블럭으로서 비동기식 부하 제어를 갖는 D타입 플립-플롭을 사용한다. 블럭을 형성하는 이 레지스터 모델은 다음의 포트: Q(출력 상태);A_E(비동기식 인에이블);A_D(비동기식 데이터);S_E(동기 인에이블);S_D(동기 데이터); 및 System.clk(시스템 클럭)을 갖는다.
이 SEmulation 레지스터 모델은 비동기식 인에이블(A_E) 입력의 양의(+) 레벨 또는 시스템 클럭의 양의(+) 에지에 의하여 트리거된다. 이러한 두 개의 양의 에지 또는 양의 레벨 트리거링 이벤트중 하나가 발생할때, 레지스터 모델은 비동기식 인에이블(A_E) 입력을 찾는다. 비동기식 인에이블(A_E) 입력이 인에이블되는 경우, 출력 (Q)은 비동기식 데이터(A_D)의 값을 나타낸다; 그렇지 않으면, 동기 인에이블(S_E)이 인에이블되는 경우, 출력(Q)은 동기 데이터(S_D)의 값을 나타낸다. 한편, 어떤 비동기식 인에이블(A_E) 입력이나 동기 인에이블(S_E) 입력도 인에이블되지 않는 경우, 출력(Q)은 시스템 클럭의 양의(+) 에지의 결정에도 불구하고 평가되지 않는다. 이 방식에서, 이러한 인에이블 포트로의 입력은 이 기본 형성 블럭 레지스터 모델의 동작을 제어한다.
시스템은 이러한 레지스터 모델의 인에이블 입력을 제어하기 위한 특정 인에이블 레지스터인 소프트웨어 클럭을 사용한다. 복잡한 사용자 회로 설계에서, 수 백만 개의 엘리먼트가 회로 설계에서 발견되고, 이에 따라서 SEmulation 시스템은 하드웨어 모델에서 수 백만 개의 엘리먼트를 구현할 것이다. 이러한 엘리먼트 모두를 개별적으로 제어하는 것은 하드웨어 모델로 수 백만 개의 신호를 전송하는 오버헤드가 소프트웨어에서 이러한 엘리먼트를 평가하는 것보다 많은 시간이 들것이기 때문에, 값이 비싸다. 그러나, 이 복잡한 회로 설계는 통상적으로 단지 몇 개(1-10)의 클럭만을 요구하며 레지스터 및 결합 컴포넌트만을 갖는 시스템의 상태 변화를 제어하는데 클럭들만으로도 충분하다. SE뮬레이터 시스템의 하드웨어 모델은 단지 레지스터 및 결합 컴포넌트만을 사용한다. SE뮬레이터 시스템은 또한 소프트웨어 클럭을 통하여 하드웨어 모델의 평가를 제어한다. SEmulation 시스템에서, 레지스터용 하드웨어 모델은 다른 하드웨어 컴포넌트에 직접 접속된 클럭을 갖지 않으며; 오히려, 소프트웨어 커널이 모든 클럭의 값을 제어한다. 몇 개의 클럭 신호를 제어함으로써, 커널은 무시 가능한 양의 공동-프로세서 개입 오버헤드를 가지고 하드웨어 모델의 평가를 완전히 제어할 수 있게 된다.
레지스터 모델이 래치로서 사용되는지 또는 플립-플롭으로 사용되는지 여부에 따라서, 소프트웨어 클럭은 비동기식 인에이블(A_E) 또는 동기 인에이블(S_E) 와이어 라인중 하나로의 입력일 수 있다. 소프트웨어 모델로부터 하드웨어 모델로의 소프트웨어 클럭의 인가는 클럭 컴포넌트의 에지 검출에 의해 트리거된다. 소프트웨어 커널이 클럭 컴포넌트의 에지를 검출할때, 이 커널은 CLK 어드레스 공간을 통하여 클럭-에지 레지스터를 설정한다. 이것 클럭-에지 레지스터는 하드웨어 레지스터 모델로의 클럭 입력이 아니라 인에이블 입력을 제어한다. 글로벌 시스템 클럭은 하드웨어 레지스터 모델로의 클럭 입력을 여전히 제공한다. 그러나, 클럭-에지 레지스터는 이중-버퍼링된 인터페이스를 통하여 하드웨어 레지스터 모델로의 소프트웨어 클럭 신호를 제공한다. 후술되는 바와 같이, 소프트웨어 클럭으로부터 하드웨어 모델로의 이중-버퍼 인터페이스는 모든 레지스터 모델이 글로벌 시스템 클럭과 관련하여 동기식으로 업데이트되도록 한다. 그러므로, 소프트웨어 클럭을 사용하면 유지 시간 위반의 위험이 제거된다.
도 18(a) 및 18(b)는 래치 및 플립-플롭용 형성 블럭 레지스터의 구현을 도시한 것이다. 이러한 레지스터 모델은 적절한 인에이블 입력을 통하여 소프트웨어-클럭 제어된다. 레지스터 모델이 플립-플롭 또는 래치로서 사용되는지 여부에 따라, 비동기식 포트(A_E,A_D) 및 동기식 포트(S_E,S_D)는 소프트웨어 클럭 또는 I/O 동작중 하나를 위해 사용된다. 도 18(a)는 래치로서 사용되는 경우의 레지스터 모델 구현을 도시한다. 래치는 레벨에 민감하다; 즉, 클럭 신호가 나타나는(예를 들어, "1")한, 출력(Q)은 입력(D)을 따른다. 여기서, 소프트웨어 클럭 신호는 비동기식 인에이블(A_E)로 제공되며 데이터 입력은 비동기 데이터(A_D) 입력으로 제공된다. I/O 동작에 대하여, 소프트웨어 커널은 Q 포트 내로 값을 다운로드하기 위하여 동기 인에이블(S_E) 및 동기 데이터(S_D) 입력을 사용한다. S_E 포트는 REG 공간 어드레스 포인터로서 사용되며 S_D는 국부적인 데이터 버스로/로부터 데이터에 액세스하기 위하여 사용된다.
도 18(b)는 플립-플롭 설계로 사용되는 경우의 레지스터 모델 구현을 도시한다. 플립-플롭 설계는 다음 상태 로직를 결정하기 위하여 다음의 포트: 데이터(D), 세트(S), 리셋(R) 및 인에이블(E)을 사용한다. 플립-플롭 설계의 모든 다음 상태 로직는 동기 데이터(S_D) 입력 내로 공급되는 하드웨어 결합 컴포넌트로 팩터링된다. 소프트웨어 클럭은 동기 인에이블(S_E) 입력부로의 입력이다. I/O 동작에 대하여, 소프트웨어 커널은 Q 포트 내로 값을 다운로드하기 위하여 비동기식 인에이블(A_E) 및 비동기식 데이터(A_D) 입력을 사용한다. A_E 포트는 REG 공간 기록 어드레스 포인터로서 사용되고 A_D 포트는 국부적인 데이터 버스로/로부터 데이터에 액세스하기 위하여 사용된다.
소프트웨어 클럭은 이하에 서술될 것이다. 본 발명의 소프트웨어 클럭의 일 실시예는 하드웨어 레지스터 모델로의 클럭 인에이블 신호여서 이러한 하드웨어 레지스터 모델로의 입력에서의 데이터가 시스템 클럭과 함께 그리고 시스템 클럭과 동기적으로 평가된다. 이것은 레이스 조건 및 유지-시간 위반을 제거한다. 소프트웨어 클럭 로직의 일 실시예는 클럭 에지 검출시 하드웨어 내의 부가적인 로직를 트리거하는 소프트웨어 내의 클럭 에지 검출 로직를 포함한다. 이와같은 인에이블 신호 로직는 데이터가 이러한 하드웨어 레지스터 모델로 도착하기 이전에 하드웨어 레지스터 모델로 인에이블 입력에 대한 인에이블 신호를 발생시킨다. 게이트된 클럭 네트워크 및 게이트된 데이터 네트워크 결정은 하드웨어 가속 모드 동안 하드웨어 모델에서의 로직 평가 및 소프트웨어 클럭의 성공적인 구현에 중요하다. 전술한 바와 같이, 클럭 네트워크 또는 게이트된 클럭 로직는 게이트된 클럭의 팬-인 및 제 1 클럭의 팬-아웃의 인터섹션이다. 마찬가지로, 게이트된 데이터 로직는 또한 게이트된 데이터의 팬-인 및 데이터 신호에 대한 제 1 클럭의 팬-아웃의 인터섹션이다. 이러한 팬-인 및 팬-아웃 개념은 도 16과 관련하여 상술되어 있다.
전술한 바와 같이, 제 1 클럭은 소프트웨어에서 테스트-벤치 프로세스에 의해 생성된다. 유도되거나 게이트된 클럭은 제 1 클럭에 의해 차례로 구동되는 결합 로직 및 레지스터의 네트워크로부터 발생된다. 디폴트에 의하여, 본 발명의 SEmulation 시스템은 유도된 클럭을 소프트웨어에 유지시킬 것이다. 유도된 클럭의 수가 작은 경우(예를 들어, 10 이하), 이러한 유도된 클럭은 소프트웨어 클럭으로 모델링될 수 있다. 이러한 유도 클럭을 발생시키기 위한 결합 컴포넌트의 수가 적어서, 소프트웨어 내의 이러한 결합 컴포넌트를 모델링함으로써 I/O 오버헤드가 부가되지 않는다. 그러나, 유도된 클럭의 수가 큰 경우(예를 들어, 10 이상), 이러한 유도된 클럭 및 이들의 결합 컴포넌트는 I/O 오버헤드를 최소화하기 위하여 하드웨어에서 모델링될 수 있다.
궁극적으로, 본 발명의 일 실시예에 따라서, (제 1 클럭으로의 입력을 통하여) 소프트웨어에서 발생된 클럭 에지 검출은 (클럭 에지 레지스터로의 입력을 통하여) 하드웨어에서의 클럭 검출로 변화될 수 있다. 소프트웨어에서의 클럭 에지 검출은 하드웨어에서의 이벤트를 트리거시켜서 데이터 신호 이전에 클럭 인에이블 신호를 수신함으로써, 데이터 신호의 평가가 유지-시간 위반을 피하기 위해 시스템 클럭과 동기화되어 발생하도록 한다.
전술한 바와 같이, SEmulation 시스템은 소프트웨어에서 사용자의 회로 설계의 완전 모델 및 하드웨어에서 사용자의 회로 설계의 일부를 갖는다. 커널에서 규정된 바와 같이, 소프트웨어는 하드웨어 레지스터 값에 영향을 주는 클럭 에지를 검출할 수 있다. 하드웨어 레지스터가 또한 자신들의 각 입력을 평가하도록 하기 위하여, 소프트웨어/하드웨어 경계는 소프트웨어 클럭을 포함한다. 소프트웨어 클럭은 하드웨어 모델 내의 레지스터가 시스템 클럭과 동기화하여 그리고 임의의 유지-시간 위반 없이 평가되도록 한다. 소프트웨어 클럭은 본질적으로 하드웨어 레지스터 컴포넌트로의 클럭 입력을 제어한다기 보다는 차라리 하드웨어 레지스터 컴포넌트의 인에이블 입력을 제어한다. 소프트웨어 클럭을 구현하기 위한 이중-버퍼링된 방법은 레지스터가 레이스 조건을 피하기 위하여 시스템 클럭과 동기화하여 평가되도록 하고 유지-시간 위반을 피하기 위한 정확한 타이밍 제어에 대한 필요성을 제거하도록 한다.
도 19는 본 발명에 따른 클럭 구현 시스템의 일 실시예를 도시한 것이다. 처음에, 게이트된 클럭 로직 및 게이트된 데이터 로직는 도 16과 관련하여 전술한 바와 같이 SEmulation 시스템에 의해 결정된다. 그리고 나서, 게이트된 클럭 로직 및 게이트된 데이터 로직가 분리된다. 이중 버퍼를 구현할때, 구동 소스 및 이중 버퍼링된 제 1 로직는 분리되어야만 한다. 따라서, 팬-인 및 팬-아웃 분석으로부터, 게이트된 데이터 로직(513) 및 게이트된 클럭 로직(514)가 분리된다.
모델링된 제 1 클럭 레지스터(510)는 제 1 버퍼(511) 및 제 2 버퍼(512)를 포함하는데, 이것들은 둘 모두 D 레지스터이다. 이 제 1 클럭은 소프트웨어에어 모델링되지만 이중-버퍼 구현은 소프트웨어 및 하드웨어 둘 모두에서 모델링된다. 클럭 에지 검출은 하드웨어 모델에 대한 소프트웨어 클럭 신호를 발생시키도록 하드웨어 모델을 트리거하기 위하여 소프트웨어 내의 제 1 클럭 레지스터(510)에서 발생된다. 데이터 및 어드레스는 와이어 라인(519 및 529)에서 각각 제 1 버퍼(511)로 들어간다. 와이어 라인(521) 상에서의 이 제 1 버퍼(511)의 Q 출력은 제 2 버퍼(512)의 D 입력에 결합된다. 이 제 1 버퍼(511)의 Q 출력은 또한 궁극적으로 클럭 에지 레지스터(515)의 제 1 버퍼(516)의 클럭 입력을 구동시키기 위하여 와이어 라인(522) 상에서 게이트된 클럭 로직(514)로 제공된다. 와이어 라인(523) 상에서의 제 2 버퍼(512)의 출력은 궁극적으로 사용자의 주문-설계된 회로 모델에서 와이어 라인(530)을 통하여 레지스터(518)의 입력을 구동시키기 위하여 게이트된 데이터 로직(513)에 제공된다. 제 1 클럭 레지스터(510) 내의 제 2 버퍼(512)로의 인에이블 입력은 상태 머신으로부터 와이어 라인(533) 상의 INPUT-EN 신호이며, 이것은 평가 사이클을 결정하고 이에 따라서 다양한 신호를 제어한다.
클럭 에지 레지스터(515)는 또한 제 1 버퍼(516) 및 제 2 버퍼(517)를 포함한다. 클럭 에지 레지스터(515)는 하드웨어에서 구현된다. 클럭 에지 검출이 (제 1 클럭 레지스터(510)로의 입력을 통하여) 소프트웨어에서 발생할때, 이것은 하드웨어에서 (클럭 에지 레지스터(515)를 통하여) 하드웨어 내의 동일한 클럭 에지 검출을 트리거할 수 있다. 와이어 라인(524) 상에서 제 1 버퍼(516)로의 D 입력은 로직 "1"로 설정된다. 와이어 라인(525)상의 클럭 신호는 게이트 클럭 로직(514)으로부터 유도되며 궁극적으로 제 1 버퍼(511)의 와이어 라인(522) 상의 출력에서 제 1 클럭 레지스터(510)로부터 유도된다. 와이어 라인(525) 상의 클럭 신호는 게이트 클럭 신호이다. 제 1 버퍼(516)에 대한 인에이블 와이어 라인(526)은 I/O 및 평가 주기(이후 개시됨)를 제어하는 상태 머신으로부터 ~EVAL 신호이다. 또한 제 1 버퍼(516)는 와이어 라인(527) 상의 RESET 신호를 갖는다. 상기 동일한 RESET 신호는 클럭 에지 레지스터(515)내의 제 2 버퍼(517)에 제공된다. 와이어 라인(529) 상의 제 1 버퍼(516)의 출력(Q)은 제 2 버퍼(517)에 입력(D)에 제공된다. 또한 제 2 버퍼(517)는 와이어 라인(527) 상의 CLK-EN 신호와 RESET 입력에 대한 와이어 라인(528) 상의 인에이블 입력을 갖는다. 와이어 라인(532) 상의 제 2 버퍼(517)의 출력(Q)은 사용자의 주문-설계 회로 모델에 있는 레지스터(518)의 인에이블 입력에 제공된다. 레지스터(518)와 함께 버퍼(511,512,517)는 시스템 클럭에 의해 클럭화된다. 클럭 에지 레지스터(515)에 있는 버퍼(516)만이 게이트 클럭 로직(514)으로부터 게이트 클럭에 의해 클럭화된다.
레지스터(518)는 하드웨어에서 모델링되고 사용자의 주문 회로 설계의 일부인 통상의 D-타입 레지스터 모델이다. 본 발명의 클럭 구현 수단의 본 실시예에 의해 평가는 엄격히 제어된다. 본 클럭-셋업의 궁극적 목적은 레지스터에 의한 데이터 신호 평가가 시스템 클럭은 사용하고 레이스(race) 조건은 사용하지 않고 동기화될 수 있도록 와이어 라인(530)에서 데이터 신호 이전에 레지스터(518)에 와이어 라인(532)에서 클럭 인에이블 신호가 도달할 수 있게 한다.
반복을 위해, 모델링되는 제 1 클럭 레지스터(510)는 소프트웨어로 모델링되지만 그의 이중 버퍼 실행은 소프트웨어와 하드웨어 모두에서 모델링된다. 클럭 에지 레지스터(515)는 하드웨어에서 구현된다. 팬-인 및 팬-아웃 분석으로부터 게이트 데이터 로직(513)과 게이트 클럭 로직(514)은 모델링을 목적으로 분리되며, 소프트웨어(게이트 데이터 및 게이트 클럭의 수가 작은 경우) 또는 하드웨어(게이트 데이터 및 게이트 클럭의 수가 큰 경우)에서 모델링될 수 있다. 게이트 클럭 네트워크 및 게이트 데이터 네트워크 결정은 하드웨어 가속 모드 동안 하드웨어 모델에서의 로직 평가 및 소프트웨어 클럭의 성공적인 수행에 중요하다.
소프트웨어 클럭 수행은 ~EVAL, INPUT-EN, RESET 신호의 발생(assertion) 타이밍과 함께 도 19에 도시된 클럭 설정을 주로 따른다. 제 1 클럭 레지스터(510)는 하드웨어 모델에 대한 소프트웨어 클럭 발생을 트리거시키기 위한 클럭 에지를 검출한다. 상기 클럭 에지 검출 이벤트는 클럭 에지 레지스터(151)가 동일한 클럭 에지를 검출하도록 와이어 라인(525) 상의 클럭 입력, 게이트 클럭 로직(514) , 및 와이어 라인(522)을 통한 클럭 에지 레지스터(515)의 "액티베이션(activation)"을 트리거시킨다. 이러한 경우, 소프트웨어에서 발생하는 클럭 검출(제 1 클럭 레지스터(510)에서 입력(519, 520)을 통해)은 하드웨어에서 클럭 에지 검출(클럭 에지 레지스터(515)에서 입력(525)을 통해)로 전달될 수 있다. 이때, 제 1 클럭 레지스터(510)에 있는 제 2 버퍼(512)로의 IMPUT-EN 와이어 라인(533)과 클럭 에지 레지스터(515)에 있는 제 2 버퍼(517)로의 CLKEN 와이어 라인(528)은 나타나지 않아 어떠한 데이터 평가도 이루어지지 않는다. 따라서, 클럭 에지는 하드웨어 레지스터 모델에서 데이터가 평가되기 이전에 검출된다. 주목할 것은 상기 단계에서, 와이어 라인(519) 상의 데이터 버스로부터의 데이터는 게이트 데이터 로직(513) 밖으로 전파되지 않고 하드웨어-모델링된 사용자 레지스터(518) 속으로 전파된다는 것이다. 실제로, 데이터는 제 1 클럭 레지스터(510)에 있는 제 2 버퍼(512)에 도달하지 않으며 이는 와이어 라인(533) 상의 INPUT-EN 신호가 아직 나타나지 않았기 때문이다.
I/O 단계 동안, 와이어 라인(526)상의 ~EVAL 신호는 클럭 에지 레지스터(515)에 있는 제 1 버퍼(516)를 인에이블 시키도록 발생된다. ~EVAL 신호는 게이트 클럭 로직(514)을 통해 제 1 버퍼(516)의 와이어 라인(525) 상의 클럭 입력으로 게이트 클럭 로직이 통하게 함으로써 게이트 클럭 신호를 모니터한다. 따라서, 4-상태 평가 상태 머신에 관련하여 이하 설명될 것이며, ~EVAL 신호는 도 19에 도시된 시스템 부분을 통해 데이터 및 클럭 신호를 안정화시키는 것이 요구되는 한 유지될 수 있다.
신호가 안정화될 때, I/O가 종결되거나, 시스템이 데이터 평가를 위해 준비할 경우, ~EVAL은 제 1 버퍼(516)를 디스에이블시키도록 감소된다. CLK-EN 신호는 발생되고 제 2 버퍼(517)를 인에이블 시키도록 와이어 라인(528)을 통해 제 2 버퍼(517)에 적용되며 레지스터(518)에 대한 인에이블 입력에 와이어 라인(532) 상의 출력(Q)에 와이어 라인(529) 상의 로직"1"값을 전송한다. 레지스터(518)는 인에이블되고 와이어 라인(530)에 존재하는 임의의 데이터는 시스템 클럭에 의해 레지스터(518)속으로 동기식으로 클럭화된다. 판독기가 관찰가능함에 따라, 레지스터(518)로의 인에이블 신호는 상기 레지스터(518)로의 데이터 신호의 평가 보다 빠르다.
와이어 라인(533) 상의 IMPUT-EN 신호는 제 2 버퍼(512)에 나타나지 않는다. 또한, 와이어 라인(527) 상의 RESET 에지 레지스터 신호는 이들 버퍼를 리셋시키도록 클럭 에지 레지스터(515)에 있는 버퍼(5156,517)에 나타나며 이들의 출력이 로직 "0"이되게 한다. INPUT-EN 신호는 버퍼(512)에 대해 나타나고, 와이어 라인(521) 상의 데이터는 와이어 라인(530) 상의 사용자 회로 레지스터(518)에 대한 게이트 데이터 로직(513)로 전파된다. 상기 레지스터(518)로의 인에이블 입력은 로직 "0"이 되기 때문에, 와이어 라인(530) 상의 데이터는 레지스터(518) 속에서 클럭화될 수 없다. 그러나 이전 데이터는 이미 RESET 신호가 레지스터(518)를 디스에이블 시키도록 발생되기 이전에 와이어 라인(532) 상에 이미 발생된 인에이블 신호에 의해 클럭화된다. 따라서, 레지스터(518)에 대한 입력 데이터 뿐만 아니라 사용자 하드웨어 모델 회로 설계의 일부인 다른 레지스터에 대한 입력은 이들 각각의 레지스터 입력 포트에서 안정화된다. 클럭 에지가 차후 소프트웨어에서 검출되는 경우, 제 1 클럭 레지스터 (510) 및 하드웨어에 있는 클럭 에지 레지스터(515)는 레지스터(518)의 입력에서 데이터 대기 및 이들 각각의 레지스터 입력에서 데이터 대기가 서로 클럭화되어 시스템 클럭에 의해 동기화되도록 레지스터(518)로의 인에이블 신호를 활성화시킨다.
앞서 설명된 것처럼, 소프트웨어 클럭 실행은 ~EVAL, INPUT-EN, CLK-EN, RESET 신호의 발생 타이밍과 함께 도 19에 도시된 클럭 설정을 주로 따른다. 도 20은 본 발명의 일실시예에 따라 도 19의 소프트웨어 클럭 로직을 제어하기 위한 4가지 상태의 유한 상태 머신을 나타낸다.
상태 510에서, 시스템은 휴면(idle)되거나 또는 일부 I/O 동작은 진행중이다. ~EVAL 신호는 로직"0"이다. ~EVAL 신호는 평가 주기를 결정하며 시스템 컨트롤러에 의해 발생되고, 시스템에서 로직를 안정화시키기 위해 요구되는 다수의 클럭 주기를 지속시킨다. 통상적으로, ~EVAL 신호 주기는 컴파일 동안 배치 수단에 의해 결정되며 가장긴 직선 와이어의 길이 및 가장긴 세그먼트 멀티플렉스 와이어의 길이(즉, TDM 회로)에 기초한다. 평가 동안, ~EVAL 신호는 로직 "1"이다.
상태 541에서, 클럭은 인에이블이다. CLK-EN 신호는 로직 "1"에서 발생되며, 하드웨어 레지스터 모델에 대한 인에이블 신호가 발생된다. 그러나, 하드웨어 레지스터 모델에서 이전에 게이트된 데이터는 유지-시간 위반의 위험 없이 동기식으로 평가된다.
상태 542에서, 새로운 데이터는 INPUT-EN 신호가 로직"1"에서 발생될 때 인에이블이다. RESET 신호는 하드웨어 레지스터 모델로부터 인에이블 신호를 이동시키도록 발생된다. 그러나, 게이트 로직 네트워크를 통해 하드웨어 레지스터 모델로 인에이블되는 새로운 데이터는 의도된 하드웨어 레지스터 모델 결정을 위해 전파가 계속되거나 또는 인에이블 신호가 다시 발생될 때 하드웨어 레지스터 모델로 클럭되도록 대기된다.
상태 543에서, 새로운 데이터 전파는 로직 "1"에서 EVAL 신호가 유지되는 동안 로직에서 안정화된다. 도 9(A), 9(B) 및 9(C)와 관련한 시분할 멀티플렉스(TDM) 회로에 대해 상기 설명된 것처럼 멀티플렉서-와이어는 로직"1"에 있다. ~EVAL 신호는 감소 또는 로직 "0"으로 설정되며, 시스템은 휴면 상태(540)로 복귀되어 소프트웨어에 의해 클럭 에지의 검출에 따라 평가되도록 대기된다.
D. FPGA 어레이 및 컨트롤
상기 SEmulator 시스템은 컴포넌트 형태를 포함하는 다양한 컨트롤을 기반으로 상기 사용자 회로설계 데이터를 소프트웨어 및 하드웨어 모델로 초기 컴파일한다. 하드웨어 컴파일 프로세스동안, 도 6에서 상술한 바와 같이, 상기 시스템은 최적 파티션, 배치, 및 상기 사용자 회로설계를 구성하는 다양한 컴포넌트들의 상호접속에 대한 맵핑, 배치, 및 라우팅 프로세스를 수행한다. 알려진 프로그래밍 툴을 이용하여, 많은 FPGA 칩들을 포함하는 하드웨어 보드를 리컨피규러블하기 위해 비트스트림 컨피규레이션 파일 또는 프로그래머 오브젝트 파일(.pof)(또는 선택적으로, 로우 이진 파일(.rbf))들이 참조된다. 각각의 칩은 사용자 회로설계에 해당하는 하드웨어 모델의 일부를 포함한다.
일 실시예에서, 상기 SEmulator 시스템은 4 ×4 어레이의 FPGA 칩, 총 16개의 칩을 사용한다. 예시적인 FPGA 칩들은 Xilinx XC4000 시리즈 패밀리의 FPGA 로직 소자 및 Altera FLEX 10K 소자를 포함한다.
상기 Xilinx XC4000 시리즈의 FPGA들은 XC4000, XC4000A, XC4000D, XC4000H, XC4000E, XC4000EX, XC4000L, 및 XC4000XL을 포함하여 이용될 수 있다. 특정 FPGA들은 Xilinx XC4005H, XC4025, 및 Xilinx 4028EX를 포함한다. Xilinx 4028EX FPGA 엔진들은 단일 PCI 보드 용량에서 50만개의 게이트에 이른다. 이러한 Xilinx FPGA들은 본 발명에 참조로 포함되는 이들의 데이터북, Xilinx, 프로그래머블 로직 데이터북(9/96)에서 상세히 알 수 있다. Altera FPGA들은 본 발명에 참조로 포함되는 데이터북, Altera, 1996 데이터북(1996년 6월)에서 상세히 알 수 있다.
XC4025 FPGA에 대한 일반적인 간략한 설명이 제공된다. 각 어레이 칩은 240-핀 Xilinx 칩으로 이루어진다. Xilinx XC4025 칩을 갖는 어레이 보드는 440,000개의 배치가능한(configurable) 게이트들을 포함하고, 연산-집약적인 테스크를 수행할 수 있다. Xilinx XC4025 FPGA는 1024개의 배치가능한 로직 블럭(CLB)으로 이루어진다. 각 CLB는 32비트의 비동기식 SRAM 또는 작은 양의 일반적인 부울 로직, 및 2개의 스트로브(strobe) 레지스터를 구현할 수 있다. 칩 주변에는, 언스트로브 I/O 레지스터가 제공된다. XC4025 대신 XC4005H를 이용할 수 있다. 이는 120,000 배치가능한 게이트들을 갖는 어레이 보드의 상대적으로 저가의 버전이다. XC4005H 소자는 고전력 24㎃ 구동회로를 갖지만, 표준 XC4000 시리즈의 입/출력 플립플롭이 없다. 이들 및 다른 Xilinx FPGA들은 공개적으로 이용가능한 데이터 시트를 통해 상세히 알 수 있고, 본 발명에 참조로 포함될 수 있다.
Xilinx XC4000 시리즈 FPGA의 기능은 구성 데이터를 내부 메모리 셀로 로딩함으로써 주문생산할 수 있다. 이러한 메모리 셀에 저장된 값들은 FPGA의 로직 기능과 상호접속을 결정할 수 있다. 이러한 FPGA의 구성 데이터는 온-칩 메모리에 저장될 수 있고 외부 메모리로부터 로딩될 수도 있다. FPGA는 외부 직렬 또는 병렬 PROM으로부터 구성 데이터를 리드하거나, 외부 소자로부터 FPGA로 구성 데이터가 라이트될 수 있다. 이러한 FPGA들은 특히 하드웨어가 동적으로 변하거나 사용자가 하드웨어를 다른 에플리케이션에 적용하길 원하는 경우, 무제한 횟수로 재프로그램될 수 있다.
일반적으로, XC4000 시리즈 FPGA는 1024개까지 CLB를 갖는다. 각 CLB는 2가지 레벨의 룩-업 테이블을 갖고, 2개의 4-입력 룩-업 테이블(또는 함수 제너레이터 F 및 G)은 3번째 3-입력 룩-업 테이블(또는 함수 제너레이터 H), 및 2개의 플립플롭 또는 래치로 몇개의 입력을 제공한다. 이러한 룩-업 테이블의 출력은 플립플롭 또는 래치와 별개로 구동될 수 있다. CLB는 다음의 임의의 부울 함수의 조합을 구현할 수 있다: (1) 4 또는 5개 변수의 임의의 함수, (2) 4개 변수의 임의의 함수, 4개의 비상관 변수의 임의의 제 2 함수, 및 3개의 비상관 변수의 제 3 함수, (3) 4개 변수의 하나의 함수 및 6개 변수의 다른 함수, (4) 4개 변수의 임의의 함수, 및 (5) 9개 변수의 몇몇 함수. CLB 입력을 등록하거나 룩-업 테이블 출력을 저장하기 위해 2개의 D타입 플립플롭 또는 래치가 이용될 수 있다. 이러한 플립플롭은 룩-업 테이블과 별개로 사용될 수 있다. DIN은 이러한 2개의 플립플롭 또는 래치 중 하나의 직접적인 입력으로서 사용될 수 있고 H1은 H 함수 제너레이터를 통해 다른 함수 제너레이터를 구동할 수 있다.
CLB의 각 4-입력 함수 제너레이터(즉, F 및 G)는 신호를 전송하거나 받는 빠른 제너레이션동안 전용 산술 로직을 포함하고, "carry-in" 및 "carry-out"을 갖는 2비트 가산기(adder)를 구현하도록 구성될 수 있다. 이러한 함수 제너레이터들은 또한 리드/라이트 랜덤 액세스 메모리(RAM)로서 구현될 수 있다. 4-입력 와이어 라인들은 RAM을 위한 어드레스 라인으로 사용된다.
Altera FLEX 10K 칩은 개념상 다소 유사하다. 이러한 칩은 다중 32비트 버스를 갖는 SRAM-기반의 프로그래머블 로직 소자(PLD)이다. 특히, 각각의 FLEX 10K100 칩은 대략 100,000 게이트들, 12개의 내장 어레이 블럭(EAB), 624 로직 어레이 블럭(LAB), LAB당 8 로직 엘리먼트(LE)(또는 4,992 LE), 5,392개 플립플롭 또는 레지스터, 406개 I/O 핀, 및 총 503 핀을 포함한다.
Altera FLEX 10K 칩은 내장형 어레이의 내장 어레이 블럭(EAB)과 로직 어레이의 로직 어레이 블럭(LAB)을 포함한다. EAB는 다양한 메모리(예, RAM, ROM, FIFO), 및 복잡한 로직 기능(예, 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 곱셈기, 데이터 변형 기능, 상태 머신)을 구현하도록 이용될 수 있다. 메모리 기능 구현에 따라, EAB는 2048비트를 제공한다. 로직 기능 구현에 따라, EAB는 100 내지 600 게이트를 제공한다.
LE를 통해 LAB는 중간 크기의 로직 블럭을 구현하도록 이용될 수 있다. 각각의 LAB는 대략 96 로직 게이트를 나타내고 8 LE 및 로컬 상호접속부를 포함한다. LE는 4-입력 룩-업 테이블, 프로그래머블 플립플롭, 및 캐리 및 캐스케이드 함수를 위한 전용 신호 경로를 포함한다. 생성될 수 있는 통상의 로직 기능은 카운터, 어드레스 디코더, 또는 작은 상태 머신을 포함한다.
Altera FLEX10K 칩의 더 상세한 설명은 Altera, 1996 데이터북(1996년 6월)에서 알 수 있고, 본 발명에 참조로 포함된다. 상기 데이터북은 또한 지원되는 프로그래밍 소프트웨어를 상세히 포함한다.
도 8은 4 ×4 FPGA 어레이 및 그 상호접속의 일 실시예를 나타낸다.
SEmulator의 이러한 실시예는 FPGA 칩에 대한 크로스 바 또는 부분적인 크로스 바 커넥션을 이용하지 않음을 주의한다. FPGA 칩은 제 1 열의 칩 F11 내지 F14, 제 2 열의 칩 F21 내지 F24, 제 3 열의 칩 F31 내지 F34, 및 제 4 열의 칩 F41 내지 F44를 포함한다. 일 실시예에서, 각 FPGA 칩(예, 칩 F23)은 SEmulator 시스템의 FPGA I/O 컨트롤러와 인터페이스하기 위한 아래의 핀들을 갖는다:
인터페이스
데이터 버스 32
스페이스 지수 3
리드, 라이트, EVAL 3
데이터 XSFR 1
어드레스 포인터 체인 2
총계 41

따라서, 일 실시예에서, 각 FPGA 칩은 상기 SEmulator 시스템과 인터페이스하기 위한 41의 핀만을 이용한다. 이러한 핀들은 도 22에서 추가로 설명된다.
이러한 FPGA 칩들은 크로스바가 없는 또는 크로스바가 일부 없는 상호 접속부를 통해 서로 상호 접속된다. 칩(F11)과 칩(F14) 사이의 상호 접속부(602)와 같이 칩들간의 각 상호 접속부는 44 핀 또는 44 배선을 나타낸다. 다른 실시예에서 각 상호 접속부는 44 핀 이상을 나타낸다. 또 다른 실시예에서 각 상호 접속부는 44 핀 미만을 나타낸다.
각 칩은 6개의 상호 접속부를 갖는다. 예를 들어 칩(F11)은 상호 접속부(600∼605)를 갖는다. 또한, 칩(F33)은 상호 접속부(606∼611)를 갖는다. 이들 상호 접속부는 행을 따라 수평으로 열을 따라 수직으로 이어진다. 각 상호 접속부는 행을 따라 2개의 칩들간 또는 열을 따라 2개의 칩들간 직접 접속을 제공한다. 따라서 예를 들어 상호 접속부(600)는 칩(F11)과 칩(F13)을 직접 접속하고; 상호 접속부(601)는 칩(F11)과 칩(F12)을 직접 접속하고; 상호 접속부(602)는 칩(F11)과 칩(F14)을 직접 접속하고; 상호 접속부(603)는 칩(F11)과 칩(F31)을 직접 접속하고; 상호 접속부(604)는 칩(F11)과 칩(F21)을 직접 접속하고; 상호 접속부(605)는 칩(F11)과 칩(F41)을 직접 접속한다.
마찬가지로, 어레이의 에지(예를 들어 칩(F11))에 위치하지 않는 칩(F33)에 대해 상호 접속부(606)는 칩(F33)과 칩(F13)을 직접 접속하고; 상호 접속부(607)는 칩(F33)과 칩(F23)을 직접 접속하고; 상호 접속부(608)는 칩(F33)과 칩(F34)을 직접 접속하고; 상호 접속부(609)는 칩(F33)과 칩(F43)을 직접 접속하고; 상호 접속부(610)는 칩(F33)과 칩(F31)을 직접 접속하고; 상호 접속부(611)는 칩(F33)과 칩(F32)을 직접 접속한다.
칩(F11)은 칩(F13)으로부터 한 홉 내에 위치하기 때문에, 상호 접속부(600')는 "1"이라 한다. 칩(F11)은 칩(F12)으로부터 한 홉 내에 위치하기 때문에, 상호 접속부(601)는 "1"이라 한다. 마찬가지로, 칩(F11)은 칩(F14)으로부터 한 홉 내에 위치하기 때문에, 상호 접속부(602)는 "1"이라 한다. 마찬가지로, 칩(F33)에 대해 모든 상호 접속부는 "1"이라 한다.
이 상호 접속 구조는 각 칩이 두 "점프" 또는 상호 접속부 내의 어레이에 있는 다른 칩과 접속될 수 있게 한다. 따라서, 칩(F11)은 다음 두 경로 중 어느 하나에 의해 칩(F33)에 접속된다: (1) 상호 접속부(600)∼상호 접속부(606); 또는 (2) 상호 접속부(603)∼상호 접속부(610). 요컨대, 상기 경로는 (1) 우선 행을 따르고 이어서 열을 따라, 또는 (2) 우선 열을 따르고 이어서 행을 따를 수 있다.
도 8은 수평 및 수직 상호 접속부에 의해 4 ×4 어레이로 구성된 FPGA 칩을 나타내지만, 기판 상에서의 실제 물리적인 실시는 확장 피기백 기판으로 로우 및 하이 뱅크를 통한다. 그래서 일 실시예에서는 칩(F41-F44) 및 칩(F21-F24)이 로우 뱅크에 있다. 칩(F31-F34) 및 칩(F11-F14)은 하이 뱅크에 있다. 피기백 기판은 칩(F11-F14) 및 칩(F21-F24)을 포함한다. 따라서, 어레이를 확장하기 위해 다수(예를 들어 8개)의 칩을 포함하는 피기백 기판이 뱅크에 더해지므로, 현재 칩(F11-F14)을 포함하는 열 상부가 확장된다. 다른 실시예에서, 피기백 기판은 현재 칩(F41-F44)을 포함하는 열 아래의 어레이를 확장하게 된다. 또 다른 실시예는 칩(F14, F24, F34, F44)의 우측을 확장시킨다. 또 다른 실시예는 칩(F11, F21, F31, F41)의 좌측을 확장시킨다.
도 7은 도 8의 4 ×4 FPGA 어레이의 접속 매트릭스를 "1" 또는 "0"으로 나타낸다. 이 접속 매트릭스는 SEmulation 시스템의 하드웨어 맵핑, 배치 및 라우팅에 사용되는 비용 함수로부터 배치 비용 결과를 발생시키는데 사용한다. 비용 함수는 도 6에 관하여 상술하였다. 예와 같이 칩(F11)은 칩(F13)으로부터 한 홉 내에 위치하므로, F11-F13의 접속 매트릭스 엔트리는 "1"이다.
도 21은 본 발명의 일 실시예에 따른 단일 FPGA 칩의 상호 접속 핀-아웃을 나타낸다. 각 칩은 6 세트의 상호 접속부를 구비하여, 각 세트는 특정 개수의 핀을 포함한다. 일 실시예에서 각 세트는 44 핀을 갖는다. 각 FPGA 칩의 상호 접속부는 수평(동-서) 및 수직(북-남)으로 배향된다. 서쪽의 상호 접속부 세트는 W[43:0]라 한다. 동쪽의 상호 접속부 세트는 E[43:0]라 한다. 북쪽의 상호 접속부 세트는 N[43:0]이라 한다. 남쪽의 상호 접속부 세트는 S[43:0]라 한다. 이러한 완전한 상호 접속부 세트는 인접한 칩들에 접속하기 위한 것으로; 즉, 이 상호 접속부들은 어떤 칩 이상으로 "홉"하지 않는다. 예를 들어 도 8에서 칩(F33)은 N[43:0]의 상호 접속부(607), E[43:0]의 상호 접속부(608), S[43:0]의 상호 접속부(609) 및 W[43:0]의 상호 접속부를 갖는다.
도 21로 돌아가면, 2 세트의 추가 상호 접속부가 남아있다. 한 세트의 상호 접속부는 수직으로 - YH[21:0] 및 YH[43:22] - 이어지는 인접하지 않은 상호 접속부를 위한 것이다. 또 한 세트의 상호 접속부는 수평으로 - XH[21:0] 및 XH[43:22] - 이어지는 인접하지 않은 상호 접속부를 위한 것이다. 각 세트 YH[...] 및 XH[...]는 각 세트의 절반이 22 핀을 포함하도록 둘로 나누어진다. 이 구성은 각 칩이 동일하게 제조될 수 있게 한다. 따라서, 각 칩은 상부, 하부, 좌측 및 우측에 위치하는 인접하지 않은 칩에 한 홉으로 상호 접속될 수 있다. 이 FPGA 칩은 또한 범용 신호, FPGA 버스 및 JTAG 신호용 핀(들)을 나타낸다.
다음에 FPGA I/O 컨트롤러를 설명한다. 이 컨트롤러는 우선 도 10에서 항목(327)으로서 간략히 소개되었다. FPGA I/O 컨트롤러는 데이터를 관리하고 PCI 버스와 FPGA 어레이간의 트래픽을 제어한다.
도 22는 FPGA 칩의 뱅크와 함께 PCI 버스와 FPGA 어레이간 FPGA 컨트롤러의 일 실시예를 나타낸다. FPGA I/O 컨트롤러(700)는 CTRL_FPGA 유닛(701), 클럭 버퍼(702), PCI 컨트롤러(703), EEPROM(704), FPGA 직렬 구성 인터페이스(705), 경계 스캔 검사 인터페이스(706) 및 버퍼(707)를 포함한다. 당업자들에게 알려진 적절한 전력/전압 조정 회로가 제공된다. 전형적인 소스는 전압 검출기/조정기 및 검출 증폭기에 연결되어 다양한 환경 조건에서 전압을 거의 유지하는 Vcc를 포함한다. 각 FPGA 칩에 대한 Vcc에는 그 사이에 고속 동작 박막 퓨즈가 구비된다. 모든 FPGA 칩에 대한 CONFIG# 및 LOCAL_BUS(708)에 대한 LINTI#에 Vcc-HI가 제공된다.
CTRL_FPGA 유닛(701)은 다양한 유닛 및 버스 중에서 각종 제어, 검사 및 읽기/쓰기 독립 데이터를 취급하는 FPGA I/O 컨트롤러(700)의 제1 컨트롤러이다. CTRL_FPGA 유닛(701)은 FPGA 칩의 로우 및 하이 뱅크에 연결된다. FPGA 칩(F41-F44 및 F21-F24)(즉, 로우 뱅크)는 로우 FPGA 버스(718)에 연결된다. FPGA 칩(F31-F34 및 F11-F14)(즉, 하이 뱅크)은 하이 FPGA 버스(719)에 연결된다. 이들 FPGA 칩(F11-F14, F21-F24, F31-F34, F41-F44)은 도 8의 FPGA 칩에 대응하며, 그 부호를 유지한다.
이들 FPGA 칩(F11-F14, F21-F24, F31-F34, F41-F44) 사이의 로우 뱅크 버스(718) 및 하이 뱅크 버스(719)는 적절한 부하를 위한 두꺼운 막 칩 저항이다. 로우 뱅크 버스(718)에 연결된 저항군(713)은 예를 들어 저항(716) 및 저항(717)을 포함한다. 하이 뱅크 버스(719)에 연결된 저항군(712)은 예를 들어 저항(714) 및 저항(715)을 포함한다.
확장을 원하면, 보다 많은 FPGA 칩이 로우 뱅크 버스(718) 및 하이 뱅크 버스(719)에 FPGA 칩(F11, F21)의 오른쪽 방향으로 설치될 수도 있다. 일 실시예에서는 피기백 기판(720)과 비슷한 피기백 기판을 통해 확장이 이루어진다. 따라서, 이들 FPGA 칩의 뱅크가 처음 8개의 FPGA 칩(F41-F44 및 F31-34)만 갖고 있었다면, 로우 뱅크의 FPGA 칩(F24-F21) 및 하이 뱅크의 칩(F14-F11)을 포함하는 피기백 기판(720)을 추가함으로써 확장이 더 가능하다. 피기백 기판(720)은 또한 추가 로우 및 하이 뱅크 버스 및 두꺼운 막 칩 저항을 포함한다.
PCI 컨트롤러(703)는 FPGA I/O 컨트롤러(700) 및 32 비트 PCI 버스(709) 사이의 주 인터페이스이다. 만약 PCI 버스가 64 비트 및/또는 66 MHz로 확장된다면, 적절한 조정이 본 발명의 개념 및 범위를 벗어나지 않으면서 본 시스템에서 이루어질 수 있다. 이러한 조정은 이하에서 설명될 것이다. 본 시스템에 사용될 수 있는 PCI 컨트롤러(703)의 일 예는 PLX 테크놀러지의 PCI 9080 또는 9060이다. PCI 9080은 적절한 로컬 버스 인터페이스, 컨트롤 레지스터, FIFO, 및 PCI 버스에 대한 PCI 인터페이스를 구비한다. 데이터 북 PLX 테크놀러지, PCI 9080 데이터 시트(1997년 2월 28일 버전 0.93)는 본 명세서에 참조로서 포함된다.
PCI 컨트롤러(703)는 LOCAL_BUS(708)를 통해 CTRL_FPGA 유닛(701)과 PCI 버스(709)에 데이터를 전달한다. LOCAL_BUS는 제어 버스 부분, 어드레스 버스 부분, 및 제어 신호를 위한 데이터 버스 부분, 어드레스 신호, 및 데이터 신호 각각을 포함한다. 만약 PCI 버스가 64비트로 확장된다면, LOCAL_BUS(708)의 데이터 버스 부분 또한 64 비트로 확장될 수 있다. PCI 컨트롤러(703)는 EEPROM(704)에 커플링되고, EEPROM(704)은 PCI 컨트롤러(703)을 위한 구성 데이터를 포함한다. 예시적인 EEPROM(704)은 National Semiconductor의 93CS46이다.
PCI 버스(709)는 FPGA I/O 컨트롤러(700)에 33 MHz의 클럭 신호를 공급한다. 클럭 신호는 동기화 목적을 위하여, 그리고 낮은 타이밍 스큐(timing skew)를 위하여 와이어 라인(710)을 통해 클럭 버퍼(702)에 제공된다. 이러한 클럭 버퍼(702)의 출력은 와이어 라인(711)을 통해 모든 FPGA 칩에, 그리고 와이어 라인(721)을 통해 CTRL_FPGA 유닛(701)에 공급되는 33MHz의 글로벌 클럭(GL_CLK) 신호이다. 만약 PCI 버스가 66MHz로 확장된다면, 클럭 버퍼는 또한 본 시스템에 66MHz를 공급할 것이다.
FPGA 직렬 구성 인터페이스(705)는 FPGA 칩(F11-F14, F21-F24, F31-F34, 및 F41-F44)을 구성하기 위하여 구성 데이터를 제공한다. Altera 데이터 북, Altera, 1996 DATA BOOK(1996년 6월)은 구성 장치 상에 상세한 정보를 제공하고 처리한다. FPGA 직렬 구성 인터페이스(705)는 또한 LOCAL_BUS(708) 및 병렬 포트(721)에 결합된다. 부가하여, FPGA 직렬 구성 인터페이스(705)는 CONF_INTF 와이어 라인(723)을 통해 CTRL_FPGA 유닛(701) 및 FPGA 칩(F11-F14, F21-F24, F31-F34, 및 F41-F44)에 결합된다.
경계 스캔 테스트 인터페이스(706)는 소프트웨어에 의해 프로세서의, 또는 시스템의 로직 유닛 및 회로를 외부적으로 체킹하기 위하여 일정한 특정 테스트 명령 세트의 JTAG 구현을 제공한다. 이러한 인터페이스(706)는 IEEE Std. 1149-1990 사양으로 컴파일한다. Altera 데이터 북, Altera, 1996 DATA BOOK(1996년 6월) 및 어플리케이션 노트 39(Altera 장치에서의 JTAG 경계-스캔 테스트)를 참조하라. 상기 두 참조문헌은 보다 많은 정보를 위하여 본 명세서에 참조로서 결합된다. 경계 스캔 테스트 인터페이스(706)은 BST_INTF 와이어 라인(724)을 통해 CTRL_FPGA 유닛(701) 및 FPGA 칩(F11-F14, F21-F24, F31-F34, 및 F41-F44)에 결합된다.
CTRL_FPGA 유닛(701)은 버퍼(707)를 따라, 각각 로우 뱅크 32 비트 버스(718) 및 하이 뱅크 32 비트 버스(719)를 통해 FPGA 칩의 로우(칩 F41-44 및 F21-F24) 및 하이(칩 F31-34 및 F11-F14) 뱅크로/로부터 데이터를 전달하고, 로우 뱅크 32 비트 FD[31:0]에 대한 F_BUS(725) 및 하이 뱅크 32 비트 FD[63:32]에 대한 F_BUS(726)를 전달한다.
일 실시예는 로우 뱅크 버스(718) 및 하이 뱅크 버스(719)의 PCI 버스(709)의 처리량의 두 배가 된다. PCI 버스(709)는 33 MHz에서 32 비트 폭이다. 그리하여 처리량은 132 MB(= 33 MHz*4 바이트)이다. 로우 뱅크 버스(718)는 PCI 버스 주파수 절반(33/2 MHz = 16.5 MHz)에서 32비트이다. 하이 뱅크 버스(719) 또한 PCI 버스 주파수 절반(33/2 MHz = 16.5 MHz)에서 32비트이다. 64 비트 로우 뱅크 버스 및 하이 뱅크 버스의 처리량은 또한 132 MB(= 16.5 MHz * 8 바이트)이다. 그리하여, 로우 뱅크 버스 및 하이 뱅크 버스의 성능은 PCI 버스의 성능을 따라간다. 달리 말하면, 성능 제한은 로우 뱅크 버스 및 하이 뱅크 버스가 아니라 PCI 버스에 있다.
본 발명의 일 실시예에 따라, 어드레스 포인터는 또한 각 소프트웨어/하드웨어 경계 어드레스 공간에 대하여 각 FPGA 칩으로 구현된다. 이러한 어드레스 포인터는 멀티플렉싱된 크로스 칩 어드레스 포인터 체인(multiplexed cross chip address pointer chain)을 통하여 몇 개의 FPGA 칩에 대해 결합된다. 도 9, 11, 12, 14 및 15에 관련하여 위에서 논의된 어드레스 포인터를 참조하라. 주어진 어드레스 공간과 연관된 어드레스 포인터의 체인에 대한, 그리고 몇 개의 칩에 대한 워드 선택 신호를 이동시키기 위하여, 체인 아웃 와이어 라인이 제공되어야 한다. 이러한 체인 아웃 와이어 라인은 칩 사이의 화살표로서 도시된다. 로우 뱅크에 대한 상기 체인 아웃 와이어 라인은 칩(F23)과 칩(F22) 사이의 와이어 라인(730)이다. 하이 뱅크에 대한 또다른 상기 체인 아웃 와이어 라인은 칩(F31)과 칩(F32) 사이의 와이어 라인(731)이다. 로우 뱅크 칩(F21) 단부에서의 체인 아웃 와이어 라인(732)은 LAST_SHIFT_L로서 CTRL_FPGA 유닛(701)에 결합된다. 하이 뱅크 칩(F11) 단부에서의 체인 아웃 와이어 라인(733)은 LAST_SHIFT_H로서 CTRL_FPGA 유닛(701)에 결합된다. 이러한 신호 LAST_SHIFT_L 및 LAST_SHIFT_H는 워드 선택 신호가 FPGA 칩을 통해 전파될 때 각 뱅크에 대한 워드 선택 신호이다. 이러한 신호 LAST_SHIFT_L 및 LAST_SHIFT_H 중 하나가 CTRL_FPGA 유닛(701)에 로직 "1"을 제공할 때, 이것은 워드 선택 신호가 칩의 각각의 뱅크 단부로 진행되었음을 나타낸다.
CTRL_FPGA 유닛(701)은 와이어 라인(734) 상에 기록 신호(F_WR), 와어 라인(735) 상에 판독 신호(F_RD), 와이어 라인(736) 상에 DATA_XSFR 신호, 및 와이어 라인(738) 상에 SPACE[2:0] 신호를 FPGA 칩으로부터 그리고 FPGA 칩으로 제공한다. CTRL_FPGA 유닛(701)은 와이어 라인(739) 상에서 EVAL_REQ# 신호를 수신한다. 기록 신호(F_WR), 판독 신호(F_RD), DATA_XSFR 신호, 및 SPACE[2:0] 신호는 FPGA 칩의 어드레스 포인터에 대하여 함께 동작한다. 기록 신호(F_WR), 판독 신호(F_RD), DATA_XSFR 신호, 및 SPACE[2:0] 신호는 SPACE 지수(SPACE[2:0])에 의해 결정된 것으로서 선택 어드레스 공간과 연관된 어드레스 포인터에 대하여 MOVE 신호를 생성하도록 사용된다. DATA_XSFR 신호는 어드레스 포인터를 초기화하기 위하여 사용되고 워드 당(word-by-word) 전송 프로세스를 시작한다.
EVAL_REQ# 신호는 FPGA 칩 중 어느 것이 이 신호를 확인한다면 평가 사이클을 전체적으로 다시 시작하도록 사용된다. 예를 들어, 데이터를 평가하기 위하여, 데이터는 PCI 버스를 통해 호스트 프로세서의 컴퓨팅 스테이션의 주 메모리로부터 FPGA로 전달 또는 기록된다. 전달 종료시, 평가 사이클은 평가 프로세스를 촉진하기 위하여 어드레스 포인터 초기화 및 소프트웨어 클럭의 동작을 포함하여 시작한다. 그러나, 여러가지 이유로, 특정 FPGA 칩은 데이터를 전체 다시 평가해야 할 수 있다. 이러한 FPGA 칩은 EVAL_REQ# 신호를 확인하고 CNTI_FPGA 칩(701)은 평가 사이클은 전체적으로 다시 시작한다.
도 23는 도 22의 CTRL_FPGA 유닛(701) 및 버퍼(707)의 보다 상세한 예시를 보여준다. 도 22에 도시된 CTRL_FPGA 유닛(701)에 대한 동일한 입력/출력 신호 및 대응 참조 번호는 도 23에서도 유지되어 사용된다. 그러나, 도 22에 도시되지 않은 부가적인 신호 및 와이어/버스 라인은, 예를 들어, SEM_FPGA 출력 인에이블(1016), 로컬 인터럽트 출력(Local INTO)(708a), 로컬 판독/기록 제어 신호(708b), 로컬 어드레스 버스(708c), 로컬 인터럽트 입력(Local INTE#)(708d), 및 로컬 데이터 버스(708e)와 같은 새로운 참조번호를 사용하여 기술될 것이다.
CTRL_FPGA 유닛(701)은 전달 수행 체킹 로직(Transfer Done Checking Logic; XSFR_DONE Logic)(1000), 평가 제어 로직(EVAL Logic)(1001), DMA 디스크립터 블록(1002), 컨트롤 레지스터(1003), 평가 타이머 로직(EVAL timer)(1004), 어드레스 디코더(1005), 기록 플래그 시퀀서 로직(1006), FPGA 칩 판독/기록 제어 로직(SEM_FPGA R/W Logic)(1007), 디멀티플렉서 및 래치(DEMUX logic)(1008), 및 도 22의 버퍼(707)에 대응하는 래치(1009-1012)를 포함한다. 와이어/버스(721) 상의 글로벌 클럭 신호(CTRL_FPGA_CLK)는 CTRL_FPGA 유닛(701)의 모든 로직 요소/블록에 제공된다.
전송 종료(transfer done) 체킹 로직(XSFR_DONE)(1000)은 LAST_SHIFT_H(733), LAST_SHIFT_L(732) 및 로컬 INTO(708a)를 수신한다. XSFR_DONE 로직(1000)은 와이어/버스(1013) 상의 전송 종료 신호(XSFR_DONE)를 EVAL 로직(1001)으로 출력한다. LAST_SHIFT_H(733) 및 LAST_SHIFT_L(732)의 수신에 기초하여, XSFR_DONE 로직(1000)은 필요시 평가 사이클이 시작할 수 있도록 데이터 전송의 종료를 체킹한다.
EVAL 로직(1001)은 와이어/버스(739) 상의 EVAL_REQ# 신호 및 와이어/버스(1015) 상의 WR_XSFR/RD_XSFR 신호와 함께, 와이어/버스(1013) 상의 전송 종료 신호(XSFR_DONE)를 수신한다. EVAL 로직(1001)은 두 개의 출력 신호, 와이어/버스(1014) 상의 Start EVAL 및 와이어/버스(736) 상의 DATA_XSFR을 생성한다. EVAL 로직은 FPGA 버스와 PCI 버스 사이의 데이터 전송이 어드레스 포인터를 초기화하기 시작할 때를 가리킨다. EVAL 로직은 데이터 전송이 종료될 때 XSFR_DONE 신호를 수신한다. WR_XSFR/RD_XSFR 신호는 전송이 판독인지 또는 기록인지를 가리킨다. 일단 I/O 사이클이 종료되면 (또는 I/O 사이클의 온셋 이전에), EVAL 로직은 EVAL 타이머로의 시작~EVAL 신호를 이용하여 평가 사이클을 시작할 수 있다. EVAL 타이머는 평가 사이클의 주기을 규정하고 모든 레지스터와 결합 컴포넌트들에 대한 데이터 전달(propagation)을 안정시키기 위해 필요한 만큼 유효한 평가 사이클을 유지시킴으로써 소프트웨어 클럭 메커니즘의 성공적인 동작을 보장한다.
DMA 디스크립터(descriptor) 블록(1002)은 와이어/버스(1019) 상의 로컬 버스 어드레스, 어드레스 디코더(1005)로부터 와이어/버스(1020) 상의 와이어 인에이블 신호, 및 로컬 데이터 버스(708e)를 경유한 와이어/버스(1029) 상의 로컬 버스 데이터를 수신한다. 출력은 와이어/버스(1045) 상의 DEMUX 로직(1008)으로 향한 와이어/버스(1046) 상의 DMA 디스크립터 출력이다. DMA 디스크립터 블록(1002)은 호스트 메모리 내 정보에 대응하는 디스크립터 블록 정보를 포함하며, 상기 정보는 PCI 어드레스, 로컬 어드레스, 전송 카운트, 전송 방향, 및 다음 디스크립터 블록에 대한 어드레스를 포함한다. 또한 호스트는 PCI 컨트롤러의 디스크립터 포인터 레지스터 내에 초기 디스크립터 블록의 어드레스를 셋업한다. 전송은 컨트롤 비트를 세팅함으로써 초기화될 수 있다. PCI는 제 1 디스크립터 블록을 로딩하고 데이터 전송을 초기화한다. PCI 컨트롤러는 다음 디스크립터 포인터 레지스터에 세팅된 최종 체인 비트를 검출할 때까지 계속해서 디스크립터 블록을 로딩하고 데이터를 전송한다.
어드레스 디코더(1005)는 버스(708b) 상의 로컬 R/W 제어 신호를 수신하고 전달하며, 버스(708c) 상의 로컬 어드레스 신호를 수신하고 전달한다. 어드레스 디코더(1005)는 DMA 디스크립터(1002)에 대한 와이어/버스(1020) 상의 기록 인에이블 신호, 컨트롤 레지스터(1003)에 대한 와이어/버스(1021) 상의 기록 인에이블 신호, 와이어/버스(738) 상의 FPGA 어드레스 SPACE 지수, 와이어/버스(1027) 상의 제어 신호, 및 DEMUX 로직(1008)에 대한 와이어/버스(1024) 상의 또 다른 제어 신호를 생성한다.
컨트롤 레지스터(1003)는 어드레스 디코더(1005)로부터 와이어/버스(1021) 상의 기록 인에이블 신호, 및 와이어/버스(1030)로부터 로컬 데이터 버스(708e)를 경유한 데이터를 수신한다. 컨트롤 레지스터(1003)는 EVAL 로직(1001)에 대한 와이어/버스(1015) 상의 WR_XSFR/RD_XSFR 신호, EVAL 타이머(1004)에 대한 Set EVAL 시간 신호, 및 FPGA 칩에 대한 와이어/버스(1016) 상의 SEM_FPGA 출력 인에이블 신호를 생성한다. 시스템은 각각의 FPGA 칩을 선택적으로 턴온 또는 인에이블시키기 위해 SEM_FPGA 출력 인에이블 신호를 사용한다. 통상적으로, 시스템은 소정의 시간에 각각의 FPGA 칩 하나를 인에이블시킨다.
EVAL 타이머(1004)는 와이어/버스(1014) 상의 Start EVAL 신호, 및 와이어/버스(1041) 상의 Set EVAL 시간을 수신한다. EVAL 타이머(1004)는 와이어/버스(737) 상의 ~EVAL 신호, 와이어/버스(1017) 상의 평가 종료(EVAL_DONE) 신호, 및 Write Flag Sequencer 로직(1006)에 대한 와이어/버스(1018) 상의 Start 기록 플래그 신호를 생성한다. 일 실시예에서, EVAL 타이머는 6 비트 길이를 갖는다.
Write Flag Sequencer 로직(1006)은 EVAL 타이머(1004)로부터 와이어/버스(1018) 상의 Start 기록 플래그 신호를 수신한다. Write Flag Sequencer 로직(1006)은 로컬 R/W 와이어/버스(708b)에 대한 와이어/버스(1022) 상의 로컬 R/W 제어 신호, 로컬 어드레스 버스(708c)에 대한 와이어/버스(1023) 상의 로컬 어드레스 신호, 로컬 데이터 버스(708e)에 대한 와이어/버스(1028) 상의 로컬 데이터 신호, 및 와이어/버스(708d) 상의 로컬 INTI#를 생성한다. 시작 기록 플래그 신호를 수신할 때, 기록 플래그 시퀀서 로직은 제어 신호의 시퀀스를 시작하여 PCI 버스에 대한 메모리 기록 사이클을 시작한다.
SEM_FPGA R/W 컨트롤 로직(1007)은 어드레스 디코더(1005)로부터 와이어/버스(1027) 상의 제어 신호, 및 로컬 R/W 컨트롤 버스(708b)를 경유한 와이어/버스(1047) 상의 로컬 R/W 제어 신호를 수신한다. SEM_FPGA R/W 컨트롤 로직(1007)은 래치(1009)에 대한 와이어/버스(1035) 상의 인에이블 신호, DEMUX 로직(1008)에 대한 와이어/버스(1025) 상의 제어 신호, 래치(1011)에 대한 와이어/버스(1037) 상의 인에이블 신호, 래치(1012)에 대한 와이어/버스(1040) 상의 인에이블 신호, 와이어/버스(734) 상의 F_WR 신호, 및 와이어/버스(735) 상의 F-RD 신호를 생성한다. SEM_FPGA R/W 컨트롤 로직(1007)은 FPGA 로우 뱅크 및 하이 뱅크 버스로의/이들로부터의 다양한 기록 및 판독 데이터 전송을 제어한다.
입력 신호의 4 개의 세트를 수신하여 와이어/버스(1026) 상에 있는 신호의 1개 세트를 로컬 데이터 버스(708e)로 출력하는 DEMUX 로직(1008)은 멀티플렉스와 래치이다. 선택기(selector) 신호는 SEM_FPGA R/W 컨트롤 로직(1007)으로부터 와이어/버스(1025) 상에 있는 제어 신호와 어드레스 디코더(1005)로부터 와이어/버스(1024) 상의 제어 신호이다. DEMUX 로직(1008)은 와이어/버스(1042) 상의 EVAL_DONE 신호, 와이어/버스(1043) 상의 XSFR_DONE 신호, 및 와이어/버스(1044) 상의 ~EVAL 신호로부터의 입력중 1개 세트를 수신한다. 이러한 신호들에 대한 단일 세트는 참조번호 (1048)로 명칭이 부여되었다. 임의의 하나의 시간 구간에서, 이러한 3개의 신호, EVAL_DONE, XSFR_DONE, 및 ~EVAL중 1개의 신호만이 선택이 가능하도록 DEMUX 로직(1008)에 제공된다. 또한 DEMUX 로직(1008)은, 입력 신호의 다른 3개 세트로서, DMA 디스크립터 블록(1002)으로부터 와이어/버스(1045) 상의 DMA 디스크립터 출력 신호, 래치(1012)로부터 와이어/버스(1039) 상의 데이터 출력, 및 래치(1010)으로부터 와이어/버스(1034) 상의 또 다른 데이터 출력을 수신한다.
CTRL_FPGA 유닛(701)과 로우 및 하이 FPGA 뱅크 버스 사이의 데이터 버퍼는 래치(1009-1012)를 포함한다. 래치(1009)는 와이어/버스(1031)와 로컬 데이터 버스(708e)를 경유한 와이어/버스(1032) 상의 로컬 버스 데이터, 및 SEM_FPGA R/W 컨트롤 로직(1007)으로부터 와이어/버스(1035) 상의 인에이블 신호를 수신한다. 래치(1009)는 와이어/버스(1033) 상의 데이터를 래치(1010)로 출력한다.
래치(1010)는 래치(1009)로부터 와이어/버스(1033) 상의 데이터, 및 SEM_FPGA R/W 컨트롤 로직(1007)으로부터 와이어/버스(1037)를 경유한 와이어/버스(1036) 상의 인에이블 신호를 수신한다. 래치(1010)는 와이어/버스(725) 상의 데이터를 와이어/버스(1034)를 통해 FPGA 로우 뱅크 버스와 DEMUX 로직(1008)으로 출력한다.
래치(1011)는 로컬 데이터 버스(708e)로부터 와이어/버스(1031) 상의 데이터, 및 SEM_FPGA R/W 컨트롤 로직(1007)으로부터 와이어/버스(1037) 상의 인에이블 신호를 수신한다. 래치(1011)는 와이어/버스(726) 상의 데이터를 FPGA 하이 뱅크 버스로 출력하고 와이어/버스(1038) 상의 데이터를 래치(1012)로 출력한다.
래치(1012)는 래치(1011)로부터 와이어/버스(1038) 상의 데이터, 및 SEM_FPGA R/W 컨트롤 로직(1007)으로부터 와이어/버스(1040) 상의 인에이블 신호를 수신한다. 래치(1012)는 와이어/버스(1039) 상의 데이터를 DEMUX(1008)로 출력한다.
도 24는 4 ×4 FPGA 어레이, FPGA 뱅크에 대한 FPGA 어레이의 관계, 및 확장 능력을 도시한다. 도 8과 유사하게, 도 24는 동일한 4 ×4 어레이를 도시한다. 또한 CTRL_FPGA 유닛(740)이 도시되어 있다. 로우 뱅크 칩(칩(F41-F44 및 F21-F24))과 하이 뱅크 칩(칩(F31-F34 및 F11-F14))은 교대 방식으로 배열된다. 이에 따라, 하부 열부터 상부 열 까지의 FPGA 칩 열:로우 뱅크-하이 뱅크-로우 뱅크-하이 뱅크로 특징지어진다. 데이터 전송 체인은 미리 결정된 순서로 뱅크에 후속한다. 로우 뱅크에 대한 데이터 전송 체인이 화살표(741)로 도시되어 있다. 하이 뱅크에 대한 데이터 전송 체인이 화살표(742)로 도시되어 있다. JTAG 구성 체인은 화살표(743)으로 도시되어 있으며, 상기 체인은 칩(F41부터 F44, F34부터 F31, F21부터 F24, 및 F14부터 F11)의 전체 어레이를 연장하며 CTRL_FPGA 유닛(740)으로 되돌아간다.
확장은 피기백 보드로 달성될 수 있다. 도 24에서 FPGA 칩의 오리지널 어레이가 F41-F44 및 F31-F34를 포함하는 것을 가정하면, 두개 이상의 칩 F21-F24 및 F11-F14의 부가는 피기백 보드(745)로 달성될수있다. 피기백 보드(745)는 뱅크를 연장시키기 위하여 적당한 버스를 포함한다. 추가의 확장은 어레이의 다른 상부상에 배치된 많은 피기백 보드로 달성될 수 있다.
도 25는 하드웨어 개시(start-up) 방법의 일 실시예를 도시한다. 단계(800)는 전원 인가를 시작하거나 부트 시퀀스를 워밍(warm)한다. 단계(801)에서, PCI 컨트롤러는 시작용 EEPROM을 판독한다. 단계(802)는 초기 시퀀스로 인해 PCI 컨트롤러 레지스터를 판독 및 기록한다. 단계(803) 경계 스캔은 어레이에서 모든 FPGA 칩에 대해 검사한다. 단계(804)는 FPGA I/0 컨트롤러의 CTRL_FPGA를 구성한다. 단계(805)는 CTRL_FPGA 유닛의 레지스터를 판독 및 기록한다. 단계(806)는 DMA 마스터 판독/기록 모드에 대한 PCI 컨트롤러를 셋업한다. 그후, 데이터는 전달 및 검증된다. 단계(807)는 검사 설계를 가진 모든 FPGA를 구성하고 그의 수정을 검증한다. 단계(808)에서, 하드웨어는 사용될 준비가된다. 이 점에서, 시스템은 하드웨어의 동작의 긍정적인 확인에서 발생되는 모든 단계를 취하고, 그렇지 않으면 시스템은 결코 단계(808)에 도달하지 않는다.
E. 고집적 FPGA 칩을 이용하는 선택적 실시예
본 발명의 일실시예에서, FPGA 로직 소자는 각각의 보드상에 제공된다. 만약 보다 많은 FPGA 로직 소자가 보드에 제공되기 보다 사용자의 회로 설계를 모델링하기 위하여 요구되면, 많은 FPGA 로직 소자를 가진 다수의 보드는 제공될수있다. 많은 보드를 시뮬레이션 시스템에 부가하기 위한 능력은 본 발명의 바람직한 특징이다. 이 실시예에서, 변경 가능한 10K130V 및 10K250V 같은 밀집된 FPGA 칩은 사용된다. 이들 칩의 사용은 보드 설계를 변경시켜서 8개 이하 밀집된 FPGA 칩(예를들어, 변경 가능 10K100) 대신 보드마다 사용된다.
시뮬레이션 시스템의 마더보드에 이들 보드를 결합하는 것은 도전을 나타낸다. 상호접속 및 접속 방법은 후면의 결함을 보상하여야 한다. 시뮬레이션 시스템에서 FPGA는 특정 보드 상호접속 구조를 통해 마더보드상에 제공된다. 각각의 칩은 8개 세트의 상호접속부를 가질수있고, 여기서 상호접속은 직접 인접한 상호접속부(즉, N[73:0], S[73:0], W[73:0], E[73:0]), 및 단일 보드내 및 다른 보드를 가로질러 로컬 버스 접속부를 배제한 하나의 홉 이웃 상호접속부(즉, NH[27:0], SH[27:0], XH[36:0], XH[72:37])를 따라 배열된다. 각각의 칩은 인접한 이웃 칩에 직접, 또는 상부, 하부, 왼쪽 및 오른쪽에 배치된 비인업한 칩에 대한 하나의 홉에 직접적으로 상호접속된다. x 방향(동서쪽)에서, 어레이는 토러스이다. Y 방향(북남쪽)에서, 어레이는 매쉬이다.
상호접속부는 단일 보드내의 로직 소자 및 다른 컴포넌트를 결합한다. 그러나, 내부 보드 커넥터는 (1) 마더보드를 통한 PCI 버스 및 어레이 보드, 및 (2) 임으의 두개의 어레이 보드 사이에 신호를 전달하기 위하여 다른 보드를 가로질러 이들 보드 및 상호접속부를 결합하도록 제공된다. 각각의 보드는 서로, 즉 SRAM 메모리 소자, 및 CTRL_FPGA 유닛(FPGA I/0 컨트롤러)와 통신하기 위하여 FPGA 로직 소자를 허용하는 자신의 FPGA 버스 FD[63:0]를 포함한다. FPGA 버스 FD[63:0]는 다중 보드에 대해 제공되지 않는다. 그러나 FPGA 상호접속부는 비록 이들 상호접속부가 FPGA 버스에 관련되지 않을지라도 다수의 보드에 대해 FPGA 로직 소자 사이에 접속을 제공한다. 다른 한편, 로컬 버스는 모든 보드에 대해 제공된다.
마더보드 커넥터는 보드를 마더보드에 접속시켜서, PCI 버스, 전원 및 접지에 접속시킨다. 몇몇 보드에 대해, 마더보드 커넥터는 마더보드에 직접적인 접속을 위해 사용되지 않는다. 6개의 보드 구성에서, 단지 보드 1, 3 및 5만이 직접적으로 마더보드에 접속되고 나머지 보드 2, 4, 및 6는 마더보드 접속을 위한 이웃하는 보드상에 의존한다. 따라서, 각각 다른 보드는 직접적으로 마더보드에 접속되고, 이들 보드의 상호접속부 및 로컬 버스는 납땜측에 배열된 내부 보드 커넥터를 통해 컴포넌트측으로 함께 결합된다. PCI 신호는 보드(통상적으로 제 1 보드)중 하나를 통해서만 라우팅된다. 전원 및 접지는 이들 보드에 대한 다른 마더보드 커넥터에 인가된다. 컴포넌트측에 대한 납땜 측에 배치된 다양한 내부 보드 커넥터는 PCI 버스 컴포넌트, FPGA 로직 소자, 메모리 소자 및 다양한 시뮬레이션 시스템 및 제어 회로 사이에 통신을 제공한다.
도 56은 본 발명의 일실시예에 따른 FPGA 칩 구성의 어레이의 상위 레벨 블록도를 도시한다. 상기된 CTRL_FPGA 유닛(1200)는 라인(1209 및 1236)을 통해 버스(1210)에 결합된다. 일실시예에서, CTRL_FPGA 유닛(1200)는 변경 가능한 10K50 칩 같은 FPGA 칩의 형태로 프로그램 가능한 로직 소자(PLD)이다. 버스(1210)는 다른 시뮬레이션 어레이 보드(만약 있다면) 및 다른 칩(예를들어, PCI, 컨트롤러, EEPROM, 클럭 버퍼)에 결합된다. 도 56은 로직 소자 및 메모리 소자 형태로 다른 주요 기능 블록을 도시한다. 일실시예에서, 로직 소자는 변경 가능한 10K130V 또는 10K250V 칩의 형태로 프로그램 가능한 로직 소자(PLD)이다. 10K130V 및 10K250V는 호환 가능한 핀이고 각각은 599-핀 PGA 패키지이다. 따라서, 어레이에서 8개의 변경 가능한 FLEX 10K100 칩을 가진 상기된 실시예 대신, 이 실시예는 변경 가능한 FLEX 10K130의 4개의 칩만을 사용한다. 본 발명의 일실시예는 이들 4개의 로직 소자 및 그것의 접속부를 포함하는 보드를 기술한다.
사용자 설계가 어레이에서 이들 임의의 수의 로직 소자로 모델링되고 구성되기 때문에, 내부 FPGA 로직 소자 통신은 사용자의 회로 설계의 하나의 파트를 다른 파트에 접속할 필요가 있다. 게다가, 초기 구성 정보 및 경계 스캔은 내부 FPGA 상호접속부에 의해 지원된다. 마지막으로, 필요한 시뮬레이션 시스템 제어 신호는 시뮬레이션 시스템 및 FPGA 로직 소자 사이에서 액세스 가능하여야 한다.
도 36은 본 발명에 사용된 FPGA 로직 소자의 하드웨어 아키텍쳐를 도시한다. FPGA 로직 소자(1500)는 102 상부 I/0 핀, 102 하부 I/0 핀, 111 좌측 I/O 핀 및 10 우측 I/O 핀을 포함한다. 따라서, 상호접속부 핀의 총 수는 425이다. 게다가, 부가적인 45 I/0 핀은 GCLK, FPGA 버스 FD[31:0](하이 뱅그를 위하여, FD[63:32]가 사용됨), F_RD, F_WR, DATAXSFR, SHIFIN, SHIFTOUT, SPACE[2:0], ∼EVAL, EVAL_REO_N, DEVICE_OE(FPGA 로직 소자의 출력 핀을 턴온하기 위하여 CTRL_FPGA 유닛로부터의 신호), 및 DEV_CLRN(시뮬레이션 시작전에 모든 내부 플립 플롭을 클리어하기 위하여 CTRL_FPGA 유닛로부터의 신호)를 위해 사용된다. 따라서, 두개의 임의의 FPGA 로직 소자 사이를 가로지르는 임의의 데이터 및 제어 신호는 이들 상호접속부에 의해 수행된다. 나머지 핀은 전력 및 접지에 사용된다.
도 37은 본 발명의 일실시예에 따른 단일 FPGA 칩에 대한 FPGA 상호접속 핀 아웃을 도시한다. 각각의 칩(1510)은 8개의 상호접속부 세트를 가질수있고, 여기서 각각의 세트는 특정수의 핀을 포함한다. 몇몇 칩은 보드상 각각의 위치에 따라 8개 이하의 상호접속부 세트를 가질수있다. 바람직한 실시예에서, 모든 칩은 비록 사용된 상호접속부의 특정 세트가 그것의 각각의 보드상 위치에 따라 칩마다 가변할 수 있지만, 7개의 상호접속부 세트를 가진다. 각각의 FPGA 칩에 대한 상호접속부는 수평(동서쪽) 및 수직(북남쪽)으로 지향된다. 서쪽 방향에 대한 상호접속부 세트는 W[73:0]로서 라벨링된다. 동쪽 방향에 대한 상호접속부 세트는 E[73:0]로서 라벨링된다. 북쪽 방향에 대한 상호접속부 세트는 N[73:0]로서 라벨링된다. 남쪽 방향에 대한 상호접속부 세트는 S[73:0]로서 라벨링된다. 상호접속부의 이들 완전한 세트는 인접한 칩에 대한 상호접속부이다; 즉, 이들 상호접속부는 임의의 칩 상에서 "홉"하지 않는다. 예를들어, 도 39에서, 칩(1570)은 N[73:0]에 대한 상호접속부(1540), W[73:0]에 대한 상호접속부(1542), E[73:0]에 대한 상호접속부(1543), 및 S[73:0]에 대한 상호접속부(1545)를 가진다. FPGA2 칩인 FPGA 칩(1570)은 모두 4개의 인접한 상호접속부세트 - N[73:0], S[73:0], W[73:0] 및 E[73:0]를 가진다. FPGA0의 서쪽 상호접속부는 토러스-형태 상호접속부에 의한 와이어(1539)를 통해 FPGA3의 동쪽 상호접속부에 접속된다. 따라서, 와이어(1539)는 칩(1569)(FPGA0) 및 1572(FPGA3)이 서로 만나 주위에 감겨질 보드의 서쪽-동쪽 단부를 감는 것과 유사한 방식으로 서로 직접적으로 결합되게 한다.
도 37을 참조하면, 네 세트의 "홉핑(hopping)" 상호접속부가 제공된다. 두 세트의 상호접속부는 수직으로 연장하는 근접하지 않은 상호접속부-NH[27:0] 및 SH[27:0]을 위한 것이다. 예를 들어, 도39의 FPGA2 칩은 NH 상호접속부(1541) 및 SH 상호접속부(1546)를 나타낸다. 도37을 참조하면, 다른 두 세트의 상호접속부는 수평으로 연장하는 인접하지 않은 상호접속부-XH[36:0] 및 XH[72:37]이다. 예를 들어, 도 39의 FPGA 칩(1570)은 XH 상호접속부(1544)를 나타낸다.
도 37을 참조하면, 수직 홉핑 상호접속부(NH[27:0] 및 SH[27:0])는 각각 28개의 핀을 갖는다. 수평 상호접속부는 73개의 핀(XH[36:0] 및 XH[72:37])을 갖는다. 수평 상호접속부 핀(XH[36:0] 및 XH[72:37])은 서쪽(예를 들어, FPGA3 칩(1576)을 위해, 도39의 상호접속부(1605)) 및/또는 동쪽(예를 들어, FPGA0 칩(1573)을 위해, 도39의 상호접속부(1602))에 사용될 수 있다. 이러한 구조는 각각의 칩이 이상적으로 형성되게 한다. 따라서, 각각의 칩은 상하좌우에 배치된 인접하지 않은 칩에 대해 하나의 홉에 연결될 수 있다.
도 39는 본 발명의 일 실시예에 따른 단일 마더보드 상의 6개의 보드의 바로 인접한 하나의 홉 인접 FPGA 어레이 배치를 도시한다. 이러한 구조는 6개의 보드 시스템 및 이중 보드 시스템과 같은 두개의 가능한 구조를 설명하는데 사용된다. 위치 지시기(1550)는 "Y" 방향이 북-남이고 "X" 방향이 동-서임을 나타낸다. X 방향에서, 어레이는 토러스이다. Y 방향에서, 어레이는 매쉬이다. 도39에서, 단지 보드, FPGA 로직 소자, 인터커넥터 및 상위 레벨의 커넥터가 도시된다. 메인 보드 및 다른 보조 소자(예를 들어, SRAM 메모리 장치) 및 배선(예를 들어, FPGA 버스)이 도시된다.
도 39는 보드의 어레이 모양과 컴포넌트, 상호접속부 및 커넥터를 도시한다. 실제의 물리적 구성 및 배치는 이러한 보드를 솔더 측에 대해 각각의 에지 소자 측에 배치하는 것을 포함한다. 대략적으로 보드의 절반은 마더보드와 직접 연결되지만, 보드의 다른 절반 부분은 각각의 이웃하는 보드에 연결된다.
본 발명에 따른 6개의 보드를 사용하는 실시예에서, 6개의 보드(1551(보드1), 1552(보드2), 1553(보드3), 1554(보드4), 1555(보드5), 1556(보드6))가 도1의 리컨피규러블 하드웨어의 일부인 마더보드(미도시)에 제공된다. 각각의 보드는 거의 동일한 세트의 컴포넌트 및 커넥터를 포함한다. 따라서, 설명의 목적을 위해, 6번째 보드(1556)는 FPGA 로직 소자(1565 내지 1568) 및 커넥터(1557 내지 1560 및 1581)를 포함하며, 5번째 보드(1555)는 FPGA 로직 소자(1569 내지 1572) 및 커넥터(1582 및 1583)를 포함하며, 4번째 보드(1554)는 FPGA 로직 소자(1573 내지 1576) 및 커넥터(1584 및 1585)를 포함한다.
이러한 6개의 보드 구조에서, 보드(1551) 및 보드(1556)은 보드6(1556) 상의 R-팩 단자(1557 내지 1560)와 같은 Y-매쉬 단자 및 보드1(1551) 상의 단자(1591 내지 1594)를 포함하는 "북엔드(bookend)" 보드로서 제공된다. 중간에 배치된 보드(즉, 보드(1552)(보드2), 1553(보드3), 1554(보드4) 및 1555(보드5))는 어레이를 완성하기 위해 제공된다.
전술한 바와 같이, 로컬 버스 커넥션을 제외하고 단일 보드 내에서 다른 보드에 걸쳐, 상호접속부는 인접한 직접 이웃 상호접속부(즉, N[73:0], S[73:0], W[73:0], E[73:0]), 및 원-홉 이웃 상호접속부(즉, NH[27:0], SH[27:0], XH[36:0], XH[27:37])에 따라 배치된다. 상호접속부는 단지 로직 소자와 단일 보드 내의 다른 소자를 결합할 수 있다. 그러나, 보드간 커넥터(1581 내지 1590)는 여러 보드(즉, 보드1 내지 보드6)에 걸쳐 FPGA 로직 소자들 사이의 통신을 가능하게 한다. FPGA 버스는 보드간 커넥터(1581 내지 1590)의 부분이다. 이러한 커넥터(1581 내지 1590)는 520 신호를 전송하고, 두개의 이웃한 어레이 보드 사이의 80 파워/접지 연결을 하는 600-핀 커넥터이다.
도 39에서, 다양한 보드가 보드간 커넥터(1581 내지 1590)에 대해 비대칭 방식으로 배치된다. 예를 들어, 보드(1551)와 보드(1552) 사이에서, 보드간 커넥터(1589 및 1590)가 제공된다. 상호접속부(1515)는 FPGA 로직 소자(1511 및 1577)를 함께 연결하며, 커넥터(1589 및 1590)에 따라, 이러한 연결은 대칭적이다. 그러나, 상호접속부(1603)는 대칭적이지 않으며; 세번째 보드(1553)의 FPGA를 보드(1551)의 FPGA 로직 소자에 연결시킨다. 커넥터(1589 및 1590)에 대해, 이러한 상호접속부는 비대칭적이다. 유사하게, 상호접속부(1600)는 커넥터(1589 및 1590)에 대해 비대칭적인데, 이는 상호접속부가 FPGA 로직 소자(1557)를 상호접속부(1601)를 통해 FPGA 로직 소자(1577)를 연결시키는 단자(1591)에 연결시키기 때문이다. 비대칭을 보여주는 다른 유사한 상호접속부가 존재한다.
이러한 비대칭의 결과로서, 상호접속부는 두 방식으로 보드간 커넥터를 통해 라우팅(경로설정)되는데, 한 방식은 상호접속부(1515)와 같은 대칭 상호접속부이며, 다른 방식은 상호접속부(1603 및 1600)와 같은 비대칭 상호접속부이다. 상호접속부 라우팅 수단은 도40(A) 및 40(B)로 도시된다.
도39에서, 단일 보드 내의 직접 이웃 커넥션의 예는 보드(1555)의 동-서 방향을 따라 로직 소자(1571)에 로직 소자(1570)를 결합시키는 상호접속부(1543)이다. 단일 보드 내의 직접 이웃 커넥션의 다른 예는 보드(1554)의 로직 소자(1576)로 로직 소자(1573)를 결합시키는 상호접속부(1607)이다. 두개의 상이한 보드 사이의 직접-이웃 커넥션의 예는 북-서 방향을 따라 커넥터(1583 및 1584)를 통해 보드(1554)의 로직 소자(1574)로 보드(1555)의 로직 소자(1570)를 결합시키는 상호접속부(1545)이다. 여기서, 두개의 보드간 커넥터(1583 및 1584)는 신호를 전송하는데 사용된다.
단일 보드 내의 원-홉 상호접속부의 예는 동-서 방향을 따라 보드(1555)에서 로직 소자(1572)에 로직 소자(1570)를 결합시키는 상호접속부(1544)이다. 두개의 상이한 보드 사이의 원-홉 상호접속부의 예는 커넥터(1581 내지 1584)를 통해 보드(1554)의 로직 소자(1573)에 보드(1556)의 로직 소자(1556)를 결합시키는 상호접속부(1599)이다. 여기서, 네개의 보드간 커넥터(1581 내지 1584)는 신호를 가로질러 전송하는데 사용된다.
특히 마더보드의 북-남 단부에 배치된 몇몇 보드는 소정의 접속을 종료하기 위해 10오옴 R-팩을 포함한다. 따라서, 6번째 보드(1556)는 10오옴 R-팩 커넥터(1557 내지 1560)를 포함하며, 첫 번째 보드(1551)는 10오옴 R-팩 커낵터(1591 내지 1594)를 포함한다. 6번째 보드(1556)는 상호접속부(1970 및 1971)용 R-팩 커넥터(1557), 상호접속부(1972 및 1541)용 R-팩 커넥터(1558), 상호접속부(1973 및 1974)용 R-팩 커넥터(1559), 상호접속부(1975 및 1976)용 R-팩 커넥터(1560)를 포함한다. 더욱이, 상호접속부(1561 내지 1564)는 어느 것에도 연결되지 않는다. 동-서 토러스-타입 상호접속과는 달리, 북-남 상호접속은 매쉬-타입 방식으로 배치된다.
이러한 매쉬 상호접속은 북-남 방향 상호접속의 수를 증가시킨다. 그렇지 않으면, FPGA 매쉬의 북 및 남 에지에서의 상호접속은 모두 무용지물이 될 것이다. 예를 들어, FPGA 로직 소자(1511 및 1577)는 이미 직접 상호접속부(1515)중 하나의 세트를 갖는다. 추가의 상호접속은 또한 R-팩(1591) 및 상호접속부(1600 및 1601)을 통해 이러한 두개의 FPGA 로직 소자에 제공되며; 즉, R-팩(1591)은 상호접속부(1600 및 1601)을 함께 연결시킨다. 이는 FPGA 로직 소자(1511 및 1577) 사이의 직접 접속의 수를 증가시킨다.
내부-보드 커넥션이 제공된다. 보드(1551) 상의 로직 소자(1577, 1578, 1579 및 1580)는 상호접속부(1515, 1516, 1517 및 1518)를 통해 보드(1522) 상의 로직 소자(1511, 1512, 1513 및 1514)에 결합된다. 따라서, 상호접속부(1515)는 보드(1552) 상의 로직 소자(1511)를 커넥터(1589 및 1590)를 통해 보드(1551) 상의 로직 소자(1577)에 결합시키며; 상호접속부(1516)는 보드(1552) 상의 로직 소자(1512)를 커넥터(1589 및 1590)를 통해 보드(1551) 상의 로직 소자(1577)에 결합시키며; 상호접속부(1517)는 보드(1552) 상의 로직 소자(1513)를 커넥터(1589 및 1590)를 통해 보드(1551) 상의 로직 소자(1579)에 결합시키며; 상호접속부(1518)는 보드(1552) 상의 로직 소자(1514)를 커넥터(1589 및 1590)를 통해 보드(1511) 상의 로직 소자(1580)에 결합시킨다.
상호접속부(1595, 1596, 1597 및 1598)와 같은 몇몇 상호접속부는 이들이 사용되지 않기 때문에 어느 것에도 연결되지 않는다. 그러나, 로직 소자(1511 및 1577)과 관련하여 전술된 바와 같이, R-팩(1591)은 북-남 상호접속을 증가시키기 위해 상호접속부(1600 및 1601)에 연결된다.
본 발명의 이중 보드 실시예는 도44에 도시된다. 본 발명의 이중 보드 실시예에서, 단지 두개의 보드가 시뮬레이션 시스템에서 사용자의 설계를 모델링하는데 필수적이다. 도39의 6개의 보드 구조와 같이, 도44의 이중 보드 구조는 "북엔드"를 위한 동일한 두개의 보드(보드1(1551) 및 보드6(1556))를 사용하며, 이는 도1에서 리컨피규러블 하드웨어 유닛(20)의 일부인 마더보드에 제공된다. 도44에서, 하나의 북엔드 보드는 보드1이며, 제2 북엔드 보드는 보드6이다. 보드6은 도39에서 보드6에 유사하게 도시하기 위해 도44에 사용되며; 즉, 보드1 및 보드6과 같은 북엔드 보드는 북-남 매쉬 접속을 위한 필수적인 단자를 갖는다.
이러한 이중 보드 구조는 보드1(1551) 상의 4개의 FPGA 로직 소자(1577(FPGA0), 1578(FPGA1), 1579(FPGA2) 및 1580(FPGA3)), 및 보드6(1556) 상의 4개의 FPGA 로직 소자(1565(FPGA0), 1566(FPGA1), 1567(FPGA2) 및 1568(FPGA3))를 포함한다. 이러한 두개의 보드는 내부-보드 커넥터(1581 및 1590)에 의해 연결된다.
이러한 보드는 소정의 연결을 종료시키기 위해 10ΩR-팩을 포함한다. 이중 보드 실시예에 대해, 두개의 보드는 "북엔드" 보드이다. 보드(1551)는 저항성 단자로서 10ΩR-팩 커넥터(1591, 1592, 1593 및 1594)를 포함한다. 두 번째 보드(1556)는 또한 10ΩR-팩 커넥터(1557 내지 1560)를 포함한다.
내부-보드(inter-board) 통신을 위해 보드(1551)은 커넥터(1590)을 가지며 보드(1556)은 커넥터(1581)를 가진다. 상호접속부(1600,1971,1977,1541,1540)와 같은 하나의 보드에서 다른 보드로의 상호접속부는 이들 커넥터(1590,1581)로 진행한다; 즉, 내부-보드 커넥터(1590,1581)는 상호접속부(1600, 1971, 1977, 1541, 1540)가 한 보드상의 한 컴포넌트와 다른 보드의 다른 컴포넌트 사이에 접속할 수 있게 한다. 내부-보드 커넥터(1590,1581)은 FPGA 버스 상에서 제어 데이터와 제어 신호들을 전송한다.
4-보드 구성에서, 보드(1)과 보드(6)에는 북엔드 보드가 제공되지만, 보드(2;1552)와 보드(3;1553)(도 39참조)는 중간 보드이다. (도 38A와 도 38B를 참조로 설명된 바와 같이) 본 발명에 따라서 마더보드에 결합될 때, 보드(1)과 보드(2)는 쌍을 이루며 보드(3)과 보드(6)은 쌍은 이룬다.
6-보드 구성에서, 상기 설명과 같이 보드(1)과 보드(6)에는 북엔드d) 보드가 제공되지만, 보드(2;1552), 보드(3;1553), 보드(4;1554)와 보드(5;1555)(도 39참조)는 중간 보드이다. (도 38A와 도 38B를 참조로 설명된 바와 같이) 본 발명에 따라서 마더보드에 결합될 때, 보드(1)과 보드(2)는 쌍을 이루며 보드(3)과 보드(4)은 쌍은 이루고 보드(5)과 보드(6)은 쌍은 이룬다.
더 많은 보드가 필요에 따라서 제공될 수 있다. 그러나, 시스템에 추가될 보드의 수와는 관련없이, (도 39의 보드(1)과 보드(6)과 같이) 북엔드 보드는 매쉬 어레이 커넥션을 완전하게 하는 필수 단자를 가진다. 일 실시예에서, 최소 구성은 도 44의 이중-보드 구성이다. 더 많은 보드가 2-보드를 증가시켜 추가될 수 있다. 만약 초기 구성이 보드(1)과 보드(6)이라면, 4-보드 구성으로 변경하는 것은, 상기 언급한 바와 같이, 보드(6)을 외부로 이동시키고, 보드(1)과 보드(2)를 함께 쌍으로 만들고, 다음에 보드(3)과 보드(6)을 함께 쌍으로 만드는 것을 포함한다.
상기 설명한 바와 같이, 각각의 로직 소자는 하나의 홉내에서 인접하는 이웃 로직 소자와 인접하지 않는 이웃 로직 소자에 결합된다. 따라서, 도 39와 도 44에서, 로직 소자(1577)는 상호접속부(1547)을 통해 인접하여 이웃하는 로직 소자(1578)과 결합한다. 또한 로직 소자(1577)는 원-홉 상호접속부(1548)을 통해 이웃하지 않는 로직 소자(1579)와 결합한다. 그러나, 로직 소자(1580)는 결합을 제공하는 상호접속부(1549)로 감기는 토러스 구성으로 인해 로직 소자(1577)와 인접하도록 고려될 수 있다.
삭제
삭제
삭제
삭제
삭제
삭제
도 42는 단일 보드에 대한 온-보드 컴포넌트와 커넥터의 상면도(컴포넌트 측면)를 도시한다. 본 발명의 일 실시예에서, 시뮬레이션 시스템내의 사용자 설계를 모델링하기 위해 오로지 하나의 보드만이 필요하다. 다른 실시예에서, 여러 보드(적어도 2 보드)가 필요하다. 따라서, 예컨대, 도 39는 여러 600-핀 커넥터(1581-1590)를 통해 함께 결합된 6 보드(1551-1556)를 도시한다. 상부 단부 및 기저 단부에서, 보드(1551)는 10ΩR-팩의 한 세트에 의해 종결되고 보드(1556)는 10ΩR-팩의 다른 세트에 의해 종결된다.
도 42를 다시 참조하면, 보드(1820)는 4 FPGA, 즉, 로직 소자(1822(FPGA0)), 로직 소자(1823(FPGA1)), 로직 소자(1824(FPGA2)), 로직 소자(1825(FPGA3))를 포함한다. 또한 2 SRAM 메모리 소자(1828,1829)가 제공된다. 상기 SRAM 메모리 소자(1828,1829)는 상기 보드 상의 로직 소자로부터 메모리 블럭을 맵핑하는데 사용된다; 즉, 보 발명의 메모리 시뮬레이션 특징은 상기 보드 상의 로직 소자로부터 상기 보드 상의 SRAM 메모리 소자까지 맵핑하는 것이다. 다른 보드는 유사한 맵핑 동작을 이루기 위해 다른 로직 소자와 메모리 소자를 가질 수 있다. 일 실시예에서, 메모리 맵핑은 보드에 의존한다; 즉, 보드(1)에 대한 메모리 맵핑은 보드(1) 상의 로직 소자와 메모리 소자로 제한되지만 다른 보드와는 무관하다. 다른 실시예에서, 메모리 맵핑은 보드에 의하지 않는다. 따라서, 소수의 큰 메모리 소자는 한 보드 상의 로직 소자로부터 다른 보드 상에 위치한 메모리 소자까지 메모리 블럭을 맵핑하는데 사용된다.
삭제
또한 일부 선택 동작들을 가시적으로 나타내기 위해 발광 다이오드(LED)(1821)가 제공된다. LED 디스플레이는 본 발명의 일 실시예에 따라서 표 A에 나타나 있다:
표 A : LED 디스플레이
LED 상태 설명
LED1 녹색 +5 V 및 +3.3V 는 정상
오프 +5 V 또는 +3.3V 는 비정상
LED2 호박색 오프 모든 온-보드 FPGA 구성이 동작됨
점멸 온-보드 FPGA가 구성되지 않거나 또는 구성에 실패함
FPGA 구성이 진행중임
LED3 적색 데이터 전송이 진행중임
오프 데이터 전송을 안함
점멸 상태 점검 실패함
PLX PCI 컨트롤러(1826)과 CTRL_FPGA 유닛(1827)과 같은 여러 다른 제어 칩들이 인터-FPGA와 PCI 통신을 제어한다. 시스템에 사용될 수 있는 PLX PCI 컨트롤러(1826)의 일 예는 PLX 테크놀로지의 PCI9080 또는 PCI9060 이다. PCI9080은 PCI 버스에 대한 적절한 로컬 버스 인터페이스, 컨트롤 레지스터, FIFO, 및 PCI 인터페이스를 가진다. 데이터 북 PLX 테크놀로지, PCI9080 데이터 시트(1997년 2월 28일 ver.0.93)가 참조로 여기에 포함된다. CTRL_FPGA 유닛(1827)의 일 예는 Altra 10K50 칩과 같이, FPGA의 형태를 가지는 프로그래머블 로직 소자(PLD)이다. 여러 보드 구성에서, PCI에 결합된 제 1 보드만이 PCI 컨트롤러를 가진다.
커넥터(1830)는 보드(1820)를 마더보드(도시안됨)와, PCI 버스, 파워, 및 접지에 접속한다. 일부 보드에 대하여, 커넥터(1830)는 마더보드에 직접 접속하기 위해 사용되지 않는다. 따라서, 이중-보드 구성에서, 오로지 제 1 보드만이 마더보드에 결합된다. 6-보드 구성에서, 오로지 보드(1,3,5)만이 마더보드에 직접 접속되지만 나머지 보드(2,4,6)는 마더보드와 액세스를 위해 이웃하는 보드에 의존한다. 내부-보드 커넥터(J1-J28)가 또한 제공된다. 명칭이 부여된 것에 따라서, 커넥터(J1-J28)는 다른 보드들 간의 접속을 가능하게 한다.
커넥터(J1)는 외부 파워 및 접지 접속용이다. 아래의 표 B는 본 발명의 일 실시예에 따라서 외부 파워 커넥터(J1)에 대한 핀과 해당하는 설명을 도시한다.
표 B : 외부 파워-J1
핀 번호 설명
1 VCC 5V
2 GND
3 GND
4 VCC 3V
커넥터(J2)는 병렬 포트 접속용이다. 커넥터(J1,J2)는 제작시 자립형(stand-alone) 싱글-보드 경계 스캔 테스트를 위해 사용된다. 아래의 표 C는 본 발명의 일 실시예에 따라서 병렬 JTAG 포트 커넥터(J2)에 대한 핀과 해당하는 설명을 도시한다.
표 C : 병렬 JTAG 포트-J2
J2 핀 번호 J2 신호 보드로부터의 I/O DB25 핀 번호 DB25 신호
3 PARA_TCK I 2 D0
5 PARA_TMS I 3 D1
7 PARA_TDI I 4 D2
9 PARA_NR I 5 D3
19 PARA_TDO O 10 NACK
10,12,14,16, 18,20,22,24 GND 18-25 GND
커넥터(J3,J4)는 보드에 걸리는 로컬 버스 접속을 위한 것이다. 커넥터(J5-J16)는 FPGA 상호커넥트 액세스의 한 세트이다. 커넥터(J17-J28)는 PGA 상호커넥트 액세스의 제2 세트이다. 솔더-측에 컴포넌트-측이 위치할 때, 상기 커넥터는 한 보드의 한 컴포넌트와 다른 보드의 다른 컴포넌트 사이에서 유효한 액세스를 제공한다. 아래의 표 D와 E는 본 발명의 일 실시예에 따라서 커넥터(J1-J28)의 모든 리스트와 설명을 도시한다.
표 D : 커넥터(J1-J28)
커넥터 설명 타입
J1 +5V / +3V 외부 파워 4-핀 파워 RA 헤더, 콤프 측
J2 병렬 포트 0.1"피치,2-로우 스루-홀 RA 헤더, 콤프 측
J3 로컬 버스 0.05" 피치,2x30 스루-홀 헤더, SAMTEC, 콤프 측
J4 로컬 버스 0.05" 피치,2x30 스루-홀 리셉터클, SAMTEC, 솔더 측
J5 로우A:NH[0], VCC3V,GND 로우B:J17 로우B, VCC3V, GND 0.05" 피치,2x30 SMD 헤더, SAMTEC, 콤프 측
J6 로우A:J5 로우B, VCC3V,GND 로우B:J5 로우B, VCC3V, GND 0.05" 피치,2x30 리셉터클, SAMTEC, 솔더 측
J7 로우A:N[0], 4x VCC3V,4x GND, N[2] 로우B:N[0], 4x VCC3V,4x GND, N[2] 0.05" 피치,2x45 스루-홀 헤더, SAMTEC, 콤프/솔더 측
J8 로우A:N[0], 4x VCC3V,4x GND, N[2] 로우B:N[0], 4x VCC3V,4x GND, N[2] 0.05" 피치,2x45 스루-홀 리셉터클, SAMTEC, 콤프/솔더 측
J9 로우A:NH[2], LASTL, GND 로우B:J21 로우B, GND 0.05" 피치,2x30 SMD 헤더, SAMTEC, 콤프 측
J10 로우A:J9 로우B, FIRSTL, GND 로우B:J9 로우A, GND 0.05" 피치,2x30 SMD 리셉터클, SAMTEC, 솔더 측
J11 로우A:NH[1], VCC3V,GND 로우B:J23 로우B, VCC3V, GND 0.05" 피치,2x30 SMD 헤더, SAMTEC, 콤프 측
J12 로우A:J11 로우B, VCC3V, GND 로우B:J11 로우A, VCC3V, GND 0.05" 피치,2x30 SMD 리셉터클, SAMTEC, 솔더 측
J13 로우A:N[1], 4x VCC3V,4x GND, N[3] 로우B:N[1], 4x VCC3V,4x GND, N[3] 0.05" 피치,2x45 스루-홀 헤더, SAMTEC, 콤프/솔더 측
J14 로우A:N[1], 4x VCC3V,4x GND, N[3] 로우B:N[1], 4x VCC3V,4x GND, N[3] 0.05" 피치,2x45 스루-홀 리셉터클, SAMTEC, 콤프/솔더 측
J15 로우A:NH[3], LASTH, GND 로우B:J27 로우B, GND 0.05" 피치,2x30 SMD 헤더, SAMTEC, 콤프 측
J16 로우A:J15 로우B, FIRSTH, GND 로우B:J15 로우A, GND 0.05" 피치,2x30 SMD 리셉터클, SAMTEC, 솔더 측
J17 로우A:SH[0], VCC3V,GND 로우B:J5 로우B, VCC3V, GND 0.05" 피치,2x30 SMD 헤더, SAMTEC, 콤프 측
J18 로우A:J17 로우B, VCC3V, GND 로우B:J17 로우A, VCC3V, GND 0.05" 피치,2x30 SMD 리셉터클, SAMTEC, 솔더 측
J19 로우A:S[0], 4x VCC3V,4x GND, S[2] 로우B:S[0], 4x VCC3V,4x GND, S[2] 0.05" 피치,2x45 스루-홀 헤더, SAMTEC, 콤프/솔더 측
J20 로우A:S[0], 4x VCC3V,4x GND, S[2] 로우B:S[0], 4x VCC3V,4x GND, S[2] 0.05" 피치,2x45 스루-홀 리셉터클, SAMTEC, 콤프/솔더 측
J21 로우A:SH[2], LASTL, GND 로우B:J9 로우B, GND 0.05" 피치,2x30 SMD 헤더, SAMTEC, 콤프 측
J22 로우A:J21 로우B, FIRSTL, GND 로우B:J21 로우A, GND 0.05" 피치,2x30 SMD 리셉터클, SAMTEC, 솔더 측
J23 로우A:SH[1], VCC3V,GND 로우B:J11 로우B, VCC3V, GND 0.05" 피치,2x30 SMD 헤더, SAMTEC, 콤프 측
J24 로우A:J23 로우B, VCC3V, GND 로우B:J23 로우A, VCC3V, GND 0.05" 피치,2x30 SMD 리셉터클, SAMTEC, 솔더 측
J25 로우A:S[1], 4x VCC3V,4x GND, S[3] 로우B:S[1], 4x VCC3V,4x GND, S[3] 0.05" 피치,2x45 스루-홀 헤더, SAMTEC, 콤프/솔더 측
J26 로우A:S[1], 4x VCC3V,4x GND, S[3] 로우B:S[1], 4x VCC3V,4x GND, S[3] 0.05" 피치,2x45 스루-홀 리셉터클, SAMTEC, 콤프/솔더 측
커넥터 설명 타입
J27 로우A:SH[3], LASTH, GND 로우B:J15 로우B, GND 0.05" 피치,2x30 SMD 헤더, SAMTEC, 콤프 측
J28 로우A:J27 로우B, FIRSTH, GND 로우B:J27 로우A, GND 0.05" 피치,2x30 SMD 리셉터클, SAMTEC, 솔더 측
음영진(shaded) 커넥터는 스루-홀 타입니다. 표 D에서, 괄호[]는 SMS FPGA 로직 소자 수(0-3)를 나타낸다. 따라서, S[0]는 남쪽(south) 상호접속(도 37의 S[73:0])과 FPGA(0)의 74 비트를 나타낸다.
표 E : 로컬 버스 커넥터 - J3,J4
핀 번호 신호 명칭 I/O 핀 번호 신호 명칭 I/O
A1 GND PWR B1 LRESET_N I/O
A2 J3용 J3_CLK J4용 J4_CLK I/O B2 VCC5V PWR
A3 GND PWR B3 LD0 I/O
A4 LD1 I/O B4 LD2 I/O
A5 LD3 I/O B5 LD4 I/O
A6 LD5 I/O B6 LD6 I/O
A7 LD7 I/O B7 LD8 I/O
A8 LD9 I/O B8 LD10 I/O
A9 LD11 I/O B9 GND PWR
A10 VCC3V PWR B10 LD12 I/O
A11 LD13 I/O B11 LD14 I/O
A12 LD15 I/O B12 LD16 I/O
A13 LD17 I/O B13 LD18 I/O
A14 LD19 I/O B14 LD20 I/O
A15 LD21 I/O B15 VCC3V PWR
A16 LD22 I/O B16 LD23 I/O
A17 LD24 I/O B17 LD25 I/O
A18 LD26 I/O B18 LD27 I/O
A19 LD28 I/O B19 LD29 I/O
A20 LD30 I/O B20 LD31 I/O
A21 VCC3V PWR B21 LHOLD OT
A22 ADS_N I/O B22 GND PWR
A23 DEN_N OT B23 DTR_N 0
A24 LA31 O B24 LA30 0
A25 LA29 O B25 LA28 0
A26 LA10 O B26 LA7 0
A27 LA6 O B27 LA5 0
A28 LA4 O B28 LA3 0
A29 LA2 O B29 종료 OD
A30 VCC5V PWR B30 VCC5V PWR
I/O 방향은 보드1 방향
도 43은 도 41A-41F, 도 42의 커넥터(J1-J28)에 대한 범례를 나타낸다. 일반적으로, 블록내 빈칸은 표면 장착을 나타내며, 블록내 녹색은 스루 홀 타입을 나타낸다. 또한, 솔리드 아웃라인 블록은 컴포넌트 측에 위치한 커넥터를 나타낸다. 도트 아웃라인 블록은 솔더 측에 위치한 커넥터를 나타낸다. 따라서, 빈칸 의 솔리드 아웃라인 블록(1840)은 표면에 장착되고 컴포넌트 측에 위치한 20x30 헤더를 나타낸다. 빈칸의 도트 아웃라인 블록(1841)은 표면에 장착되고 보드의 솔더 측에 위치한 2x30 리셉터클을 나타낸다. 녹색으로 채워진 솔리드 아웃라인 블록(1842)는 스루 홀 타입으로 컴포넌트 측에 위치한 2x30 또는 2x45 헤더를 나타낸다. 녹색으로 채워진 도트 아웃라인 블록(1843)은 스루 홀 타입으로 솔더 측에 위치한 2x30 또는 2x45 리셉터클을 나타낸다. 일 실시예에서, 시뮬레이션 시스템은 표면 장착 및 스루 홀 타입 모두에 대해 2x30 또는 2x45 마이크로 스트립 커넥터의 Samtec SFM과 TFM 계열을 사용한다. 격자표시로 채워진 솔리드 아웃라인 블록(1844)는 보드의 표면에 장착되고 컴포넌트 측에 위치한 R-팩이다. 격자표시로 채워진 도트 아웃라인 블록(1845)는 표면에 장착되고 솔더 측에 위치한 R-팩이다. 웹사이트에서 Samtec 카탈로그에 대한 Samtec 설명은 여기서 참조로 포함되었다. 도 42를 다시 참조하면, 커넥터(j3-j28)는 도 43의 범례에서 가르키는 것과 같은 타입이다.
도 41A-41F는 각각의 보드와 이들 보드의 각각의 커넥터에 대한 상면도를 도시한다. 도 41A는 보드(6)에 대한 커넥터를 도시한다. 따라서, 보드(1660)은 마더보드 커넥터(1682)를 따라 커넥터(1661-1681)를 포함한다. 도 41B는 보드(5)에 대한 커넥터를 도시한다. 따라서, 보드(1690)은 마더보드 커넥터(1709)를 따라 커넥터(1691-1708)를 포함한다. 도 41C는 보드(4)에 대한 커넥터를 도시한다. 따라서, 보드(1715)는 마더보드 커넥터(1734)를 따라 커넥터(1716-1733)를 포함한다. 도 41D는 보드(3)에 대한 커넥터를 도시한다. 따라서, 보드(1740)은 마더보드 커넥터(1759)를 따라 커넥터(1741-1758)를 포함한다. 도 41E는 보드(2)에 대한 커넥터를 도시한다. 따라서, 보드(1765)는 마더보드 커넥터(1784)를 따라 커넥터(1766-1783)를 포함한다. 도 41F는 보드(1)에 대한 커넥터를 도시한다. 따라서, 보드(1790)은 마더보드 커넥터(1813)를 따라 커넥터(1791-1812)를 포함한다. 도 43의 범례에 도시된 바와 같이, 6 보드에 대한 커넥터는 (1) 표면 장착 타입 또는 스루 홀 타입, (2) 컴포넌트측 또는 솔더측, (3) 헤더 또는 리셉터클 또는 R-팩의 여러 조합이다.
일 실시예에서, 이들 커넥터는 내부-보드 통신에 사용된다. 관련된 버스 및 신호들은 임의의 두 보드 사이에서 신호를 라우팅하기 위해 함께 그룹화되어 이들 내부-보드 커넥터에 의해 지원된다. 또한, 오로지 보드들중 절반만이 마더보드와 직접 결합된다. 도 41A에서, 보드(6)(1660)는 FPGA 상호접속부의 한 세트를 위해 지정된 커넥터(1661-1668), FPGA 상호접속부의 또 다른 세트를 위해 지정된 커넥터(1669-1674,1676,1679), 및 로컬 버스를 위해 지정된 커넥터(1681)을 포함한다. 보드(6)(1660)는 (다른 단부에서 도 41F의 보드(1)(1790)를 따라) 마더보드의 단부에서 보드들중 하나로서 위치하기 때문에, 커넥터(1675,1677,1678,1680)는 소정의 북-남 상호접속을 위해 10ΩR-팩으로 지정된다. 또한, 마더보드 커넥터(1682)는, 여섯번째 보드(1535)가 다섯번째 보드(1534)에 결합되지만 마더보드(1520)에 직접 결합되지 않는 것을 도시한 도 38B에서처럼, 보드(6)(1660)에 사용되지 않는다.
도 41B에서, 보드(5)(1690)는 FPGA 상호접속부의 한 세트를 위해 지정된 커넥터(1691-1698), FPGA 상호접속부의 또 다른 세트를 위해 지정된 커넥터(1699-1706), 및 로컬 버스를 위해 지정된 커넥터(1707)을 포함한다. 커넥터(1709)는 보드(5)(1690)를 마더보드에 결합하는데 사용된다.
도 41C에서, 보드4(1715)는 FPGA 상호접속부의 한 세트를 위해 지정된 커넥터(1716-1723), FPGA 상호접속부의 또 다른 세트를 위해 지정된 커넥터(1724-1731), 및 로컬 버스를 위해 지정된 커넥터(1732,1733)을 포함한다. 커넥터(1709)는 보드4(1715)를 마더보드에 직접 결합하는데 사용되지 않는다. 이러한 구성은, 네번째 보드(1533)가 세번째 보드(1532)와 다섯번째 보드(1534)에 결합되지만 마더보드(1520)에 직접 결합되지 않는 도 38B에 도시된다.
도 41D에서, 보드3(1740)는 FPGA 상호접속부의 한 세트를 위해 지정된 커넥터(1741-1748), FPGA 상호접속부의 또 다른 세트를 위해 지정된 커넥터(1749-1756), 및 로컬 버스를 위해 지정된 커넥터(1757,1758)을 포함한다. 커넥터(1759)는 보드3(1740)를 마더보드에 결합하는데 사용된다.
도 41E에서, 보드2(1765)는 FPGA 상호접속부의 한 세트를 위해 지정된 커넥터(1766-1733), FPGA 상호접속부의 또 다른 세트를 위해 지정된 커넥터(1774-1781), 및 로컬 버스를 위해 지정된 커넥터(1782,1783)을 포함한다. 커넥터(1784)는 보드2(1765)를 마더보드에 직접 결합하는데 사용되지 않는다. 이러한 구성은, 두번째 보드(1525)가 세번째 보드(1532)와 첫번째 보드(1526)에 결합되지만 마더보드(1520)에 직접 결합되지 않는 것을 도시한, 도 38B이다.
도 41F에서, 보드1(1790)는 FPGA 상호접속부의 한 세트를 위해 지정된 커넥터(1791-1798), FPGA 상호접속부의 또 다른 세트를 위해 지정된 커넥터(1799-1804,1806,1809), 및 로컬 버스를 위해 지정된 커넥터(1811,1812)을 포함한다. 커넥터(1813)는 보드1(1790)를 마더보드에 결합하는데 사용된다. 보드1(1790)는 (다른 단부에서 도 41A의 보드1(1660)를 따라) 마더보드의 단부에서 보드들중 하나로서 위치하기 때문에, 커넥터(1805,1807,1808,1810)는 특정한 북-남 상호접속부를 위해 10ΩR-팩으로 지정된다.
본 발명의 일실시예에서, 여러 보드는 고유한 방식으로 마더보드 및 각각 다른 보드와 결합한다. 여러 보드는 컴포넌트-측에서 솔더-측으로 함께 결합된다. 또한 보드들중 하나는, 즉 첫번째 보드는 마더보드에 결합되고, 마더보드 커넥터를 통해 PCI 버스에 결합된다. 또한 첫번째 보드 상의 FPGA 상호접속 버스는 FPGA 상호접속 커넥터의 쌍을 통해 다른 보드 즉 제 2 보드의 FPGA 상호접속 버스에 결합된다. 제 1 보드의 FPGA 상호접속 커넥터는 컴포넌트 측 상에 있으며 제 2 보드의 FPGA 상호접속 커넥터는 솔더 측상에 있다. 제 1 보드와 제 2 보드상에 있는 컴포넌트 측과 솔더 측은 각각 FPGA 상호접속부 버스가 함께 결합되게 한다.
유사하게, 두 개의 보드 상에 있는 로컬 버스는 로컬 버스 커넥터를 통해 함께 결합된다. 제 1 보드 상에 있는 로컬버스 커넥터는 컴포넌트 측에 있으며 제 2 보드 상에 있는 로컬 버스 커넥터는 솔더 측에 있다. 따라서, 각각 제 1 보드와 제 2 보드 상에 있는 컴포넌트 측 및 솔더 측 커넥터는 로컬 버스가 함께 결합되게 한다.
더 많은 보드가 추가될 수 있다. 제 3 보드는 제 2 보드의 컴포넌트 측에 솔더 측를 가지며 추가될 수 있다. 유사하게 FPGA 상호접속부와 로컬 버스 내부-보드 액세스 또한 이루어질 수 있다. 하기 설명처럼, 제 3 보드는 또한 다른 커넥터를 통해 마더보드에 결합되지만 이러한 커넥터는 단순히 전력과 접지를 제 3 보드에 제공한다.
이중 보드 구성의 솔더 측의 컴포넌트 측 커넥터는 도 38A를 참조하여 설명될 것이다. 상기 도는 본 발명의 일 실시예를 따라서 마더보드상의 FPGA 보드 액세스의 측면도를 도시한다. 도 38A는 이중-보드 구성을 도시하는데, 명칭이 부여된 오로지 두 개의 보드만이 사용된다. 도 38A에 도시된 이들 두 개의 보드(1525(보드2),1526(보드1))는 도 39에 도시된 두 개의 보드(1552,1551)과 일치한다. 보드(1525,1526)의 컴포넌트 측는 참조번호(1988)로 표시된다. 두 개의 보드(1525,1526)의 솔더 측은 참조번호(1988)로 표시된다. 도 38A에 도시된 바와 같이, 이들 두 개의 보드(1525,1526)는 마더보드 커넥터(1523)를 통해 마더보드(1520)에 결합된다. 다른 마더보드 컨넥터(1521,1522,1524) 또한 확장되어 제공될 수 있다. PCI 버스와 보드(1525,1526) 사이의 신호는 마더보드 커넥터(1523)을 통해 라우팅된다. PCI 신호는 이중-보드 구조와 PCI 버스 사이에서 제 1 보드(1526)을 통해 먼저 라우팅된다. 따라서, PCI 버스로부터의 신호는 이들이 제 2 보드(1525)로 전송되기 전에 먼저 제 1 보드(1526)를 인카운팅한다. 아날로그식으로, 이중-보드 구조로부터의 PCI 버스의 신호는 제 1 보드(1526)으로부터 전송된다. 전력은 또한 전력 공급기(도시안됨)로부터 마더보드 커넥터(1523)을 통해 보드(1525,1526)에 인가된다.
도 38A에 도시된 것처럼, 보드(1526)는 여러 컴포넌트와 커넥터를 포함한다. 하나의 컴포넌트는 FPGA 로직 소자(1530)이다. 또한 커넥터(1528A,1531A)가 제공된다. 유사하게, 보드(1525)는 여러 컴포넌트와 커넥터를 포함한다. 이러한 한가지 컴포넌트는 FPGA 로직 소자(1529)이다. 또한 커넥터(1528B,1531B)가 제공된다.
일 실시예에서, 커넥터(1528A,1528B)는 (도 44의) (1590,1581)과 같은 FPGA 버스와 같은 내부-보드 커넥터이다. 이들 내부-보드 커넥터는 로컬 버스 커넥션을 제외한 N[73:0], S[73:0], W[73:0], E[73:0], NH[27:0], SH[27:0], XH[36:0], XH[72:37]와 같은 여러 FPGA 상호접속용 내부-보드 접속을 제공한다.
더욱이, 커넥터(1531A-1531B)는 로컬 버스용 내부-보드 커넥터이다. 로컬 버스는 (PCI 컨트롤러를 통하는) PCI 버스와 (FPGA I/O 컨트롤러(CTRL_FPGA)유닛을 통하는) FPGA 버스 사이에서 신호를 처리한다. 로컬 버스는 또한 PCI 컨트롤러와 FPGA 로직 소자 및 FPGA I/O 컨트롤러(CTRL_FPGA) 유닛 사이에서 구성 및 경계 스캔 테스트 정보를 처리한다.
결국, 마더보드 커넥터는 보드 쌍으로 하나의 보드를 PCI 버스와 파워에 결합한다. 커넥터의 한 세트는 한 보드의 컴포넌트 측를 통해 다른 보드의 솔더 측에 FPGA 상호접속부를 결합한다. 커넥터의 다른 세트는 한 보드의 컴포넌트 측를 통해 로컬 버스를 다른 보드의 솔더 측에 결합한다.
본 발명의 다른 실시예에서, 두 개 이상의 보드가 사용된다. 게다가, 도 38B는 6-보드 구성을 도시한다. 구성은 모든 다른 보드가 마더보드와 직접 액세스되고, 이들 보드의 상호접속부와 로컬 버스가 솔더-측에서 컴포넌트-측에 배치된 내부-보드 커넥터를 통해 함께 결합되는 도 38A와 유사하다.
도 38B는 6 보드(1526(제1보드), 1525(제2보드), 1532(제3보드), 1533(제4보드),1534(제5보드),1535(제6보드))를 도시한다. 상기 6 보드는 보드(1526(제1보드), 1532(제3보드), 1534(제5보드))상의 커넥터를 통해 마더보드(1520)와 결합한다. 다른 보드(1525(제2보드), 1533(제4보드), 1535(제6보드))는 마더보드(1520)와 직접 결합하지 않지만; 자신들의 각각 이웃하는 보드들과의 접속을 통해 간접적으로 마더보드와 결합한다.
컴포넌트-측에 솔더-측을 위치시켜, 여러 내부-보드 커넥터들은 PCI 버스 컴포넌트, FPGA 로직 소자, 메모리 소자, 및 여러 시뮬레이션 시스템 제어 회로들 간에 통신을 가능하게 한다. 내부-보드 커넥터(1990)의 제 1 세트는 도 42의 커넥터(J5-J16)에 해당한다. 내부-보드 커넥터(1991)의 제 2 세트는 도 42의 커넥터(J17-J28)에 해당한다. 내부-보드 커넥터(1992)의 제 3 세트는 도 42의 커넥터(J3-J4)에 해당한다.
마더보드 커넥터(1521-1524)는 마더보드(이에 따라 PCI 버스)를 6 보드에 결합하기 위해 마더보드(1520) 상에 제공된다. 상기 언급한 바와 같이, 보드(1526(제1보드), 1532(제3보드), 1534(제5보드))는 커넥터(1523,1522,1521)과 각각 직접 결합한다. 다른 보드(1525(제2보드), 1533(제4보드), 1535(제6보드))는 마더보드(1520)와 직접 결합하지 않는다. 오로지 하나의 PCI 컨트롤러만이 모든 6 보드들에 대해 필요하기 때문에, 오로지 제 1 보드(1526)만이 PCI 컨트롤러를 포함한다. 또한, 제 1 보드(1526)에 결합된 마더보드 커넥터(1523)PCI 버스로부터/버스로의 액세스를 제공한다. 커넥터(1522,1521)는 오로지 전력 및 접지와 결합한다. 인접한 마더보드 커넥터들간의 센터-대-센터 간격은 일 실시예에서 대략 20.32 mm 이다.
마더보드 커넥터(1523,1522,1521)과 각각 직접 결합한 보드(1526(제1보드), 1532(제3보드), 1534(제5보드))에 대하여, 각각 커넥터(J5-J16)는 컴포넌트 측 상에 위치하고, 각각 커넥터(J17-J28)는 솔더 측 상에 위치하며, 로컬 버스 커넥터(J3-J4)는 컴포넌트 측상에 위치한다. 마더보드 커넥터(1523,1522,1521)과 각각 직접 결합하지 않은 보드(1525(제2보드), 1533(제4보드), 1535(제6보드))에 대하여, 각각 커넥터(J5-J16)는 솔더 측 상에 위치하고, 각각 커넥터(J17-J28)는 컴포넌트 측상에 위치하며, 로컬 버스 커넥터(J3-J4)는 솔더 측상에 위치한다. 단부 보드(1526(제1보드), 1535(제6보드))에 대하여, 커넥터(J17-J28)의 쌍이 10Ω R-팩 단자이다.
도 40A와 도 40B는 다른 보드들 간의 어레이 커넥션을 도시한다. 제조 프로세스을 용이하게 하기 위하여, 단일 레이아웃 구조가 모든 보드들에 사용된다. 상기 설명한 바와 같이, 보드는 후면 없이 커넥터를 통해 다른 보드들과 접속한다. 도 40A는 두 개의 예시적인 보드(1611(보드2),1610(보드1))를 도시한다. 보드(1610)의 컴포넌트 측은 보드(1611)의 솔더 측에 접한다. 보드(1611)은 다양한 FPGA 로직 소자, 다른 컴포넌트, 와이어 라인을 포함한다. 보드(1611) 상의 상기 로직 소자와 다른 컴포넌트의 특정 노드는 노드A'(참조번호1612), 노드B'(참조번호1614)로 표기된다. 노드A'는 PCB 트레이스(1620)를 통해 커넥터 패드(1616)에 결합한다. 유사하게, 노드B'는 PCB 트레이스(1623)를 통해 커넥터 패드(1617)에 접속된다.
유사하게, 보드(1610)은 다양한 FPGA 로직 소자, 다른 컴포넌트, 와이어 라인을 포함한다. 보드(1610) 상의 상기 로직 소자와 다른 컴포넌트의 특정 노드는 노드A(참조번호1613), 노드B(참조번호1615)로 표기된다. 노드A는 PCB 트레이스(1625)를 통해 커넥터 패드(1618)에 결합한다. 유사하게, 노드B는 PCB 트레이스(1622)를 통해 커넥터 패드(1619)에 접속된다.
표면 장착 커넥터를 사용하여 다른 보드들에 위치한 노드들간의 신호 라우팅(경로설정)이 설명된다. 도 40A에서, 바람직한 접속은: (1) 가상 경로(1620,1621,1622)에 의해 지시되는 노드A와 노드B' 사이에서 이루어지고, (2) 가상 경로(1623,1624,1625)에 의해 지시되는 노드B와 노드A'에서 이루어진다. 상기 접속은 도 39의 보드(1551)과 보드(1552) 사이의 비대칭 접속과 같은 경로를 이룬다. 다른 비대칭 상호접속은 커넥터(1589-1590)의 양 측상에서 NH-SH 상호접속부(1577,1579,1581)를 포함한다.
A-A'와 B-B'는 상호접속부(1515(N,S))와 같은 대칭 상호접속부에 해당하는 반면, N과 S 상호접속은 스루홀 커넥터를 사용하며, NH와 SH 비대칭 상호접속은 SMD 커넥터를 사용한다. 표 D를 참조하라.
표면 장착 커넥터를 사용한 실제 구현이 동일 항목에 대하여 동일 번호를 사용하여 도 40B를 참조하여 설명된다. 도 40B에서, 보드(1611)는 PCB 트레이스(1620)를 통해 컴포넌트-측 커넥터 패드(1636)에 결합된 컴포넌트 측 상의 노드A'를 도시한다. 컴포넌트-측 커넥터 패드(1636)는 도전 경로(1651)를 통해 솔더-측 커넥터 패드(1639)에 결합한다. 솔더-측 커넥터 패드(1639)는 도전 경로(1648)을 통해 보드(1610) 상의 컴포넌트 측 커넥터 패드(1642)에 결합한다. 마지막으로, 컴포넌트-측 커넥터 패드(1642)는 PCB 트레이스(1622)를 통해 노드B에 결합한다. 따라서, 보드(1611) 상의 노드A'는 보드(1610) 상의 노드B와 결합될 수 있다.
마찬가지로, 도 40B에서, 보드(1611)는 PCB 트레이스(1623)를 통해 컴포넌트-측 커넥터 패드(1638)에 결합된 컴포넌트 측 상의 노드B'를 도시한다. 컴포넌트-측 커넥터 패드(1638)는 도전 경로(1650)를 통해 솔더-측 커넥터 패드(1637)에 결합한다. 솔더-측 커넥터 패드(1637)는 도전 경로(1645)을 통해 컴포넌트 측 커넥터 패드(1640)에 결합한다. 마지막으로, 컴포넌트-측 커넥터 패드(1640)는 PCB 트레이스(1625)를 통해 노드A에 결합한다. 따라서, 보드(1611) 상의 노드B'는 보드(1610) 상의 노드A와 결합될 수 있다. 이들 보드들은 동일한 레이아웃을 공유하기 때문에, 도전 경로(1652,1653)은 보드(1610)에 인접하여 위치한 다른 보드에 대한 도전 경로(1650,1651)과 동일한 방식으로 사용될 수 있다. 따라서, 고유한 내부-보드 접속 수단이 스위칭 컴포넌트를 사용하지 않고 표면 장착 및 스루 홀 커넥터를 사용하여 제공된다.
F. 타이밍-인센서티브 글리치-프리(TIGF) 로직 소자
본 발명의 일 실시예는 유지 시간(hold time)과 클럭 글리치(glitch) 문제를 해결한다. 본 발명의 일 실시예에 따라서, 리컨피규러블 컴퓨팅 시스템의 하드웨어 모델로 사용자가 설계하는 동안, 사용자 설계에서 나타난 표준 로직 소자(래치, 플립-플롭)는 에뮬레이션 로직 소자, 타이밍-인센서티브 글리치-프리(TIGF) 로직 소자로 대체된다. 일 실시예에서, EVAL 신호에 포함된 트리거 신호는 TIGF 로직 소자 내에 저장된 값을 업데이트하는데 사용된다. 평가 주기동안 사용자 설계 하드웨어 모델을 통해 진행하고 안정-상태에 도달하도록 여러 입력 및 다른 신호를 대기한 후에, TIGF 로직 소자에 의해 저장되거나 래치된 값을 업데이트하기 위해 트리거 신호가 제공된다. 그 후에, 새로운 평가 주기가 시작된다. 일 실시예에서, 상기 평가 주기-트리거 주기는 주기적이다.
상기 언급한 유지 시간 문제는 간단하게 설명된다. 공지된 바와 같이, 로직 회로 설계의 일반적인 문제는 유지 시간 위반이다. 유지 시간은 로직 엘리먼트의 데이터 입력(들)가 제어 입력(클럭 입력)이 데이터 입력(들)에 의해 지시되는 값의 래치, 캡쳐 또는 저장을 변경한 후에 안정을 유지해야 하지만, 그렇지 않으면 로직 엘리먼트가 적절하게 동작하지 않는 최소 시간으로서 정의된다.
시프트 레지스터 예는 유지 시간 조건을 예시하는데 설명된다. 도 75A는 게개의 D-타입 플립-플롭이 직렬로 접속되는, 즉 플립-플롭(2400)의 출력부가 플립-플롭(2401)의 입력부에 연결되고, 그 출력부가 플립-플롭(2402)의 입력부에 연결되는, 예시적인 시프트 레지스터를 도시한다. 전체 입력 신호(Sin)는 플립-플롭(2400)의 입력부에 연결되고 전체 출력 신호(Sout)는 플립-플롭(2402)의 출력으로부터 생성된다. 모든 세 개의 플립플롭은 각각 자신의 클럭 입력부에서 공통 클럭 신호를 수신한다. 상기 시프트 레지스터 설계는 (1)클럭 신호가 도시에 모든 플립플롭에 도달하고, (2)클럭 신호의 에지를 검출한 후에 플립플롭의 입력부가 유지 시간동안 변하지 않는다는 가정에 기초한다.
도 75B의 타이밍 도를 참조하면, 시스템이 유지 시간 조건을 위반하지 않는다는 유지 시간 가정을 도시한다. 유지 시간은 하나의 로직 엘리먼트로부터 다음 로직 엘리먼트로 변화하지만 항상 특정 시트에서 특정되는 것은 아니다. 시간(t0)에서 클럭 입력은 로직 0에서 로직 1로 변한다. 도 75A에 도시된 바와같이, 클럭 입력은 각각의 플립플롭(2400-2402)에 제공된다. (t0)에서의 상기 클럭 에지로부터, 입력(Sin)은 시간(t0)에서 시간(t1)까지 지속되는 유지 시간(TH)동안 안정해야 한다. 유사하게, 플립플롭(2401(D2), 2402(D3))의 입력은 또한 클럭 신호의 트리거 에지로부터 유지 시간 동안 안정해야 한다. 상기 조건은 도 75A와 도 75B에서 만족되기 때문에, 입력(Sin)는 플립플롭(2400)으로 시프트되고, (D2(로직0))에서의 입력은 플립플롭(2401)으로 시프트되고, (D3(로직1))에서의 입력은 플립플롭(2402)으로 시프트된다. 공지된 바와 같이,클럭 에지가 트리거된 후에, 플립플롭(2401)(입력D2에서의 로직 1과 플립플롭(2402)(입력D3에서의 로직 0의 입력에서의 새로운 값은 유지 시간 조건이 만족된다고 가정하여 다음 클럭 사이클에서 다음 플립플롭에 시프트 또는 저장된다. 하기 표는 상기 예시적인 값에 대한 시프트 레지스터의 동작을 요약한 것이다.
D1 D2 D3 Q3
클럭 에지 전 1 0 1 0
클럭 에지 후 1 1 0 1
실제 구현에서, 클럭 신호는 모든 로직 엘리먼트에 동시에 도달하지 않지만, 회로는 클럭 신호가 모든 로직 엘리먼트에 거의 동시에 또는 실질적으로 동시에 도달하도록 설계된다. 회로는 각각의 플립플롭에 도달하는 클럭 신호들 사이의 클럭 스큐, 또는 시간차가 유지 시간 조건 보다 작도록 설계된다. 따라서, 모든 로직 엘리먼트는 적절한 입력 값을 캡쳐한다. 도 75A와 도75B에 도시된 상기 예에서, 다른 시간에 플립플롭(2400-2402)에 도달한 클럭 신호로 인해 유지 시간 위반은 다른 플립플롭이 새로운 입력 값을 캡쳐하는 동안 일부 플립플롭이 이전의 입력 값을 캡쳐하는 결과를 유발할 수 있다. 그 결과, 시프트 레지스터는 적절하게 동작하지 않는다.
동일한 시프트 레지스터 설계의 리컨피규러블 로직(FPGA) 구현에서, 만약 클럭이 1차 입력으로부터 직접 생성된다면, 회로는 낮은 스큐 네트워크가 클럭 신호를 모든 로직 엘리먼트에 분배할 수 있어 로직 엘리먼트가 실질적으로 동시에 클럭 에지를 검출하도록 설계될 수 있다. 이전 클럭은 셀프-타임 테스트-벤치 프로세스로부터 생성된다. 일반적으로, 주요 클럭 신호는 소프트웨어에서 생성되고 오로지 적은(1-10) 1차 클럭이 통상적인 사용자 회로 설계에서 발견된다.
그러나, 만약 클럭 신호가 1차 입력부 대신에 내부 로직으로부터 생성된다면, 유지 시간은 더 중요하게 된다. 유도 또는 게이트 클럭은 1차 클럭에 의해 얻어진 조합 로직 및 레지스터의 네트워크로부터 생성된다. 많은 (1000 이상) 유도 클럭은 통상적인 사용자 회로 설계에서 발견된다. 외부 예방 또는 추가의 제어없이, 상기 클럭 신호는 다른 시간에서 각각의 로직 엘리먼트에 도달할 수 있고 클럭 스큐는 유지 시간보다 길어질 수 있다. 이것은 도 75A와 도 75B에 도시된 시프트 레지스터 회로와 같은 회로 설계를 실패하게 한다.
도 75A에 도시된 동일한 시프트 레지스터 회로를 사용하여, 유지 시간 위반이 설명된다. 그러나, 이 때, 시프트 레지스터 회로의 개별 플립플롭은 도 75A에 도시된 여러 리컨피규러블 로직 칩(여러 FPGA 칩)에 대해 배치된다. 제 1 FPGA 칩(2411)은 클럭 신호(CLK)를 FPGA 칩(2412-2416)의 일부 컴포넌트에 제공하는 내부에서 얻어진 클럭 로직(2410)을 포함한다. 상기 예에서, 내부에서 생성된 클럭 신호(CLK)는 시프트 레지스터 회로의 플립플롭(2400-2402)에 제공된다. 칩(2412)는 플립플롭(2400)을 포함하고, 칩(2415)은 플립플롭(2401)을 포함하며, 칩(2416)은 플립플롭(2402)을 포함한다. 두 개의 다른 칩(2413,2414)은 유지 시간 위반 개념을 설명하는데 제공된다.
칩(2411)의 클럭 로직(2410)은 내부 클럭 신호(CLK)를 생성하기 위해 1차 클럭 입력(또는 다른 얻어진 클럭 입력)을 수신한다. 상기 내부 클록 신호(CLK)는 칩(2412)으로 전송되고 CLK1로 라벨링된다. 클럭 로직(2410)으로부터의 내부 클럭 신호(CLK)는 또한 칩(2415)으로 전송되고 칩(2413,2414)를 통해 CLK2로 라벨링된다. 도시된 바와 같이, (CLK1)는 플립플롭(2400)에 입력되고 (CLK2)는 플립플롭(2401)에 입력된다. (CLK1)과 (CLK2)는 (CLK1)과 (CLK2)의 데지가 내부 클럭 신호(CLK)의 에지로부터 지연되도록 와이어 트레이스 지연을 가진다. 더욱이, (CLK2)은 두 개의 다른 칩(2413,2414)를 통해 전송되기 때문에 추가의 지연을 가진다.
도 76B의 타이밍 도를 참조하면, 내부 클럭 신호(CLK)가 시간(t2)에서 생성되고 트리거된다. 와이어 트레이스 지연으로 인해, (CLK1)는 시간(t3)까지 칩(2412)의 플립플롭(2400)에 도달하지 못하며, 이것은 시간(T1)의 지연이다. 상기 표에 도시된 바와 같이, (Q1)(또는 입력 D2)에서의 출력은 (CLK1)의 클럭 에지가 도달하기전까지 로직0이다. (CLK1)의 에지가 플립플롭(2400)에서 검출된 후에, D1에서의 입력은 필수 유지 시간(H2)동안(시간(t4)까지) 안정해야 한다. 이 때, 플립플롭(2400)은 Q1(또는 D2)에서 출력이 로직 1이 되도록 입력 로직1로 시프트하거나 또는 저장한다.
이것이 플립플롭(2400)에서 발생하는 동안, 클럭 신호(CLK2)는 칩(2415)의 플립플롭(2401)로 진행한다. 칩(2413,2414)에 의해 유발된 지연(T2)는 (CLK2)가 시간(t5)에서 플립플롭(2401)에 도달하게 한다. D2에서의 입력이 로직 1이고 그후에 유지 시간이 상기 플립플롭(2401)에 대해 만족되면, 상기 로직 값 1은 출력(Q2)(또는 D3)에서 나타난다. 따라서, 출력(Q2)은 (CLK2)의 도달 전에 로직 1이고 출력은 (CLK2)의 도달 후에 로직 1이 계속된다. 이것은 잘못된 결과이다. 상기 시프트 레지스터는 로직 0으로 시프트된다. 플립플롭(2400)은 이전의 입력 값(로직1)로 올바르게 시프트 하지만, 플립플롭(2401)은 새로운 입력 값(로직 1)로 올바르지 않게 시프트된다. 일반적으로 이러한 올바르지 않은 동작은 클럭 스큐(또는 타이밍 지연)이 유지 시간 보다 클때 발생한다. 상기 예에서, T2>T1+H2 이다. 결국, 유지 시간 위반은 일부 예방 수단이 실행되지 않으면, 도 76A에 도시된 바와 같이, 클럭 신호가 하나의 칩으로부터 생성되고 클럭 신호를 다른 칩에 있는 다른 로직 엘리먼트에 분배하는 경우에 발생한다.
상기 언급한 클럭 글리치 문제는 도 77A와 도 77B를 참조하여 설명된다. 일반적으로, 회로 입력이 변할 때, 출력이 올바른 값으로 안정화되기 전에 매우 짧은 시간 동안 일부 임의의 값으로 변한다. 만약 또다른 회로가 잘못된 시간에 출력을 조사하고 임의의 값을 판독한다면, 결과는 올바르지 않을 수 있고 디버깅이 어려워진다. 또 다른 회로에 나브게 영향을 미치 상기 임의의 값을 글리치라고 한다. 일반적인 로직 회로에서, 하나의 회로는 또 다른 회로에 대하여 클럭 신호를 생성할 수 있다. 만약 보상되지 않은 타이밍 지연이 하나 또는 두 개의 회로에 존재한다면, 클럭 글리치(클럭 에지의 계획되지 않은 발생)이 발생할 수 있고 이것은 올바르지 않은 결과를 유발할 수 있다. 유지 시간 위반과 같이, 회로 설계의 임의의 로직 엘리먼트가 다른 시간에서 값을 변화시키기 때문에 클럭 글리치가 발생한다.
도 77A는 로직 엘리먼트의 또 다른 세트, 즉 D-타입 플립플롭(2420), D타입 플립플롭(2421)에 대하여 클럭 신호를 생성하고, 배타적 논리합(XOR) 게이트(2422)는 D-타입 플립플롭(2423)에 대하여 클럭 신호(CLK3)를 생성한다. 플립플롭(2420)은 라인(2425)에서 D1에서 데이터 입력을 수신하고 라인(2427)에서 Q1에서 데이터를 출력한다. 클럭 로직(2424)으로부터 클럭 입력(CLK)이 수신된다. CLK는 클럭 로직(2424)으로부터 원래 생성된 클럭 신호로 불리고 CLK1은 플립플롭(2420)에 도달하는 시간에 지연된 동일한 신호로 불린다.
플립플롭(2421)은 라인(2426)상의 D2에서 데이터 입력을 수신하고 라인(2428)상의 Q2에서 데이터를 출력한다. 클럭 로직(2424)으로부터 클럭 입력(CLK2)이 수신된다. CLK는 클럭 로직(2424)으로부터 원래 생성된 클럭 신호로 불리고 CLK2은 플립플롭(2421)에 도달하는 시간에 지연된 동일한 신호로 불린다.
라인(2427,2428)에서 각각 플립플롭(2420,2421)으로부터의 출력은 XOR 게이트(2422)에 입력된다. XOR 게이트(2422)는 CLK3로 라벨링된 데이터를 플립플롭(2423)의 클럭 입력에 출력한다. 플립플롭(2423)은 또한 라인(2429)에서 D3에서 데이터를 입력하고 Q3에서 데이터를 출력한다.
상기 회로에서 발생할 수 있는 클럭 글리치 문제는 도 77B에 도시된 타이밍 도를 참조하여 설명된다. CLK 신호는 시간(t0)에서 트리거된다. 상기 클럭 신호(CLK1)가 플립플롭(2420)에 도달할 때, 시간은 t1이다. CLK2는 시간(t2)까지 플립플롭(2421)에 도달하지 않는다.
D1과 D2의 입력은 모두 로직 1이라고 가정한다. CLK1이 시간(t1)에서 플립플롭(2420)에 도달할 때 Q1에서의 출력은 (도 77B에 도시된 것처럼) 로직1이 될 것이다. CLK2는 시간(t1)에서 플립플롭(2420)에 다소 늦게 도달하고, 따라서 라인(2428)에서 출력(Q2)는 시간(t1)에서 시간(t2)까지 로직 0으로 남아 있다. XOR 게이트(2422)는, 원하는 신호가 로직0일지라도(1 XOR 1 = 0), 시간(t1)과 시간(t2) 사이의 시간 주기동안 플립플롭(2423)의 클럭 입력에 존재하기 위한 CLK3로서, 로직 1을 생성한다. 시간(t1)과 시간(t2) 사이의 시간 주기동안의 CLK3 생성은 클럭 글리치이다. 따라서, 플립플롭(2423)의 입력 라인(2429)에서 D3에서 존재하는 어떤 로직 값이, 원하던 값이든 아니든, 저장되고, 상기 플립플롭(2423)은 라인(2429) 상에서 다음 입력을 준비한다. 만약 적절하게 설계되었다면, CLK1과 CLK2의 시간 지연은 클럭 글리치가 생성되지 않도록 최소화되거나, 적어도 클럭 글리치는 회로의 나머지 부분에 영향을 주지 않는 짧은 주기동안 지속된다. 후자의 경우에, 만약 CLK1과 CLK2 사이의 클럭 스큐가 충분히 짧다면, XOR 게이트 지연은 글리치를 필터링하기에 충분히 길고, 회로의 나머지 부분에 영향을 주지 않을 것이다.
유지 시간 위반 문제에 대한 두 개의 공지된 해결책은 (1) 타이밍 조정과 (2) 타이밍 재합성이다. 미국 특허 번호 5,475,830 에 개시된 타이밍 조정은 로직 엘리먼트의 유지 시간을 늘리기 위해 임의의 신호 경로에서 (버퍼와 같은) 충분한 지연 엘리먼트의 설치를 필요로 한다. 예컨대, 상기 시프트 레지스터 회로내의 입력(D2,D3)상에서의 충분한 지연을 추가하는 것은 유지 시간 위반을 방지할 수 있다. 따라서, 도 78에서, 입력(D2,D3)에 각각 추가된 지연 엘리먼트(2430,2430)을 가지는 동일한 시프트 레지스터 회로가 도시되어 있다. 그 결과, 지연 엘리먼트(2430)는 T2<T1+H2(도76B)이고 유지 시간 위반이 발생하지 않기 위해 시간(t4)이 시간(t5)이후에 발생하도록 설계될 수 있다.
타이밍 조정 해결책이 갖는 잠재적인 문제는 FPGA 칩의 스펙 시트에 너무 과도하게 의존한다는 것이다. 통상의 당업자에게 공지된 바와 같이, FPGA 칩과 같은 리컨피규러블 로직 칩은 룩-업 테이블을 갖는 로직 엘리먼트를 구현한다. 칩내의 룩-업 테이블의 지연은 스펙 시트에 제공되고 설계자는 유지 시간 위반을 방지하는 타이밍 조정 방법을 사용하여 상기 특정 시간 지연에 의존한다. 그러나, 상기 지연은 단지 추정값이며 칩에 따라 변한다. 타이밍 조정 방법이 가지는 또 다른 잠재적인 문제점은 설계자가 또한 회로 설계 전체에 걸쳐 존재하는 와이어링 지연을 보상한다는 것이다. 비록 이것은 불가능한 작업이지만, 와이어링 지연의 추정은 시간 소모적이며 에러가 발생하기 쉽다. 더욱이, 타이밍 조정 방법은 클럭 글리치 문제를 해결하지 않는다.
또다른 해결책은 IKOS의 VirtualWires 기술에 소개된 타이밍 재합성(timing resynthesis)이다. 타이밍 재합성 개념은 유한 상태 머신과 레지스터를 통해 클럭의 타이밍과 핀-아웃 신호의 엄격한 제어동안 사용자의 회로 설계를 기능적으로 동일한 설계로 변형하는 것을 포함한다. 타이밍 재합성은 단일 고속 클럭에 의해 도입되는 사용자의 회로 설계를 재타이밍한다. 또한 래치, 게이트 클럭, 여러 동기식 및 비동기식 클럭을 플립플롭 기반 단일-클럭 동기 설계로 변환한다. 따라서, 타이밍 재합성은 내부-칩 유지 시간 위반이 발생하지 않도록 정교한 내부-칩 신호 움직임을 제어하기 위해 각각의 칩의 입력 및 출력 핀-아웃에서 레지스터를 사용한다. 또한 타이밍 재합성은 다른 칩으로부터 입력을 계획하고, 다른 칩으로 출력을 계획하며 기준 클럭에 기초한 내부 플립플롭의 업데이트을 계획하기 위해 각 칩의 유한 상태 머신을 사용한다.
도 75A,75B,76A,76B와 관련하여 설명된 동일한 시프트 레지스터 회로를 사용하여, 도 79는 타이밍 재합성 회로의 일 예를 도시한다. 기본적인 세 개의 플립플롭 시프트 레지스터 설계는 기능적으로 동일한 회로로 변형되었다. 칩(2430)은 라인(2448)을 통해 레지스터(2443)에 연결된 로직(2435)를 생성하는 원래의 내부 클럭을 포함한다. 클럭 로직(2435)은 CLK 신호를 생성한다. 제 1 유한 상태 머신(2438)은 또한 라인(2449)를 통해 레지스터(2443)에 연결된다. 레지스터(2443)과 제 1 유한 상태 머신(2438)은 설계-독립형 글로벌 기준 클럭에 의해 제어된다.
또한 CLK 신호는 칩(2434)에 도달하기 전에 칩(2432,2433)에 대해 전달된다. 칩(2432)에서, 제 2 유한 상태 머신(2440)은 라인(2462)를 통해 레지스터(2445)를 제어한다. CLK 신호는 레지스터(2443)로부터 라인(2461)을 통해 레지스터(2445)로 전송된다. 레지스터(2445)는 CLK 신호를 라인(2463)을 통해 다음 칩(2433)으로 출력한다. 칩(2433)은 라인(2464)를 통해 레지스터(2446)를 제어하는 제 3 유한 상태 머신(2441)을 포함한다. 레지스터(2446)는 CLK 신호를 칩(2434)으로 출력한다.
칩(2431)는 원래의 플립플롭(2436)을 포함한다. 레지스터(2444)는 입력(Sin)을 수신하고 라인(2452)를 통해 플립플롭(2436)의 D1 입력에 입력(Sin)을 출력한다. 플립플롭(2436)의 Q1 출력은 라인(2454)를 통해 레지스터(2466)에 연결된다. 제 4 유한 상태 머신(2439)는 라인(2451)을 통해 레지스터(2444)를, 라인(2455)을 통해 레지스터(2466)를 제어하고, 래치 인에이블 라인(2453)을 통해 플립플롭(2436)을 제어한다. 제 4 유한 상태 머신(2439)는 또한 라인(2450)을 통해 칩(2430)으로부터 원래의 클럭 신호 CLK를 수신한다.
칩(2434)은 원래의 플립플롭(2437)을 포함하며, 이것은 라인(2456)을 통해 D2 입력에서 칩(2431)의 레지스터(2466)로부터 신호를 수신한다. 플립플롭(2437)의 Q2 출력은 라인(2457)을 통해 레지스터(2447)에 연결된다. 제 5 유한 상태 머신(2439)는 라인(2459)를 통해 레지스터(2447)을 제어하고, 래치 인에이블 라인(2458)을 통해 플립플롭(2437)을 제어한다. 제 5 유한 상태 머신(2442)는 또한 칩(2432,2433)을 통해 칩(2430)으로부터 원래의 클럭 신호(CLK)를 수신한다.
타이밍 재합성을 이용하여, 유한 상태 머신(2438-2442), 레지스터(2443-2447,2466), 및 단일 글로벌 기준 클럭은 다중 칩들에 대한 신호 흐름을 제어하고 내부 플립플롭을 업데이트하는데 사용된다. 따라서, 칩(2430)에서, CLK 신호를 다른 칩에 분배하는 것은 레지스터(2443)을 통해 제 1 유한 상태 머신(2438)에 의해 스케쥴링된다. 유사하게, 칩(2431)에서, 제 4 유한 상태 머신(2439)는 입력(Sin)을 레지스터(2444)를 통해 플립플롭(2436)에 전달하고 레지스터(2466)을 통해 Q1 출력을 전달하는 것을 스케쥴링한다. 또한 플립플롭(2436)의 래칭 기능은 제 4 유한 상태 머신(2439)로부터 래치 인에이블 신호에 의해 제어된다. 동일한 원리가 다른 칩(2432-2434)내의 로직에 대해 적용된다. 상기 내부-칩 입력 전달 스케줄, 내부-칩 출력 전달 스케쥴, 및 내부 플립플롭 상태 업데이트의 엄격한 제어를 이용하여, 내부-칩 홀드-시간 위반이 제거된다.
그러나, 타이밍 재합성 기술은 사용자의 회로 설계를 유한 상태 머신과 레지스터를 포함하는 대부분 기능적으로 동일한 회로로 변형하는 것을 요구한다. 일반적으로, 이러한 기술을 구현하는데 추가로 필요한 로직은 각 칩내에서 이용될 수 있는 로직의 20%이다. 더욱이, 상기 기술은 클럭 글리치 문제점에 영향을 받지 않는다. 클럭 글리치를 피하기 위하여, 설계자는 타이밍 재합성 기술을 사용하여 추가의 예비주의 단계를 수행해야 한다. 한가지 종래 설계 접근법은 게이트 클럭을 이용하는 로직 소자의 입력이 동시에 변하지 않도록 회로를 설계하는 것이다. 개선되 접근법은 회로의 나머지 부분이 영향을 받지 않도록 글리치를 필터링하기 위해 게이트 지연을 사용한다. 그러나, 상기 설명처럼, 타이밍 재합성은 클럭 글리치를 피하기 위해 일부 추가로 시도되지 않은 수단을 요구한다.
삭제
삭제
삭제
삭제
삭제
삭제
유지 시간과 클럭 글리치 문제점을 해결하는 본발명의 여러 실시예가 논의 된다. 사용자 설계를 RCC 컴퓨팅 시스템의 소프트웨어 모델과 RCC 어레이의 하드웨어 모델로 구조 맵핑하는 동안, 도 18A에 도시된 래치는 본 발명의 일 실시예에 따라서 타이밍 인센서티브 글리치-프리(TIGF) 래치로 에뮬레이션된다. 유사하게, 도 18B에 도시된 플립플롭 설계는 본 발명의 일 실시예에 따라서 타이밍 인센서티브 글리치-프리(TIGF) 래치로 에뮬레이팅된다. 래치 또는 플립플롭 형태를 가지는 TIGF 로직 소자는 또한 에뮬레이션 로직 소자로 불릴 수 있다. TIGF 래치와 플립플롭의 업데이트은 글로벌 트리거 신호로 제어된다.
본 발명의 일 실시예에서, 사용자 설계 회로에서 발견된 모든 로직 소자가 TIGF 로직 소자로 대체되는 것은 아니다. 사용자 설계 회로는 1차 클럭에 의해 인에이블 또는 클럭킹된 부분과 게이트 또는 얻어진 클럭에 의해 제어된 다른 부분을 포함한다. 유지 시간 위반과 클럭 글리치는 로직 소자가 게이트 또는 얻어진 클럭에 의해 제어되는 경우에 발생하기 때문에, 오로지 게이트 또는 얻어진 클럭에 의해 제어된 특정 로직 소자가 본 발명의 일 실시예에 따라서 TIGF로 대체된다. 다른 실시예에서, 사용자 설계 회로에 발견된 모든 로직 소자는 TIGF 로직 소자로 대체된다.
본 발명의 TIGF 래치 및 플립플롭 실시예를 설명하기 전에, 글로벌 트리거 신호가 설명된다. 일반적으로, 글로벌 트리거 신호는 TIGF 래치 및 플립플롭이 평가 주기동안 상태(이전 입력값)를 유지하게 하고, 짧은 트리거 주기동안 상태(새로운 입력값)를 업데이트하게 한다. 일 실시예에서, 도 82에 도시된 글로벌 트리거 신호는 상기 설명한 EVAL 신호로부터 분리되고 얻어진다. 상기 실시예에서, 글로벌 트리거 신호는 짧은 트리거 주기가 뒤따르는 긴 평가 주기를 가진다. 글로벌 트리거 신호는 평가 주기동안 EVAL 신호를 트레이스하고, EVAL 사이클의 결과에서, 짧은 트리거 신호가 TIGF 래치와 플립플롭을 업데이트하기 위해 생성된다. 또 다른 실시예에서, EVAL 신호는 글로벌 트리거 신호이며, EVAL 신호는 평가 주기동안 하나의 로직 상태(로직0)를 가지며, 비평가 또는 TIGF 래치/플립플롭 업데이트 주기동안 또다른 로직 상태(로직1)를 가진다.
삭제
삭제
RCC 컴퓨팅 시스템과 RCC 하드웨어 어레이를 참조하여 설명한 평가 주기는 모든 1차 입력을 진행하는데 사용되고 플립플롭/래치 디바이스는 임의의 시간에서의 시뮬레이션 사이클을 전체 사용자 설계로 변화시킨다. 전파 도중에, RCC 시스템은 시스템 내의 모든 신호들이 정상 상태(steady-state)를 달성할 때까지 대기하게 된다. 사용자 설계가 맵핑되어 RCC 어레이의 적절한 리컨피규러블 로직 엘리먼트(예를들어, FPGA 칩)에 배치된 후에, 평가 주기가 계산된다. 따라서, 평가 주기는 설계 특정 사항이다. 즉, 한 사용자 설계에 대한 평가 주기가 다른 사용자 설계에 대한 평가 주기와 상이할 수 있다. 이 평가 주기는 시스템 내의 모든 신호가 전체 시스템을 통과하여 전파되고 다음의 짧은 트리거 주기 전에 정상 상태에 도달하는 것을 보장할 수 있도록 충분히 길어야 한다.
짧은 트리거 주기는 도82에 도시된 바와 같이, 평가 주기에 인접한 시간에 발생한다. 본 발명의 일 실시예에서, 짧은 트리거 주기는 평가 주기 후에 일어난다. 이 짧은 트리거 주기 전에, 입력 신호가 평가 주기 도중에 사용자 설계 회로의 하드웨어 모델 구조화 부분을 통과하여 전파된다. 본 발명의 일 실시예에 따른 EVAL 신호의 로직 상태의 변화에 의해 표시되는 짧은 트리거 주기은 정상 상태가 도달된 후의 평가 주기으로부터 전파된 새로운 값으로 업데이트될 수 있도록, 사용자 설계 내의 모든 TIGF 래치와 플립플롭을 제어한다. 짧은 트리거 주기는 낮은 스큐(skew) 네트워크에 전체적으로 분산되며 리컨피규러블 로직 엘리먼트가 적절한 동작을 허용할 수 있을 정도만큼 짧을 수 있다(즉, 도82에 도시된 지속시간 t2에서 t3뿐만 아니라 t0에서 t1의 지속시간). 짧은 트리거 주기 도중에, 새로운 1차 입력이 TIGF 래치 및 플립플롭의 매 입력 단계마다 샘플되며, 동일한 TIGF 래치 및 플립플롭의 이전에 저장된 값이 사용자 설계의 RCC 하드웨어 모델의 다음 스테이지에 노출된다. 이하의 설명에서는, 짧은 트리거 주기 도중에 발생하는 전체 트리거 신호의 일부가 TIGF 트리거, TIGF 트리거 신호, 트리거 신호, 또는 단순히 트리거로 표시될 것이다.
삭제
도 80(A)은 도18(A)에 먼저 도시되었던 래치(2470)를 나타낸다. 래치 동작은 다음과 같다.
if(#S), Q←1
else if(#R), Q←0
else if(en), Q←D
else Q는 이전 값을 유지.
삭제
삭제
삭제
이러한 래치가 레벨-민감성(sensitive)이며 비동기적이므로, 클럭 입력이 인에이블되고 래치 인에이블 입력이 인에이블되는 동안은, 출력(Q)이 입력(D)을 트레이스한다.
도80(B)은 본 발명의 일 실시예에 따른 TIGF 래치를 나타낸다. 도80(A)에 도시된 바와 같이, TIGF 래치는 D 입력, 인에이블 입력, 셋(S), 리셋(R), 및 출력 Q를 갖는다. 따라서, TIGF 래치는 트리거 입력을 갖는다. TIGF 래치는 D 플립플롭(2471), 멀티플렉서(2472), OR 게이트(2473), AND 게이트(2474), 및 다양한 상호접속부를 갖는다.
D 플립플롭(2471)은 라인(2476)을 통해 AND 게이트(2474)의 출력으로부터 D 플립플롭(2471)의 입력을 수신한다. D 플립플롭은 또한 라인(2477) 상의 트리거 신호에 의해 입력된 클럭에서 트리거되며, 상기 트리거 신호는 평가 사이클에 기초한 엄격한 스케줄에 따라 RCC 시스템에 의해 전체적으로 분산되어 있다. D 플립플롭(2471)의 출력은 라인(2478)을 통해 멀티플렉서(2472)의 한 입력에 연결된다. 멀티플렉서(2472)의 다른 입력은 라인(2475)상에 TIGF 래치 D 입력에 연결된다. 멀티플렉서는 라인(2484) 상의 인에이블 신호에 의해 제어된다. 멀티플렉서(2472)의 출력은 라인(2479)을 통해 OR 게이트(2473)의 입력에 연결된다. OR 게이트(2473)의 다른 입력은 라인(2480) 상의 셋(S) 입력에 연결된다. OR 게이트(2473)의 출력은 라인(2481)을 통해 AND 게이트(2474)의 하나의 입력에 연결된다. AND 게이트(2474)의 다른 입력은 라인(2482)상의 리셋(R) 신호에 연결된다. AND 게이트(2474) 상의 출력은 위에서 언급한 바와 같이 라인(2476)을 통해 D 플립플롭(2471)의 입력에 피드백된다.
본 발명에 따른 실시예의 이러한 TIGF 래치의 동작을 설명하고자 한다. TIGF 래치의 실시예에서, D 플립플롭(2471)은 TIGF 래치의 현재 상태(즉, 이전 값)를 유지한다. D 플립플롭(2471)의 입력에서의 라인(2476)은 TIGF 래치에 래치된 새로운 입력 값을 나타낸다. 라인(2475) 상의 TIGF 래치의 주 입력(D 입력)이 궁극적으로는(궁극적으로는 표시될 라인(2484)상의 적절한 인에이블 신호를 갖는) 멀티플렉서(2472)의 입력으로부터 OR 게이트(2473)를 통과하여 진행되고, 마지막으로 라인(2483) 상에서 AND 게이트(2474)를 통과하고, TIGF 래치의 새로운 입력 신호를 라인(2476) 상의 D 플립플롭(2471)으로 피드백시키기 때문에, 라인(2476)은 새로운 값을 나타낸다. 라인(2477) 상의 트리거 신호는 새로운 입력 값을 D 플립플롭(2471)으로 클럭킹함에 의해 TIGF 래치를 업데이트한다. 따라서, D 플립플롭(2471)의 라인(2478) 상의 출력은 TIGF 래치의 현재 상태(즉, 이전 값)를 나타내고, 라인(2476) 상의 입력은 TIGF 래치에 의해 래치된 새로운 입력을 나타낸다.
멀티플렉서(2472)는 D 플립플롭(2471)으로부터 뿐만아니라 라인(2475) 상의 새로운 입력 값으로부터 현재 상태를 수신한다. 인에이블 라인(2484)은 멀티플렉서(2472)에 대한 선택기로서 기능한다. TIGF 래치가 트리거 신호가 라인(2477) 상에 제공될 때까지 업데이트되기 않기 때문에, 라인(2475) 상의 TIGF 래치의 D 입력 및 라인(2484) 상의 인에이블 입력은 임의의 순서로 TIGF 래치에 도달될 수 있다. TIGF 래치(및 사용자 설계의 하드웨어 모델에서의 다른 TIGF 래치)가, 하나의 클럭 신호가 다른 클럭 신호보다 훨씬 뒤에 도달되는 도76(A) 및 도76(B)에서 설명된 바와 같이, 종래의 래치에서 사용된 회로의 유지 시간 위반을 일반적으로 야기하는 상황에 직면하면, 이 TIGF 래치는 트리거 신호가 라인(2477) 상에 제공될 때까지 적절한 이전 값을 유지함에 의해 적절히 기능할 것이다.
트리거 신호는 낮은 스큐 글로벌 클럭 네트워크를 통해 분산된다.
이 TIGF 래치는 또한 클럭 글리치 문제를 해결한다. 클럭신호가 TIGF 래치에서 인에이블 신호로 대체된다는 점을 주의한다. 라인(2484) 상의 인에이블 신호는 평가 주기 도중에 종종 글리치를 일으키나 TIGF 래치는 에러없이 현재 상태를 계속 유지할 것이다. TIGF 래치가 업데이트될 수 있는 단 하나의 메커니즘은, 본 발명의 평가 주기 후에 제공된 트리거 신호를 통해서이며, 상기 트리거 신호는 일 실시예에서 정상 상태에 도달되는 때에 평가 주기 후에 제공된다.
삭제
삭제
삭제
삭제
삭제
삭제
도81(A)은 도18(B)에 먼저 도시된 플립플롭(2490)을 나타낸다. 플립플롭은 다음과 같이 동작한다.
if(#S), Q←1
else if(#R), Q←0
else if(CLK의 (+) 에지), Q←D
else Q는 이전 값을 유지.
삭제
삭제
삭제
삭제
이러한 래치가 에지-트리거되기 때문에, 플립플롭 인에이블 입력이 인에이블되는 동안에는, 출력 (Q)가 클럭 신호의 (+) 에지에서 입력(D)을 뒷따른다.
도81(B)은 본 발명의 일 실시예에 따른 TIGF D형 플립플롭을 나타낸다. 도81(A)의 플립플롭과 마찬가지로, TIGF 플립플롭은 D 입력, 클럭 입력, 셋(S), 리셋(R) 및 출력(Q)를 갖는다. 또한, TIGF 플립플롭은 트리거 입력을 갖는다. TIGF 플립플롭은 세 개의 D 플립플롭(2491, 2492, 2496), 멀티플렉서(2493), OR 게이트(2494), 두 개의 AND 게이트(2495, 2497), 및 다양한 상호접속부를 갖는다.
플립플롭(2491)은 라인(2498) 상의 TIGF D 입력, 라인(2499) 상의 트리거 입력을 수신하고, 라인(2500) 상에서 Q 출력을 제공한다. 이 출력 라인(2500)은 또한 멀티플렉서(2493)의 입력들중 하나로서 기능한다. 멀티플렉서(2493)의 다른 입력은 라인(2503)을 통해 플립플롭(2492)의 출력 Q로부터 나온다. 멀티플렉서(2493)의 출력은 라인(2505)을 통해 OR 게이트(2494)의 입력들 중 하나에 연결된다. OR 게이트(2492)의 다른 입력은 라인(2506) 상의 셋(S) 신호이다. OR 게이트(2494)의 출력이 라인(2507)을 통해 AND 게이트(2495)의 입력들중 하나에 연결된다. AND 게이트(2495)의 다른 입력은 라인(2508) 상의 리셋(R) 신호이다. AND 게이트(2495)의 출력(전체 TIGF 출력 Q이기도 함)은 라인(2501)을 통해 플립플롭(2492)의 입력에 연결된다. 플립플롭(2492)은 또한 라인(2502) 상의 트리거 입력을 갖는다.
멀티플렉서(2493)로 돌아와서, 멀티플렉서(2493)의 선택기 입력은 라인(2509)을 통해 AND 게이트(2497)의 출력에 연결된다. AND 게이트(2497)는 라인(2510) 상의 CLK 신호로부터의 입력들중 하나를 수신하고 라인(2512)을 통해 플립플롭(2496)의 출력으로부터 다른 입력을 수신한다. 플립플롭(2496)은 또한 라인(2511) 상의 CLK 신호로부터 입력을 수신하고 라인(2513) 상의 트리거 입력을 수신한다.
본 발명의 실시예의 TIGF 플립플롭 동작에 대하여 설명하고자 한다. 본 실시예에서, TIGF 플립플롭은 세 개의 상이한 지점(라인(2499)을 경유한 D 플립플롭(2491), 라인(2502)을 경유한 D 플립플롭, 및 라인(2513)을 경유한 D 플립플롭(2496))에서 트리거 신호를 수신한다.
TIGF 플립플롭은 클럭 신호의 에지가 검출된 경우에만 입력 값을 저장한다. 본 발명의 일 실시예에 따르면, 요구되는 에지는 클럭 신호의 상승 에지이다. 클럭 신호의 상승 에지를 검출하기 위해, 에지 검출기(2515)가 제공된다. 에지 검출기(2515)는 D 플립플롭(2496)과 AND 게이트(2497)를 포함한다. 에지 검출기(2515)는 또한 D 플립플롭(2496)의 라인(2513)의 트리거 신호를 통해 업데이트된다.
삭제
삭제
삭제
삭제
삭제
D 플립플롭(2491)은 TIGF 플립플롭의 새로운 입력 값을 유지하며 트리거 신호가 라인(2499) 상에 제공될 때까지 라인(2498) 상의 D 입력의 어떠한 변화에도 저항한다. 따라서, 각각의 TIGF 플립플롭의 평가 주기 이전에, 새로운 값이 D 플립플롭(2491)에 저장된다. 따라서, TIGF 플립플롭은 TIGF 플립플롭이 트리거 신호에 의해 업데이트될 때까지 새로운 값을 미리 저장함에 의해 유지 시간 위반을 회피할 수 있다.
D 플립플롭(2492)은 트리거 신호가 라인(2502) 상에 제공되기까지 TIGF 플립플롭의 현재 값(또는 이전 값)을 유지한다. 이 값은 TIGF 플립플롭이 업데이트되고 다음 평가 주기 이전인, 에뮬레이션되는 TIGF 플립플롭의 상태이다. 라인(2501) 상의 D 플립플롭(2492)의 입력은 (평가 주기의 상당한 지속에 대하여 라인(2500) 상의 동일한 값인) 새로운 값을 유지한다.
멀티플렉서(2493)는 라인(2500) 상의 새로운 입력 값을 수신하고 라인(2503) 상의 TIGF 플립플롭에 저장된 이전 값을 수신한다. 라인(2504) 상의 선택기 신호에 기초하여, 멀티플렉서는 에뮬레이션되는 TIGF 플립플롭의 출력으로서, 새로운 값(라인(2500)) 또는 이전 값(라인(2503)) 중 하나를 출력한다. 사용자 설계 하드웨어 모델에서 전체 전파된 신호가 정상상태에 도달하기 전에, 이러한 출력이 임의의 클럭 글리치에 따라 변화된다. 따라서, 라인(2501) 상의 입력이 평가 주기의 마지막에서 플립플롭(2491)에 저장된 새로운 값을 나타낼 것이다. 트리거 신호가 TIGF 플립플롭에 의해 수신된 경우, 플립플롭(2492)은 라인(2501)에 존재하는 새로운 값을 저장하며, 플립플롭(2491)은 라인(2498) 상의 다음 새로운 값을 저장한다. 따라서, 본 발명의 일 실시예에 따른 TIGF 플립플롭은 클럭 글리치에 의해 악영향을 받지 않는다.
삭제
삭제
덧붙여서, TIGF 플립플롭은 또한 클럭 글리치에 대한 면역성(immunity)을 제공한다. 당업자는 플립플롭(2420, 2421, 2423)을 도81(B)의 TIGF 플립플롭으로 대체함에 의해, 클럭 글리치가 이 TIGF 플립플롭을 이용하는 어떠한 회로에 영향을 주지 않는다는 점을 이해할 수 있을 것이다. 도77(A) 및 도77(B)을 참조하면, 시간 t1과 t2 사이의 시간 동안 새로운 값으로 클럭킹되어서는 않되지만 새로운 값으로 클럭킹된 플립플롭(2423) 때문에, 클럭 글리치는 도77(A)의 회로에 악영향을 준다. CLK1 및 CLK2의 스큐 특성은 시간 t1과 t2 사이의 시간 주기 동안에 XOR 게이트(2422)가 로직 1 상태를 발생시켜서 다음 플립플롭(2423)의 클럭 라인을 구동시키도록 만든다. 본 발명의 일실시예에 따른 TIGF 플립플롭에서, 클럭 글리치는 새로운 값의 클럭킹에 영향을 미치지 않는다. 플립플롭(2423)을 TIGF 플립플롭으로 대치하고, 신호가 평가 주기 도중에 정상상태에 도달되면, 짧은 트리거 주기중의 트리거 신호가 TIGF 플립플롭을 인에이블하여 새로운 값을 플립플롭(2491)(도91(B))에 저장한다. 다음, 시간 t1과 t2로부터의 시간 간격 도중의 도77(B)의 클럭 글리치와 같은 임의의 클럭 글리치가 새로운 값을 클럭킹하지 않게 된다. TIGF 플립플롭은 단지 트리거 신호를 업데이트하고 트리거 신호는 회로를 통한 신호 전파가 정상상태에 도달된 경우의 평가 주기 후까지 TIGF 플립플롭에 나타나지 않게 된다.
이 특정 실시예에서 TIGF 플립플롭이 D 플립플롭이나, 다른 플립플롭 (예를들어, T. JK, SR)이 본 발명 내에서 가능하다. D 입력 앞에 AND/OR 로직을 부가함에 의해 다른 형태의 에지 트리거 플립플롭이 D 플립플롭으로부터 유도될 수 있다.
Ⅶ. 시뮬레이션 서버
본 발명의 또다른 실시예에 따른 시뮬레이션 서버는 다중 사용자들이 동일한 리컨피규러블 하드웨어 유닛을 액세스하여 시간 공유된 방식으로 이들 또는 상이한 사용자 설계를 시뮬레이션하고 가속하도록 제공된다. 고속 시뮬레이션 스케쥴러 및 하드웨어 상태 스와핑 메커니즘이 높은 수율을 야기하는 액티브 시뮬레이션 프로세스를 갖는 시뮬레이션 서버를 제공하기 위해 이용된다. 상기 서버는 가속 및 하드웨어 상태 스와핑 목적을 위해 리컨피규러블 하드웨어 유닛을 액세스하도록 다중 사용자 또는 프로세스에 제공된다. 가속이 달성되거나 하드웨어 상태가 액세스되면, 각 사용자 또는 프로세스는 소프트웨어에서만 시뮬레이션되고, 이에 의해 다른 사용자 또는 프로세스에 리컨피규러블 하드웨어 유닛의 제어를 해제시킨다.
본 명세서의 시뮬레이션 서버 부분에서, "작업(job)" 및 "프로세스"와 같은 용어가 사용된다. 본 명세서에서, 용어 "작업(job)" 및 "프로세스"는 일반적으로 상호교환적으로 사용된다. 과거에는, 배치(batch) 시스템이 "작업"을 실행하였고 시간 공유 시스템이 "프로세스" 또는 프로그램을 저장 및 실행하였다. 오늘날의 시스템에서, 이들 작업 및 프로세스는 유사하다. 따라서, 본 명세서에서, 용어 "작업"은 배치 타입 시스템에 국한되지 않고 "프로세스"는 시간 공유 시스템에 국한되지 않는다. 오히려, "프로세스"가 시간 슬라이스(slice) 내에 또는 다른 시간 공유 인터럽터에 의해 어떠한 인터럽트가 없이 수행되는 극단적인 경우에, "작업"이 "프로세스"와 동일하며, "작업"이 종료되기 위해 다중 시간 슬라이스를 요구하는 경우인 다른 극단적인 경우에는 "작업"은 "프로세스"의 서브셋(subset)이 된다. 따라서, "프로세스"가 다른 동일한 우선순위를 갖는 사용자/프로세스의 존재로 인하여 종료된 실행을 위해 다중 시간 슬라이스를 요구하는 경우에, "프로세스"는 "작업"으로 분할된다. 또한, 유일한 높은 우선순위 사용자 또는 프로세스가 시간 슬라이스 내에서 종료될 정도로 충분히 짧기 때문에 "프로세스"가 종료된 실행을 위해 다중 시간 슬라이스를 요구하지 않는다면, "프로세스"는 "작업"과 동일하다. 따라서, 사용자는 시뮬레이션 시스템에서 실행되고 로딩된 하나 이상의 "프로세스" 또는 프로그램과 상호작용할 수 있으며, 각 "프로세스"는 시간 공유 시스템을 종료하기 위해서 하나 이상의 "작업"을 필요로 할 수 있다.
본 발명의 한 구조에서, 원격 터미널을 경유한 다중 사용자는, 동일한 리컨피규러블 하드웨어 유닛을 액세스하고 동일 또는 상이한 사용자 회로 설계를 검토/디버깅하기 위해서, 비(non)-네트워크 환경의 동일한 마이크로 프로세서 워크스테이션을 이용할 수 있다. 비-네트워크 환경에서, 원격 터미널은 동작 기능에 대한 액세스를 위해 주 컴퓨팅 시스템에 연결될 수 있다. 이 비-네트워크 구조는 다중 사용자들이 병렬 디버깅 목적을 위해 동일한 사용자 설계에 대한 액세스를 공유하는 것을 가능케한다. 상기 액세스는 스케쥴러가 다중 사용자에 대한 액세스 우선순위를 결정하고, 작업을 스와핑하며, 및 스케쥴된 사용자중에서 하드웨어 유닛 액세스를 선택적으로 락킹하는 시간 공유 프로세스에 의하여 달성된다. 다른 경우에는, 다중 사용자들이 디버깅 목적을 위한 사용자들의 분리된 상이한 사용자 설계용 서버를 이용하여 동일한 리컨피규러블 하드웨어 유닛을 액세스할 수 있다. 다른 구조에서는, 다중 사용자 또는 프로세스가 운영 시스템과 함께 워크스테이션 내의 다중 마이크로프로세서를 공유한다. 또다른 구조에서는, 독립된 마이크로프로세서 기반 워크스테이션 내의 다중 사용자 또는 프로세스가 동일 또는 상이한 사용자 회로 설계를 네트워크 전체에 대해 검토/디버깅하기 위해 동일한 리컨피규러블 하드웨어 유닛을 액세스할 수 있다. 유사하게, 스케쥴러가 다중 사용자에 대한 액세스 우선순위를 결정하고, 작업을 스와핑하며, 스케줄된 사용자 중에서 하드웨어 유닛 액세스를 선택적으로 락킹하는 시간 공유 프로세스를 통해 액세스가 이루어진다. 네트워크 환경에서, 스케쥴러는 UNIX 소켓 시스템 콜을 통해 네트워크 요청을 수신한다. 운영 시스템은 스케쥴러에게 명령을 전달하기 위해 소켓을 이용한다.
위에서 언급한 바와 같이, 시뮬레이션 스케쥴러는 선점의(preemptive) 다중 우선순위 라운드 로빈(round robin) 알고리즘을 사용한다. 즉, 높은 우선순위 사용자 또는 프로세스는 상기 사용자 또는 프로세스가 작업을 종료하고 세션을 종료할 때까지 먼저 서비스된다. 동일한 우선순위 사용자 또는 프로세스 중에서, 각 사용자 또는 프로세스에 동일한 시간 슬라이스가 할당되어 종료되기까지 동작이 실행되는 선점 라운드 로빈 알고리즘이 사용된다. 시간 슬라이스는 다중 사용자 또는 프로세스가 서비스되기 전에 오랜시간을 대기할 필요가 없을 정도로 충분히 짧다. 시뮬레이션 서버의 스케쥴러가 한 사용자 또는 프로세스를 인터럽트하여 스와핑되고 새로운 사용자 작업을 실행하기 전에 충분한 동작이 실행될 정도로 시간 슬라이스는 또한 충분히 길다. 본 발명의 일 실시예에서, 디폴트 시간 슬라이스는 5초이며 사용자가 설정가능하다. 일 실시예에서, 스케쥴러는 운영 시스템의 내장 스케쥴러에 특정 콜을 만든다.
도45는 본 발명에 따른 실시예에서 멀티프로세서 워크스테이션을 갖는 비-네트워크 환경을 나타낸다. 도45는 도1의 변형예이며, 따라서, 동일한 도면번호가 동일한 컴포넌트/유닛에 사용될 것이다. 워크스테이션(1100)은 로컬 버스(1105), 호스트/PCI 브릿지(1106), 메모리 버스(1107), 및 주 메모리(1108)를 포함한다. 캐쉬 메모리 시스템(미도시)이 또한 제공될 수 있다. 다른 사용자 인터페이스 유닛(예를들어, 모니터, 키보드)이 또한 제공되나 도45에 도시되지는 않았다. 워크스테이션(1100)은 또한 스케쥴러(1117) 및 커넥션/경로(1118)를 통해 로컬 버스(1105)에 연결된 다중 마이크로프로세서(1101, 1102, 1103, 1104)를 포함한다. 당업자에게 공지된 바와 같이, 운영 시스템(1121)은 파일을 관리하고 컴퓨팅 환경 에서 다양한 사용자, 프로세스 및 장치를 위해 리소스를 할당하기 위하여 전체 컴퓨팅 환경에 대한 사용자-하드웨어 인터페이스 기초(foundation)를 제공한다. 개념적인 목적으로 운영 시스템(1121)과 버스(1122)가 도시되어 있다. 운영 시스템에 대하여, Abraham Silberschatz 및 James L. Peterson, OPERATING SYSTEM CONCEPTS(1988) 및 William Stallings, MODERN OPERATION SYSTEM(1996)이 참조될 수 있다.
본 발명의 일 실시예에서, 워크스테이션(1100)은 UltraSPARC Ⅱ 프로세서를 이용하는 Sun Microsystems Enterprise 450 시스템이다. 로컬 버스를 경유한 메모리 액세스 대신에, Sun 450 시스템은 멀티프로세서가 크로스바(crossbar) 스위치를 통한 메모리용 버스를 통해 메모리를 액세스하도록 허용한다. 따라서, 다중 프로세스는 로컬 버스를 통하지 않고 각각의 명령어들을 실행하고 메모리에 액세스하는 다중 마이크로프로세서에 의해 가동될 수 있다. Sun 450 시스템과 Sun UltraSPARC 멀티프로세서의 사양이 참조된다. Sun Ultra 60 시스템은 단지 두 개의 프로세스만을 허용하나 마이크로프로세서 시스템의 일 예가 될 수 있다.
스케쥴러(1117)는 시간 공유 액세스를 장치 드라이버(1119) 및 커넥션/경로(1120)를 통해 리컨피규러블 하드웨어 유닛(20)에 제공한다. 스케쥴러(1117)는 호스트 컴퓨팅 시스템의 운영 시스템과 상호작용하기 위해 소프트웨어에서 대개 구현되며, 내부/외부 시뮬레이션 세션에서의 시뮬레이션 작업 인터럽트를 지원함으로써 시뮬레이션 서버와 상호작용하기 위해 부분적으로는 하드웨어에서 구현된다. 스케쥴러(1117) 및 장치 드라이버(1119)는 이하에서 상세히 설명될 것이다.
각 마이크로프로세서(1101-1104)는 워크스테이션(1101) 내의 다른 마이크로프로세서들을 독립적으로 프로세싱할 수 있다. 본 발명의 일 실시예에서, 워크스테이션(1100)은 UNIX 기반 운영 시스템하에서 동작되나, 다른 실시예에서는, 워크스테이션(1100)은 Windows 기반 또는 Macintosh 기반 운영 시스템 하에서 동작될 수 있다. UNIX 기반 시스템에서, 사용자는 프로그램, 작업, 및 필요한 경우 파일에 대하여 X-Windows를 구비한다. UNIX 운영 시스템에 대한 상세한 내용은 Maurice J. Bach, THE DESIGN OF THE UNIX OPERATING SYSTEM(1986)이 참조된다.
도45에서, 다중 사용자는 원격 터미널을 이용하여 워크스테이션(1100)에 액세스될 수 있다. 때때로, 각 사용자는 프로세스를 구동시키기 위해서 특정 CPU를 이용하고 있을 수 있다. 다른 경우에, 각 사용자는 자원 제한에 의존하여 상이한 CPU를 이용한다. 대개, 운영 시스템(1121)은 이러한 액세스를 결정하며, 운영 시스템은 작업을 종료하기 위하여 CPU로부터 다른 것으로 점프할 수 있다. 시간 공유 프로세스를 처리하기 위해서, 스케쥴러는 소켓 시스템 을 통하여 네트워크 요구를 수신하고 운영 시스템(1121)에 시스템 콜을 생성하며, 이들은 차례로 리컨피규러블 하드웨어 유닛(20)에 장치 드라이버(1119)에 의한 인터럽트 신호의 생성을 개시함에 의해 선점을 다룬다. 이러한 인터럽트 신호 발생이 현재 작업을 중지하고, 현재 인터럽트된 작업에 대한 상태 정보를 저장하고, 작업을 스와핑(swap)하고, 새로운 작업을 실행하는 것을 포함하는 스케쥴링 알고리즘에 대한 다수의 단계들중 하나가 된다. 서버 스케쥴링 알고리즘이 이하에서 설명될 것이다.
소켓 및 소켓 시스템 콜을 간략히 설명하고자 한다. 일 실시예의 UNIX 운영 시스템는 시간 공유 모드로 동작할 수 있다. UNIX 커널(kernel)은 CPU를 시간 주기(예를들어, 시간 슬라이스) 동안과 시간 슬라이스의 말미에서 프로세스에 할당시키고, 상기 프로세스를 선점하고 다음 시간 슬라이스에 대하여 다음 것을 스케줄한다. 이전 시간 슬라이스로부터 선점된 프로세스는 나중 시간 슬라이스에서 실행을 위해 재스케쥴링된다.
프로세스간 통신을 가능 및 용이하게 하고 복잡한 네트워크 프로토콜의 사용을 가능하게 하기 위한 하나의 구조는 소켓이다. 커널은 클라이언트-서버 모델의 범주에서 동작하는 3개의 층들을 포함한다. 이러한 3개의 층들은 소켓 층, 프로토콜 층, 및 디바이스 층을 포함한다. 소켓 층인 상부층은 시스템 요청들과 하부층(프로토콜 층 및 디바이스 층) 간의 인터페이스를 제공한다. 통상, 소켓은 클라이언트 프로세스를 서버 프로세스와 결합시키는 엔드 포인트(end point)를 갖는다. 소켓 엔드 포인트는 다른 장치일 수 있다. 프로토콜 층인 중간 층은 TCP 및 IP와 같은 통신용 프로토콜 모듈을 제공한다. 디바이스 층인 하부층은 네트워크 장치를 제어하는 디바이스 드라이버를 포함한다. 디바이스 드라이버의 일 예가 이더넷(Ethernet) 기반 네트워크 상의 이더넷 드라이버이다.
서버 프로세스가 하나의 엔드 포인트에서 소켓을 수신하고 클라이언트 프로세스가 양방향 통신 경로의 다른 엔드 포인트에서 다른 소켓 상의 서버 프로세스를 수신하는 클라이언트-서버 모델을 이용하여 프로세스는 통신한다. 커널은 각 클라이언트와 서버의 세 개의 층들 중에서 내부 접속을 유지하고 필요한 경우 클라이언트로부터 서버로 데이터를 전송한다.
소켓은 통신 경로의 엔드 포인트를 형성하는 소켓 시스템 콩을 포함하는 수개의 시스템 콜을 포함한다. 다수의 프로세스가 다수의 시스템 콜의 소켓 디스크립터를 사용한다. 바인드(bind) 시스템 콜은 이름을 소켓 디스크립터와 연관시킨다. 일부 다른 예시적인 시스템 콜은 커널이 소켓에 접속되는 접속 시스템 콜 요청을 포함하며, 폐쇄(close) 시스템 콜은 소켓을 폐쇄시키고, 셧다운(shutdown) 시스템 콜은 소켓 커넥션을 폐쇄시키며, 송신 및 수신 시스템 콜은 연결된 소켓을 통해 데이터를 전송한다.
도46은 다중 워크스테이션이 네트워크를 통해 시간 공유 기반의 단일 시뮬레이션 시스템을 공유하는 본 발명의 다른 실시예를 도시한다. 다중 워크스테이션은 스케쥴러(1117)를 통해 시뮬레이션 시스템에 연결된다. 시뮬레이션 시스템의 컴퓨팅 환경내에서, 단일 CPU(11)가 스테이션(1110) 의 로컬 버스(12)에 연결된다. 다중 CPU가 이 시스템에 제공될 수 있다. 당업자에게 공지된 바와 같이, 운영 시스템(1118)가 제공되며 거의 모든 프로세스 및 어플리케이션이 운영 시스템의 상부에 존재하게 된다. 개념적인 목적을 위하여 운영 시스템(1121) 및 버스(1122)가 도시되어 있다.
도 46에서, 워크스테이션(1110)은 도1에 도시된 컴포넌트/유닛과, 스케쥴러(1117) 및 운영 시스템(1121)을 통해 로컬 버스(12)에 연결된 스케쥴러 버스(1118)를 포함한다. 스케쥴러(1117)는 운영 시스템(1121)에 대한 소켓 콜을 생성함에 의해 사용자 스테이션(1111, 1112, 1113)에 대한 시간 공유 액세스를 제어한다. 스케쥴러(1117)는 대부분은 소프트웨어에서 부분적으로는 하드웨어에서 구현된다.
이 도면에서, 단지 세 개의 사용자가 도시되어 있고 네트워크를 통해 시뮬레이션 시스템에 액세스할 수 있다. 물론, 다른 시스템 구조가 세 개 이상의 사용자 또는 그 이하의 사용자에 대하여 제공될 수 있다. 각 사용자는 원격 스테이션(1111, 112, 또는 1113)을 통해 시스템을 액세스한다. 원격 사용자 스테이션(1111, 112, 및 1113)은 네트워크 액세스(1114, 1115, 및 1116)를 통해 각각 스케쥴러(1117)에 연결된다.
당업자에게 공지된 바와 같이, 장치 드라이버(1119)가 PCI 버스(50) 및 리컨피규러블 하드웨어 유닛(20) 사이에 액세스된다. 액세스 또는 전기전도성 경로(1120)가 장치 드라이버(1119)와 리컨피규러블 하드웨어 유닛(20) 사이에 제공된다. 본 발명의 이 네트워크 다중 사용자 구현예에서, 스케쥴러(1117)는 하드웨어 상태 복구 목적 후에 하드웨어 가속과 시뮬레이션을 위해 리컨피규러블 하드웨어 유닛(20)과 통신하고 제어하도록 운영 시스템(1121)을 통해 장치 드라이버(1119)와 인터페이스된다.
또한, 본 발명의 일실시예에서, 시뮬레이션 워크스테이션(1100)은 UltraSPARC Ⅱ 멀티프로세서를 이용하는 Sun Microsystems Enterprise 450 시스템이다. 로컬 버스를 통한 메모리 액세스 대신에, Sun 450 시스템은 로컬 버스를 대신하여 크로스바 스위치를 통한 메모리로의 전용 버스에 의해 멀티프로세서가 메모리에 액세스하는 것을 가능하게 한다.
도47은 본 발명의 네트워크 실시예에 따른 시뮬레이션 서버의 상위 레벨 구조를 나타낸다. 여기서, 운영 시스템은 명시적으로 도시되지는 않았으나, 당업계에 공지된 바와 같이, 다양한 사용자, 프로세스, 및 시뮬레이션 컴퓨팅 환경의 장치를 서비스하기 위해 파일 관리 및 리소스 할당의 목적으로 항상 존재한다. 시뮬레이션 서버91130)은 스케쥴러(1137), 하나 이상의 장치 드라이버(1138), 및 리컨피규러블 하드웨어 유닛(1139)을 포함한다. 도45 및 도46에 단일 집적 유닛으로서 분명히 도시되어 있지는 않으나, 시뮬레이션 서버는 스케쥴러(1117), 장치 드라이버(1119), 및 리컨피규러블 하드웨어 유닛(20)을 포함한다. 도47로 돌아가서, 시뮬레이션 서버(1130)는 네트워크 커넥션/경로(1134, 1135, 및 1136)를 각각 통하여 세 개의 워크스테이션(1131, 1132, 및 1133)(또는 사용자)에 연결된다. 위에서 언급한 바와 같이, 세 개 이상 또는 세 개 이하의 워크스테이션이 시뮬레이션 서버(1130)에 연결될 수 있다.
시뮬레이션 서버의 스케쥴러는 선점 라운드 로빈 알고리즘에 기초한다. 본질적으로, 라운드 로빈 구조는 수명의 사용자 또는 프로세스가 순환 수행을 종료을 위해 연속적으로 실행하는 것을 가능케한다. 따라서, 각 시뮬레이션 작업(네트워크 환경 내의 워크스테이션 또는 멀티프로세싱 비-네트워크 환경의 사용자/프로세스와 연관됨)이 우선순위 레벨 및 실행될 고정 시간 슬라이스에 할당된다.
일반적으로, 높은 우선순위 작업은 종료을 위해 먼저 실행된다. 극단적인 경우에, 상이한 사용자들이 각각 상이한 우선순위를 갖는 다면, 가장높은 우선순위를 갖는 사용자가 그의 작업이 종료될 때까지 먼저 서비스를 받으며, 가장 낮은 우선순위를 갖는 사용자는 가장 나중에 서비스를 받는다. 여기서, 각 사용자가 상이한 우선순위를 갖고 스케쥴러가 단순히 우선순위에 따라 사용자에게 서비스를 제공하기 때문에 시간 슬라이스가 사용되지 않는다. 이러한 시나리오는 종료까지 시뮬레이션 시스템에 액세스하는 단지 하나의 사용자만을 갖는 것과 유사하다.
극단적인 경우에, 상이한 사용자들이 동일한 우선순위를 갖는다. 따라서, 선입선출(first-in first-out; FIFO) 큐(queue)를 갖는 시간 슬라이스 개념이 이용된다. 동일한 우선순위 작업 중에서, 각 작업은 종료되거나 고정 시간 슬라이스가 끝날 때까지 먼저 오는 작업이 실행된다. 만약 작업이 시간 슬라이스 동안 실행 완료되지 않으면, 완료되는 어떠한 작업과 연동되는 시뮬레이션 영상은 이후의 복구 및 실행을 위해 저장되어야 한다. 다음, 이 작업은 큐의 마지막에 배치된다. 저장된 시뮬레이션 영상이 존재한다면 다음 작업이 복구되고 다음 시간 슬라이스에서 실행된다.
높은 우선순위 작업은 낮은 우선순위 작업을 선점할 수 있다. 즉, 동일한 우선순위의 작업은 종료을 위해 시간 슬라이스를 통해 실행될 때까지 라운드 로빈 방식으로 동작된다. 다음, 낮은 우선순위의 작업이 라운드 로빈 방식으로 동작된다. 낮은 우선순위의 작업이 동작되는 중에 높은 우선순위의 작업이 큐에 삽입되면, 높은 우선순위 작업은 높은 우선순위 작업이 실행 종료될 때까지 낮은 우선순위 작업을 선점한다. 따라서, 높은 우선순위 작업은 낮은 우선순위 작업이 실행 개시되기 전에 실행 종료된다. 낮은 우선순위 작업이 이미 실행을 개시한 경우에, 높은 우선순위 작업이 실행 종료될 때까지 낮은 우선순위 작업은 추가로 실행 종료되지 않는다.
삭제
삭제
삭제
삭제
본 발명의 일 실시예에서, UNIX 운영 시스템는 기초적이고 기본적인 선점 라운드 로빈 스케쥴링 알고리즘을 제공한다. 본 발명의 일실시예에 따른 시뮬레이션 서버의 스케쥴링 알고리즘은 운영 시스템의 스케쥴링 알고리즘과 결합되어 동작된다. UNIX 기반 시스템에서, 스케쥴링 알고리즘의 선점 특성은 운영 시스템이 사용자 정의 스케줄을 선점하도록 제공된다. 시간 공유 구조를 가능하게 하기 위해서, 시뮬레이션 스케쥴러는 운영 시스템의 스케쥴링 알고리즘의 상부에서 선점 다중 우선순위 라운드 로빈 알고리즘을 사용한다.
다중 사용자와 본 발명의 일실시예에 따른 시뮬레이션 서버 사이의 관계는 클라이언트-서버 모델을 따르며, 다중 사용자는 클라이언트이며 시뮬레이션 서버는 서버가 된다. 사용자 클라이언트와 서버 사이의 통신은 소켓 콜을 통해 일어난다. 도55를 참조하면, 클라이언트는 클라이언트 프로그램(1109), 소켓 시스템 콜 컴포넌트(1123), UNIX 커널(1124), 및 TCP/IP 프로토콜 컴포넌트(1125)를 포함한다. 서버는 TCP/IP 프로토콜 컴포넌트(1126), UNIX 커널(1127), 소켓 시스템 콜 컴포넌트(1128), 및 시뮬레이션 서버(1129)를 포함한다. 다중 클라이언트는 클라이언트 어플리케이션 프로그램으로부터 UNIX 소켓 콜을 통해 서버에서 시뮬레이션되도록 시뮬레이션 작업을 요청한다.
본 발명의 일 실시예에서, 통상의 일련의 이벤트에는 UNIX 소켓 프로토콜을 통해 서버에 요청(request)을 전달하는 다중 클라이언트가 포함된다. 각 요청을 위하여, 서버는 명령이 성공적으로 실행되었는지에 대한 요구를 인식한다. 서버 큐 상태의 요청을 위하여, 서버는 현재 큐 상태를 응답하여 사용자에게 적절하게 표시될 수 있게 된다. 아래의 표 F는 클라이언트로부터의 관련된 소켓 명령을 나타낸다.
삭제
삭제
표 F: 클라이언트 소켓 명령
명령 설명
0 시뮬레이션 <design> 시작
1 시뮬레이션 <design> 중지
2 시뮬레이션 <design> 빠져나감(exit)
3 시뮬레이션 세션에 우선순위 재할당
4 설계 시뮬레이션 상태 저장
5 상태 큐
각 소켓 콜에 대하여, 정수로 엔코딩된 각 명령은 설계 이름을 나타내는 <design>과 같은 부가적인 파라미터가 뒤따를 수 있다. 명령이 성공적으로 실행되면 시뮬레이션 서버로부터의 응답이 "0"이 되고 명령이 실패하면 "1"이 될 것이다. 큐 상태를 요구하는 명령 "5"에 대하여, 명령의 리턴 응답의 일실시예로 사용자 스크린 상에 표시되기 위한 "\0"에 의해 종단되는 ASCII 텍스트가 있다. 이들 시스템 소켓 콜에서, 적절한 통신 프로토콜 신호가 장치 드라이버를 통해 리컨피규러블 하드웨어 유닛으로 전송되거나 이로부터 수신된다.
도48은 본 발명에 따른 시뮬레이션 서버의 일 실시예를 나타낸다. 위에서 설명한 바와 같이, 다중 사용자 또는 다중 프로세스는 사용자 설계의 시간 공유 방식의 시뮬레이션 및 하드웨어 가속을 위하여 단일 시뮬레이션 서버에 의해 서비스될 수 있다. 따라서, 사용자/프로세스(1147, 1148, 및 1149)가 프로세스간 통신 경로(1150, 1151, 1152) 각각을 통해 시뮬레이션 서버(1140)에 연결된다. 프로세스간 통신 경로(1150, 1151, 및 1152)는 멀티프로세서 구조 및 동작을 위하여 동일한 워크스테이션에, 또는 다중 워크스테이션용 네트워크에 존재할 수 있다. 각 시뮬레이션 세션은 소프트웨어 시뮬레이션 상태와 리컨피규러블 하드웨어 유닛과 통신하기 위한 하드웨어 상태를 포함한다. 소프트웨어 세션 중의 프로세스간 통신은 UNIX 소켓 또는 시뮬레이터 플러그인(plug-in) 카드가 설치되거나 별도의 워크스테이션 상에 TCP/IP 네트워크를 통해 연결된 동일한 워크스테이션상에 시뮬레이션 세션이 존재하게 할 수 있는 능력을 제공하는 시스템 콜을 이용하여 수행된다. 시뮬레이션 서버와의 통신은 자동적으로 개시된다.
도48에서, 시뮬레이션 서버(1140)는 서버 모니터(1141), 시뮬레이션 작업 큐 테이블(1142), 우선순위 분류기(sorter)(1143), 작업 스와퍼(1144), 장치 드라이버(1145), 및 리컨피규러블 하드웨어 유닛(1146)을 포함한다. 시뮬레이션 작업 큐 테이블(1142), 우선순위 분류기(1143), 및 작업 스와퍼(job swapper)(1144)는 도47에 도시된 스케쥴러(1137)를 구성한다.
서버 모니터(1141)는 시스템의 관리자를 위한 사용자 인터페이스 기능을 제공한다. 사용자는 큐 내의 시뮬레이션 작업을 표시하도록 명령하고, 우선순위, 사용 내역, 및 시뮬레이션 작업 스와핑 효율을 스케쥴링함에 의해 시뮬레이션 서버 상태를 모니터할 수 있다. 다른 사용 기능에는 작업 우선순위를 컴파일하고, 시뮬레이션 작업을 삭제하고, 시뮬레이션 서버 상태를 리셋하는 것이 포함된다.
시뮬레이션 작업 큐 테이블(1142)은 스케쥴러에 의해 삽입된 큐 내의 모든 미해결된 시뮬레이션 요구의 리스트를 보유한다. 테이블 입력은 작업 번호, 소프트웨어 시뮬레이션 프로세스 번호, 소프트웨어 시뮬레이션 영상, 하드웨어 시뮬레이션 영상 파일, 설계 구조 파일, 우선순위 번호, 하드웨어 사이즈, 소프트웨어 사이즈, 시뮬레이션 실행(run)의 누적 시간, 및 소유자 식별을 포함한다. 작업 큐는 선입선출(FIFO) 큐를 이용하여 구현된다. 따라서, 새로운 작업이 요구되는 경우, 큐의 말단에 배치되게 된다.
우선순위 분류기(1143)는 큐 내의 어떠한 작업이 실행될 것인지 결정한다. 일 실시예에서, 시뮬레이션 작업 우선순위 구조는 어떠한 시뮬레이션 프로세스가 현재 실행에 대해 우선순위를 갖는지 제어하기 위해 사용자 정의가능(즉, 시스템 관리자에 의해 제어가능 및 정의가능)하다. 일 실시예에서, 우선순위 레벨은 특정 프로세스의 긴급성 또는 특정 사용자의 중요성을 기반으로 수정될 수 있다. 다른 실시예에서, 우선순위 레벨은 동적이며 시뮬레이션 도중에 변경될 수 있다. 바람직한 실시예에서, 우선순위는 사용자 ID에 기초한다. 통상, 한 사용자는 높은 우선순위를 갖고 나머지 모든 사용자들은 낮으나 동일한 우선순위를 갖는다.
우선순위 레벨은 시스템 관리자에 의해 설정가능하다. 시뮬레이터 서버는 UNIX 장비로부터 "/etc/passwd"로 불리는 UNIX 사용자 파일에서 존재하는 모든 사용자 정보를 입수한다. 새로운 사용자를 부가하는 것은 UNIX 시스템 내에 새로운 사용자를 부가하는 과정 내내 일정하다. 모든 사용자가 정의된 후에, 시뮬레이션 서버 모니터가 사용자용 우선순위 레벨을 조정하기 위해 사용될 수 있다.
작업 스와퍼(1144)는 사용자용으로 프로그램된 우선순위 결정에 기초하여 한 프로세스 또는 한 워크스테이션과 연관된 한 시뮬레이션을 다른 프로세스 또는 워크스테이션과 연관된 다른 시뮬레이션으로 일시적으로 대체한다. 다중 사용자가 동일한 설계를 시뮬레이션하는 경우에, 작업 스와퍼가 시뮬레이션 세션 동안 단지 저장된 시뮬레이션 상태에서 스와핑된다. 그러나, 다중 사용자가 다중 설계를 시뮬레이션하는 경우에, 작업 스와퍼는 시뮬레이션 상태의 스와핑 전에 하드웨어 구조용 설계에 로딩한다. 일 실시예에서, 작업 스와핑이 단지 리컨피규러블 하드웨어 유닛 액세스만을 위해 행해져야 하기 때문에 작업 스와핑 메커니즘은 본 발명의 시간 공유 실시예의 성능을 향상시킨다. 따라서, 한 사용자가 일부 시간 주기 동안에 소프트웨어 시뮬레이션을 필요로 한다면, 서버는 다른 사용자를 위해 다른 작업으로 교대되어 이 다른 사용자가 하드웨어 가속을 위해 리컨피규러블 하드웨어 유닛에 액세스할 수 있게 된다. 작업 스와핑의 빈도는 사용자가 조정가능하고 프로그램가능하다. 또한, 장치 드라이버는 작업을 스와핑하기 위해 리컨피규러블 하드웨어 유닛과 통신한다.
시뮬레이션 서버의 동작을 설명하고자 한다. 도49는 동작 중의 시뮬레이션 서버의 흐름도를 나타낸다. 먼저, 단계(1160)에서, 시스템이 휴면상태가 된다. 시스템이 단계(1160)에서 휴면상태인 경우에, 시뮬레이션 서버가 비액티브일 필요가 있는 것은 아니며 시뮬레이션 작업이 동작되지 않는다. 휴면상태는 다음의 상황중 하나를 의미할 수 있다: (1) 시뮬레이션이 동작되지 않음; (2) 단지 사용자/워크스테이션만이 단일 프로세서 환경에서 액티브이어서 시간 공유가 요구되지 않음; 또는 (3) 단지 하나의 사용자/워크스테이션이 액티브나 단지 하나의 프로세스가 동작중임. 따라서, 위의 조건2 및 조건3은 시뮬레이션 서버가 처리될 단지 하나의 작업만을 가져서 작업 큐잉(queuing: 대기), 우선순위 결정, 및 작업 스와핑이 필요하지 않고 본질적으로, 다른 워크스테이션 또는 프로세스로부터 요구(이벤트(1161))를 수신하지 않기 때문에 시뮬레이션 서버가 휴면상태이다.
다중 사용자 환경의 워크스테이션으로부터 또는 멀티프로세서 환경의 마이크로프로세서로부터의 하나 이상의 요구 신호로 인해 시뮬레이션 요구가 일어나는 경우에, 시뮬레이션 서버는 들어오는 시뮬레이션 작업 또는 작업들을 단계(1162)에서 대기시킨다. 스케쥴러는 큐에 모든 미해결의 시뮬레이션 요구를 삽입하기 위해 시뮬레이션 작업 큐를 유지하고 모든 미해결 시뮬레이션 요구의 리스트를 만든다. 배치(batch) 시뮬레이션 작업을 위하여, 서버의 스케쥴러는 모든 들어오는 시뮬레이션 요구를 대기시키고 자동적으로 사람의 개입 없이 작업들을 처리한다.
삭제
삭제
다음 시뮬레이션 서버는 단계(1163)에서 우선순위를 결정하기 위해서 대기된 작업을 분류한다. 이 단계는 서버가 리컨피규러블 하드웨어 유닛에 액세스를 제공하기 위해서 다중 작업 들중에서 우선순위를 부여하여야 하는 경우에는 다중 작업들에 대해 특히 중요하게 된다. 우선순위 분류기는 큐에서 어떤 작업이 실행되어야 할지를 결정한다. 일 실시예에서, 시뮬레이션 작업 우선순위 구조는 자원 경쟁이 존재하는 경우 어떤 프로세스가 현재 실행에 대한 우선순위를 갖는지 제어하기 위해 사용자 정의 가능(즉, 시스템 관리자에 의해 제어가능 및 정의가능)하다.
단계(1163)의 우선 순위 분류 이후에, 다음 서버는 필요한 경우 단계(1164)에서 시뮬레이션 작업을 대체한다. 이 단계는 서버의 스케쥴러용으로 프로그램된 우선순위 결정에 기초하여 한 프로세스 또는 한 워크스테인션과 연관된 하나의 시뮬레이션 작업을 다른 프로세스 또는 워크스테이션과 연관된 다른 시뮬레이션 작업과 일시적으로 대체한다. 다중 사용자가 동일한 설계를 시뮬레이션하는 경우에, 작업 스와퍼는 시뮬레이션 세션 동안 단지 저장된 시뮬레이션 상태에서 스와핑한다. 그러나, 다중 사용자가 다중 설계를 시뮬레이션하는 경우에, 작업 스와퍼는 시뮬레이션 상태에서의 스와핑 이전에 상기 설계를 먼저 로딩한다. 여기서, 장치 드라이버는 또한 작업을 스와핑하기 위해서 리컨피규러블 하드웨어 유닛과 통신한다.
일 실시예에서, 작업 스와핑이 단지 리컨피규러블 하드웨어 유닛 액세스를 위해 행해져야만 하기 때문에 작업 스와핑 메커니즘은 본 발명의 시간 공유 실시예의 성능을 향상시킨다. 따라서, 어떤 사용자가 시간 임의의 주기 동안 소프트웨어 시뮬레이션을 필요로 하는 경우에, 서버는 다른 사용자를 위해 다른 작업으로 스와핑되어 이 다른 사용자가 하드웨어 가속을 위해 리컨피규러블 하드웨어를 액세스 할 수 있게 된다. 예를들어, 두 명의 사용자, 사용자1 및 사용자 2가 리컨피규러블 하드웨어 유닛에 액세스하기 위해서 시뮬레이션 서버에 연결되어 있다고 가정하자. 임의의 시간에, 사용자1은 시스템에 액세스하여 디버깅이 그의 사용자 설계를 위해 수행될 수 있다. 사용자 1이 소프트웨어 모드에서만 디버깅하는 경우에, 서버는 리컨피규러블 하드웨어 유닛을 해제하여 사용자2가 서버에 액세스할 수 있게 된다. 서버는 사용자2용 작업으로 스와핑되며 사용자 2는 소프트웨어 시뮬레이션하거나 하드웨어를 가속할 수 있게 된다. 사용자 1 및 사용자2 사이의 우선순위에 기초하여, 사용자 2는 소정 시간 동안 리컨피규러블 하드웨어 유닛을 계속 액세스할 수 있거나, 사용자1이 가속을 위해 리컨피규러블 하드웨어 유닛을 필요로 하는 경우엔, 서버가 사용자2용 작업을 선점하여 사용자1용 작업이 리컨피규러블 하드웨어 유닛을 이용하여 하드웨어 가속을 위해 스와핑될 수 있게 된다. 소정 시간을 위해서 동일한 우선순위의 다중 요구에 기초한 시뮬레이터 작업의 선점이 참조된다. 일 실시예에서, 디폴트 시간이 5분이나 이사간은 사용자가 설정할 수 있다. 이 5분으로 설정하는 것은 타임아웃(time-out) 타이머의 한 형태를 나타낸다. 본 발명의 시뮬레이션 시스템은 타임아웃 타이머를 사용하여 현재 시뮬레이션 작업의 실행을 중지시키는데, 이는 이것이 과도하게 시간 소모적이고 시스템이 동일한 우선순위의 다른 진행 작업이 리컨피규러블 하드웨어 모델에 대한 액세스를 확보하여야 하는지를 결정하기 때문이다.
단계(1164)의 작업 스와핑 단계의 종료시에, 서버의 장치 드라이버는 리컨피규러블 하드웨어 유닛을 로킹(lock)하여 단지 현재 예정된 사용자 또는 프로세스만이 하드웨어 모델을 시뮬레이션하고 이용하도록 한다. 로킹 및 시뮬레이션 단계는 단계(1165)에서 일어난다.
시뮬레이션의 종료 또는 이벤트(1166)에서 현재 시뮬레이션 세션의 중지의 발생시에, 서버는 현재 시뮬레이션 작업의 우선순위를 결정하기 위해 우선순위 분류기 단계(1163)로 복귀하고 나중에 필요한 경우 시뮬레이션 작업을 스와핑한다. 유사하게, 서버를 우선순위 분류기 상태(1163)로 복귀시키기 위해서, 서버는 이벤트(1167)에서 진쟁중인 액티브 시뮬레이션 작업의 동작을 선점할 수 있다. 선점은 단지 어떠한 조건하에서만 발생된다. 이러한 조건중 하나는 높은 우선순위의 작업이 진행중인 경우이다. 이런 조중 다른 하나는 시스템이 계산이 집중적인 시뮬레이션 작업을 현재 구동시키고 있는 경우이며, 이 경우 스케쥴러는 타임아웃 타이머를 이용하여 동일한 우선순위를 갖는 작업을 스케쥴링하도록 현재 진행중인 작업을 선점하도록 프로그램될 수 있다. 일 실시예에서, 타임아웃 타이머는 5분으로 설정되고 현재 작업이 5분 동안 수행된다면, 시스템은 현재 작업을 선점하고 진행중인 작업을 우선순위 레벨에 있다 하더라도 스와핑한다.
도50은 작업 스와핑 프로세스의 흐름도이다. 작업 스와핑 기능은 도49의 단계(1164)에서 수행되며 도48의 작업 스와퍼로서 시뮬레이션 서버 하드웨어에 도시되어 있다. 도50에서, 시뮬레이션 작업이 다른 시뮬레이션 작업으로 스와핑될 필요가 있는 경우에, 작업 스와퍼는 단계(1180)에서 리컨피규러블 하드웨어 유닛에 인터럽트를 전송한다. 리컨피규러블 하드웨어 유닛이 현재 임의의 작업을 행하지 않는 경우에(즉, 시스템이 휴면상태이거나 사용자가 하드웨어 가속 개입만이 없이 소프트웨어 시뮬레이션 모드에서 동작하고 있는 경우에), 인터럽트는 즉시 작업 스와핑를 위한 리컨피규러블 하드웨어 유닛을 준비한다. 그러나, 리컨피규러블 하드웨어 유닛이 현재 작업을 동작시키고 있고 명령을 실행하거나 데이터를 처리하고 잇는 도중인 경우에, 인터럽트 신호는 인식되나 리컨피규러블 유닛은 현재 진행중인 명령을 실행하고 현재 작업에 대한 데이터를 처리한다. 리컨피규러블 하드웨어 유닛이 인터럽트 신호를 수신하고 현재 시뮬레이션 작업이 명령을 실행하거나 데이터를 처리하는 중이 아닌 경우에, 인터럽트 신호는 본질적으로 즉시 리컨피규러블 하드웨어 유닛의 동작을 중단시킨다.
단계(1181)에서, 시뮬레이션 시스템은 현재 시뮬레이션 영상(즉, 하드웨어 및 소프트웨어 상태)를 저장한다. 이 이미지를 저장함에 의해, 사용자는 나중에 전체 시뮬레이션을 상기 저장된 지점까지 재실행시킴 없이 시뮬레이션 실행을 복구할 수 있다.
단계(1182)에서, 시뮬레이션 시스템은 리컨피규러블 하드웨어 유닛을 새로운 사용자 설계로 구성한다. 이 구성 단계는 단지 새로운 작업이 이미 구성되어 리컨피규러블 하드웨어 유닛에 로딩되고 그 실행이 인터럽트된 사용자 설계와 상이한 사용자 설계에 관련되어 있는 경우에만 요구된다. 구성 후에, 저장된 하드웨어 시뮬레이션 영상가 단계(1183)에서 리로딩되고 저장된 하드웨어 시뮬레이션 영상가 단계(1184)에서 재로딩된다. 새로운 시뮬레이션 작업이 동일한 설계와 연관되어 있는 경우에, 어떠한 부가적인 구성도 요구되지 않는다. 동일한 설계의 경우에, 새로운 작업에 대한 시뮬레이션 영상이 단지 인터럽트된 작업에 대하여 시뮬레이션 영상과 적절하게 상이하기 때문에, 시뮬레이션 시스템은 단계(1183)에서 상기 동일한 설계에 대한 새로운 시뮬레이션 작업과 연관된 목적하는 하드웨어 시뮬레이션 영상을 로딩한다. 구성 단계의 상세한 내용을 설명하고자 한다. 다음, 관련 소프트웨어 시뮬레이션 영상가 단계(1184)에서 리로딩된다. 하드웨어 및 소프트웨어 시뮬레이션 영상의 리로딩 후에, 시뮬레이션이 이 새로운 작업에 대하여 개시될 수 있으나, 당분간 리컨피규러블 하드웨어에 대한 액세스가 존재하지 않기 때문에 이전에 인터럽트된 작업이 소프트웨어 시뮬레이션 모드에서만 진행될 수 있다.
도51은 장치 드라이버와 리컨피규러블 하드웨어 유닛 사이의 신호를 나타낸다. 장치 드라이버(1171)는 스케쥴러(1170)와 리컨피규러블 하드웨어 유닛(1172) 사이의 인터페이스를 제공한다. 장치 드라이버(1171)는 또한 도45 및 도46에 도시된 바와 같이 전체 컴퓨팅 환경(즉, 워크스테이션, PCI 버스, PCI 장치)과 리컨피규러블 하드웨어 유닛(1172) 사이의 인터페이스를 제공한다. 도51은 시뮬레이션 서버 부분만을 도시한다. 장치 드라이버와 리컨피규러블 하드웨어 사이의 신호는 양방향 통신 핸드쉐이크(handshake) 신호, 스케쥴러를 통해 컴퓨팅 환경으로부터 리컨피규러블 하드웨어 유닛으로의 단방향 설계 구성 정보, 시뮬레이션 상태로 스와핑된 정보, 시뮬레이션 상태에서 스와핑된 정보, 및 장치 드라이버로부터 리컨피규러블 하드웨어 유닛으로의 인터럽트 신호를 포함하여, 시뮬레이션 작업이 스와핑될 수 있다.
라인(1173)은 양방향 통신 핸드쉐이크 신호를 전송한다. 이들 신호 및 핸드쉐이크 프로토콜은 도53 및 도54를 참조하여 보다 상세히 설명될 것이다.
라인(1174)은 스케쥴러(1170)를 통해 컴퓨팅 환경으로부터 리컨피규러블 하드웨어 유닛(1172)으로의 단방향 설계 구성 정보를 전송한다. 초기 구성 정보는 이 라인(1170)상의 모델링 목적을 위해 리컨피규러블 하드웨어 유닛(1172)으로 전송될 것이다. 또한, 사용자가 상이한 사용자 설계를 모델링하고 시뮬레이션하는 경우에, 구성 정보는 시간 슬라이스 중에 리컨피규러블 하드웨어 유닛(1172)으로 전송되어야 한다. 상이한 사용자가 동일한 사용자 설계를 모델링하는 경우에, 어떠한 설계 구성도 요구되지 않으며, 오히려 동일한 설계와 연관된 상이한 시뮬레이션 하드웨어 상태가 상이한 시뮬레이션 동작을 위해 리컨피규러블 하드웨어 유닛(1172)으로 전송될 필요가 있을 것이다.
라인(1175)은 시뮬레이션 상태 정보로 스와핑된 정보를 리컨피규러블 하드웨어 유닛(1172)으로 전송한다. 라인(1176)은 리컨피규러블 하드웨어 유닛으로부터 컴퓨팅 환경(즉, 대게 메모리)으로 시뮬레이션 상태 정보에서 스와핑된다. 시뮬레이션 상태로 스와핑된 정보는 이전에 저장된 하드웨어 모델 상태정보와 리컨피규러블 하드웨어 유닛(1172)이 가속될 필요가 있는 하드웨어 메모리 상태를 포함한다. 스와핑된 상태 정보는 시간의 시작에서 전송되어 스케줄된 현재 사용자가 가속을 위해 리컨피규러블 하드웨어 유닛(1172)을 액세스할 수 있다. 스와핑된 상태 정보는 하드웨어 모델과 상이한 사용자/프로세스와 연관된 다음 시간 슬라이스로 이동시키기 위해서 인터럽트 신호를 수신하는 리컨피규러블 하드웨어 유닛(1172)에 시간 슬라이스의 말미에 메모리에 저장되어야 하는 메모리 상태 정보를 포함한다. 상태 정보의 저장을 통해 사용자는 현재 사용자/프로세스에 할당되는 다음 시간 슬라이스와 같은 이후 시간에 이러한 상태를 복구할 수 있다.
라인(1177)은 장치 드라이버(1171)로부터 리컨피규러블 하드웨어 유닛으로 인터럽트 신호를 전송하여 시뮬레이션 작업이 스와핑될 수 있다. 이 인터럽트 신호가 현재 시간 슬라이스에서 현재 시뮬레이션 작업으로 스와핑되고 다음 시간 슬라이스 동안 새로운 시뮬레이션 작업으로 스와핑되도록 하기 위해 시간 슬라이스들 사이에서 전송된다.
본 발명의 실시예에 따른 통신 핸드쉐이크 프로토콜이 도 53 및 도 54를 참조하여 설명하고자 한다. 도 53은 핸드쉐이크 로직 인터페이스를 경유한 장치 드라이버와 리컨피규러블 하드웨어 유닛 사이의 통신 핸드쉐이크 신호를 나타낸다. 도54는 통신 프로토콜의 상태도이다. 도 51은 라인(1173) 상의 통신 핸드쉐이크 신호를 나타낸다. 도 53은 장치 드라이버(1171)와 리컨피규러블 하드웨어 유닛(1172) 사이의 통신 핸드쉐이크 신호의 상세도이다.
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
도 53에서, 핸드쉐이크 로직 인터페이스(1234)가 리컨피규러블 하드웨어 유닛(1172)에 제공된다. 또한, 핸드쉐이크 로직 인터페이스(1234)는 리컨피규러블 하드웨어 유닛(1172) 외부에 설치될 수 있다. 네 개의 세트의 신호가 장치 드라이버(1171)와 핸드쉐이크 로직 인터페이스(1234) 사이에 제공된다. 이들 신호는 라인(1230) 상의 3비트 SPACE 신호, 라인(1231) 상의 단일 비트 판독/기록 신호, 라인(1232) 상의 4비트 COMMAND 신호, 및 라인(1233) 상의 단일 비트 DONE 신호이다. 핸드쉐이크 로직 인터페이스는 이들 신호들이 수행될 필요가 있는 다양한 동작에 대하여 적절한 모드로 리컨피규러블 하드웨어 유닛에 배치되도록 이들 신호를 처리하는 로직 회로를 포함한다. 상기 인터페이스는 CTRL_FPGA 유닛(또는 FPGA I/O 컨트롤러)에 결합된다.
3 비트 SPACE 신호에 대하여, PCI 버스를 통한 시뮬레이션 시스템의 컴퓨팅 환경과 리컨피규러블 하드웨어 유닛 사이의 데이터 전송이 소프트웨어/하드웨어 경계--REG(레지스터), CLK(소프트웨어 클럭), S2H(소프트웨어에서 하드웨어로), 및 H2S(하드웨어에서 소프트웨어로)--의 임의의 I/O 어드레스 공간에 대해 지정된다. 위에서 설명한 바와 같이, 시뮬레이션 시스템은 하드웨어 모델을 상이한 컴포넌트 타입과 제어 기능에 따라 주 메모리의 네 개의 어드레스 공간으로 맵핑한다: REG 공간은 레지스터 컴포넌트에 지정되고; CLK 공간은 소프트웨어 클럭으로 지정되고; S2H 공간은 소프트웨어 테스트-벤치 컴포넌트의 하드웨어 모델로의 출력으로 지정되고; H2S 공간은 하드웨어 모델의 소프트웨어 테스트-벤치 컴포넌트의 출력으로 지정된다. 이들 전용 I/O 버퍼 공간은 시스템 초기화 시간 중에 커널의 주 메모리 공간으로 맵핑된다.
다음 표G는 각 SPACE 신호를 설명한다.
표G: SPACE 신호
SPACE 설명
000 글로벌(또는 CLK) 공간 및 소프트웨어에서 하드웨어(DMA wr)
001 레지스터 기록(DMA wr)
010 하드웨어에서 소프트웨어로 (DMA rd)
011 레지스터 판독 (DMA rd)
100 SRAM 기록 (DMA wr)
101 SRAM 판독 (DMA rd)
110 비사용
111 비사용
라인(1231) 상의 판독/기록 신호는 데이터 전송이 판독 또는 기록인지를 나타낸다. 라인(12330 상의 DONE 신호는 DMA 데이터 전송 주기의 종료를 나타낸다.
4 비트 COMMAND는 데이터 전송 동작이 판독, 기록, 새로운 사용자 설계를 리컨피규러블 하드웨어 유닛에 구성, 또는 시뮬레이션의 인터럽트이어야 하는지를 나타낸다. 표H에 표시된 바와 같이, COMMAND 프로토콜은 다음과 같다.
표H: COMMAND 신호
COMMAND 설명
0000 지정 공간에 기록
0001 지정 공간으로부터 판독
0010 FPGA 설계 구성
0011 시뮬레이션 인터럽트
0100 비사용
통신 핸드쉐이크 프로토콜이 도54의 상태도를 참조하여 이하에서 설명될 것이다. 상태(1400)에서, 장치 드라이버의 시뮬레이션 시스템은 휴면상태이다. 새로운 명령이 표시되지 않는 한은, 시스템은 경로(1401)에 표시된 바와 같이 휴면상태가 된다. 새로운 명령이 표시되면, 명령 프로세서는 상태(1402)에서 새로운 명령을 처리한다. 일 실시예에서, 명령 프로세서는 FPGA I/O 컨트롤러이다.
COMMAND=0000 또는 COMMAND=0001 이면, 시스템은 상태(1403)에서 SPACE 지수에 의해 지적된 바와 같이 지정 공간에 기록하거나 이로부터 판독한다. 만약 COMMAND=0010이면, 시스템은 사용자 설계로서 리컨피규러블 하드웨어 유닛에서 FPGA을 구성하거나 또는 상태 1404에서 새로운 사용자 설계로 FPGA를 구성한다. 모든 FPGA에 대한 시스템 시퀀스 구성 정보는 하드웨어로 모델링될 수 있는 사용자 설계의 부분을 모델링한다. 그러나, 만약 COMMAND=0011이면, 시스템은 시뮬레이션 시스템을 인터럽트하기 위하여 상태 1405에서 사용자 설계의 부분을 인터럽트하는데, 이는 새로운 시뮬레이션 상태에서 스와핑하기 위하여 시간 슬라이스가 새로운 사용자/프로세스에 대하여 시간이 경과하기 때문이다. 이러한 상태 1403, 1404 또는 1405가 완성되면, 시뮬레이션 시스템은 DONE 상태 1406으로 진행되어 DONE 신호를 생성하고, 상태 1400으로 리턴되어 새로운 커멘드가 존재할 때까지 대기한다.
상이한 레벨의 우선순위로서 다양한 작업을 처리하는 시뮬레이션 서버의 시분할 특징을 이제 설명한다. 도 52는 일 실시예를 도시한다. 4개의 작업(작업 A, 작업 B, 작업 C, 작업 D)이 시뮬레이션 작업 큐의 입력 작업이다. 그러나, 이러한 4개의 작업에 대한 우선순위는 상이하다. 즉, 작업 A 및 B는 높은 우선순위 I에 할당되고, 작업 C 및 D는 낮은 우선순위 II에 할당된다. 도 52의 시간 라인 차트에 도시된 바와 같이, 시분할 리컨피규러블 하드웨어 유닛는 큐된 입력 작업의 우선순위에 따라 수행한다. 시간 1190에서, 시뮬레이션은 리컨피규러블 하드웨어 액세스하는 작업 A로 시작된다. 시간 1191에서, 작업 A는 작업 B에 의해 선점(preempt)되는데, 이는 작업 B가 작업 A와 동일한 우선순위를 가지며 스케쥴러가 2개의 작업에 동일한 시분할 액세스를 제공하기 때문이다. 이제 작업 B는 리컨피규러블 하드웨어 유닛에 액세스되어야 한다. 시간 1192에서, 작업 A는 작업 B를 선취하고 작업 A는 시간 1193에서 실행된다. 시간 1193에서, 작업 B가 인수하여 시간 1194까지 실행 완료한다. 시간 1194에서, 작업 C(이는 큐에서 다음에 있지만 작업 A 및 B보다는 우선순위가 낮다)가 이제 실행을 위하여 리컨피규러블 하드웨어 유닛에 액세스한다. 시간 1195에서, 작업 D는 시분할 액세스를 위하여 작업 C를 선취하는데, 이는 작업 D가 작업 C와 동일한 우선순위를 가지기 때문이다. 작업 D는 이제 작업 C에 의해 선취되는 시간 1196까지 액세스한다. 작업 C는 시간 1197ㅇ서 완성된다. 시간 1197에서 작업 D가 인수하고, 시간 1198까지 실행 완료한다.
VIII. 메모리 시뮬레이션
본 발명의 일 실시예에 따른 메모리 시뮬레이션 또는 메모리 맵핑은 시뮬레이션 시스템이 사용자 설계의 구성 하드웨어 모델과 관련된 다양한 메모리 블럭을 관리하는 효율적 방법을 제공한다. 상기 사용자 설계는 리컨피규러블 하드웨어 유닛에서 FPGA의 어레이로 프로그램된다. 본 발명의 일 실시예를 구현함으로써, 메모리 시뮬레이션 수단은 메모리 액세스를 처리하는 FPGA 칩에서의 어떠한 전용 핀을 요구하지 않는다.
여기서 사용된 바와 같이, "메모리 액세스"라는 용어는 사용자 설계가 구현된 FPGA 로직 소자 및 사용자 설계와 관련된 모든 메모리 블럭을 저장하는 SRAM 메모리 소자 사이의 기록 액세스 또는 판독 액세스를 말한다. 따라서, 기록 동작은 FPGA 로직 소자에서 SRAM 메모리 소자로 데이터를 전송하는 한편, 판독 동작은 SRAM 메모리 소자에서 FPGA 로직 소자로 데이터를 전송한다. 도 56을 참조하면, FPGA 로직 소자는 1201(FPGA 1), 1202(FPGA 2), 1203(FPGA 3), 및 1204(FPGA 4)를 포함한다. SRAM 메모리 소자는 메모리 1205 및 1206을 포함한다.
또한, "DMA 데이터 전송"이라는 용어는 당업자에게 통용되는 일반적 의미외에도 컴퓨팅 시스템 및 시뮬레이션 시스템 사이의 데이터 전송을 의미한다. 컴퓨팅 시스템은 도 1, 45, 46에, 리컨피규러블 하드웨어 유닛 및 소프트웨어에 존재하는, 시뮬레이션 시스템을 지원하는 메모리를 구비한 전체 PCI-기초 시스템으로서 도시되어 있다. 선택된 디바이스에서, 운영 시스템으로/으로부터 요청하는 소켓/시스템은 또한 리컨피규러블 하드웨어 유닛 및 운영 시스템과의 적절한 인터페이스를 허용하는 시뮬레이션 시스템의 부분이다. 본 발명의 일 실시예에서, DMA 판독 전송은 FPGA 로직 소자(및 초기화와 메모리 컨텐츠 덤프를 위한 FPGA SRAM 메모리 소자)에서 호스트 컴퓨팅 시스템으로의 데이터 전송을 포함한다. DMA 기록 전송은 호스트 컴퓨팅 시스템에서 FPGA 로직 소자(및 초기화와 메모리 컨텐츠 덤프를 위한 FPGA SRAM 메모리 소자)로의 데이터 전송을 포함한다.
"FPGA 데이터 버스", "FPGA 버스", "FD 버스" 및 이들의 유사어는, 디버깅될 구성 및 프로그램된 사용자 설계를 포함하는 FPGA 로직 소자 및 SRAM 메모리 소자를 커플링하는 하이 뱅크 버스 FD[63:32] 및 로우 뱅크 버스 FD[31:0]을 말한다.
메모리 시뮬레이션 시스템은 메모리 상태 머신, 평가 상태 머신, 및 하기 장치에 대한 제어 및 인터페이스를 위한 관련 로직을 포함한다: (1) 메인 컴퓨팅 시스템 및 관련 메모리 시스템, (2) 시뮬레이션 시스템에서 FPGA 버스와 커플링된 SRAM 메모리 소자, 및 (3) 디버깅될 구성 및 프로그램된 사용자 설계를 포함하는 FPGA 로직 소자.
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
메모리 시뮬레이션 시스템의 FPGA 로직 소자 측은 평가 상태 머신, FPGA 버스 드라이버, 및 하기의 사항을 처리하는 사용자 설계에서 사용자 자신의 메모리 인터페이스와 인테페이싱하기 위한 각각의 메모리 블럭 N에 대한 로직 인터페이스를 포함한다: (1) FPGA 로직 소자 사이의 데이터 평가, (2) FPGA 로직 소자 및 SRAM 메모리 소자 사이의 기록/판독 메모리 액세스. FPGA 로직 소자 측과 관련하여, FPGA I/O 컨트롤러 측은 (1) 메인 컴퓨팅 시스템 및 SRAM 메모리 소자 및 (2) FPGA 로직 소자 및 SRAM 메모리 소자 사이에 동작의 기록 및 판독 그리고 DMA를 처리하는 인터페이스 로직 및 메모리 상태 머신을 포함한다.
본 발명의 일 실시예에 따른 메모리 시뮬레이션의 동작은 일반적으로 다음과 같다. 시뮬레이션 기록/판독 사이클은 3개의 주기(DMA 데이터 전송, 평가, 및 메모리 액세스)로 나누어진다. DATAXSFR 신호는 DMA 데이터 전송 주기를 나타내는데, 여기서 컴퓨팅 시스템 및 SRAM 메모리 유닛는 FPGA 버스(하이 뱅크 버스(FD[63:32]) 1212 및 로우 뱅크 버스(FD[31:0]) 1213)를 통해서 각각 다른 장치로 데이터를 전송한다.
평가 주기동안, 각 FPGA 로직 소자의 로직 회로는 데이터 평가를 위한 사용자 설계 로직을 위해 적절한 소프트웨어 클럭, 입력 인에이블, 및 MUX 인에이블 신호를 생성한다. 내부-FPGA 로직 소자 통신은 이 주기에서 발생한다.
메모리 액세스 주기동안, 메모리 시뮬레이션 시스템은 각각의 어드레스 및 제어 신호를 각각의 FPGA 데이터 버스에 전송하기 위하여 하이 및 로우 뱅크 FPGA 로직 소자를 기다린다. 이러한 어드레스 및 제어 신호는 CTRL_FPGA 유닛에 의해 래치된다. 만약, 동작이 기록 동작이면, 어드레스, 제어, 및 데이터 신호들이 FPGA 로직 소자에서 각 SRAM 메모리 소자로 전송된다. 만약, 동작이 판독 동작이면, 어드레스, 제어, 및 데이터 신호들이 지정 SRAM 메모리 소자로 제공되고, 데이터 신호가 SRAM 메모리 소자에서 각 FPGA 로직 소자로 전송된다. 결국, 모든 FPGA 로직 소자에서 원하는 메모리 블럭이 액세스되고, 메모리 시뮬레이션 기록/판독 사이클은 완성되며, 메모리 시뮬레이션 시스템은 다음 메모리 시뮬레이션 기록/판독 사이클이 개시될 때까지 대기한다.
도 56은 본 발명의 일 실시예에 따른 메모리 시뮬레이션 구성의 상위 레벨 블록도를 도시한다. 본 발명의 특징과 관계없는 신호, 연결, 및 버스 등은 생략하였다. 전술한 CTRL_FPGA 유닛 1200는 라인 1209를 통해서 버스 1210에 연결된다. 일 실시예에서, CTRL_FPGA 유닛 1200는 Altera 10K50 칩과 같은 FPGA 칩 형태의 프로그램가능한 로직 소자(PLD)이다. 로직 버스 1210는 CTRL_FPGA 유닛 1200이 (만약 가능하다면) 다른 시뮬레이션 어레이 보드 및 다른 칩들(예, PCI 컨트롤러, EEPROM, 클럭 버퍼)과 연결될 수 있게 한다. 라인 1209는 시뮬레이션 DMA 데이터 전송 주기와 완성을 지시하는 DONE 신호를 전송한다.
도 56은 로직 소자 및 메모리 소자 형태에서 다른 주요한 기능적 블록을 도시한다. 일 실시예에서, 로직 소자는 Altera 10K130 또는 10K250칩과 같은 FPGA 칩 형태의 프로그램가능한 로직 소자(PLD)이다. 따라서, 어레이에서 8개의 Altera FLEX 10K100 칩을 구비하는 전술한 실시예 대신, 단지 4개의 Altera FLEX 10K130 칩을 구비하는 실시예를 사용할 수 있다. 메모리 소자는 Cypress 128Kx32 CY7C1335 또는 CY7C1336 칩과 같은 동기식 파이프라인 캐쉬 SRAM이다. 로직 소자는 1201(FPGA1), 1202(FPGA3), 1202(FPGA0) 및 1204(FPGA2)를 포함한다. SRAM 칩은 로우 뱅크 메모리 소자(1205)(L_SRAM) 및 하이 뱅크 메모리 소자(1206)(H_SRAM)를 포함한다.
이러한 로직 소자 및 메모리 소자는 하이 뱅크 버스 1212(FD[63:32]) 및 로우 뱅크 버스 1213(FD[31:0])을 통해서 CTRL_FPGA 유닛 1200에 연결된다. 로직 소자 1201(FPGA 1) 및 1202(FPGA 2)는 각각 버스 1223 및 버스 1225를 통해서 하이 뱅크 버스 1212에 연결되고, 로직 소자 1203(FPGA 1) 및 1204(FPGA 3)은 각각 버스 1224 및 1226을 통해서 로우 뱅크 버스 1213에 연결된다. 하이 뱅크 메모리 소자 1206는 버스 1220을 통해서 하이 뱅크 버스 1212에 연결되고, 로우 뱅크 메모리 소자 1205는 버스 1219를 통해서 로우 뱅크 버스 1213에 연결된다. 이중 뱅크 버스 구조는 시뮬레이션 시스템이 개선된 처리량 속도로서 병렬로 하이 뱅크상의 디바이스 및 로우 뱅크상의 디바이스에 액세스할 수 있도록 한다. 이중 뱅크 데이터 버스 구조는 제어 및 어드레스 신호와 같은 다른 신호를 지원하고, 시뮬레이션 기록/판독 사이클이 제어될 수 있게 한다.
삭제
삭제
삭제
삭제
삭제
삭제
다시 도 61을 참조하면, 각 시뮬레이션 기록/판독 사이클은 DMA 데이터 전송 주기, 평가 주기, 및 메모리 액세스 주기를 포함한다. 다양한 제어 신호들의 조합은 시뮬레이션 시스템이 서로 대립되는 주기중 어느 주기에 해당하는지를 제어 및 지시한다. 리컨피규러블 하드웨어 유닛에서 로직 소자 1201 내지 1204 및 호스트 컴퓨터 사이의 DMA 데이터 전송은 PCI 버스(예, 도 46의 버스 50), 로컬 버스 1210 및 1236, 그리고 FPGA 버스 1212(FD[63:32]) 및 1213(FD[31:0])을 통해서 이루어진다. 메모리 소자 1205 및 1206은 초기화 및 메모리 컨텐츠 덤프를 위한 DMA 데이터 전송을 유발한다. 리컨피규러블 하드웨어 유닛에서 로직 소자 1201 내지 1204 사이의 평가 데이터 전송은 상호접속부 및 FPGA 버스(1212)(FD[63:32]) 및 (1213)(FD[31:0])을 통해서 이루어진다. 로직 소자(1201 내지 1204)와 메모리 소자(1205, 1206) 사이의 메모리 액세스는 FPGA 버스(1212)(FD[63:32]) 및 (1213)(FD[31:0])를 통해 이루어진다.
도 56을 참조하면, CTRL_FPGA 유닛 1200은 시뮬레이션 기록/판독 사이클을 제어하기 위하여 많은 제어 및 어드레스 신호들을 전송 및 수신한다. CTRL_FPGA 유닛 1200은 라인 1211상에 DATAXSER 및 EVAL 신호를 제공하여, 라인 1221을 통해서 로직 소자 1201 및 1203에 전송하고 라인 1222를 통해서 로직 소자 1202 및 1204에 전송한다. CTRL_FPGA 유닛 1200은 또한 버스 1229 및 1214를 통해서 각각 로우 뱅크 메모리 소자 1205 및 하이 뱅크 메모리 소자 1206로 메모리 어드레스 신호 MA[18:2]를 제공한다. 이러한 메모리 소자의 모드를 제어하기 위하여, CTRL_FPGA 유닛 1200은 라인 1216 및 1215를 통하여 로우 뱅크 메모리 소자 1205 및 하이 뱅크 메모리 소자 1206에 칩 선택 기록(및 판독) 신호를 제공한다. DMA 데이터 전송의 종료를 지시하기 위하여, 메모리 시뮬레이션 시스템은 CTRL_FPGA 유닛 1200 및 컴퓨팅 시스템으로 라인 1209상의 DONE 신호를 전송 및 수신할 수 있다.
도 9, 11, 12, 14, 15와 관련하여 전술한 바와 같이, 로직 소자 1201 내지 1204는 2개의 SHIFTIN/SHIFTOUT 라인 세트(라인 1207, 1227, 1218 및 라인 1208, 1228, 1217)에 의해서 도 56에서 멀티플렉싱된 크로스 칩 어드레스 포인터 체인에 의해 서로 연결된다. 이러한 세트는 라인 1207 및 1208에서 Vcc에 의해 체인의 시작시 초기화된다. SHIFTIN 신호는 현재의 FPGA 로직 소자를 위한 메모리 액세스를 시작하기 위하여 뱅크에서 이전의 FPGA 로직 소자로부터 전송된다. 소정의 체인 세트를 통해서 시프트가 종료되면, 최종 로직 소자는 LAST 신호(즉, LASTL 또는 LASTH)를 생성하여 CTRL_FPGA 유닛 1200으로 전송한다. 하이 뱅크에 대하여, 로직 소자 1202는 라인 1218상에 LASTH 시프트아웃 신호를 생성하여 CTRL_FPGA 유닛 1200으로 전송하고, 로우 뱅크에 대하여, 로직 소자 1204는 라인 1217상에 LASTL 신호를 생성하여 CTRL_FPGA 유닛 1200으로 전송한다.
도 56 및 보드 구현과 관련하여, 본 발명의 일 실시예는 컴포넌트(예, 로직 소자 1201 내지 1204, 메모리 소자 1205 내지 1206, 및 CTRL_FPGA 유닛 1200) 및 버스(예, FPGA 버스 1212 내지 1213 및 로컬 버스 1210)를 하나의 보드상에 통합한다. 이러한 원 보드는 마더보드 커넥터를 통해 마더보드에 연결된다. 따라서, 하나의 보드상에 4개의 로직 소자(각 뱅크에 대하여 2개), 2개의 메모리 소자(각 뱅크에 대하여 1개), 및 버스가 제공된다. 제 2 보드는 보충적 로직 소자(통상 4개), 메모리 소자(통상 2개), FPGA I/O 컨트롤러(CTRL_FPGA 유닛) 및 버스를 포함한다. 그러나, PCI 컨트롤러는 제 1 보드상에서만 인스톨된다. 전술한 내부-보드 커넥터는 보드들 사이에 제공되어, 모든 보드에서의 로직 소자가 서로 연결되어 평가 주기동안 통신할 수 있도록 하며, 로컬 버스는 이러한 모든 보드들을 서로 연결한다. FPGA 버스 FD[63:0]은 각 보드에 유일하게 제공되며, 다중 보드에 대해 제공되지 않는다.
보드 구현에 있어서, 시뮬레이션 시스템은 각각의 보드에서 로직 소자와 메모리 소자 사이에 메모리 맵핑을 수행한다. 상이한 보드 사이에는 메모리 맵핑이 수행되지 않는다. 따라서, 보드 5의 로직 소자는 보드 5의 메모리 소자로 메모리 블럭을 맵핑하고, 다른 보드상의 메모리 소자로 맵핑하지는 않는다. 그러나, 본 발명의 다른 실시예에서는, 시뮬레이션 시스템이 하나의 보드상의 로직 소자로부터 다른 보드상의 메모리 소자로 메모리 블럭을 맵핑할 수 있다.
본 발명의 일 실시예에 따른 메모리 시뮬레이션의 동작은 일반적으로 다음과 같다. 시뮬레이션 기록/판독 사이클은 3개의 주기(DMA 데이터 전송, 평가, 및 메모리 액세스)로 나누어진다. 시뮬레이션 기록/판독 사이클의 종료를 지시하기 위하여, 메모리 시뮬레이션 시스템은 CTRL_FPGA 유닛(1200) 및 컴퓨팅 시스템에 대하여 라인(1209)상에 DONE 신호를 전송 및 수신할 수 있다. 버스(1211) 상의 DATAXSFR 신호는 DMA 데이터 전송 주기의 발생을 나타내는데, 여기서 컴퓨팅 시스템 및 FPGA 로직 소자 1201 내지 1204는 FPGA 데이터 버스, 하이 뱅크 버스(FD[63:32])(1212) 및 로우 뱅크 버스(FD[31:0])(1213)을 통해서 데이터를 다른 장치로 전송한다. 일반적으로, DMA 전송은 호스트 컴퓨팅 시스템과 FPGA 로직 소자 사이에 발생한다. 초기화 및 메모리 컨텐츠 덤프에 대하여, DMA 전송은 호스트 컴퓨팅 시스템 및 SRAM 메모리 소자(1205 및 1206) 사이에 발생한다.
평가 주기동안, 각 FPGA 로직 소자(1201 내지 1204)의 로직 회로는 데이터 평가를 위한 사용자 설계에 적절한 소프트웨어 클럭, 입력 인에이블, 및 MUX 인에이블 신호를 생성한다. 인터-FPGA 로직 소자 통신이 이 주기동안 일어난다. CTRL_FPGA 유닛(1200)은 또한 평가 주기의 지속을 위하여 평가 카운터를 동작시킨다. 카운터의 수, 및 이에 따른 평가 주기의 지속은 신호의 가장 긴 경로를 결정함으로써 시스템에 의해 세트된다. 경로 길이는 스텝의 특정 숫자와 관련된다. 시스템은 스텝 정보를 이용하고, 평가 사이클을 그 종료동안 실행시키는데 필요한 카운터의 수를 계산한다.
메모리 액세스 주기동안, 메모리 시뮬레이션 시스템은 FPGA 데이터 버스상으로 어드레스 및 제어 신호를 각각 전송하기 위하여 하이 및 로우 뱅크 FPGA 로직 소자(1201 내지 1204)를 기다린다. 이러한 어드레스 및 제어 신호는 CTRL_FPGA 유닛(1200)에 의해 래칭된다. 만약 동작이 기록 동작이면, 어드레스, 제어, 및 데이터 신호는 FPGA 로직 소자(1201 내지 1204)에서 각각 SRAM 메모리 소자(1205 내지 1206)으로 전송된다. 만약 동작이 판독 동작이면, 어드레스 및 제어 신호가 FPGA 로직 소자(1201 내지 1204)에서 각각 SRAM 메모리 소자(1205 내지 1206)로 전송되고, 데이터 신호는 SRAM 메모리 소자(1205 및 1206)에서 각각 FPGA 로직 소자(1201 내지 1204)로 전송된다. FPGA 로직 소자 측에서, FD 버스 드라이버는 메모리 블럭의 어드레스 및 제어 신호를 FPGA 데이터 버스(FD 버스)상에 위치시킨다. 만약 동작이 기록 동작이면, 기록 데이터가 메모리 블럭을 위한 FD 버스상에 위치한다. 만약 동작이 판독 동작이면, 이중 버퍼가 SRAM 메모리 소자로부터의 FD 버스상의 메모리 블럭을 위한 데이터를 래칭한다. 이러한 동작은 각 FPGA 로직 소자의 각 메모리 블럭에 대하여 연속하여 수행된다. FGPA 로직 소자의 원하는 모든 메모리 블럭이 액세스되었을 때, 메모리 시뮬레이션 시스템은 각 뱅크에서 다음의 FPGA 로직 소자를 수행하고, 상기 FPGA 로직 소자의 메모리 블럭에 대한 액세스를 시작한다. 모든 FPGA 로직 소자(1201 내지 1204)에서 원하는 모든 메모리 블럭이 액세스된 후, 메모리 시뮬레이션 기록/판독 사이클이 종료되고, 메모리 시뮬레이션 시스템은 다른 메모리 시뮬레이션 기록/판독 사이클의 개시까지 대기한다.
삭제
삭제
삭제
삭제
도 57은, CTRL_FPGA 유닛(1200) 및 메모리 시뮬레이션과 관련된 각 로직 소자의 보다 상세한 구조적 다이어그램을 포함하는, 본 발명에 따른 메모리 시뮬레이션의 블록도를 도시한다. 도 57은 CTRL_FPGA 유닛(1200) 및 로직 소자(1203)(이는 다른 로직 소자 1201, 1202, 1204와 구조적으로 유사하다)을 도시한다. CTRL_FPGA 유닛(1200)은 메모리 유한 상태 머신(MEMFSM)(1240), AND 게이트(1241), 평가(EVAL) 카운터(1242), 로우 뱅크 메모리 어드레스/제어 래치(1243), 로우 뱅크 어드레스/제어 멀티플렉서(1244), 어드레스 카운터(1245), 하이 뱅크 메모리 어드레스/제어 래치(1247), 및 하이 뱅크 어드레스/제어 멀티플렉서(1246)으로 포함한다. 도 57에 도시된 로직 소자(1203)과 같은 각 로직 소자는 평가 유한 상태 머신(EVALFSMx)(1248), 데이터 버스 멀티플렉서(FPGA 0 로직 소자(1203)을 위한 FDO_MUXx))(1249)를 포함한다. EVALFSM의 끝에 표기된 "x"는 관련 특정 로직 소자(FPGA 0, FPGA 1, FPGA 2, FPGA 3)를 나타내는 것으로, 본 실시예에서 "x"는 0, 1, 2, 3이다. 따라서, EVALFSM 0는 FPGA 0 로직 소자(1203)과 관련된다. 일반적으로, 각 로직 소자는 동일한 번호 x와 관련되며, N개의 로직 소자가 사용되는 경우 "x"는 0 내지 N-1을 나타낸다.
각 로직 소자(1201 내지 1204)에서, 다양한 메모리 블럭이 구성 및 맵핑된 사용자 설계와 관련된다. 따라서, 상용자 로직에서 메모리 블럭 인터페이스 1253은 FPGA 로직 소자의 원하는 메모리 블럭에 액세스하기 위하여 컴퓨팅 시스템을 위한 수단을 제공한다. 메모리 블럭 인터페이스(1253)은 또한 버스(1295) 상에 메모리 기록 데이터를 제공하여 FPGA 데이터 버스 멀티플렉서(FDO_MUXx)(1249)로 전송하고, 메모리 판독 데이터 이중 버퍼(1251)로부터 버스(1297)상에 메모리 판독 데이터를 수신한다.
메모리 블럭 데이터/로직 인터페이스(1298)이 각 FPGA 로직 소자에 제공된다. 이러한 각각의 메모리 블럭 데이터/로직 인터페이스 1298은 FPGA 데이터 버스 멀티플렉서(FDO_MUXx)(1249), 평가 유한 상태 머신(EVALFSMx)(1248), 및 FPGA 버스 FD[63:0]와 연결된다. 메모리 블럭 데이터/로직 인터페이스(1298)은 메모리 판독 데이터 이중 버퍼(1251), 어드레스 오프세트 유닛(1250), 메모리 모델(1252), 및 각 메모리 블럭 N(mem_block_N)에 대한 메모리 블럭 인터페이스(1253)(이들은 모두 각 메모리 블럭 N에 대하여 주어진 FPGA 로직 소자(1201 내지 1204)에 대하여 반복된다)을 포함한다. 따라서, 5개의 메모리 블럭에 대하여, 5개 세트의 메모리 블럭 데이터/로직 인터페이스(1298)가 제공된다. 즉, 5개 세트의 메모리 판독 데이터 이중 버퍼(1251), 어드레스 오프세트 유닛(1250), 메모리 모델(1252), 및 각 메모리 블럭 N(mem_block_N)에 대한 메모리 블럭 인터페이스(1253)이 제공된다.
삭제
삭제
EVALFSMx와 마찬가지로, FDO_MUXx에서 "x"는 관련된 특정 로직 소자(FPGA 0, FPGA 1, FPGA 2, FPGA 3)를 나타내며, 여기서 "x"는 0, 1, 2, 3이다. FDO_MUXx (1249)의 출력은 버스(1282)상에 제공되는데, 상기 버스(1282)는 어떠한 칩(FPGA 0, FPGA 1, FPGA 2, FGPA 3)이 FDO_MUXx 1249와 관련되는가에 따라서 하이 뱅크 버스 FD[63:32] 또는 로우 뱅크 버스 FD[31:0]와 연결된다. 도 57에서, FDO_MUXx는 FDO_MUX0인데, 이는 로우 뱅크 로직 소자 FPGA0 1203과 관련된다. 따라서, 버스 (1282)상의 출력은 로우 뱅크 버스 FD[31:0]에 제공된다. 버스(1283)의 부분은 하이 뱅크 FD[63:32] 또는 로우 뱅크 FD[31:0] 버스로부터 메모리 판독 데이터 이중 버퍼(1251)로의 입력을 위한 판독 버스(1283)로 판독 데이터를 전송하는데 사용된다. 그러므로, 기록 데이터는 FDO_MUX0 1249를 통해서 각 로직 소자(1201 내지 1204)의 메모리 블럭으로 부터 하이 뱅크 FD[63:32] 또는 로우 뱅크 FD[31:0] 버스로 전송되고, 판독 데이터는 판독 버스(1283)을 통해서 하이 뱅크 FD[63:32] 또는 로우 뱅크 FD[32:0] 버스로부터 메모리 판독 데이터 이중 버퍼(1251)로 전송된다. 메모리 판독 데이터 이중 버퍼는 제1 버퍼에서 데이터를 래치하기 위하여 더블 버퍼링된 메커니즘을 제공하고, 스큐(skew)를 최소화하기 위하여 동일한 시간에 래칭된 데이터를 얻기 위해 다시 버퍼링된다. 이러한 메모리 판독 데이터 이중 버퍼 (1251)는 하기에서 더욱 상세히 설명될 것이다.
메모리 모델(1252)를 참조하면, 상기 메모리 모델(1252)는 사용자 메모리 타입을 메모리 시뮬레이션 시스템의 SRAM 타입으로 변환한다. 사용자 설계의 메모리 타입은 하나의 타입에서 다른 타입으로 변화될 수 있기 때문에, 이러한 메모리 블럭 인터페이스(1253)는 또한 사용자 설계에 대하여 유일할 수 있다. 예를 들면, 사용자의 메모리 타입은 DRAM, 플레시 메모리, 또는 EEPROM일 수 있다. 그러나, 모든 다양한 메모리 블럭 인터페이스(1253)에서, 메모리 어드레스 및 제어 신호(예, 판독, 기록, 칩 선택, mem_clk)이 제공된다. 본 발명에 따른 메모리 시뮬레이션의 일 실시예는 사용자 메모리 타입을 메모리 시뮬레이션 시스템에서 사용되는 SRAM 타입으로 변환한다. 만약 사용자의 메모리 타입이 SRAM이라면, SRAM 타입 메모리 모델로의 변환은 유일하다. 따라서, 메모리 어드레스 및 제어 신호는 버스 (1296)상에 제공되어 변환을 수행하는 메모리 모델(1252)로 전송된다.
메모리 모델(1252)는 버스(1293)상에 메모리 블럭 어드레스 정보를 제공하고, 버스(1292)상에 제어 정보를 제공한다. 어드레스 오프세트 유닛(1250)는 다양한 메모리 블럭에 대하여 어드레스 정보를 수신하고, 버스(1293)상의 오리지널 어드레스로부터 버스(1291)상에 교정된 오프세트 어드레스를 제공한다. 오프세트는 어떠한 메모리 블럭의 어드레스가 서로 오버랩될 수 있기 때문에 필수적이다. 예를 들어, 하나의 메모리 블럭이 공간 0-2K를 사용하고 여기에 존재할 수 있는 한편, 또다른 메모리 블럭이 공간 0-3K를 사용하고 여기에 존재할 수 있다. 공간 0-2K에서 2개의 메모리 블럭이 오버랩되기 때문에, 어떠한 어드레싱 오프세트 메커니즘이 없이는 개별 어드레싱이 어려울 것이다. 따라서, 제 1 메모리 블럭은 공간 0-2K를 사용하고 여기에 존재할 수 있는 한편, 제 2 메모리 블럭은 2K에서 5K까지의 공간를 사용하고 여기에 존재할 수 있다. 오프세트 유닛(1250)으로부터의 오프세트 어드레스 및 버스(1292)상의 제어 신호는 조합되고, 버스(1299)상에 제공되어 FPGA 버스 멀티플렉서(FDO_MUXx)(1249)로 전송된다.
FPGA 데이터 버스 멀티플렉서 FDO_MUXx는 버스(1289)상의 SPACE2 데이터, 버스(1299)상의 어드레스/제어 신호, 및 버스(1295)상의 메모리 기록 데이터를 수신한다. 전술한 바와 같이, SPACE2 및 SPACE3은 특정 공간 지수이다. FPGA I/O 컨트롤러(도 10 및 도 22의 참조부호 327)에 의해 생성된 SPACE 지수는 특정 어드레스 공간(예, REG 판독, REG 기록, S2H 판독, H2S 기록, 및 CLK기록)를 선택한다. 이러한 어드레스 내에서, 본 발명에 따른 시스템은 어드레싱될 특정 워드를 선택한다. SPACE2는 하드웨어-소프트웨어 H2S 데이터의 DMA 판독 전송을 위한 전용 메모리 공간을 나타낸다. SPACE3는 REGISTER_READ 데이터의 DMA 판독 전송을 위한 전용 메모리 공간을 나타낸다. 상기의 표 G를 참조하라.
FDO_MUXx(1249)는 로우 뱅크 또는 하이 뱅크 버스에 대하여 버스(1282)상에 데이터를 출력한다. 선택기 신호는 EVALFSMx 유닛(1248)로부터 라인(1285)상의 선택 신호이며 라인(1284)상의 출력 인에이블(output_en) 신호이다. 라인(1284)상의 출력 인이에블 신호는 FDO_MUXx(1249)의 동작을 인에이블(또는 디스에이블)한다. FPGA 버스에 대한 데이터 액세스를 위하여, 출력 인에이블 신호는 인에이블되어 FDO_MUXx가 기능하도록 한다. 라인(1285)상의 선택 신호가 EVALFSMx 유닛(1248)에 의해 생성되어 버스(1289)상의 SPACE2 데이터, 버스(1290)상의 SPACE3 데이터, 버스(1299)상의 어드레스/제어 신호, 및 버스(1295)상의 메모리 기록 데이터로로부터의 다수의 출력 중 소정의 출력을 선택한다. EVALFSMx 유닛(1248)에 의한 선택 신호의 생성은 하기에 설명한다.
EVALFSMx 유닛 1248은 메모리 시뮬레이션 시스템과 관련하여 각 로직 소자 1201 내지 1204의 동작의 핵심이다. EVALFSMx 유닛 1248은 그 입력으로서 라인 1279상의 SHIFTIN 신호, 라인 1274상의 CTRL_FPGA 유닛 1200으로부터 EVAL 신호, 및 라인 1287상의 기록 신호 wrx를 수신한다. EVALFSMx 유닛 1248은 라인 1280상에 SHIFTOUT 신호, 메모리 판독 데이터 이중 버퍼 1251을 위하여 라인 1286상에 판독 래치 신호 rd_latx, FDO_MUXx 1249를 위하여 라인 1284상에 출력 인에이블 신호, FDO_MUXx 1249를 위하여 라인 1285상에 선택 신호, 및 라인 1281상에 상용자 로직(input_en, mux_en, clk_en)을 위한 3개의 신호를 출력한다.
본 발명에 따른 메모리 시뮬레이션 시스템을 위한 FPGA 로직 소자 1201 내지 1204의 동작을 설명한다. EVAL 신호가 로직 1일 때, FPGA 로직 소자 1201 내지 1204내에서 데이터 평가가 수행된다. 그렇지 않으면, 시뮬레이션 시스템은 DMA 데이터 전송 또는 메모리 액세스를 수행한다. EVAL=1일 때, EVALFSMx 유닛 1248은 clk_en 신호, input_en 신호, mux_en 신호를 생성하여, 사용자 로직이 각각 데이터, 래치 관련 데이터, 및 로직 소자에 대한 멀티플렉스 신호를 평가하게 한다. EVALFSMx 유닛 1248은 사용자 설계(도 19 참조)에서 모든 클럭 에지 레지스터의 제 2 플립-플롭을 인에이블하도록 clk_en 신호를 생성한다. 그렇지 않을 경우, clk_en 신호는 소프트웨어 클럭이 될 것이다. 만약 사용자의 메모리 타입이 동기식이라면, clk_en 신호는 또한 각 메모리 블럭의 메모리 판독 데이터 이중 버퍼 1251의 제 2 클럭을 인에이블한다. EVALFSMx 유닛 1248은 DMA 전송에 의해 CPU로부터 사용자의 로직으로 전송된 입력 신호를 래치하기 위하여 사용자 설계에 대하여 input_en 신호를 생성한다. input_en 신호는 주 클럭 레지스터의 제 2 플립-플롭에 대하여 인에이블 입력을 제공한다(도 19 참조). 마지막으로, EVALFSMx 유닛 1248은 어레이에서 다른 FPGA 로직 소자와 통신을 시작하기 위하여 각 FPGA 로직 소자내의 멀티플렉싱 회로를 턴온시키는 mux_en 신호를 생성한다.
따라서, 만약 FPGA 로직 소자 1201 내지 1204가 적어도 하나의 메모리 블럭을 포함하면, 메모리 시뮬레이션 시스템은 선택된 FPGA 로직 소자로 시프트되기 위하여 선택된 데이터를 기다리고, FD 버스상에 메모리 블럭 인터페이스 1253(mem_block_N)의 어드레스 및 제어 신호를 전송하기 위하여 FPGA 데이터 버스 드라이버를 위한 선택 신호 및 output_en 신호를 생성한다.
삭제
삭제
삭제
삭제
삭제
삭제
삭제
만약 라인 1287상의 기록 신호 wrx가 인에이블(즉, 로직 1)되면, 선택 신호 및 output_en 신호는 인에이블되어 FPGA 칩이 어느 뱅크에 연결되었는가에 따라서 기록 데이터를 로우 뱅크 또는 하이 뱅크 버스상으로 전송한다. 도 57에서, 로직 소자 1203는 FPGA0이고, 로우 뱅크 버스 FD[31:0]에 연결되어 있다. 만약 라인 1287상의 기록 신호 wrx가 디스에이블(즉, 로직 0)되었으면, 선택 신호 및 output_en 신호가 디스에이블되고, FPGA 칩이 어느 뱅크와 연결되었는가에 따라서 메모리 판독 데이터 이중 버퍼 1251으로의 전송을 위한 라인 1286상의 판독 래치 신호 rd_latx는 로우 뱅크 또는 하이 뱅크 버스를 통해서 SRAM으로부터 선택된 데이터를 래치 및 이중 버퍼링한다. wrx 신호는 사용자 설계 로직의 메모리 인터페이스로부터 전송된 메모리 기록 신호이다. 라인 1287상의 wrx 신호는 제어 버스 1292를 통해서 메모리 모델 1252로부터 얻어진다.
데이터 기록 또는 판독을 위한 이러한 프로세스는 각 FPGA 로직 소자에서 발생한다. 모든 메모리 블럭이 SRAM을 통해서 프로세싱된 후, EVALFSMx 유닛 1248은 SHIFTPUT 신호를 생성하여 체인에서 다음 FPGA 로직 소자에 의해 SRAM이 액세스되도록 한다. 하이 및 로우 뱅크상의 디바이스에 대한 메모리 액세스는 병렬로 수행된다. 때때로, 하나의 뱅크에 대한 메모리 액세스는 다른 뱅크에 대한 메모리 액세스 전에 종료될 수 있다. 이러한 모든 액세스에 대하여, 적절한 대기 사이클이 삽입되어, 로직이 준비되고 데이터가 이용가능할 때에만 로직이 데이터를 프로세싱하게 한다.
삭제
CTRL_FPGA 유닛(1200) 측에서, MEMFSM(1240)은 본 발명에 따른 메모리 시뮬레이션의 핵심을 이룬다. 이는 메모리 시뮬레이션 기록/판독 사이클의 액티브을 제어하기 위한 많은 제어 신호들을 전송 및 수신하여, 사이클에 의해 다양한 동작의 제어가 이루어진다. MEMFSM(1240)은 라인 1258을 통해서 라인 1260상에 DATAXSFR 신호를 수신한다. 상기 신호는 또한 라인 1273상의 각 로직 소자에 제공된다. DATAXSFR이 로우가 되면(즉, 로직 로우), DMA 데이터 전송 주기는 종료되고, 평가 및 메모리 액세스 주기가 시작된다.
MEMFSM(1240)은 또한 PCI 버스 및 FPGA 버스를 통해서 컴퓨팅 시스템과 시뮬레이션 시스템 사이에 액세스된 선택된 어드레스 공간와 관련된 선택된 워드를 지시하기 위하여 라인 1254상의 LASTH 신호 및 라인 1255상의 LASTL 신호를 수신한다. 이러한 시프트 아웃 프로세스와 관련된 MOVE 신호는 원하는 워드가 액세스될 때까지 각 로직 소자(예, 로직 소자 1201 내지 1204)를 통과하여 전송되고, 체인의 끝에서 MOVE 신호는 결국 LAST 신호(즉, 하이 뱅크를 위한 LASTH 및 로우 뱅크를 위한 LASTL)가 된다. EVALFSM(1248)(즉, 도 57은 FPGA0 로직 소자 1203을 위한 EVALFSM0를 도시한다)에서, 대응 LAST 신호는 라인 1280상의 SHIFTOUT 신호이다. 특정 로직 소자 1203이 도 56에 도시된 바와 같은 로우 뱅크 체인에서 마지막 로직 소자가 아니기 때문에(도 56에서는 로직 소자 1204가 로우 뱅크 체인에서 마지막 디바이스이다), EVALFSM0을 위한 SHIFTOUT 신호는 LAST 신호가 아니다. 만약 EVALFSM 1248이 도 56의 EVALFSM2에 대응하면, 라인 1280상의 SHIFTOUT 신호는 MEMFSM을 위하여 라인 1255에 제공되는 LASTL 신호이다. 그렇지 않으면, 라인 1280상의 SHIFTOUT 신호는 로직 소자(1204)로 제공된다(도 56 참조). 유사하게, 라인 1280상의 SHIFTIN 신호는 FPGA0 로직 소자(1203)을 위한 Vcc를 표현한다(도 56 참조).
LASTL 및 LASTH 신호는 각각 라인 1256 및 1257을 통해서 AND 게이트 1241로 입력된다. AND 게이트(1241)는 오픈 드레인을 제공한다. AND 게이트 1241의 출력은 라인 1259상에 DONE 신호를 생성하고, 이는 컴퓨팅 시스템 및 MEMFSM 1240에 제공된다. 따라서, LASTL 및 LASTH 신호가 모두 시프트 아웃된 체인의 끝을 나타내는 로직 하이일 때, 프로세스는 AND 게이트 출력을 로직 하이로 할 것이다.
MEMFSM 1240은 EVAL 카운터 1242를 위하여 라인 1261상에 시작 신호를 생성한다. 명칭이 암시하는 바와 같이, 시작 신호는 EVAL 카운터 1242의 시작을 트리거링하고, DMA 데이터 전송 주기 종료 이후에 전송된다. 시작 신호는 DATAXSFR 신호가 하이에서 로우로(1에서 0으로) 전환되는 것을 검출할 때 생성된다. EVAL 카운터 1242는 소정 수의 클럭 사이클을 카운팅하는 프로그램가능한 카운터이다. EVAL 카운터 1242에서 프로그램된 카운트의 지속은 평가 주기의 지속을 결정한다. 라인 1274상의 EVAL 카운터 1242의 출력은 카운터가 카운팅하는가 또는 카운팅하지 않는가에 따라서 로직 레벨 1 또는 0을 가진다. EVAL 카운터 1242가 카운팅할 때, 라인 1274의 출력은 로직 1이고, 이는 EVALFSMx 1248을 통해서 각 FPGA 로직 소자 1201 내지 1204에 제공된다. EVAL=1일 때, FPGA 로직 소자 1201 내지 1204는 사용자 설계내의 데이터를 평가하기 위하여 인터 FPGA 통신을 수행한다. EVAL 카운터 1242의 출력은 자신의 트랙킹(tracking)을 목적으로 MEMFSM 유닛 1240에 대하여 라인 1262상으로 피드백된다. 프로그램된 카운트가 끝날 때, EVAL 카운터 1242는 평가 주기의 종료를 지시하기 위하여 라인 1274 및 1262상에 로직 0 신호를 생성한다.
삭제
삭제
만약 메모리 액세스를 원하지 않으면, 라인 1272상의 MEM_EN 신호는 로직 0으로 되고, MEMFSM 유닛(1240)으로 제공된다. 이 경우 메모리 시뮬레이션 시스템은 또다른 DMA 데이터 전송 주기를 기다린다. 만약 메모리 액세스를 원하면, 라인 1272상의 MEM_EN 신호는 로직 1로 된다. 필수적으로, MEM_EN 신호는 FPGA 로직 소자를 액세싱하기 위한 온-보드 SRAM 메모리 소자를 인에이블시키는 CPU로부터의 제어 신호이다. 여기서, MEMFSM 유닛(1240)는 FPGA 버스 FD[63:32] 및 FD[31:0]상에 어드레스 및 제어 신호를 위치시키기 위하여 FPGA 로직 소자(1201 내지 1204)를 기다린다.
나머지 기능적 유닛 그리고 이와 관련된 제어 신호 및 라인들은 데이터 기록 및 판독을 위하여 어드레스/제어 정보를 SRAM 메모리 소자로 전송한다. 이러한 유닛는 로우 뱅크를 위한 메모리 어드레스/제어 래치(1243), 로우 뱅크를 위한 어드레스 제어 mux(1244), 하이 뱅크를 위한 메모리 어드레스/제어 래치(1247), 하이 뱅크를 위한 어드레스 제어 mux(1246), 및 어드레스 카운터(1245)를 포함한다.
로우 뱅크를 위한 메모리 어드레스/제어 래치(1243)은 버스 1213과 일치하는 FPGA 버스 FD[31:0]로부터 어드레스 및 제어 신호 그리고 라인 1263상의 래치 신호를 수신한다. 래치(1243)는 라인 1264상에 mem_wr_L 신호를 생성하고, 버스(1266)을 통해서 FPGA 버스 FD[31:0]로부터 어드레스/제어 mux(1244)로 수신되는 어드레스/제어 신호를 제공한다. 이러한 mem_wr 신호는 칩 선택 기록 신호와 동일하다.
어드레스/제어 mux(1244)는 버스 1268을 통해서 어드레스 카운터(1245)로부터 어드레스 정보 및 버스(1266)상의 어드레스 및 제어 정보를 입력으로서 수신한다. 어드레스/제어 mux(1244)는 버스 1276상에 어드레스/제어 정보를 출력하여 로우 뱅크 SRAM 메모리 소자(1205)로 전송한다. 라인 1265상의 선택 신호는 MEMFSM 유닛(1240)으로부터 적절한 선택 신호를 제공한다. 버스 1276상의 어드레스/제어 정보는 도 56에 도시된 버스 1229 및 1216 상의 칩 선택 판독/기록 신호 및 MA[18:2]에 대응한다.
어드레스 카운터(1245)는 버스(1267)을 통해서 SPACE4 및 SPACE5로부터 정보를 수신한다. SPACE4는 DMA 기록 전송 정보를 포함한다. SPACE5는 DMA 판독 전송 정보를 포함한다. 따라서, 이러한 DMA 전송은 PCI 버스를 통해서 컴퓨팅 시스템(워크스테이션 CPU를 통한 캐쉬/메인 메모리) 및 시뮬레이션 시스템(SRAM 메모리 소자 1205, 1206) 사이에서 일어난다. 어드레스 카운터(1245)는 그 출력을 버스(1288 및 1268)로 제공하여 어드레스/제어 mux(1244 및 1246)로 전송한다. 로우 뱅크를 위하여 라인 1265상에 적절한 선택 신호를 제공하여, 어드레스/제어 mux(1244)는 SRAM 디바이스(1205) 및 FPGA 로직 소자(1203, 1204) 사이의 판독/기록 메모리 액세스를 위한 버스(1266)상의 어드레스/제어 정보 또는 대안으로서 버스 1276상의 SPACE4 또는 SPACE5로부터의 DMA 기록/판독 전송 데이터를 버스 1276상에 제공한다.
메모리 액세스 주기 동안, MEMFSM 유닛(1240)은 FPGA 버스 FD[31:0]로부터 입력를 패치하기 위하여 메모리 어드레스/제어 래치(1243)에 대하여 라인 1263상에 래치 신호를 제공한다. MEMFSM 유닛(1240)은 추가의 제어를 위하여 FD[31:0]상의 어드레스/제어 신호로부터 mem_wr_L 제어 정보를 추출한다. 만약 버스(1264)상의 mem_wr_L 신호가 로직 1이면, 기록 동작이 목적되며, 라인 1265상의 적절한 선택 신호가 MEMFSM 유닛(1240)에 의해 생성되고 어드레스/제어 mux(1244)로 전송되어, 버스(1266)상의 어드레스/제어 신호가 버스(1276)상의 로우 뱅크 SRAM으로 전송된다. 그 후에, FPGA 로직 소자로부터 SRAM 메모리 소자로 기록 데이터 전송이 일어난다. 만약 버스(1264)상의 mem_wr_L 신호가 로직 0이면, 판독 동작이 목적되고, 시뮬레이션 시스템은 SRAM 메모리 소자에 의해 전송된 FPGA 버스 FD[31:0]상의 데이터를 기다린다. 데이터가 준비되면, SRAM 메모리 소자로부터 FPGA 로직 소자로 판독 데이터 전송이 일어난다.
삭제
삭제
삭제
하이 뱅크에 대하여 유사한 구성 및 동작이 제공된다. 하이 뱅크를 위한 메모리 어드레스/제어 래치(1247)은 버스(1212)와 일치하는 FPGA 버스 FD[63:32]로부터 어드레스 및 제어 신호 그리고 라인 1270상의 래치 신호를 수신한다. 래치 (1270)은 라인 1271상에 mem_wr_H 신호를 생성하고, 버스(1239)를 통해서 FPGA 버스 FD[63:32]에서 어드레스/제어 mux(1246)로 들어오는 어드레스/제어 신호를 전송한다.
어드레스/제어 mux(1246)는 버스 1268을 통해서 어드레스 카운터 1245로부터 어드레스 정보 및 버스 1239상의 어드레스 및 제어 정보를 입력으로서 수신한다. 어드레스/제어 mux(1244)는 버스 1277상에 어드레스/제어 정보를 출력하여 하이 뱅크 SRAM 메모리 소자(1206)로 전송한다. 라인 1269상의 선택 신호는 MEMFSM 유닛 (1240)으로부터 적절한 선택 신호를 제공한다. 버스(1277)상의 어드레스/제어 정보는 도 56에 도시된 버스(1214 및 1215)상의 칩 선택 판독/기록 신호 및 MA[18:2]에 대응한다.
어드레스 카운터(1245)는 전술한 DMA 기록 및 판독 전송과 마찬가지로 버스 1267을 통해서 SPACE4 및 SPACE5로부터 정보를 수신한다. 어드레스 카운터(1245)는 그 출력을 버스(1288 및 1268)로 제공하여 어드레스/제어 mux(1244 및 1246)으로 전송한다. 하이 뱅크를 위하여 라인 1269상에 적절한 선택 신호를 제공하여, 어드레스/제어 mux 1246는 SRAM 디바이스(1206) 및 FPGA 로직 소자(1201, 1202) 사이의 판독/기록 메모리 액세스를 위한 버스(1239)상의 어드레스/제어 정보 또는 대안으로서 버스(1267)상의 SPACE4 또는 SPACE5로부터의 DMA 기록/판독 전송 데이터를 버스(1277)상에 제공한다.
메모리 액세스 주기 동안, MEMFSM 유닛(1240)은 FPGA 버스 FD[63:32]로부터 입력를 패치하기 위하여 메모리 어드레스/제어 래치(1247)에 대하여 라인 1270상에 래치 신호를 제공한다. MEMFSM 유닛(1240)은 추가의 제어를 위하여 FD[63:32]상의 어드레스/제어 신호로부터 mem_wr_H 제어 정보를 추출한다. 만약 버스 1271상의 mem_wr_H 신호가 로직 1이면, 기록 동작이 목적되며, 라인 1269상의 적절한 선택 신호가 MEMFSM 유닛(1240)에 의해 생성되고 어드레스/제어 mux(1246)로 전송되어, 버스 1239상의 어드레스/제어 신호가 버스 1277상의 하이 뱅크 SRAM으로 전송된다. 그 후에, FPGA 로직 소자로부터 SRAM 메모리 소자로 기록 데이터 전송이 일어난다. 만약 버스 1271상의 mem_wr_H 신호가 로직 0이면, 판독 동작이 목적되고, 시뮬레이션 시스템은 SRAM 메모리 소자에 의해 전송된 FPGA 버스 FD[63:32]상의 데이터를 기다린다. 데이터가 준비되면, SRAM 메모리 소자로부터 FPGA 로직 소자로 판독 데이터 전송이 일어난다.
도 57에 도시된 바와 같이, 어드레스 및 제어 신호는 버스 1276 및 1277을 통해 각각 로우 뱅크 SRAM 메모리 소자 및 하이 뱅크 메모리 소자에 제공된다. 로우 뱅크를 위한 버스 1276은 도 56에서 버스 1229 및 1216의 조합에 대응한다. 유사하게, 하이 뱅크를 위한 버스 1277은 도 56의 버스 1214 및 1215의 조합에 대응한다.
본 발명에 따른 메모리 시뮬레이션 시스템을 위한 CTRL_FPGA 유닛 1200의 동작은 일반적으로 다음과 같다. CTRL_FPGA 유닛(1200)의 MEMFSM 유닛(1240) 및 컴퓨팅 시스템에 제공되는 라인 1259상의 DONE 신호는 시뮬레이션 기록/판독 사이클의 종료를 지시한다. 라인 1260상의 DATAXSFR 신호는 시뮬레이션 기록/판독 사이클의 DMA 데이터 전송 주기의 발생을 지시한다. FGPA 버스 FD[31:0] 및 FD[63:32]상의 메모리 어드레스/제어 신호는 각각 하이 및 로우 뱅크를 위한 메모리 어드레스/제어 래치(1243 및 1247)에 제공된다. 각 뱅크에 대하여, MEMFSM 유닛 1240는 어드레스 및 제어 정보를 래치하기 위하여 래치 신호(1263 또는 1269)를 생성한다. 그리고, 상기 정보는 SRAM 메모리 소자로 전송된다. mem_wr 신호는 기록 또는 판독 동작을 원하는지를 결정하는데 사용된다. 만약 기록 동작을 원하면, 데이터가 FPGA 버스를 통해서 FPGA 로직 소자 1201 내지 1204에서 SRAM 메모리 소자로 전송된다. 만약, 판독 동작을 원하면, 시뮬레이션 시스템은 SRAM 메모리 소자에서 FPGA 로직 소자로의 전송을 위한 FPGA 버스상으로 요청된 데이터를 제공하기 위하여 SRAM 메모리 소자를 기다린다. SPACE4 및 SPACE5의 DMA 데이터 전송을 위하여, 라인 1265 및 1269상의 선택 신호는 시뮬레이션 시스템의 SRAM 메모리 소자와 메인 컴퓨팅 시스템 사이에 데이터가 전송될 때 어드레스 카운터 1245의 출력을 선택한다. 이러한 모든 액세스에 대하여, 적절한 대기 사이클이 삽입되어 로직이 준비되고 데이터가 이용가능할 때만 로직이 데이터를 프로세싱한다.
도 60은 메모리 판독 데이터 이중 버퍼(1251)(도 57)를 보다 상세히 도시한다. 각 FPGA 로직 소자에서 각 메모리 블럭 N은 상이한 시간에 들어올 수 있는 관련 데이터를 래치하고 이러한 관련 래칭된 데이터를 동시에 버퍼링하기 위하여 이중 버퍼를 가진다. 도 60에서, 메모리 블럭 0를 위한 이중 버퍼(1391)는 2개의 D-타입 플립-플롭(1340 및 1341)을 포함한다. 제 1 D-타입 플립-플롭(1341)의 출력 (1344)은 제 2 D-타입 플립-플롭(1341)의 입력에 연결된다. 제 2 D-타입 플립-플롭(1341)의 출력(1344)는 사용자 설계의 메모리 블럭 N 인터페이스에 제공되는 이중 버퍼의 출력이다. 글로벌 클럭 입력은 라인 1393상의 제 1 플립-플롭(1340) 및 라인 1394상의 제 2 플립-플롭(1341)에 제공된다.
제 1 D 플립-플롭은 하이 뱅크를 위한 FPGA 버스 FD[63:32] 및 로우 뱅크를 위한 FPGA 버스 FD[31:0] 및 버스 1283을 통해서 SRAM 메모리 소자로부터의 데이터 입력을 라인 1342상에서 수신한다. 인에이블 입력이 각 FPGA 로직 소자를 위한 EVALFSMx 유닛로부터 rd_latx(예, rd_lat0) 신호를 수신하는 라인 1345에 연결된다. 따라서, 판독 동작(즉, wrx=0)을 위하여, EVALFSMx 유닛는 라인 1342 및 1343상에 데이터를 래치하기 위하여 rd_latx 신호를 생성한다. 모든 메모리 블럭의 모든 이중 버퍼의 입력 데이터는 상이한 시간에 들어오며, 이중 버퍼는 모든 데이터가 우선 래치되도록 한다. 일단 모든 데이터가 D 플립-플롭(1340)으로 래치되면, 제 2 D 플립-플롭 1341에 대한 클럭 입력으로서 clk_en 신호(즉, 소프트웨어 클럭)이 라인 1346상에 제공된다. clk_en 신호가 나타나면, 라인 1343상의 래치된 데이터는 라인 1344상으로 D 플립-플롭(1341)로 버퍼링된다.
다음 메모리 블럭 1에 대하여, 이중 버퍼(1391)와 실질적으로 동일한 또다른 이중 버퍼(1392)가 제공된다. SRAM 메모리 소자로부터의 데이터는 라인 1396상의 입력이다. 글로벌 클럭 신호는 라인 1397상의 입력이다. clk_en(소프트웨어 클럭) 신호는 라인 1398상의 이중 버퍼(1392)의 제 2 D 플립-플롭(미도시)로의 입력이다. 이러한 라인들은 메모리 블럭 0에 대한 제 1 이중 버퍼(1391) 및 메모리 블럭 N에 대한 모든 다른 이중 버퍼를 위한 아날로그 신호 라인에 연결된다. 이중 버퍼링된 데이터 출력은 라인 1399상에 제공된다.
제 2 이중 버퍼 1392를 위한 rd_latx 신호(예, rd_lat0)가 다른 이중 버퍼를 위한 다른 rd_latx 신호와 분리되어 라인 1395상에 제공된다. 더 많은 이중 버퍼가 다른 메모리 블럭 N을 위하여 제공된다.
이하에서는 본 발명의 일 실시예에 따라서 MEMFSM 유닛 1240의 상태도를 설명한다. 도 58은 CTRL_FPGA 유닛의 MEMFSM 유닛의 유한 상태 머신의 상태도를 도시한다. 도 58의 상태도는 시뮬레이션 기록/판독 사이클내의 3개의 상태가 또한 그들의 대응 상태를 가지도록 구성되어 있다. 따라서, 상태 1300 내지 1301은 DMA 데이터 전송 주기에 대응하고, 상태 1302 내지 1303은 평가 주기에 대응하고, 상태 1305 내지 1314는 메모리 액세스 주기에 대응한다. 하기에 설명될 도 58과 관련하여 도 57을 참조하라.
삭제
삭제
일반적으로, DMA 전송, 평가, 및 메모리 액세스에 대한 신호 시퀀스가 세트된다. 일 실시예에서, 시퀀스는 다음과 같다: 만약 가능하다면, DATA_XSFR은 DAM 데이터 전송을 트리거한다. 하이 및 로우 뱅크에 대한 LAST 신호는 DMA 데이터 전송이 종료될 때 생성되어, DMA 데이터 전송 주기의 종료를 지시하기 위하여 DONE 신호를 트리거한다. 그리고, XSFR_DONE 신호가 생성되고 EVAL 사이클이 시작된다. EVAL이 종료되면, 메모리 기록/판독이 시작된다.
도 58을 참조하면, DATAXSFR 신호가 로직 0일 때 항상 상태 1300은 대기한다. 이는 DMA 데이터 전송이 일어나지 않는다는 것을 의미한다. DATAXSFR 신호가 로직 1일 때, MEMFSM 유닛(1240)은 상태 1301로 진행한다. 여기서, 컴퓨팅 시스템은 컴퓨팅 시스템(도 1, 45, 46의 메인 메모리)과 시뮬레이션 시스템(도 56의 FPGA 로직 소자 1201 내지 1204 또는 SRAM 메모리 소자(1205)) 사이에 DMA 데이터 전송을 요구한다. DMA 데이터 전송이 종료될 때까지 적절한 대기 사이클이 삽입된다. DMA 전송이 종료되면, DATAXSFR 신호는 로직 0으로 리턴된다.
DATAXSFR 신호가 로직 0으로 리턴될 때, 시작 신호의 생성이 상태 1302에서 MEMFSM 유닛에서 트리거된다. 시작 신호는 프로그램가능한 카운터인 EVAL 카운터 (1242)를 시작시킨다. EVAL 카운터내의 프로그램된 카운트의 지속은 평가 주기의 지속과 동일하다. EVAL 카운터가 상태 1303에서 카운팅하는 동안, EVAL 신호가 로직 1을 나타내고 MEMFSM 유닛(1240) 및 FPGA 로직 소자내의 EVALFSMx에 제공된다. 카운트가 종료될 때, EVAL 카운터는 EVAL 신호가 로직 0인 것을 나타내고, 이를 MEMFSM 유닛(1240) 및 FPGA 로직 소자내의 EVALFSMx로 전송한다. MEMFSM 유닛 (1240)이 로직 0 EVAL 신호를 수신하면, 이는 상태 1304에서 EVAL_DONE 플래그를 턴온한다. EVAL_DONE 플래그는 평가 주기가 종료되었고 메모리 액세스 주기가 진행된다는 것을 나타내기 위하여 MEMFSM에 의해 사용된다. CPU는 XSFR_EVAL 레지스터(하기의 표 K 참조)를 판독함으로써 EVAL_DONE 및 XSFR_DONE를 체크하여, 다음 DMA 전송 전에 DMA 전송 및 EVAL이 성공적으로 종료되었는가를 확인한다.
그러나, 몇몇 경우에 있어서는, 시뮬레이션 시스템이 지금 현재 메모리 액세스를 수행하는 것을 원하지 않을 수 있다. 여기서, 시뮬레이션 시스템은 메모리 인에이블 신호 MEM_EN을 로직 0으로 유지한다. 이러한 디스에이블(로직 0)된 MEM_EN 신호는 MEMFSM 유닛를 휴면 상태 1300으로 유지하는데, 이는 MEMFSM 유닛가 DMA 데이터 전송 및 FPGA 로직 소자에 의한 데이터 평가를 대기한다. 한편, 만약 메모리 인에이블 신호 MEM_EN이 로직 1이면, 시뮬레이션 시스템은 원하는 메모리 액세스 수행을 지시한다.
도 58의 상태 1304 이하에서는, 상태도가 병렬로 진행하는 2개의 섹션으로 세분된다. 하나의 섹션은 로우 뱅크 메모리 액세스를 위하여 상태 1305, 1306, 1307, 1308, 1309를 포함한다. 다른 섹션은 하이 뱅크 메모리 액세스를 위하여 상태 1311, 1312, 1313, 1314, 1309를 포함한다.
상태 1305에서, 시뮬레이션 시스템은 어드레스 및 제어 신호를 FPGA 버스 FD[31:0]상에 제공하기 위하여 현재 선택된 FPGA 로직 소자를 위한 하나의 사이클을 대기한다. 상태 1306에서, MEMFSM은 라인 1263상에 래치 신호를 생성하여 메모리 어드레스/제어 래치(1243)으로 전송하여 FD[31:0]로부터 입력을 패치한다. 이러한 특정 패치된 어드레스 및 제어 신호에 대응하는 데이터는 SRAM 메모리 소자로부터 판독되거나 또는 SRAM 메모리 소자로 기록된다. 시뮬레이션 시스템이 판독 동작을 요구하는지 또는 기록 동작을 요구하는지를 결정하기 위하여, 로우 뱅크를 위한 메모리 기록 신호 mem_wr_L이 어드레스 및 제어 신호로부터 추출된다. 만약 mem_wr_L=0이면, 판독 동작이 요청된다. 만약 mem_wr_L=1이면, 기록 동작이 요청된다. 전술한 바와 같이, 상기 mem_wr_L 신호는 칩 선택 기록 신호와 등가물이다.
상태 1307에서, 어드레스/제어 mux 1244를 위한 적절한 선택 신호가 생성되어 어드레스 및 제어 신호를 로우 뱅크 SRAM으로 전송한다. MEMFSM 유닛는 mem_wr 신호 및 LASTL 신호를 체크한다. 만약 mem_wr_L=1이고 LASTL=0이면, 기록 동작이 요청되지만 FPGA 로직 소자의 체인에서 마지막 데이터는 아직 시프트되지 않는다. 따라서, 시뮬레이션 시스템은 상태 1305로 리턴되는데, 여기서 시뮬레이션 시스템은 더 많은 어드레스 및 제어 신호를 FD[31:0]상에 전송하기 위하여 FPGA 로직 소자를 위한 하나의 사이클을 대기한다. 상기 프로세스는 마지막 데이터가 FPGA 로직 소자로부터 시프트될 때까지 계속된다. 그러나, 만약 mem_wr_L=1이고 LASTL=1이면, 마지막 데이터는 FPGA 로직 소자로부터 시프트된다.
유사하게, 만약 판독 동작을 지시하는 mem_wr_L=0이면, MEMFSM은 상태 1308로 진행한다. 상태 1308에서, 시뮬레이션 시스템은 데이터를 FPGA 버스 FD[31:0]으로 전송하기 위하여 SRAM 메모리 소자를 위한 하나의 사이클을 기다린다. 만약 LASTL=0이면, FPGA 로직 소자의 체인의 마지막 데이터는 아직 시프트되지 않는다. 따라서, 시뮬레이션 시스템은 상태 1305로 리턴되는데, 여기서 시뮬레이션 시스템은 더 많은 어드레스 및 제어 신호를 FD[31:0]상에 전송하기 위하여 FPGA 로직 소자를 위한 하나의 사이클을 대기한다. 상기 프로세스는 마지막 데이터가 FPGA 로직 소자로 시프트될 때까지 계속된다. 기록 동작(mem_wr_L=1) 및 판독 동작(mem_wr_L=0)은 삽입될 수 있거나 그렇지 않으면 LASTL=1이 될 때까지 교대로 반복된다.
LASTL=1일 때, MEMFSM 은 상태 1309로 진행하는데, 여기서는 DONE=0일 때까지 대기한다. DONE=1이고, LASTL 및 LASTH가 로직 1이면, 시뮬레이션 기록/판독 사이클이 종료된다. 그리고, 시뮬레이션 시스템은 상태 1300으로 진행하고, 여기서 DATAXSFR=0인동안 대기한다.
하이 뱅크에 대하여도 유사한 프로세스가 적용될 수 있다. 상태 1311에서, 시뮬레이션 시스템은 어드레스 및 제어 신호를 FPGA 버스 FD[63:32]상에 전송하기 위하여 현재 선택된 FPGA 로직 소자에 대한 하나의 사이클을 기다린다. 상태 1312에서, MEMFSM은 라인 1270상에 래치 신호를 생성하여 메모리 어드레스/제어 래치 (1247)로 전송하여 FD[63:32]로부터 입력을 패치한다. 이러한 특정 패치된 어드레스 및 제어 신호에 대응하는 데이터는 SRAM 메모리 소자로부터 판독되거나 또는 SRAM 메모리 소자로 기록된다. 시뮬레이션 시스템이 판독 동작을 요구하는지 또는 기록 동작을 요구하는지를 결정하기 위하여, 하이 뱅크를 위한 메모리 기록 신호 mem_wr_H이 어드레스 및 제어 신호로부터 추출된다. 만약 mem_wr_H=0이면, 판독 동작이 요청된다. 만약 mem_wr_H=1이면, 기록 동작이 요청된다.
상태 1313에서, 어드레스/제어 mux(1246)를 위한 적절한 선택 신호가 생성되어 어드레스 및 제어 신호를 하이 뱅크 SRAM으로 전송한다. MEMFSM 유닛는 mem_wr 신호 및 LASTH 신호를 체크한다. 만약 mem_wr_H=1이고 LASTH=0이면, 기록 동작이 요청되지만 FPGA 로직 소자의 체인에서 마지막 데이터는 아직 시프트되지 않는다. 따라서, 시뮬레이션 시스템은 상태 1311로 리턴되는데, 여기서 시뮬레이션 시스템은 더 많은 어드레스 및 제어 신호를 FD[63:32]상에 전송하기 위하여 FPGA 로직 소자를 위한 하나의 사이클을 대기한다. 상기 프로세스는 마지막 데이터가 FPGA 로직 소자로부터 시프트될 때까지 계속된다. 그러나, 만약 mem_wr_H=1이고 LASTH=1이면, 마지막 데이터는 FPGA 로직 소자로부터 시프트된다.
유사하게, 만약 판독 동작을 지시하는 mem_wr_H=0이면, MEMFSM은 상태 1314로 진행한다. 상태 1314에서, 시뮬레이션 시스템은 데이터를 FPGA 버스 FD[63:32]으로 전송하기 위하여 SRAM 메모리 소자를 위한 하나의 사이클을 기다린다. 만약 LASTH=0이면, FPGA 로직 소자의 체인의 마지막 데이터는 아직 시프트되지 않는다. 따라서, 시뮬레이션 시스템은 상태 1311로 리턴되는데, 여기서 시뮬레이션 시스템은 더 많은 어드레스 및 제어 신호를 FD[63:32]상에 전송하기 위하여 FPGA 로직 소자를 위한 하나의 사이클을 대기한다. 상기 프로세스는 마지막 데이터가 FPGA 로직 소자로부터 시프트될 때까지 계속된다. 기록 동작(mem_wr_H=1) 및 판독 동작(mem_wr_H=0)은 삽입될 수 있거나 그렇지 않으면 LASTL=1이 될 때까지 교대로 반복된다.
LASTH=1일 때, MEMFSM 은 상태 1309로 진행하는데, 여기서는 DONE=0일 때까지 대기한다. DONE=1이고, LASTL 및 LASTH가 로직 1이면, 시뮬레이션 기록/판독 사이클이 종료된다. 그리고, 시뮬레이션 시스템은 DATAXSFR=0일 때마다 휴면 상태인 상태 1300으로 진행한다.
선택적으로, 하이 뱅크 및 로우 뱅크 상태 1309 및 1320이 본 발명의 또다른 실시예에 따라서 수행될 수 있다. 따라서, 로우 뱅크에서, 상태 1308(LASTL=1) 및 1307(MEM_WR_L=1 및 LASTL=1)을 통과한 후에 MEMFSM은 상태 1300으로 바로 진행한다. 하이 뱅크에서, 상태 1313(LASTH=1) 및 1313(MEM_WR_H=1 및 LASTH=1)을 통과한 후에 MEMFSM은 상태 1300으로 바로 진행한다.
이하에서는 본 발명의 일 실시예에 따라서 EVALFSM 유닛 1248의 상태도를 설명한다. 도 59는 각 FPGA 칩에서 EVALFSMx 유한 상태 머신의 상태도를 도시한다. 도 58과 유사하게, 도 59의 상태도는 시뮬레이션 기록/판독 사이클내의 2개의 주기가 그들의 대응 상태를 나타내도록 구성된다. 따라서, 상태 1320 내지 1326A는 평가 주기에 대응하고, 상태 1326B 내지 1336은 메모리 액세스 주기에 대응한다. 하기에 설명될 도 58과 관련하여 도 57을 참조하라.
EVALFSMx 유닛 1248은 CTRL_FPGA 유닛 1200로부터 라인 1274상의 EVAL 신호를 수신한다(도 57 참조). EVAL=0일 때, FPGA 로직 소자에 의한 데이터 평가는 수행되지 않는다. 따라서, 상태 1320에서, EVAL=0인 경우 EVALFSMx은 휴면상태이다. EVAL=1일 때, EVALFSMx은 상태 1321로 진행한다.
상태 1321, 1322, 1323은 인터-FPGA 통신과 관련되는데, 여기서 데이터는 FPGA 로직 소자를 통해 사용자 설계에 의해 평가된다. 여기서, EVALFSMx는 신호 input_en, mux_en, clk_en(도 57의 아이템 1281)을 생성하여 사용자의 로직으로 전송한다. 상태 1321에서, EVALFSMx은 상기 사이클에서 사용자 설계 로직내의 모든 클럭 에지 레지스터 플립-플롭의 제 2 플립-플롭을 인에이블하는 clk_en 신호를 생성한다. 그렇지 않을 경우, clk_en 신호는 소프트웨어로서 제공될 수 있다. 만약 사용자의 메모리 타입이 동기식이면, clk_en 신호는 각 메모리 블럭내의 메모리 판독 데이터 이중 버퍼(1251)의 제 2 클럭을 또한 인에이블할 수 있다. 각 메모리 블럭에 대한 SRAM 데이터 출력은 이 사이클에서 사용자 설계 로직으로 전송된다.
상태 1322에서, EVALFSMx는 DMA 전송에 의해 CPU로부터 사용자 로직으로 전송되는 입력 신호를 래치하기 위하여 사용자 설계 로직에 대한 input_en 신호를 생성한다. input_en 신호는 주요 클럭 레지스터내의 제 2 플립-플롭(도 19 참조)으로 인에이블 입력을 제공한다.
상태 1323에서, EVALFSMx는 어레이에서 FPGA 로직 소자와 통신을 시작하기 위하여 각 FPGA 로직 소자의 멀티플렉싱 회로를 턴온하는 mux_en 신호를 생성한다. 전술한 바와 같이, 인터-FPGA 와이어 라인은 때때로 멀티플렉싱되어 각 FPGA 로직 소자 칩내의 제한된 핀 자원을 효과적으로 이용하게 한다.
상태 1324에서, EVAL=1인 동안 EVALFSM는 휴면상태이다. EVAL=0일 때, 평가 주기는 종료되고, 상태 1325는 EVALFSMx가 mux_en 신호를 턴온하는 것을 요청한다.
삭제
만약 메모리 블럭 M(여기서 M은 0을 포함하는 정수)의 수가 0이면, EVALFSMx 는 상태 1320으로 리턴하고, 여기서 EVAL=0인 경우 휴면상태이다. 대부분의 경우, M>0 이므로, EVALFSMx는 상태 1326A/1326B로 진행한다. "M"은 FPGA 로직 소자내의 메모리 블럭의 수이다. 이는 FPGA 로직 소자내에 맵핑 및 구현된 사용자 설계로부터의 상수이다. 이는 카운트 다운되지 않는다. 만약 M>0이면, 도 59의 우측 부분(메모리 액세스 주기)은 FPGA 로직 소자내에 구현된다. 만약 M=0이면, 도 59의 좌측 부분(EVAL 주기)만이 구현된다.
상태 1327은 SHIFTIN=0인 동안 EVALFSMx를 대기 상태로 유지한다. SHIFTIN=1일 때, 이전의 FPGA 로직 소자는 그 메모리 액세스를 종료하고 현재의 FPGA 로직 소자는 그 메모리 액세스 작업을 수행할 준비를 한다. 대안적으로, SHIFTIN=1이면, 현재의 FPGA 로직 소자는 뱅크에서 제 1 로직 소자이며 SHIFTIN 입력 라인은 Vcc에 연결된다. 그럼에도 불구하고, SHIFTIN=1 신호의 수신은 현재의 FPGA 로직 소자가 메모리 액세스를 수행할 준비를 한 것을 지시한다. 상태 1328에서, 메모리 블럭 수 N은 N=1로 설정된다. 이 숫자 N은 각 루프를 수행할 때마다 증가되어 특정 메모리 블럭 N에 대한 메모리 액세스가 수행될 수 있다. 초기에, N=1이며, EVALFSMx는 메모리 블럭 1에 대한 메모리 액세스를 수행한다.
상태 1329에서, EVALFSMx는 Mem_Block_N 인터페이스(1253)의 어드레스 및 제어 신호를 FPGA 버스 FD[63:32] 또는 FD[31:0]상에 전송하기 위하여 라인 1285상에 선택 신호를 생성하고 라인 1284상에 output_en 신호를 생성하여 FGPA 버스 드라이버 FDO_MUXx(1249)로 전송한다. 만약 기록 동작 요구되면 wr=1이 된다. 그렇지 않고, 판독 동작이 요구되면 wr=0이 된다. EVALFSMx는 그 입력 중 하나로 라인 1287상의 wr 신호를 수신한다. 상기 wr 신호에 기초하여, 라인 1285상에 적절한 선택 신호가 주어진다.
wr=1일 때, EVALFSMx은 상태 1330으로 진행한다. EVALFSMx은 FPGA 버스 FD[63:32] 또는 FD[31:0]상으로 Mem_Block_N 1253의 기록 데이터를 제공하기 위하여 FD 버스 드라이버를 위한 선택 및 output_en 신호를 생성한다. 그 후, EVALFSMx는 SRAM 메모리 소자가 기록 사이클을 종료하도록 하나의 사이클을 기다린다. 그리고, EVALFSMx는 상태 1335로 진행하고, 여기서 메모리 블럭 수 N은 1이 증가한다. 즉, N=N+1.
그러나, 만약 wr=0이면, 판독 동작이 요청되고, EVALFSMx는 상태 1332로 진행하며, 여기서 하나의 사이클을 기다리고, 상태 1333으로 진행하여 또다른 하나의 사이클을 기다린다. 상태 1334에서, EVALFSMx은 라인 1286상에 rd_latch 신호를 생성하여, 메모리 블럭 N의 메모리 판독 데이터 이중 버퍼 1251이 SRAM 데이터를 FD 버스상으로 패치하게 한다. EVALFSMx는 상태 1335에 진행하고, 여기서 메모리 블럭 N이 1 증가한다. 즉, N=N+1. 따라서, 만약 증가 상태 1335 이전에 N=1이면, N은 2가 되고, 메모리 블럭 2에 대하여 시퀀스 메모리 액세스가 실행될 것이다.
만약 현재의 메모리 블럭 N의 수가 사용자 설계에서 총 메모리 블럭 M의 수보다 작거나 같으면(즉, N ≤M), EVALFSMx는 상태 1329로 진행하고, 여기서 동작이 기록 동작인가 또는 판독 동작인가에 기초하여 FD 버스 드라이버에 대한 특정 선택 및 output_en 신호를 생성한다. 그리고, 다음 메모리 블럭 N에 대한 기록 또는 판독 동작이 수행된다.
그러나, 만약 현재의 메모리 블럭 N의 수가 사용자 설계에서 총 메모리 블럭 M의 수보다 크면(즉, N > M), EVALFSMx는 상태 1336로 진행하고, 여기서 SRAM 메모리 소자를 액세스하도록 뱅크의 다음 FPGA 로직 소자를 허용하는 SHIFTOUT 출력 신호를 턴온한다. 그 후, EVALFSMx은 상태 1320으로 진행하고, 여기서 시뮬레이션 시스템이 FPGA 로직 소자에서 데이터 평가를 요청할 때(즉, EVAL=1)까지 휴면상태이다.
삭제
삭제
도 61은 본 발명의 일 실시예에 따른 시뮬레이션 기록/판독 사이클을 도시한다. 도 61은 참조 번호 1366에서 시뮬레이션 기록/판독 사이클내의 3개의 주기(DMA 데이터 전송 주기, 평가 주기, 및 메모리 액세스 주기)를 도시한다. 비록 도시되지는 않았지만, 이전의 DMA 전송, 평가, 및 메모리 액세스도 수행된다는 것이 또한 암시된다. 더 나아가, 로우 뱅크 SRAM 에 대한 데이터 전송 타이밍은 하이 뱅크 SRAM과 다를 것이다. 간단화를 위하여, 도 61은 이상적 로우 또는 하이 뱅크에 대한 액세스 시간을 하나 예시한다. 글로벌 클럭 GCLK(1350)는 시스템내의 모든 컴포넌트에 대하여 클로킹 신호를 제공한다.
DATAXSFR 신호 1351은 DMA 데이터 전송 주기의 발생을 지시한다. 트레이스 1367에서 DATAXSFR=1일 때, DMA 데이터 전송은 메인 컴퓨팅 시스템 및 FPGA 로직 소자 또는 SRAM 메모리 소자 사이에 수행된다. 따라서, 데이터는 FPGA 하이 뱅크 버스 FD[63:32] 1359 및 트레이스 1369상에 제공될 뿐만 아니라, FPGA 로우 뱅크 버스 FD[31:0] 1358 및 트레이스 1368상에 제공된다. DONE 신호 1364는 로직 신호 0에서 1로 전환(예, 트레이스 1390)됨으로써 메모리 액세스 주기의 종료을 지시하거나 또는 그렇지 않을 경우 로직 0(예, 트레이스 1370의 에지 및 트레이스 1390의 에지의 조합)을 가지는 시뮬레이션 기록/판독 사이클의 지속을 지시한다. DMA 전송 주기 동안, DONE 신호는 로직 0이다.
DMA 전송 주기가 종료되면, DATAXSFR 신호는 로직 1에서 로직 0으로 전환되고, 이는 평가 주기의 온세트는 트리거한다. 따라서, EVAL 1352는 트레이스 1371로 지시된 바와 같이 로직 1이다. 로직 1에서 EVAL 신호의 지속은 미리 결정되어 프로그래밍될 수 있다. 이러한 평가 주기동안, 사용자 설계 로직의 데이터는 clk_en 신호 1353(상기 신호는 트레이스 1372에 의해 지시되는 바와 같이 로직 1이다), input_en 신호 1354(상기 신호도 또한 트레이스 1373에 의해 지시되는 바와 같이 로직 1이다), 및 mux_en 신호 1355(상기 신호도 또한 트레이스 1374에 의해 지시되는 바와 같이 로직 1이며 clk_en 및 input_en 신호보다 더 오래 지속된다)를 이용하여 평가된다. 데이터는 이러한 특정 FPGA 로직 소자내에서 평가된다. mux_en 신호 1355가 트레이스 1374에서 로직 1에서 로직 0으로 전환되고 적어도 하나의 메모리 블럭이 FPGA 로직 소자에 존재할 때, 평가 주기는 종료되고 메모리 액세스 주기가 시작된다.
SHIFTIN 신호 1356이 트레이스 1375에서 로직 1로 주어진다. 이는 이전의 FPGA가 평가를 종료하였으며 모든 원하는 데이터가 이러한 이전 FPGA 로직 소자에 대하여 액세스된다는 것을 의미한다. 이제, 뱅크의 다음 FPGA 로직 소자가 메모리 액세스를 준비한다.
트레이스 1377 내지 1386에서, 다음과 같이 명명한다. ACj_k는 어드레스 및 제어 신호가 FPGAj 및 메모리 블럭 k와 연동된다는 것을 의미한다. 여기서, j 및 k는 0을 포함하는 정수이다. WDj_k는 FPGAj 및 메모리 블럭 k에 대한 기록 데이터를 의미한다. RDj_k는 FPGAj 및 메모리 블럭 k에 대한 판독 데이터를 의미한다. 따라서, AC3_1은 FPGA3 및 메모리 블럭 1과 관련된 어드레스 및 제어 신호를 의미한다. 로우 뱅크 SRAM 액세스 및 하이 뱅크 SRAM 액세스 1361는 트레이스 1387로 도시되었다.
다음 트레이스 1377 내지 1387은 메모리 액세스가 수행되는 방법을 나타낸다. EVALFSMx에 대한 wrx 신호의 로직 레벨 및 MEMFSM에 대한 mem_wr 신호의 로직 레벨에 따라서 기록 또는 판독 동작이 수행된다. 만약 기록 동작을 원하면, 메모리 모델은 사용자 메모리 블럭 N 인터페이스(도 57의 Mem_Block_N 인터페이스 1253)와 인터페이싱하여 wrx를 제어 신호의 하나로서 제공한다. 상기 제어 신호 wrx는 FD 버스 드라이버 및 EVALFSMx 유닛에 제공된다. 만약 wrx가 로직 1이면, 적절한 선택 신호 및 output_en 신호가 FD 버스 드라이버에 제공되어 FD 버스상에 메모리 기록 데이터를 전송한다. 이제 FD 버스상에 존재하는 이러한 동일의 제어 신호는 CTRL_FPGA 유닛에서 메모리 어드레스/제어 래치에 의해 래치될 수 있다. 메모리 어드레스/제어 래치는 MA[18:2]를 통해서 어드레스 및 제어 신호를 SRAM으로 전송한다. 로직 1인 wrx 제어 신호는 FD 버스로부터 추출되고, 기록 동작이 요청되기 때문에 FD 버스상의 어드레스 및 제어 신호와 관련된 데이터가 SRAM 메모리 소자로 전송된다.
따라서, 도 61에 도시된 바와 같이, 다음 FPGA 로직 소자(로우 뱅크에서 로직 소자 FPGA0)는 트레이스 1377로 지시된 바와 같이 FD[31:0]상에 AC0_0를 전송한다. 시뮬레이션 시스템은 WD0_0에 대하여 기록 동작을 수행한다. 그리고, AC0_1이 FD[31:0]상에 전송된다. 그러나, 만약 판독 동작이 요청되면, AC0_0에 대응하는 WD0_0 대신 RD0_0가 SRAM 메모리 디바이에 의해 FD 버스상에 존재하기 전에 FD 버스 FD[31:0]상의 AC0_1의 존재는 얼마의 시간 지연을 가질 것이다.
트레이스(1383)에 의해 표시된 것처럼, MA[18:2]/제어 버스 상의 AC0_0의 배치는 FD 버스 상의 어드레스, 제어 및 데이터의 배치보다 약간 지연된다. 이것은 MEMFSM 유닛이 FD 버스로부터 어드레스/제어 신호를 래치하고 mem_wr 신호를 추출하며 어드레스/제어 먹스(mux)에 적절한 선택 신호를 발생시켜 어드레스/제어 신호가 MA[18:2]/제어 버스 상에 배치될 수 있게 하는 시간을 요구하기 때문이다. 부가하여, MA[18:2]/제어 버스 상의 어드레스/제어 신호를 SRAM 메모리 소자에 배치한 이후, 시뮬레이션 시스템은 FD 버스 상에 배치될 SRAM 메모리 소자로부터 나온 대응 데이터를 기다려야 한다. 일 예는 트레이스(1384)와 트레이스(1381) 사이의 시간 오프셋(offset)이고, 여기서, RD1_1은 AC_1가 MA[18:2]/제어 버스 상에 배치된 이후 FD 버스 상에 배치된다.
하이 뱅크 상에서, FPGA1은 AC1_0를 버스 FD[63:32] 상에 배치하고, 그 다음에 WD1_0가 수반된다. 그 후에, AC1_1은 버스 FD[63:32] 상에 배치된다. 이것은 트레이스(1380)에 의해 표시된다. AC1_1이 FD 버스 상에 배치될 때, 이러한 예에서 제어 신호는 판독 동작을 지시한다. 이와 같이, 전술한 것처럼, AC1_1이 트레이스(1384)에 의해 표시된 것처럼 MA[18:2]/제어 버스 상에 배치될 때, 로직 0에서 적절한 wrx 및 mem_wr 신호가 EVALFSMx 및 MEMFSM 유닛에 어드레스/제어 신호로 제공된다. 상기 시뮬레이션 시스템은 이것이 판독 동작임을 알기 때문에, 기록 데이터는 SRAM 메모리 소자로 전송되지 않을 것이고, 그보다는 오히려 AC1_1과 관련된 판독 데이터가 시뮬레이션 메모리 블럭 인터페이스를 경유한 사용자 설계 로직에 의한 후속적인 판독을 위하여 SRAM 메모리 소자에 의하여 FD 버스 상에 배치된다. 이것은 하이 뱅크 상의 트레이스(1381)에 의해 표시된다. 로우 뱅크 상에서, RD0_1인 트레이스(1378)에 의해 표시된 것처럼 FD 버스 상에 배치되고, 그 다음에 AC0_1이 MA[18:2]/제어 버스 상에 배치된다(미도시).
시뮬레이션 메모리 블럭 인터페이스를 경유한 사용자 설계 로직에 의한 판독 동작은 트레이스(1388)에 의해 표시된 것처럼 EVALFSMx가 rd_lat0 신호(1362)를 시뮬레이션 메모리 블럭 인터페이스의 메모리 판독 데이터 이중 버퍼에 발생시킬 때 달성된다. 이러한 rd_lat0 신호은 로우 뱅크 FPGA0 및 하이 뱅크 FPGA1 둘 다에 제공된다.
그 후에, 각각의 FPGA 로직 소자에 대한 다음 메모리 블럭이 FD 버스 상에 배치된다. AC2_0가 로우 뱅크 FD 버스 상에 배치되는 한편, AC3_0는 하이 뱅크 FD 버스 상에 배치된다. 기록 동작이 요구된다면, WD2_0는 로우 뱅크 FD 버스 상에 배치되고, WD3_0은 하이 뱅크 FD 버스 상에 배치된다. AC3_0는 트레이스(1385)에 의해 표시된 것처럼 하이 뱅크 MA[18:2]/제어 버스 상에 배치된다. 이러한 프로세스는 기록 및 판독 동작을 위하여 다음 메모리 블럭에 대하여 계속된다. 로우 뱅크 및 하이 뱅크를 위한 기록 및 판독 동작은 서로 다른 시간 및 속도에서 일어날 수 있고 도 61은 로우 뱅크 및 하이 뱅크에 대한 타이밍이 동일한 특별한 일례를 보여준다. 부가적으로, 로우 뱅크 및 하이 뱅크에 대한 기록 동작은 함께 발생하고, 뒤이어 두 뱅크 상의 판독 동작이 일어난다. 항상 이러한 것은 아니다. 로우 뱅크 및 하이 뱅크의 존재는 이러한 뱅크들에 결합된 장치들의 병렬 동작을 가능하게 한다. 즉, 로우 뱅크 상의 활동은 하이 뱅크 상의 활동에 독립적이다. 다른 시나리오에 의하면, 로우 뱅크는 하이 뱅크가 일련의 판독 동작을 수행하고 있을 때 병렬적으로 일련의 기록 동작을 수행한다.
각각의 뱅크에 대한 마지막 FPGA 로직 소자의 마지막 데이터와 만나면, SHIFTOUT 신호(1357)가 트레이스(1376)에 의해 표시된 것처럼 가정된다. 판독 동작에 대하여, 로우 뱅크 상의 FPGA2 및 하이 뱅크 상의 FPGA3에 대응하는 rd_lat 신호(1363)가 트레이스(1389)에 의해 표시된 것처럼 트레이스(1379) 상의 RD2_1 및 트레이스(1382) 상의 RD3_1를 판독하도록 가정된다. 마지막 FPGA 유닛에 대한 마지막 데이터가 액세싱되었기 때문에, 시뮬레이션 기록/판독 사이클의 종료는 트레이스(1390)에 의해 표시된 것처럼 DONE 신호(1364)에 의해 지시된다.
다음의 표 H는 시뮬레이션 시스템 보드 상의 여러가지 컴포넌트 및 그에 대응하는 레지스터/메모리, PCI 메모리 어드레스 및 로컬 어드레스를 리스트한다.
표 H : 메모리 맵
Figure 112003005208091-pct00005

Figure 112003005208091-pct00006

컨피규레이션 파일에 대한 데이터 포맷은 본 발명의 일 실시예에 따라 이하의 표 J에 나타난다. CPU는 모든 온-보드 FPGA에 대하여 1 비트를 병렬로 설정하도록 매번 PCI 버스를 통하여 1 워드를 보낸다.
표 J : 설정 데이터 포맷
Figure 112003005208091-pct00007

이하의 표 K는 XSFR_EVAL 레지스터를 리스트한다. 그것은 모든 보드에 상주한다. XSFR_EVAL 레지스터는 EVAL 주기를 프로그래밍하고 DMA 판독/기록을 제어하며 EVAL_DONE 및 XSFR_DONE 필드의 상태를 판독하기 위하여 호스트 컴퓨팅 시스템에 의해 사용된다. 호스트 컴퓨팅 시스템은 또한 메모리가 액세싱할 수 있도록 이러한 레지스터를 사용한다. 이러한 레지스터와 관련된 시뮬레이션 시스템의 동작은 도 62 및 도 63과 관련하여 이하에서 설명된다.
표 K : 모든 6개의 보드에 대한 XSFR_EVAL REGISTER(로컬 어드레스: 0h)
Figure 112003005208091-pct00008

이하의 표 L은 CONFIG_JTAG[6:1] 레지스터의 컨텐츠를 리스트한다. CPU는 FPGA 로직 소자를 설정하고 이러한 레지스터를 통하여 FPGA 로직 소자에 대한 경계 스캔 테스트를 실행한다. 각각의 보드는 하나의 전용 레지스터를 갖는다.
표 L : CONFIG_JTAG[6:1] REGISTER
Figure 112003005208091-pct00009
Figure 112003005208091-pct00010

도 62 및 도 63은 본 발명의 다른 실시예에 대한 타이밍도를 보여준다. 상기 두개의 도면은 XSFR_EVAL 레지스터와 관련한 시뮬레이션 시스템의 동작을 보여준다. XSFR_EVAL 레지스터는 EVAL 주기을 프로그래밍하고 DMA 판독/기록을 제어하며 EVAL_DONE 및 XSFR_DONE 필드의 상태를 판독하기 위하여 호스트 컴퓨팅 시스템에 의하여 사용된다. 호스트 컴퓨팅 시스템은 또한 메모리가 액세싱할 수 있도록 이러한 레지스터를 사용한다. 상기 두개의 도면 사이의 주된 차이점 중 하나는 WAIT_EVAL 필드의 상태이다. 도 62의 경우에는 WAIT_EVAL 필드가 "0"으로 세팅되고, DMA 판독 전송은 CLK_EN 이후에 시작한다. 도 63의 경우에는 WAIT_EVAL 필드가 "1"로 세팅되고, DMA 판독 전송은 EVAL_DONE 이후에 시작한다.
도 62에서, WR_XSFR_EN 및 RD_XSFR_EN은 둘 다 "1"로 세팅된다. 이러한 2개의 필드는 DMA 기록/판독 전송을 가능하게 하고 XSFR_DONE에 의해 클리어(clear)될 수 있다. 두 개의 필드가 "1"로 세팅되기 때문에, CTRL_FPGA 유닛은 자동적으로 DMA 기록 전송을 먼저 실행하고 그 다음에 DMA 판독 전송을 실행한다. 그러나, WAIT_EVAL 필드는 CLK_EN의 발생(assertion) 이후(및 DMA 기록 동작의 종료 이후)에 DMA 판독 전송이 시작됨을 지시하는 "0"으로 세팅된다. 이와 같이, 도 62에서, DMA 판독 동작은 CLK_EN 신호(소프트웨어 클럭)이 검출되자마자 DMA 기록 동작의 종료 이후에 거의 즉시 발생한다. DMA 판독 전송 동작은 EVAL 주기의 종료를 기다리지 않는다.
타이밍도의 시작에서, EVAL_REQ_N 신호는 다수의 FPGA 로직 소자가 주목(attention)을 위하여 경쟁하기 때문에 경쟁을 경험한다. 이전에 설명한 것처럼, EVAL_REQ_N(또는 EVAL_REQ#) 신호는 임의의 FPGA 로직 소자가 이러한 신호를 가정한다면 평가 사이클을 시작하기 위해 사용된다. 데이터 전송의 종료에서, 평가 사이클은 평가 프로세스를 촉진하기 위하여 어드레스 포인터 초기화 및 소프트웨어 클럭의 동작을 포함하여 시작된다.
DMA 데이터 전송 주기의 종결시 생성된 DONE 신호는 또한 다수의 LAST 신호(각각의 FPGA 로직 소자의 출력에서 시프트인 및 시프트아웃 신호로부터 나옴)가 발생하여 CTRL_FPGA 유닛에 제공될 때 경쟁을 경험한다. 모든 LAST 신호가 수신되고 프로세싱될 때, DONE 신호가 발생하여 새로운 DMA 데이터 전송 동작이 시작될 수 있다. EVAL_REQ_N 신호 및 DONE 신호는 이하에서 설명되는 방식으로 시간 공유 기초(time-shared basis) 상에서 동일한 와이어를 사용한다.
상기 시스템은 시간(1409)에서 WR_XSFR 신호에 의해 도시된 것처럼 우선 DMA 기록 전송을 시작한다. WR_XSFR 신호의 시작 부분은 PCI 컨트롤러(일 실시예에서는 PCI(9080) 또는 PCI(9060))와 관련된 소정의 오버헤드를 포함한다. 그 후에, 호스트 컴퓨팅 시스템은 로컬 버스 LD[31:0] 및 FPGA 버스 FD[63:0]를 통해 FPGA 버스 FD[63:0]에 결합된 FPGA 로직 소자로 DMA 기록 동작을 수행한다.
시간(1412)에서, WR_XSFR 신호는 DMA 기록 동작의 종료를 지시하면서 액티브을 잃는다. EVAL 신호는 시간(1412)로부터 시간(1410)까지 사전에 결정된 시간 동안 액티브화된다. EVALTIME의 지속시간은 프로그램가능하고 초기에 8+X로 세팅되는데, 여기서 X는 가장 긴 신호 트레이스 경로로부터 나온다. XSFR_DONE 신호는 또한 현재 동작이 DMA 기록인 이러한 DMA 전송 동작의 종료를 지시하기 위하여 짧은 시간 동안 액티브화된다.
또한, 시간(1412)에서, EVAL_REQ_N 신호들 사이의 경쟁이 중단되고 DONE 신호를 전하는 와이어는 이제 CTRL_FPGA 유닛으로 EVAL_REQ_N 신호를 전달한다. 3 클럭 사이클 동안, EVAL_REQ_N 신호는 DONE 신호를 전하는 와이어를 통해 프로세싱된다. 3 클럭 사이클 이후, EVAL_REQ_N 신호들은 더 이상 FPGA 로직 소자에 의해 생성되지 않고 이전에 CTRL_FPGA 유닛으로 전달되었던 EVAL_REQ_N 신호가 프로세싱될 것이다. EVAL_REQ_N 신호가 게이트된 클럭에 대한 FPGA 로직 소자에 의해 더 이상 생성되지 않는 최대 시간은 대략 23 클럭 사이클이다. 이러한 주기보다 더 긴 EVAL_REQ_N 신호는 무시될 것이다.
시간(1413)에서, 즉 시간(1412)(DMA 기록 동작의 종료시) 이후의 대략 2 클럭 사이클 정도 지난 시간에서, CTRL_FPGA 유닛은 DMA 판독 전송을 시작하기 위하여 기록 어드레스 스트로브 WPLX ADS_N 신호를 PCI 컨트롤러로 보낸다. 시간(1413)으로부터 약 24 클럭 사이클 이후의 시간에서, PCI 컨트롤러는 DMA 판독 전송 프로세스를 시작할 것이고 DONE 신호가 또한 생성된다. 시간(1414)에서, PCI 컨트롤러에 의한 DMA 판독 프로세스의 시작에 앞서, RD_XSFR 신호가 DMA 판독 전송을 가능하게 하도록 액티브화된다. 우선 소정의 PLX 오버헤드 데이터가 전송되고 프로세싱된다. 시간(1415)에서, 이러한 오버헤드 데이터가 프로세싱되는 동안, DMA 판독 데이터가 FPGA 버스 FD[63:0] 및 로컬 버스 LD[31:0] 상에 배치된다. 시간(1413)으로부터 24 클럭 사이클의 종료시 및 DONE 신호의 액티브화와 FPGA 로직 소자들로부터 나온 EVAL_REQ_N 신호의 발생 시점에서, PCI 컨트롤러는 FPGA 버스 FD[63:0] 및 로컬 버스 LD[31:0]로부터 호스트 컴퓨터 시스템으로 데이터를 전송함으로써 DMA 판독 데이터를 프로세싱한다.
시간(1410)에서, DMA 판독 데이터는 계속 프로세싱될 수 있을 것이고, 반면 EVAL 신호는 비활성화되며 EVAL_DONE 신호는 EVAL 사이클의 종료를 지시하기 위하여 활성화된다. FPGA 로직 소자들 사이의 경쟁(contention)은 또한 그들이 EVAL_REQ_N 신호를 생성할 때 시작된다.
시간(1417)에서, 시간(1416)에서의 DMA 판독 주기의 종료 바로 이전에, 호스트 컴퓨터 시스템은 DMA 사이클의 종료가 가까운지를 결정하기 위하여 PLX 인터럽트 레지스터를 폴링(polling)한다. PCI 컨트롤러는 DMA 데이터 전송 프로세스를 종료하기 위하여 얼마나 많은 수의 사이클이 필요한지를 안다. 미리 결정된 횟수의 사이클 이후에, PCI 컨트롤러는 인터럽트 레지스터의 특정 비트를 세팅할 것이다. 호스트 컴퓨터의 CPU는 PCI 컨트롤러의 이러한 인터럽트 레지스터를 폴링한다. 상기 비트가 세팅되면, CPU는 DMA 주기가 거의 완료되는 것을 인식한다. 호스트 시스템의 CPU는 인터럽트 레지스터가 판독 사이클로 PCI 버스를 방해할 것이므로 항상 인터럽트 레지스터를 폴링하는 것은 아니다. 그리하여, 본 발명의 일 실시예에서, 호스트 컴퓨터 시스템의 CPU는 인터럽트 레지스터를 폴링하기 이전에 특정 수의 사이클을 기다리도록 프로그래밍된다.
짧은 시간 이후에, RD_XSFR이 비활성화되고 DAM 판독 데이터가 더 이상 FPGA 버스 FD[63:0] 또는 로컬 버스 LD[31:0] 상에 있지 않을 때 DMA 판독 주기의 종료는 시간(1416)에서 발생한다. XSFR_DONE 신호는 또한 시간(1416)에서 액티브화되고 DONE 신호의 발생을 위한 LAST 신호들 사이의 경쟁이 시작된다.
삭제
삭제
삭제
시간(1409)에서의 WR_XSFR 신호 발생으로부터 시간(1417)까지의 전체 DMA 주기 동안, 호스트 컴퓨터 시스템의 CPU는 시뮬레이션 하드웨어 시스템을 액세싱하지 않는다. 일 실시예에서, 이러한 주기의 유지 시간은 (1) PCI 컨트롤러 시간 2에 대한 오버헤드 시간, (2) WR_XSFR 및 RD_XSFR의 워드 수, 및 (3) 호스트 컴퓨터 시스템(예를 들어, Sun ULTRASpace)의 PCI 오버헤드의 합이다. DMA 주기 이후의 제 1 액세스는 CPU가 PCI 컨트롤러의 인터럽트 레지스터를 폴링할 때 시간(1419)에서 발생한다.
시간(1416) 이후의 3 클럭 사이클이 지난 시간(1411)에서, MEM_EN 신호가 온 보드 SRAM 메모리 소자를 가능하게 하도록 액티브화되어 FPGA 로직 소자와 SRAM 메모리 소자들 사이의 메모리 액세스가 시작될 수 있다. 메모리 액세스는 시간(1419)까지 계속되고, 일 실시예에서 액세스 당 5 클럭 사이클이 필요하다. 아무런 DMA 판독 전송이 필요하다면, 그 다음에 메모리 액세스는 시간(1411) 대신에 시간(1410)에서 더 일찍 시작될 수 있다.
메모리 액세스가 FPGA 로직 소자와 FPGA 버스 FD[63:0]를 가로지른 SRAM 메모리 소자 사이에서 일어나는 동안, 호스트 컴퓨터 시스템의 CPU는 시간(1418)로부터 시간(1429)까지 로컬 버스 LD[31:0]를 통해 PCI 컨트롤러 및 CTRL_FPGA 유닛과 통신할 수 있다. 이것은 CPU가 PCI 컨트롤러의 인터럽트 레지스터 폴링을 종료한 이후에 일어난다. CPU는 다음 데이터 전송 준비로 여러 레지스터들 상에 데이터를 기록한다. 이러한 주기의 지속시간은 4㎲보다 더 크다. 메모리 액세스가 이러한 주기보다 더 짧다면, FPGA 버스 FD[63:0]은 어떠한 충돌도 경험하지 않을 것이다. 시간(1429)에서, XSFR_DONE 신호는 비활성화된다.
도 63에서, 타이밍도은 WAIT_EVAL 필드가 "1"로 세팅되어 있다는 점에서 도 62와 다소 다르다. 달리 말하여, DMA 판독 전송 주기은 EVAL_DONE 신호가 액티브화되어 거의 종료된 이후에 시작된다. 그것은 DMA 기록 동작의 종료 이후 바로 시작되는 대신에 EVAL 주기의 종료를 기다린다. EVAL 신호는 시간(1412)로부터 시간(1410)까지 미리 설정된 시간동안 액티브(활성화)된다. 시간(1410)에서, EVAL_DONE 신호는 EVAL 주기의 종료를 지시하기 위하여 액티브(활성화)된다.
도 63에서, 시간(1412)에서 DMA 기록 동작 이후에, CTRL_FPGA 유닛은 시간(1420)까지 PCI 컨트롤러로 기록 어드레스 스트로브 신호 WPLX ADS_N을 발생시키지 않고, 상기 시간(1420)은 EVAL 주기의 종료의 약 16 클럭 사이클 이전이다. XSFR_DONE 신호는 또한 시간(1423)으로 연장된다. 시간(1423)에서, XSFR_DONE 필드가 세팅되고 그 다음에 WPLX ADS_N 신호가 DMA 판독 프로세스를 시작하기 위하여 생성될 수 있다.
EVAL_DONE 신호의 액티브화의 약 16 클럭 사이클 이전에 시간(1420)에서, CTRL_FPGA 유닛은 DMA 판독 전송을 개시하기 위하여 기록 어드레스 스트로브 WPLX ADS_N 신호를 PCI 컨트롤러(예를 들어, PLX PC19080)에 보낸다. 시간(1420)으로부터 약 24 클럭 사이클 이후에, PCI 컨트롤러는 DMA 판독 전송을 시작할 것이고 DONE 신호가 또한 발생한다. 시간(1421)에서, PCI 컨트롤러에 의한 DMA 판독 프로세스의 시작에 앞서, RD_XSFR 신호가 DMA 판독 전송을 가능하게 하기 위하여 액티브된다. 소정의 PLX 오버헤드 데이터가 우선 전달되고 프로세싱된다. 시간(1422)에서, 이러한 오버헤드 데이터가 프로세싱되는 시간 동안, DMA 판독 데이터는 FPGA 버스 FD[63:0] 및 로컬 버스 LD[31:0] 상에 배치된다. 시간(1424)에서 24 클럭 사이클의 종료시, PCI 컨트롤러는 FPGA 버스 FD[63:0] 및 로컬 버스 LD[31:0]로부터 호스트 컴퓨터 시스템으로 데이터를 전송함으로써 DMA 판독 데이터를 프로세싱한다. 타이밍도의 나머지 부분은 도 62와 동일하다.
이와 같이, 도 63의 RD_XSFR 신호가 도 62보다 더 이후에 액티브된다. 도 63의 RD_XSFR 신호는 EVAL 주기의 거의 종료 후에 존재하여 DMA 판독 동작이 지연된다. 도 62의 RD_XSFR 신호는 DMA 기록 전송의 종료 이후에 CLK_EN 신호의 검출 다음에 존재한다.
IX. 공동 검증 시스템(COVERIFICATION SYSTEM)
본 발명의 공동검증 시스템은 설계자에게 소프트웨어 시뮬레이션의 유연성 및 하드웨어 모델을 사용함에 의해 얻어지는 더 빠른 속도를 제공함으로써 설계/개발를 가속시킬 수 있다. 하드웨어 부분 설계 및 소프트웨어 설계 둘 다 ASIC 제조에 앞서 확인될 수 있고 에뮬레이터 기반 공동검증 툴의 제한이 없다. 디버깅 특성이 향상되고 전체 디버깅 시간이 현저히 감소될 수 있다.
테스트 소자(device-under-test)로서 ASIC을 구비한 종래의 공동검증 툴
도 64는 비디오, 멀티미디어, 이더넷, 또는 SCSI 카드와 같은, PCI 애드-온(add-on) 카드로서 구현된 전형적인 최종 설계를 도시한다. 이러한 카드(2000)는 다른 주변 장치들과 통신할 수 있게 하는 직접적인 인터페이스 커넥터(2002)를 포함한다. 커넥터(2002)는 VCR, 카메라, 또는 텔레비전 튜너로부터 나온 비디오 신호, 모니터 또는 스피커로의 비디오 및 오디오 출력, 통신 또는 디스크 드라이브 인터페이스로의 신호를 전송하기 위하여 버스(2001)에 결합된다. 사용자 설계에 따라, 당업자는 다른 인터페이스 요구조건을 예상할 수 있다. 설계 기능의 태반은 칩(2004)에 존재하고 상기 칩(2004)은 버스(2003)을 통해 인터페이스 커넥터(2002)에, 로컬 클럭 신호를 생성하기 위한 버스(2007)을 통해 로컬 오실레이터(2005)에, 버스(2008)를 통해 메모리(2006)에 결합된다. 애드-온 카드(2000)은 또한 PCI 버스(2010)과 결합하기 위한 PCI 커넥터(2009)를 포함한다.
도 64에 도시된 것처럼 설계를 애드-온 카드로서 구현하기 이전에, 상기 설계는 테스팅을 목적으로 ASIC 형태로 축소된다. 종래의 하드웨어/소프트웨어 공동검증 툴이 도 65에 도시되어 있다. 사용자 설계는 도 65에서 테스트 소자(또는 "DUT")로 라벨링된 ASIC의 형태로 구현된다. 인터페이싱하도록 설계된 여러 소스로부터 스티멀러스(stimulus)를 얻기 위하여, 테스트 소자(2024)는 타겟 시스템(2020)에 배치되는데, 타겟 시스템은 마더보드 상의 중앙 컴퓨팅 시스템(2021) 및 여러 주변 장치들의 결합물이다. 타겟 시스템(2020)은 CPU 및 메모리를 포함하는 중앙 컴퓨팅 시스템(2021)을 포함하고, 많은 어플리케이션을 실행하기 위하여 마이크로소프트 윈도우즈 또는 썬 마이크로시스템의 솔라리스(Solaris)와 같은 소정의 운영 시스템 하에서 동작한다. 당업계에 공지된 것처럼, 썬 마이크로시스템의 솔라리스는 운영 환경이고 인터넷, 인트라넷 및 엔터프라이즈-와이드 컴퓨팅을 지원하는 소프트웨어 제품들의 세트이다. 솔라리스 운영 환경은 산업 표준 UNIX 시스템 배포 버전 4에 기초하고, 분산된 네트워킹 환경의 클라이언트-서버 어플리케이션을 위하여 설계되었으며, 더 작은 워크그룹(workgroup)에 대하여 적절한 자원을 제공하며, 전자 상업에 요구되는 WebTone을 제공한다.
테스트 소자(2024)용 장치 드라이버(2022)는 운영 시스템(및 임의의 어플리케이션)과 테스트 소자(2024) 사이의 통신을 가능하게 하도록 중앙 컴퓨팅 시스템(2021)에 포함된다. 당업계에 공지된 것처럼, 장치 드라이버는 하드웨어 컴포넌트 또는 컴퓨터 시스템의 주변 장치를 제어하는 특정 소프트웨어이다. 장치 드라이버는 장치의 하드웨어 레지스터를 액세싱하고 종종 장치에 의해 발생한 인터럽트를 다루기 위하여 인터럽트 핸들러(interrupt handler)를 포한한다. 장치 드라이버는 종종 운영 시스템 커널의 최하위 레벨의 일부를 형성하고, 커널이 구성된 경우 장치 드라이버는 커널과 링크된다. 최근의 보다 많은 시스템은 운영 시스템이 실행된 이후 파일들로부터 설치될 수 있는 로딩가능 장치 드라이버를 구비한다.
테스트 소자(2024) 및 중앙 컴퓨팅 시스템(2021)은 PCI 버스(2023)에 결합된다. 타겟 시스템(2020)의 다른 주변 장치들은 타겟 시스템을 버스(2034)를 통해 네트워크(2030)에 결합시키는데 사용되는 이더넷 PCI 애드-온 카드(2025), 버스(2036 및 2035)를 통해 SCSI 드라이브(2027 및 2031)에 결합되는 SCSI PCI 애드-온 카드(2026), 버스(2032)를 통해 테스트 소자(2024)에 결합되는 VCR(2028)(테스트 소자(2024) 설계에 필요한 경우), 및 버스(2033)를 통해 테스트 소자(2024)에 결합되는 모니터 및/또는 스피커(2029)(테스트 소자(2024) 설계에 필요한 경우)를 포함한다. 당업계에 공지된 것처럼, "SCSI"는 "소형 컴퓨터 시스템 인터페이스(Small Computer Systems Interface)"의 약자로서, 하드 디스크, 플로피 디스크, CD-ROM, 프린터, 스캐너 및 다수의 많은 장치와 같은 지능형 장치(intelligent device)와 컴퓨터 사이의 시스템 레벨 인터페이싱에 대한 프로세서 독립 표준이다.
이러한 타겟 시스템 환경에서, 테스트 소자(2024)는 중앙 컴퓨팅 시스템(즉, 운영 시스템, 어플리케이션) 및 주변 장치로부터 여러 스티멀러스로 검사될 수 있다. 시간은 고려사항에 들지 않고 설계자는 단지 간단한 통과/실패 테스트를 찾고 있다면, 공동검증 툴은 그들의 요구를 충족시키기에 적절하여야 한다. 그러나, 대부분의 상황에서, 설계 프로젝트는 엄격한 예산의 제한을 받고 제품의 발매에 앞서 스케쥴 잡혀 있다. 앞서 설명한 것처럼, 이런 특정 ASIC 기반 공동검증 툴은 디버깅 특징이 존재하지 않기 때문에 불만족스럽다(설계자는 정교한 기술없이는 "실패된" 테스트의 원인을 가려낼 수 없고, 검출된 모든 버그에 대한 "교정"의 수도 프로젝트의 시초에 예측될 수 없으며, 그리하여 스케쥴 및 예산을 예측할 수 없게 된다).
테스트 소자로서 에뮬레이터를 구비한 종래의 공동검증 툴
도 66은 에뮬레이터를 구비한 종래의 공동검증 툴을 도시한다. 도 64에 도시되고 앞서 설명된 셋업과는 달리, 테스트 소자는 타겟 시스템(2040)과 소정의 주변 장치 및 테스트 워크스테이션(2052)과 결합된 에뮬레이터(2048)로 프로그래밍된다. 에뮬레이터(2048)는 에뮬레이션 클럭(2066) 및 에뮬레이터로 프로그래핑된 테스트 소자를 포함한다.
에뮬레이터(2048)는 PCI 버스 브릿지(2044)와 PCI 버스(2057) 및 제어 라인(2056)을 통해 타겟 시스템(2040)에 결합된다. 타겟 시스템(2040)은 마더보드 상의 중앙 컴퓨팅 시스템(2041) 및 여러 주변 장치들의 결합을 포함한다. 타겟 시스템(2040)은 CPU 및 메모리를 포함하는 중앙 컴퓨팅 시스템(2041)을 포함하고, 다수의 어플리케이션을 실행하기 위하여 마이크로소프트 윈도우즈 또는 썬 마이크로시스템의 솔라리스와 같은 소정의 운영 시스템에서 동작한다. 테스트 소자의 장치 드라이버(2042)는 운영 시스템(및 임의의 어플리케이션)과 에뮬레이터(2048)의 테스트 소자 사이의 통신을 가능하게 하기 위하여 중앙 컴퓨팅 시스템(2041)에 포함된다. 이러한 컴퓨팅 환경의 일부인 다른 장치들과 마찬가지로 에뮬레이터(2048)와 통신하기 위하여, 중앙 컴퓨팅 시스템(2041)은 PCI 버스(2043)와 결합된다. 타겟 시스템(2040)의 다른 주변 장치는 버스(2058)를 통해 타겟 시스템을 네트워크(2049)에 결합시키기 위해 사용되는 에더넷 PCI 애드-온 카드(2045), 및 버스(2060 및 2059)를 통해 SCSI 드라이브(2047 및 2050)에 결합되는 SCSI PCI 애드-온 카드(2046)를 포함한다.
에뮬레이터(2048)는 또한 버스(2062)를 통해 테스트 워크스테이션에 결합된다. 테스트 워크스테이션(2052)은 그 기능을 수행하기 위하여 CPU 및 메모리를 포함한다. 테스트 워크스테이션(2052)은 또한 모델링되지만 에뮬레이터(2048)에 물리적으로 결합되지 않은 다른 장치들에 대하여 테스트 케이스(2061) 및 장치 모델(2068)을 포함한다.
최종적으로, 에뮬레이터(2048)는 버스(2061)를 통해 프레임 버퍼 또는 데이터 스트림 기록/재생 시스템(2051)과 같은 다른 주변 장치들에 결합된다. 이러한 프레임 버퍼 또는 데이터 스트림 기록/재생 시스템(2051)은 또한 버스(2063)를 통해 통신 장치 또는 채널(2053)에, 버스(2064)를 통해 VCR(2054)에, 그리고 버스(2065)를 통해 모니터 및/또는 스피커(2055)에 결합될 수 있다.
당업계에 공지된 것처럼, 에뮬레이션 클럭은 실제 타겟 시스템 속도보다 훨씬 더 느린 속도에서 동작한다. 그리하여, 도 66의 음영있는 부분은 에뮬레이션 속도로 동작하고 나머지 음영없는 부분은 실제 타겟 시스템 속도로 동작한다.
전술된 것처럼, 에뮬레이터를 구비한 이러한 공동검증 툴은 여러가지 제약 조건이 있다. 테스트 소자의 내부 상태 정보를 얻기 위하여 로직 분석기 또는 샘플-앤드-홀드(sample-and-hold) 장치를 사용할 때, 설계자는 그의 설계를 컴파일링하고, 그 결과 디버깅 목적으로 조사하면서 관심있는 관련 신호가 샘플링을 위한 출력 핀 상에 제공된다. 설계자가 설계의 상이한 부분을 디버깅하길 원한다면, 그는 그 부분이 로직 분석기 또는 샘플-앤드-홀드 장치에 의해 샘플링될 수 있는 출력 신호를 갖는지 확인하여야 하고, 그렇지 않으면 이러한 신호가 샘플링 목적으로 출력 핀 상에 제공될 수 있도록 에뮬레이터(2048)에 존재하는 그의 설계를 재컴파일링하여야 한다. 이러한 재컴파일링 시간은 며칠 또는 몇 주가 걸릴 수 있고, 이것은 시간에 민감한 설계/개발 스케쥴을 지나치게 지연시킬 수 있다. 부가하여, 이러한 공동검증 툴은 신호를 사용하기 때문에, 정교한 회로가 이러한 신호를 데이터로 변환하기 위하여 또는 소정의 신호 대 신호 타이밍 제어를 제공하기 위하여 제공되어야 한다. 게다가, 샘플링에 요구되는 각각의 신호에 필요한 다수의 와이어(2061 및 2062)를 사용하는 것에 대한 필요성은 디버그 셋업 부담 및 시간을 증가시킨다.
리컨피규러블 컴퓨팅 어레이를 이용한 시뮬레이션
간단한 리뷰로서, 도 67은 본 특허 명세서에서 이전에 설명되었던 본 발명의 싱글 엔진 리컨피규러블 컴퓨팅(reconfigurable computing; RCC) 어레이 시스템의 상위 레벨의 구성을 도시한다. 이러한 싱글 엔진 RCC 시스템은 본 발명의 일 실시예에 따라 공동검증 시스템에 통합될 것이다.
도 67에서, RCC 어레이 시스템(2080)은 RCC 컴퓨팅 시스템(2081), 리컨피규러블 컴퓨팅(RCC) 하드웨어 어레이(2084), 및 그것들을 함께 결합시키는 PCI 버스(2089)를 포함한다. 중요하게도, RCC 컴퓨팅 시스템(2081)은 소프트웨어의 사용자 설계의 전체 모델을 포함하고, RCC 하드웨어 어레이(2084)는 사용자 설계의 하드웨어 모델을 포함한다. RCC 컴퓨팅 시스템(2081)은 CPU, 메모리, 운영 시스템, 및 싱글 엔진 RCC 시스템(2080)을 실행하기 위하여 필수적인 소프트웨어를 포함한다. 소프트웨어 클럭(2082)은 RCC 컴퓨팅 시스템(2081)의 소프트웨어 모델 및 RCC 하드웨어 어레이의 하드웨어 모델을 빈틈없이 제어할 수 있도록 제공된다. 테스트 벤치 데이터(2083)가 또한 RCC 컴퓨팅 시스템(2081)에 저장된다.
RCC 하드웨어 어레이 시스템(2084)는 PCI 인터페이스(2085), RCC 하드웨어 어레이 보드 세트(2086), 및 인터페이스 목적의 여러가지 버스들을 포함한다. RCC 하드웨어 어레이 보드(2086)의 세트는 하드웨어로 모델링된 사용자 설계의 적어도 일부(하드웨어 모델(2087)) 및 테스트 벤치 데이터용 메모리를 포함한다. 일 실시예에서, 이러한 하드웨어 모델의 여러 부분은 배치 시간 중에 복수개의 리컨피규러블 로직 엘리먼트들 사이에 분포된다. 더 많은 리컨피규러블 로직 엘리먼트들이 사용될수록, 더 많은 보드가 요구될 수 있다. 일 실시예에서, 4개의 리컨피규러블 로직 엘리먼트들은 하나의 보드 상에 제공된다. 다른 실시예에서, 8개의 리컨피규러블 로직 엘리먼트들이 하나의 보드 상에 제공된다. 4칩 보드에 리컨피규러블 로직 엘리먼트들이 용량 및 능력은 8칩 보드의 리컨피규러블 로직 엘리먼트들과 현저히 다를 수 있다.
버스(2090)는 PCI 인터페이스(2085)로부터 하드웨어 모델(2087)로 하드웨어 모델을 위한 다양한 클럭을 제공한다. 버스(2091)는 커넥터(2093) 및 내부 버스(2094)를 통해 PCI 인터페이스(2085)와 하드웨어 모델(2087) 사이에 다른 I/O 데이터를 제공한다. 버스(2092)는 PCI 인터페이스(2085)와 하드웨어 모델(2087) 사이에 PCI 버스로서 기능한다. 테스트 벤치 데이터는 또한 하드웨어 모델(2087)의 메모리에 저장될 수 있다. 하드웨어 모델(2087)은 전술한 것처럼 하드웨어 모델이 RCC 컴퓨팅 시스템(2081)과 인터페이스 가능하게 하기 위해 요구되는 사용자 설계의 하드웨어 모델과는 다른, 다른 구조 및 기능을 포함한다.
RCC 시스템(2080)은 하나의 워크스테이션으로 제공될 수 있거나 또는 대안적으로 각각의 워크스테이션이 시간 공유 기반 상에서 RCC 시스템(2080)에 액세싱하도록 제공되는 워크스테이션의 네트워크에 결합될 수 있다. 사실상, RCC 어레이 시스템(2080)은 시뮬레이션 스케쥴러 및 상태 스와핑 메커니즘을 구비한 시뮬레이션 서버로서 기능한다. 서버는 워크스테이션에서 각각의 사용자가 높은 속도의 가속 및 하드웨어 상태 스와핑 목적으로 RCC 하드웨어 어레이(2084)에 액세싱할 수 있게 한다. 가속 및 상태 스와핑 이후에, 각각의 사용자는 다른 워크스테이션에서 다른 사용자들에게 RCC 하드웨어 어레이(2084)의 제어를 릴리싱(releasing)하는 동안 소프트웨어의 사용자 설계를 국부적으로 시뮬레이션할 수 있다. 이러한 네트워크 모델은 또한 이하에서 설명되는 공동검증 시스템에 사용될 것이다.
RCC 어레이 시스템(2080)은 설계자에게 전체 설계를 시뮬레이션할 수 있고 리컨피규러블 컴퓨팅 어레이의 하드웨어 모델을 통해 선택된 사이클 동안 테스트 지점들의 부분을 가속시키며 어느 시점에서든지 가상으로 설계의 임의의 부분에 대한 내부 상태 정보를 얻을 수 있는 파워 및 유연성을 제공한다. 실제로, 싱글-엔진 리컨피규러블 컴퓨팅 어레이(RCC) 시스템은 하드웨어 가속 시뮬레이터로서 설명될 수 있는데, 싱글 디버그 세션에서 이하의 작업, (1) 시뮬레이션, (2) 사용자가 시작, 중지, 값 가정, 및 임의의 시점에서 설계의 내부 상태를 조사할 수 있는 하드웨어 가속으로 시뮬레이션, (3) 시뮬레이션 후 분석, 및 (4) 내부 회로 에뮬레이션을 수행하기 위하여 사용될 수 있다. 소프트웨어 모델 및 하드웨어 모델 둘 다가 소프트웨어 클럭을 통해 싱글 엔진의 엄격한 제어 하에 있기 때문에, 리컨피규러블 컴퓨팅 어레이의 하드웨어 모델은 소프트웨어 시뮬레이션 모델에 빈틈없이 결합된다. 이것은 설계자가 사이클마다 디버깅할 수 있게 하고 가치있는 내부 상태 정보를 얻기 위하여 다수의 사이클을 통해 하드웨어 모델을 가속 및 감속시킬 수 있게 한다. 더욱이, 이러한 시뮬레이션 시스템은 신호 대신에 데이터를 다루기 때문에, 어떠한 복잡한 신호 대 데이터 변환/타이밍 회로도 필요하지 않다. 부가하여, 리컨피규러블 컴퓨팅 어레이의 하드웨어 모델은 설계자가 통상의 에뮬레이션 시스템과 달리 상이한 노드 세트를 조사하길 원한다면 재컴파일링될 필요가 없다. 보다 상세한 설명은 위의 설명을 다시 참조하라.
외부 I/O가 없는 공동검증 시스템
본 발명의 일 실시예는 실제의 물리적 외부 I/O 장치 및 타겟 어플리케이션을 전혀 사용하지 않는 공동검증 시스템이다. 그리하여, 본 발명의 일 실시예에 따른 공동검증 시스템은 임의의 실제 타겟 시스템 또는 I/O 장치를 사용하지 않으면서 사용자 설계의 소프트웨어 부분 및 하드웨어 부분을 디버깅하기 위하여 RCC 시스템을 다른 기능과 통합시킬 수 있다. 대신에 타겟 시스템 및 외부 I/O 장치는 RCC 컴퓨팅 시스템의 소프트웨어로 모델링된다.
도 68을 참조하면, 공동검증 시스템(2100)은 RCC 컴퓨팅 시스템(2101), RCC 하드웨어 어레이(2108), 및 그들을 함께 결합시키는 PCI버스(2114)를 포함한다. 중요하게도, RCC 컴퓨팅 시스템(2101)은 소프트웨어의 사용자 설계의 전체 모델을 포함하고 리컨피규러블 컴퓨팅 어레이(2108)는 사용자 설계의 하드웨어 모델을 포함한다. RCC 컴퓨팅 시스템(2101)은 CPU, 메모리, 운영 시스템, 및 싱글 엔진 공동검증 시스템(2100)을 실행하기 위하여 필요한 소프트웨어를 포함한다. 소프트웨어 클럭(2104)은 RCC 컴퓨팅 시스템(2101)의 소프트웨어 모델 및 리컨피규러블 컴퓨팅 어레이(2108)의 하드웨어 모델을 완전히 제어하기 위하여 제공된다. 테스트 케이스(2103)는 또한 RCC 컴퓨팅 시스템(2101)에 저장된다.
본 발명의 일 실시예에 따라, RCC 컴퓨팅 시스템(2101)은 또한 타겟 어플리케이션(2102), 사용자 설계의 하드웨어 모델의 드라이버(2105), 장치(예를 들어, 비디오 카드)의 모델과 2106으로 라벨링된 소프트웨어의 상기 모델의 드라이버, 및 또다른 장치(예를 들어, 모니터)의 모델과 또한 2107로 라벨링된 소프트웨어의 상기 모델의 드라이버를 포함한다. 필수적으로, RCC 컴퓨팅 시스템(2101)은 실제 타겟 시스템 및 다른 I/O 장치가 이러한 컴퓨팅 환경의 일부인 사용자 설계의 소프트 웨어 모델 및 하드웨어 모델로 전달되기 위해 필요한 만큼의 많은 장치 모델 및 드라이버를 포함한다.
RCC 하드웨어 어레이(2108)는 PCI 인터페이스(2109), RCC 하드웨어 어레이 보드의 세트(2110), 및 인터페이스 목적을 위한 여러가지 버스를 포함한다. RCC 하드웨어 어레이 보드의 세트(2110)는 하드웨어(2112)로 모델링된 사용자 설계의 적어도 일부분 및 테스트 벤치 데이터를 위한 메모리(2113)를 포함한다. 전술한 것처럼, 각각의 보드는 복수 개의 리컨피규러블 로직 엘리먼트 또는 칩을 포함한다.
버스(2115)는 PCI 인터페이스(2109)로부터 하드웨어 모델(2112)까지 하드웨어 모델을 위한 다양한 클럭을 제공한다. 버스(2116)는 커넥터(2111) 및 내부 버스(2118)를 통해 PCI 인터페이스(2109)와 하드웨어 모델(2112) 사이에 I/O 데이터를 제공한다. 버스(2117)는 PCI 인터페이스(2109)와 하드웨어 모델(2112) 사이에 PCI 버스로서 기능한다. 테스트 벤치 데이터는 또한 하드웨어 모델(2113)의 메모리에 저장될 수 있다. 전술한 것처럼, 하드웨어 모델은 하드웨어 모델이 RCC 컴퓨팅 시스템(2101)과 인터페이스할 수 있게 하는데 요구되는 사용자 설계의 하드웨어 모델과는 다른, 다른 구조 및 기능을 포함한다.
도 68의 공동검증 시스템과 종래의 에뮬레이터 기반 공동검증 시스템을 비교하기 위하여, 도 66은 타겟 시스템(2040), 소정의 I/O 장치(예를 들어, 프레임 버퍼 또는 데이터 스트림 기록/재생 시스템(2051)), 및 워크스테이션(2052)에 결합되는 에뮬레이터(2048)를 보여준다. 이러한 에뮬레이터 구성은 설계자에게 많은 문제점 및 설정 문제를 제공한다. 에뮬레이터는 에뮬레이터로 모델링된 사용자 설계의 내부 상태를 측정하기 위하여 로직 분석기 또는 샘플-앤드-홀드 장치를 필요로 한다. 로직 분석기 및 샘플-앤드-홀드 장치는 신호를 필요로 하기 때문에, 복잡한 신호 대 데이터 변환 회로가 요구된다. 부가적으로, 또한 복잡한 신호 대 신호 타이밍 제어 회로가 요구된다. 에뮬레이터의 내부 상태를 측정하기 위하여 사용될, 모든 신호에 대하여 요구되는 다수의 와이어가 셋업 동안에 사용자에게 부담을 준다. 디버그 세션 동안, 사용자는 그가 내부 로직 회로의 상이한 세트를 조사하길 원하는 매 시점마다 에뮬레이터를 재컴파일링하여야 하고, 그 결과 로직 회로로부터 나온 적절한 신호가 로직 분석기 또는 샘플-앤드-홀드 장치에 의한 측정 및 기록을 위하여 출력으로서 제공된다. 장시간의 재컴파일링은 아주 비용이 많이 든다.
아무런 외부 I/O 장치가 결합되지 않은 본 발명의 공동검증 시스템에서, 타겟 시스템 및 다른 I/O 장치가 소프트웨어로 모델링되어 실제 물리적 타겟 시스템 및 I/O 장치는 물리적으로 필요하지 않다. RCC 컴퓨팅 시스템(2101)이 데이터를 프로세싱하기 때문에, 복잡한 신호 대 데이터 변화 회로 또는 신호 대 신호 타이밍 제어 회로는 전혀 필요하지 않다. 또한 와이어의 수는 신호의 수와 같지 않으므로, 셋업은 비교적 단순하다. 부가하여, 사용자 설계의 하드웨어 모델에 들어 있는 로직 회로의 상이한 부분을 디버깅하는 것은 공동검증 시스템이 데이터만 프로세싱하고 신호는 프로세싱하지 않기 때문에 재컴파일링을 요구하지 않는다. RCC 컴퓨팅 시스템이 소프트웨어 제어 클럭(즉, 소프트웨어 클럭 및 클럭 에지 검출 회로)로 RCC 하드웨어 어레이를 제어하기 때문에, 하드웨어 모델을 시작하고 중지하는 것이 촉진된다. 전체 사용자 설계의 모델이 소프트웨어에 존재하고 소프트웨어 클럭이 동기화를 가능하게 하므로 하드웨어 모델로부터 데이터를 판독하는 것 또한 용이하다. 그리하여, 사용자는 소프트웨어 시뮬레이션 하나에 의하여 디버깅할 수 있고, 하드웨어의 전체 또는 일부를 가속시킬 수 있으며, 매 사이클마다 여러가지 목적하는 테스트 지점을 통하여 나아갈 수 있고 , 소프트웨어 및 하드웨어 모델의 내부 상태(예를 들어, 레지스터 및 결합 로직 상태)를 조사할 수 있다. 예를 들어, 사용자는 소정의 테스트 벤치 데이터로 설계를 시뮬레이션할 수 있고, 그 다음에 내부 상태 정보를 하드웨어 모델로 다운로드할 수 있으며, 하드웨어 모델과 함께 다양한 테스트 벤치 데이터를 사용하여 설계를 가속시킬 수 있으며, 레지스터/결합 로직 재생성에 의한 하드웨어 모델의 결과적 내부 상태값 및 하드웨어 모델로부터 소프트웨어 모델로 로딩되는 값을 조사할 수 있으며, 사용자는 최종적으로 하드웨어 모델 가속 프로세스의 결과를 사용하여 사용자 설계의 다른 부분을 시뮬레이션할 수 있다.
그러나, 전술한 것처럼, 워크스테이션은 여전히 디버그 세션 제어 목적을 위해 필요하다. 네트워크 구성에서, 워크스테이션은 디버그 데이터를 원격으로 액세싱하기 위하여 공동검증 시스템과 원격으로 결합될 수 있다. 비네트워크(non-network) 구성에서, 워크스테이션은 공동검증 시스템에 국부적으로 결합될 수 있고, 또는 소정의 다른 실시예에서 워크스테이션은 내부적으로 공동검증 시스템을 결합시켜 디버그 데이터가 국부적으로 액세싱될 수 있다.
외부 I/O를 구비한 공동검증 시스템
도 68에서, 여러가지 I/O 장치 및 타겟 어플리케이션이 RCC 컴퓨팅 시스템(2101)으로 모델링되었다. 그러나, 지나치게 많은 I/O 장치 및 타겟 어플리케이션이 RCC 컴퓨팅 시스템(2101)에서 실행되고 있는 경우, 전체 속도는 느려진다. RCC 컴퓨팅 시스템(2101)의 단지 하나의 CPU를 사용하면, 모든 장치 모델 및 타겟 어플리케이션으로부터 나온 다양한 데이터를 프로세싱하기 위하여 더 많은 시간이 필요하다. 데이터 처리량을 증가시키기 위하여, 실제 I/O 장치 및 타겟 어플리케이션(이러한 I/O 장치 및 타겟 어플리케이션의 소프트웨어 모델 대신에)이 물리적으로 공동검증 시스템에 결합될 수 있다.
본 발명의 일 실시예는 실제적이고 물리적인 외부 I/O 장치 및 타겟 어플리케이션을 사용하는 공동검증 시스템이다. 그리하여, 공동검증 시스템은 실제 타겟 시스템 및/또는 I/O장치를 사용하면서 사용자 설계의 소프트웨어 부분 및 하드웨어 부분을 디버깅하기 위하여 RCC 시스템에 다른 기능을 결합시킬 수 있다. 테스트를 위하여, 공동검증 시스템은 소프트웨어로부터 나온 테스트 벤치 데이터 및 외부 인터페이스(예를 들어, 타겟 시스템 및 외부 I/O 장치)로부터 나온 스티멀러스 둘 다를 사용할 수 있다. 테스트 벤치 데이터는 사용자 설계의 핀 아웃(pin-out)에 테스트 데이터를 제공하기 위해 사용될 뿐만 아니라, 사용자 설계의 내부 노드에 테스트 데이터를 제공하기 위하여 사용될 수 있다. 외부 I/O 장치(또는 타겟 시스템)으로부터 나온 실제 I/O 신호는 단지 사용자 설계의 핀 아웃에 지향될 수 있다. 이와 같이, 외부 인터페이스(예를 들어, 타겟 시스템 또는 외부 I/O 장치)로부터 나온 테스트 데이터와 소프트웨어의 테스트 벤치 프로세스 사이의 한 가지 주된 차이점은 테스트 벤치 데이터는 핀 아웃 및 내부 노드에 인가되는 스티멀러스로 사용자 설계를 테스트하기 위하여 사용될 수 있는 반면, 타겟 시스템 또는 외부 I/O 장치는 단지 핀 아웃(또는 핀 아웃를 나타내는 사용자 설계의 노드)을 통해 사용자 설계에 인가될 수 있다는 것이다. 이하의 설명에서, 공동검증 시스템의 구조 및 타겟 시스템과 외부 I/O 장치와 관련된 상기 공동검증 구성이 제공될 것이다.
도 66의 시스템 구성과 비교하여, 본 발명의 일 실시예에 따른 공동검증 시스템은 점선(2070)으로 된 아이템들의 구조 및 기능을 대체한다. 달리 말하면, 도 66은 점선(2070)의 경계 내부의 에뮬레이터 및 워크스테이션을 보여주는 반면, 본 발명의 일 실시예는 점선(2070) 내부의 공동검증 시스템(2140)으로서 도 69에 도시된 것과 같은 공동검증 시스템(2140)(및 그와 관련된 워크스테이션)을 포함한다.
도 69를 참조하면, 본 발명의 일 실시예에 따른 공동검증 시스템 구성은 타겟 시스템(2120), 공동검증 시스템(2140), 소정의 선택적 I/O 장치, 및 그것들을 함께 결합시키기 위한 제어/데이터 버스(2131 및 2132)를 포함한다. 타겟 시스템(2120)은 중앙 컴퓨팅 시스템(2121)을 포함하고, 상기 중앙 컴퓨팅 시스템(2121)은 CPU 및 메모리를 포함하며, 다수의 어플리케이션(2122) 및 테스트 케이스(2123)을 실행하기 위하여 마이크로소프트 윈도우즈 또는 썬 마이크로시스템의 솔라리스와 같은 소정의 운영 시스템 하에서 동작한다. 사용자 설계의 하드웨어 모델을 위한 장치 드라이버(2124)는 운영 시스템(및 임의의 어플리케이션)과 사용자 설계 사이의 통신을 가능하게 하기 위하여 중앙 컴퓨팅 시스템에 포함된다. 이러한 컴퓨팅 환경의 일부인 다른 장치들 및 공동검증과 통신하기 위하여, 중앙 컴퓨팅 시스템(2121)은 PCI 버스(2129)에 결합된다. 타겟 시스템(2120)의 다른 주변 장치들은 타겟 시스템을 네트워크에 결합시키기 위하여 사용되는 에더넷 PCI 애드-온 카드(2125), 버스(2130)를 통해 SCSI 드라이버(2128)에 결합되는 SCSI PCI 애드-온 카드(2126), 및 PCI 버스 브릿지(2127)를 포함한다.
공동검증 시스템(2140)은 RCC 컴퓨팅 시스템(2141), RCC 하드웨어 어레이(2190), 외부 I/O 확장기 형태의 외부 인터페이스(2139), 및 RCC 컴퓨팅 시스템(2141)과 RCC 하드웨어 어레이(2190)를 함께 결합시키는 PCI 버스(2171)를 포함한다. RCC 컴퓨팅 시스템(2141)은 CPU, 메모리, 운영 시스템, 및 싱글 엔진 공동검증 시스템(2140)을 실행하기 위하여 필요한 소프트웨어를 포함한다. 중요하게도, RCC 컴퓨팅 시스템(2141)은 소프트웨어의 사용자 설계의 전체 모델을 포함하고 RCC 하드웨어 어레이(2190)는 사용자 설계의 하드웨어 모델을 포함한다.
전술한 것처럼, 공동검증 시스템의 싱글 엔진은 RCC 컴퓨팅 시스템(2141)의 주 메모리에 상주하는 주 소프트웨어 커널로부터 그 파워 및 유연성을 얻고 공동검증 시스템(2140)의 전체 동작 및 실행을 제어한다. 임의의 테스트 벤치 프로세스가 액티브이거나 외부 세계로부터 나온 임의의 신호가 공동검증에 제공되는 한, 커널을 액티브 테스트 벤치 컴포넌트를 평가하고, 클럭 컴포넌트를 평가하며, 레지스터와 메모리 및 전파하는 결합 로직 데이터를 업데이트시키기 위하여 클럭 에지를 검출하여 시뮬레이션 시간을 낸다. 이러한 주 소프트웨어 커널은 RCC 컴퓨팅 시스템(2141) 및 RCC 하드웨어 어레이(2190)의 단단히 결합된 속성에 대비한다.
소프트웨어 커널은 RCC 하드웨어 어레이(2190) 및 외부 세계에 제공되는 소프트웨어 클럭 소스(2142)로부터 소프트웨어 클럭 신호를 생성한다. 클럭 소스(2142)는 이러한 소프트웨어 클럭의 목적에 따라 서로 다른 주파수에서 다수의 클럭을 발생시킬 수 있다. 일반적으로, 소프트웨어 클럭은 사용자 설계의 하드웨어 모델에 존재하는 레지스터가 임의의 유지 시간(hold-time)을 위반하지 않으면서 시스템 클럭에 동기하여 평가함을 포장한다. 소프트웨어 모델은 하드웨어 모델 레지스터 값에 영향을 미치는 소프트웨어의 클럭 에지를 검출할 수 있다. 따라서, 클럭 검출 메커니즘은 주 소프트웨어 모델의 클럭 에지 검출이 하드웨어 모델의 클럭 검출로 변환될 수 있음을 보장한다. 소프트웨어 클럭 및 클럭 에지 검출 로직에 대한 보다 상세한 설명은 도 17-19 및 본 특허 명세서의 첨부 텍스트를 참조하라.
본 발명의 일 실시예에 따라, RCC 컴퓨팅 시스템(2141)은 또한 다른 실제의 물리적 I/O 장치가 공동검증 시스템에 결합될 수 있음에도 불구하고 다수의 I/O 장치 중 하나 이상의 모델을 포함할 수 있다. 예를 들어, RCC 컴퓨팅 시스템(2141)은 드라이버와 2143으로 라벨링된 소프트웨어의 테스트 벤치 데이터를 구비한 장치(예를 들어, 스피커)의 모델, 및 드라이버와 2144로 라벨링된 소프트웨어의 테스트 벤티 데이터를 구비한 또다른 장치(예를 들어, 그래픽 가속기)의 모델을 포함할 수 있다. 사용자는 어떠한 장치(및 그와 관련된 드라이버 및 테스트 벤치 데이터)가 모델링되고 RCC 컴퓨팅 시스템(2141)에 통합될 수 있는지 그리고 어떠한 장치가 실제로 공동검증 시스템과 결합될 것인지를 결정한다.
공동검증 시스템은 (1) RCC 컴퓨팅 시스템(2141)과 RCC 하드웨어 어레이(2190) 사이에, (2) 외부 인터페이스(타겟 시스템과 외부 I/O 장치에 결합됨)와 RCC 하드웨어 어레이(2190) 사이에 트래픽 제어를 제공하는 제어 로직을 포함한다. 소정의 데이터는 소정의 I/O 장치가 RCC 컴퓨팅 시스템으로 모델링될 수 있기 때문에 RCC 하드웨어 어레이(2190)와 RCC 컴퓨팅 시스템(2141) 사이에 전달된다. 부가하여, RCC 컴퓨팅 시스템(2141)은 RCC 하드웨어 어레이(2190)로 모델링된 사용자 설계 부분을 포함하여 전체 소프트웨어 설계의 모델을 구비한다. 결과적으로, RCC 컴퓨팅 시스템(2141)은 또한 외부 인터페이스와 RCC 하드웨어 어레이(2190) 사이에 전달되는 모든 데이터에 액세스를 가져야 한다. 제어 로직은 RCC 컴퓨팅 시스템(2141)이 이러한 데이터에 액세스를 가짐을 보장한다. 제어 로직은 이하에서 보다 상세히 설명될 것이다.
RCC 하드웨어 어레이(2190)는 다수의 어레이 보드를 포함한다. 도 69에 도시된 이러한 특정 실시예에서, 하드웨어 어레이(2190)는 보드(2145-2149)를 포함한다. 보드(2146-2149)는 대부분의 배치된 하드웨어 모델을 포함한다. 보드(2145)(또는 보드 m1)는 공동검증 시스템이 적어도 하드웨어 모델의 일부를 구성하는데 사용할 수 있는 리컨피규러블 컴퓨팅 소자(예를 들어, FPGA 칩)(2153) 및 외부 인터페이스(타겟 시스템과 I/O 장치)와 공동검증 시스템(2140) 사이에 트래픽과 데이터를 보내는 외부 I/O 컨트롤러(2152)를 포함한다. 보드(2145)은 외부 I/O 컨트롤러를 통해, RCC 컴퓨팅 시스템(2141)이 외부 세계(즉, 타겟 시스템 및 I/O 시스템)와 RCC 하드웨어 어레이(2190) 사이에서 전달되는 모든 데이터에 액세스할 수 있게 한다. 이러한 액세스는 공동검증 시스템의 RCC 컴퓨팅 시스템(2141)이 소프트웨어로 되어 있는 전체 사용자 설계의 모델을 포함하고 RCC 컴퓨팅 시스템(2141)이 또한 RCC 하드웨어 어레이(2190)의 기능을 제어할 수 있기 때문에 중요하다.
만약 외부 I/O 장치로부터 나온 스티멀러스가 하드웨어 모델에 제공된다면, 소프트웨어 모델은 또한 마찬가지로 이러한 스티멀러스에 액세스를 가져야 하고, 그 결과 공동검증 시스템의 사용자는 선택적으로 다음 디버그 단계를 제어할 수 있으며, 상기 디버그 단계는 이러한 가해진 가적의 결과로서 설계의 내부 상태 값을 조사하는 단계를 포함한다. 보드 레이아웃과 상호접속 개요와 관련하여 전술한 것과 같이, 제 1 보드와 마지막 보드는 하드웨어 어레이(2190)에 포함된다. 그리하여, 보드 1(보드(2146)로서 라벨링됨) 및 보드 8(보드(2149)로서 라벨링됨)는 8보드 하드웨어 어레이(보드 m1 배제)에 포함된다. 이러한 보드(2145-2149)와 달리, 보드 m2(도 69에 미도시, 도 74 참조)는 또한 칩 m2를 구비하여 제공될 수 있다. 이러한 보드 m2는 보드 m2가 임의의 외부 인터페이스를 갖지 않고 부가적인 보드가 필요하다면 확장 목적으로 사용될 수 있다는 점을 제외하고 보드 m1과 유사하다.
이러한 보드의 내용은 이하에서 설명될 것이다. 보드(2145)(보드 m1)는 PCI 컨트롤러(2151), 외부 I/O 컨트롤러(2152), 데이터 칩(m1)(2153), 메모리(2154) 및 멀티플렉서(2155)를 포함한다. 일 실시예에서, 이러한 PCI 컨트롤러는 PLX 9080이다. PCI 컨트롤러(2151)는 버스(2171)를 통해 RCC 컴퓨팅 시스템(2141)에, 버스(2172)를 통해 3상태 버퍼(2179)에 결합된다.
외부 세계(타겟 시스템(2120) 및 I/O 장치)와 RCC 컴퓨팅 시스템(2141) 사이의 공동검증 시스템에 존재하는 주 트래픽 컨트롤러는 외부 I/O 컨트롤러(2152)(도 69, 71, 및 73에서 "CTRLXM"으로 알려짐)이고, 상기 컨트롤러는 RCC 컴퓨팅 시스템(2141), RCC 하드웨어 어레이의 다른 보드들(2146-2149), 타겟 시스템(2120), 및 실제 외부 I/O 장치에 결합된다. 물론, RCC 컴퓨팅 시스템(2141)과 RCC 하드웨어 어레이(2190) 사이의 주 트래픽 컨트롤러는 전술한 것처럼 항상 각각의 어레이 보드(2146-2149)의 개개의 내부 I/O 컨트롤러들(예를 들어, I/O 컨트롤러(2156 및 2158)과 PCI 컨트롤러(2151)의 결합이었다. 일 실시예에서, 컨트롤러(2156 및 2158)와 같은 이러한 개개의 내부 I/O 컨트롤러는 도 22(유닛(700)) 및 도 56(유닛(1200))과 같은 예시적인 도면에서 설명되고 도시된 FPGA I/O 컨트롤러이다.
외부 I/O 컨트롤러(2152)는 외부 I/O 컨트롤러가 RCC 컴퓨팅 시스템(2141)과 인터페이스할 수 있게 하기 위하여 3상태 버퍼(2179)에 결합된다. 일 실시예에서, 3상태 버퍼(2179)는 소정의 예에서 로컬 버스로부터 나온 데이터가 RCC 컴퓨팅 시스템(2141)으로 전달되는 것을 막으면서 RCC 컴퓨팅 시스템(2141)으로부터 나온 데이터가 로컬 버스(2180)로 전달될 수 있게 하고, 다른 예에서는 데이터가 로컬 버스(2180)으로부터 RCC 컴퓨팅 시스템(2141)로 전달될 수 있게 한다.
외부 I/O 컨트롤러(2152)는 또한 데이터 버스(2176)를 통해 칩(m1)(2153) 및 메모리/외부 버퍼(2154)에 연결된다. 일 실시예에서, 칩(m1)(2153)은 사용자 설계의 하드웨어 모델(또는 사용자 설계가 충분히 소형이면, 모든 하드웨어 모델)의 적어도 일부를 구성하는데 이용될 수 있는 FPGA 칩과 같은 리컨피규러블 컴퓨팅 엘리먼트이다. 외부 버퍼(2154)는 일 실시예에서 DRAM DIMM이며 다양한 목적을 위해 칩(2153)에 의해 이용될 수 있다. 외부 버퍼(2154)는 각각 리컨피규러블 로직 엘리먼트(예를 들어, 리컨피규러블 로직 엘리먼트(2157)에 국부적으로 연결된 개별 SRAM 메모리 소자이상의 많은 메모리 용량을 제공한다. 이러한 큰 메모리 용량은 RCC 컴퓨팅 시스템이 테스트 벤치 데이터, 마이크로컨트롤러용 구현 코드(사용자 설계가 마이크로컨트롤러라면) 및 하나의 메모리 소자의 큰 룩업 테이블과 같은 큰 데이터량을 저장하도록 허용한다. 외부 버퍼(2154)는 또한 상기에 기술된 바와 같이, 하드웨어 모델링에 필요한 데이터를 저장하는데 이용될 수 있다. 필수적으로, 이러한 외부 버퍼(2154)는 더 많은 메모리를 갖지만, 예를 들어 도 56(SRAM(1205, 1206))에서 상기에 기술되고 도시된 다른 하이 또는 로우 뱅크 SRAM 메모리 소자와 부분적으로 유사하게 기능할 수 있다. 외부 버퍼(2154)는 또한 이후에 데이터가 RCC 컴퓨팅 시스템(2141)에 의해 검색될 수 있도록 타겟 시스템(2120) 및 외부 I/O 장치로부터 수신한 데이터를 저장하기 위해 공동검증 시스템에 의해 이용될 수 있다. 칩 m1(2153) 및 외부 버퍼(2154)는 또한 "메모리 시뮬레이션"이란 섹션하에 여기에 기술된 메모리 맵핑 로직을 포함한다.
외부 버퍼(2154)에서 원하는 데이터를 액세스하기 위해, 칩(2153) 및 RCC 컴퓨팅 시스템(2141)(외부 I/O 컨트롤러(2152)를 통해)은 원하는 데이터용 어드레스를 전달할 수 있다. 상기 칩(2153)은 어드레스 버스(2182)상에 어드레스를 제공하고 외부 I/O 컨트롤러(2152)는 어드레스 버스(2177)상에 어드레스를 제공한다. 이러한 어드레스 버스(2182, 2177)는 외부 버퍼(2154)에 연결된 출력 라인(2178)상의 선택된 어드레스를 제공하는 멀티플렉서(2155)에 대한 입력이다. 상기 멀티플렉서(2155)에 대한 선택 신호는 라인(2181)을 통해 외부 I/O 컨트롤러(2152)에 의해 제공된다.
외부 I/O 컨트롤러(2152)는 또한 버스(2180)를 통해 다른 보드(2146-2149)에 연결된다. 일 실시예에서, 버스(2180)는 도 22(로컬 버스(708)) 및 도 56(로컬 버스(1210))의 상기 예시적인 도면에 기술되고 도시된 로컬 버스이다. 이 실시예에서, 5개의 보드(보드(2145)(보드 m1) 포함)만이 이용된다. 보드의 실제 수는 하드웨어에서 모델링될 사용자 설계의 복잡성 및 크기에 의해 결정된다. 매체 복잡도인 사용자 설계의 하드웨어 모델은 고도의 복잡성을 갖는 사용자 설계의 하드웨어 모델보다 적은 보드를 필요로 한다.
범위성을 가능하게 하기 위해, 보드(2146-2149)는 소정의 보드내 상호접속 라인을 제외하고 서로에 대해 실질적으로 동일하다. 이러한 상호접속 라인은 하나의 칩(예를 들어, 보드(2146)의 칩(2157))에서 사용자 설계의 하드웨어 모델의 한 부분이 또 다른 칩(예를 들어, 보드(2148)의 칩(2161))에 물리적으로 위치한 동일한 사용자 설계의 하드웨어 모델의 또 다른 부분과 통신할 수 있게 한다. 간략하게, 도 8 및 36-44와 명세서에서의 도면 설명뿐 아니라, 이러한 공동검증 시스템용 상호접속 구조에 대해 도 74를 참조하라.
보드(2148)는 대표적인 보드이다. 보드(2148)는 (보드(2145)(보드 m1)를 제외) 이러한 4-보드 레이아웃의 제 3 보드이다. 따라서, 상호접속 라인에 대해 적절한 종료를 필요로 하는 엔드-보드가 아니다. 보드(2148)는 내부 I/O 컨트롤러 (2158), 여러 리컨피규러블 로직 엘리먼트(예를 들어, FPGA 칩)(2159-2166), 하이 뱅크 FD 버스(2167), 로우 뱅크 FD 버스(2168), 하이 뱅크 메모리(2169) 및 로우 뱅크 메모리(2170)를 포함한다. 상기에 기술된 바와 같이, 일 실시예에서 내부 I/O 컨트롤러(2158)는 도 22(유닛(700)) 및 도 56(유닛(1200))에서의 예시적인 도면으로 상기 기술되고 도시된 FPGA I/O 컨트롤러이다. 유사하게, 하이 및 로우 뱅크 메모리 소자(2169, 2170)는 예를 들어, 도 56(SRAM(1205, 1206))에서 상기에 기술되고 도시된 SRAM 메모리 소자이다. 일 실시예에서, 하이 및 로우 뱅크 FD 버스(2167, 2168)는 도 22(FPGA 버스(718, 719)), 도 56(FD 버스(1212, 1213)) 및 도 57(FD 버스(1282))에서의 예시적인 도면에 기술되고 도시된 FD 버스 또는 FPGA 버스이다.
공동검증 시스템(2140)을 타겟 시스템(2120) 및 다른 I/O 장치에 결합하기 위해, 외부 I/O 확장기의 형태인 외부 인터페이스(2139)가 제공된다. 타겟 시스템측에서, 외부 I/O 확장기(2139)는 소프트웨어 클럭을 전달하는데 이용되는 2차 PCI 버스(2132) 및 제어 라인(2131)을 통해 PCI 브릿지(2127)에 연결된다. I/O 장치측에서, 외부 I/O 확장기(2139)는 소프트웨어 클럭용 핀-아웃 데이터 및 제어 라인 (2133-2135)에 대해 버스(2136-2138)를 통해 여러 I/O 장치에 연결된다. I/O 확장기(2139)에 결합될 수 있는 I/O 장치의 수는 사용자에 의해 결정된다. 소정 경우에, 많은 데이터 버스 및 소프트웨어 클럭 제어 라인이 외부 I/O 확장기(2139)에 제공됨에 따라, 성공적인 디버그 세션을 실행하기 위해 공동검증 시스템(2140)에 많은 I/O 장치에 연결할 필요가 있다.
공동검증 시스템(2140)측에서, 외부 I/O 확장기(2139)는 데이터 서브(2175), 소프트웨어 클럭 제어 라인(2174) 및 스캔 제어 라인(2173)을 통해 외부 I/O 컨트롤러에 연결된다. 데이터 버스(2175)는 외부 장치(타겟 시스템(2120) 및 외부 I/O 장치)와 공동검증 시스템(2140)간에 핀-아웃 데이터를 전달하는데 이용된다. 소프트웨어 클럭 제어 라인(2174)은 RCC 컴퓨팅 시스템(2141)으로부터 외부 장치로 소프트웨어 클럭 데이터를 전달하는데 이용된다.
제어 라인(2174, 2131)상에 존재하는 소프트웨어 클럭은 RCC 컴퓨팅 시스템 (2141)의 메인 소프트웨어 커널에 의해 발생된다. RCC 컴퓨팅 시스템(2141)은 PCI 버스(2171), PCI 컨트롤러(2151), 버스(2171), 3상 버퍼(2179), 로컬 버스(2180), 외부 I/O 컨트롤러(2152) 및 제어 라인(2174)을 통해 외부 I/O 확장기(2139)에 소프트웨어 클럭을 전달한다. 외부 I/O 확장기(2139)로부터, 소프트웨어 클럭은 (PCI 브릿지(2127)를 통한)타겟 시스템(2120) 및 제어 라인(2133-2135)을 통한 다른 외부 I/O 장치에 대한 클럭 입력으로 제공된다. 소프트웨어 클럭은 메인 클럭 소스로 기능하기 때문에, 타겟 시스템(2120) 및 I/O 장치는 더 느린 속도로 실행한다. 그러나, 타겟 시스템(2120) 및 외부 I/O 장치에 제공된 데이터는 RCC 컴퓨팅 시스템(2141)의 소프트웨어 모델 및 RCC 하드웨어 어레이(2190)의 하드웨어 모델과 같은 소프트웨어 클럭 속도로 동기된다. 유사하게, 타겟 시스템(2120) 및 외부 I/O 장치로부터의 데이터는 소프트웨어 클럭으로 동기된 공동검증 시스템(2140)에 전달된다.
따라서, 외부 인터페이스와 공동검증 시스템간에 전달된 I/O 데이터는 소프트웨어 클럭으로 동기된다. 본질적으로, 소프트웨어 클럭은 데이터가 전달될 때마다 공동검증 시스템(RCC 시스템 및 RCC 하드웨어 어레이)을 갖는 타겟 시스템과 외부 I/O 장치의 동작을 동기시킨다. 소프트웨어 클럭은 데이터 입력 동작 및 데이터 출력 동작 양쪽에 대해 이용된다. 데이터 입력 동작에 대해, 포인터(이후에 논의됨)가 RCC 컴퓨팅 시스템(2141)으로부터 외부 인터페이스로 소프트웨어 클럭을 래칭할 때, 다른 포인터는 외부 인터페이스로부터 RCC 하드웨어 어레이(2190)의 하드웨어 모델에서 선택된 내부 노드로 이러한 I/O 데이터 입력을 래칭시킬 것이다. 한개 단위로, 포인터는 소프트웨어 클럭이 외부 인터페이스에 전달될 때 이러한 사이클동안 상기 I/O 데이터 입력을 래칭시킬 것이다. 모든 데이터가 래칭되면, RCC 컴퓨팅 시스템은 원하는 경우 다른 소프트웨어 클럭 사이클에서 더 많은 데이터를 다시 래칭하기 위해 다른 소프트웨어 클럭을 발생시킬 수 있다. 데이터 출력 동작에 대해, RCC 컴퓨팅 시스템은 외부 인터페이스에 소프트웨어 클럭을 전달할 수 있으며, 후속적으로 RCC 하드웨어 어레이(2190)의 하드웨어 모델의 내부 노드로부터 포인터의 보조로 외부 인터페이스로의 데이터 게이트을 제어할 수 있다. 다시, 한개 단위로, 포인터는 내부 노드로부터 외부 인터페이스로 데이터를 게이트할 것이다. 더 많은 데이터가 외부 인터페이스에 전달될 필요가 있다면, RCC 컴퓨팅 시스템은 또 다른 소프트웨어 클럭 사이클을 발생시킬 수 있으며 그후에 데이터 출력을 외부 인터페이스에 게이트하기 위해 선택된 포인터를 구동시킨다. 소프트웨어 클럭의 발생은 엄격하게 제어되며 따라서 공동검증 시스템이 데이터 전송을 동기시키도록 하며, 공동검증 시스템과 소정의 외부 I/O 장치간의 데이터 평가는 외부 인터페이스에 연결된다.
스캔 제어 라인(2173)은 공동검증 시스템(2140)이 존재할 수 있는 소정 데이터에 대해 데이터 버스(2132, 2136, 2137, 2138)를 스캔하도록 허용하는데 이용된다. 스캔 신호를 지원하는 외부 I/O 컨트롤러(2151)의 로직은 MOVE 신호를 통해 다음 입력으로 이동하기 전에 특정 시간주기동안 여러 입력이 출력으로 제공되는 포인터 로직이다. 이러한 로직은 도 11에 도시된 방식과 유사하다. 효율적으로, 스캔 신호는 라운드 로빈 순서로 멀티플렉서에 여러 입력을 선택하는 경우를 제외하고 멀티플렉서용 선택 신호와 유사하게 기능한다. 따라서, 한번의 시간주기에서, 스캔 제어 라인(2173)상의 스캔 신호는 타겟 시스템(2120)으로부터 발생할 수 있는 데이터용 데이터 버스(2132)를 샘플링한다. 다음의 시간 주기에서, 스캔 제어 라인(2173)상의 스캔 신호는 액세스될 수 있는 외부 I/O 장치에서 발생할 수 있는 데이터용 데이터 버스(2136)를 샘플링한다. 다음의 시간 주기에서, 데이터 버스(2137)는 공동검증 시스템(2140)이 이러한 디버그 세션동안 타겟 시스템(2120) 또는 외부 I/O 장치로부터 발생되는 모든 핀-아웃 데이터를 수신하고 처리할 수 있도록 샘플링된다. 데이터 버스(2132, 2136, 2137, 2138)로부터 공동검증 시스템(2140)에 의해 수신되는 소정 데이터는 외부 I/O 컨트롤러(2152)를 통해 외부 버퍼(2154)에 전송된다.
도 69에 도시된 구성은 타겟 시스템(2120)이 1차 CPU를 포함하며 사용자 설계는 비디오 컨트롤러, 망 어댑터, 그래픽 어댑터, 마우스 또는 소정의 다른 지원 장치, 카드 또는 로직과 같은 소정의 주변 장치임을 가정한다. 따라서, 타겟 시스템 (2120)은 1차 PCI 버스(2129)에 연결된 타겟 애플리케이션(운영 시스템 포함)을 포함하며, 공동검증 시스템(2140)은 사용자 설계를 포함하며 2차 PCI 버스(2132)에 연결된다. 상기 구성은 사용자 설계의 조건에 따라 상당히 달라질 수 있다. 예를 들어, 사용자 설계가 CPU라면, 타겟 시스템(2120)이 더이상 중앙 컴퓨팅 시스템(2121)을 포함하지 않는 반면, 타겟 애플리케이션은 공동검증 시스템(2140)의 RCC 컴퓨팅 시스템 (2141)에서 실행할 것이다. 또한, 버스(2132)는 1차 PCI 버스이며 버스(2129)는 2차 PCI 버스일 것이다. 효율적으로, 사용자 설계가 중앙 컴퓨팅 시스템(2121)을 지원하는 주변 장치 중 하나인 대신, 사용자 설계는 메인 컴퓨팅 센터이며 모든 다른 주변 장치는 사용자 설계를 지원한다.
외부 인터페이스(외부 I/O 확장기(2139))와 공동검증 시스템(2140)간에 데이터를 전송하는 제어 로직은 각 보드(2145-2149)에 설치된다. 제어 로직의 1차 부분은 외부 I/O 컨트롤러(2152)에 형성되지만 다른 부분은 여러 내부 I/O 컨트롤러(예를 들어, 2156, 2158) 및 리컨피규러블 로직 엘리먼트(예를 들어, FPGA 칩(2159, 2165))에 형성된다. 교육의 목적으로, 모든 보드의 모든 칩에 대해 동일한 반복 로직 구조 대신에 이러한 제어 로직의 소정 부분만을 도시할 필요가 있다. 도 69의 점선(2150)내의 공동검증 시스템(2140)의 부분은 제어 로직의 하나의 서브세트를 포함한다. 이러한 제어 로직은 도 70-73에 관해 더욱 상세히 논의될 것이다.
제어 로직의 특정 서브세트의 소자는 외부 I/O 컨트롤러(2152), 3상 버퍼 (2179), 내부 I/O 컨트롤러(2156)(CTRL 1), 리컨피규러블 로직 엘리먼트(2157)(보드 1의 칩 0을 나타내는 chip0_1) 및 상기 소자에 연결되는 여러 버스 및 제어 라인의 부분을 포함한다. 구체적으로, 도 70은 데이터 입력 사이클동안 이용되는 제어 로직의 일부를 도시하며, 상기 외부 인터페이스(외부 I/O 확장기(2139)) 및 RCC 컴퓨팅 시스템(2141)으로부터의 데이터는 RCC 하드웨어 어레이(2190)에 전송된다. 도 72는 데이터 입력 사이클의 타이밍도를 도시한다. 도 71은 데이터 출력 사이클에 이용되는 제어 로직의 부분을 도시하며, RCC 하드웨어 어레이(2190)로부터의 데이터는 RCC 컴퓨팅 시스템(2141) 및 외부 인터페이스(외부 I/O 확장기(2139))에 전송된다. 도 73은 데이터 출력 사이클의 타이밍도를 도시한다.
데이터 입력
본 발명의 일 실시예에 따른 데이터 입력 제어 로직은 RCC 컴퓨팅 시스템 또는 외부 인터페이스로부터 RCC 하드웨어 어레이로 전송된 데이터 처리를 담당한다. 데이터 입력 제어 로직의 하나의 특정 서브세트(2150)(도 69 참조)는 도 70에 도시되며 외부 I/O 컨트롤러(2200), 3상 버퍼(2202), 내부 I/O 컨트롤러(2203), 리컨피규러블 로직 엘리먼트(2204) 및 데이터 전송을 허용하는 여러 버스 및 제어 라인을 포함한다. 외부 버퍼(2201)는 또한 이러한 데이터 입력 실시예에 대해 도시된다. 이러한 서브세트는 데이터 입력 동작에 필요한 로직을 도시하며, 외부 인터페이스 및 RCC 컴퓨팅 시스템으로부터의 데이터는 RCC 하드웨어 어레이에 전송된다. 도 70의 데이터 입력 제어 로직 및 도 72의 데이터 입력 타이밍도는 함께 논의될 것이다.
두개 유형의 데이터 사이클은 본 발명의 이러한 데이터 입력 실시예(글로벌 사이클 및 소프트웨어-대-하드웨어(S2H) 사이클)에 이용된다. 글로벌 사이클은 RCC 하드웨어 어레미의 여러 다른 노드에서 전달되는 소정의 다른 S2H 데이터, 클럭 및 리셋과 같은 RCC 하드웨어 어레이의 모든 칩에 전달되는 소정 데이터에 대해 이용된다. 이러한 후속 "글로벌" S2H 데이터에 대해, 시퀀스적인 S2H 데이터보다는 글로벌 사이클을 통해 이러한 데이터 출력을 전송하는 것이 더 실행가능하다.
소프트웨어-대-하드웨어 사이클은 RCC 컴퓨팅 시스템의 테스트 벤치 프로세스로부터 RCC 하드웨어 어레이로 순차적으로 하나의 칩으로부터 모든 보드의 다른 칩으로 데이터를 전송하는데 이용된다. 사용자 설계의 하드웨어 모델이 여러 보드를 통해 분산되기 때문에, 테스트 벤치 데이터는 데이터 평가를 위해 모든 칩에 제공되어야 한다. 따라서, 데이터는 한번에 하나의 내부 노드로, 각 칩의 각 내부 노드에 순차적으로 전송된다. 순차적 전송은 하드웨어 모델이 다수의 칩간에 분포되기 때문에 특정 내부 노드에 대해 지적된 특정 데이터가 RCC 하드웨어 어레이의 모든 칩에 의해 처리되도록 허용한다.
이러한 데이터 평가에 대해, 공동검증화는 두개의 어드레스 공간(S2H 및 CLK)을 제공한다. 상기에 기술된 바와 같이, S2H 및 CLK 공간은 커널로부터 하드웨어 모델로의 1차 입력이다. 하드웨어 모델은 사용자 회로 설계의 모든 레지스터 컴포넌트 및 결합 컴포넌트를 유지한다. 게다가, 소프트웨어 클럭은 소프트웨어에서 모델링되고 하드웨어 모델과 인터페이싱하기 위해 CLK I/O 어드레스 공간에 제공된다. 커널은 시뮬레이션 시간을 늘리고, 액티브 테스트 벤치 소자를 탐색하고 클럭 컴포넌트를 평가한다. 소정의 클럭 에지가 커널에 의해 검출되면, 레지스터 및 메모리는 업데이트되고 결합 컴포넌트를 통한 값은 전파된다. 따라서, 이러한 공간의 값의 변화는 하드웨어 가속 모드가 선택되면 로직 상태를 변화시키기 위해 하드웨어 모델을 트리거할 것이다.
데이터 전송동안, DATA_XSFR 신호는 로직 "1"에 있다. 이 시간동안, 로컬 버스(2222-2230)는 (1) RCC 컴퓨팅 시스템으로부터 RCC 하드웨어 어레이 및 CLK 공간으로의 글로벌 데이터; (2) 외부 인터페이스로부터 RCC 하드웨어 어레이 및 외부 버퍼로의 글로벌 데이터; 및 (3) 각 보드에서 한번에 한 칩으로 RCC 컴퓨팅 시스템으로부터 RCC 하드웨어 어레이로의 S2H 데이터와 같은 데이터 사이클로 데이터를 전송하기 위해 공동검증 시스템에 의해 이용될 것이다. 따라서, 첫번째 두개 데이터 사이클은 글로벌 사이클의 일부이며 최종 데이터 사이클은 S2H 사이클의 일부이다.
RCC 컴퓨팅 시스템으로부터의 글로벌 데이터가 RCC 하드웨어 어레이로 전송될 때 데이터 입력 글로벌 사이클의 제 1 부분에 대해, 외부 I/O 컨트롤러(2200)는 라인 (2255)상에 CPU_IN 신호를 로직 "1"로 인에이블시킨다. 라인(2255)은 삼상 버퍼 (2202)의 인에이블 입력에 연결된다. 라인(2255)상의 로직 "1"로, 3상 버퍼(2202)는 로컬 버스(2222)상의 데이터가 3상 버퍼(2202)의 다른측상에 로컬 버스(2223-2230)로 전송하도록 허용한다. 이러한 특정 예에서, 로컬 버스(2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230)는 각각 LD3, LD4(외부 I/O 컨트롤러(2200)로부터), LD6(외부 I/O 컨트롤러(22O0)로부터), LD1, LD6, LD4, LD5, LD7에 대응한다.
글로벌 데이터는 이러한 로컬 버스 라인으로부터 내부 I/O 컨트롤러(2203)의 버스 라인(2231-2235) 및 그후에 FD 버스 라인(2236-2240)으로 진행한다. 이 예에서, FD 버스 라인(2236, 2237, 2238, 2239, 2240)은 각각 FD 버스 라인(FD1, FD6, FD4, FD5, FD7)에 대응한다.
이러한 FD 버스 라인(2236-2240)은 리컨피규러블 로직 엘리먼트(2204)의 래치(2208-2213)에 대한 입력에 연결된다. 이 예에서, 리컨피규러블 로직 엘리먼트는 chip0_1(즉, 보드 1의 칩 0)에 대응한다. 또한, FD 버스 라인(2236)은 래치 (2208)에 연결되고, FD 버스 라인(2237)은 래치(2209, 2211)에 연결된다. FD 버스 라인(2238)은 래치(2210)에 연결되고, FD 버스 라인(2239)은 래치(2212)에 연결되며, FD 버스 라인(2240)은 래치(2213)에 연결된다.
이러한 래치(2208-2213) 각각에 대한 인에이블 입력은 여러 글로벌 포인터 및 소프트웨어-대-하드웨어(S2H) 포인터에 연결된다. 래치(2208-2211)에 대한 인에이블 입력은 글로벌 포인터에 연결되고 래치(2212-2213)에 대한 인에이블 입력은 S2H 포인터에 연결된다. 소정의 예시적인 글로벌 포인터는 라인(2241)상의 GLB_PTR0, 라인(2242)상의 GLB_PTR1, 라인(2243)상의 GLB_PTR2 및 라인(2244)상의 GLB_PTR3를 포함한다. 소정의 예시적인 S2H 포인터는 라인(2245)상의 S2H_PTR0 및 라인(2246)상의 S2H_PTR1을 포함한다. 이러한 래치에 대한 인에이블 입력이 이러한 포인터에 연결되기 때문에, 각 래치는 적절한 포인터 신호없이 사용자 설계의 하드웨어 모델의 지정된 목적 모드에 데이터를 래치할 수 없다.
이러한 글로벌 및 S2H 포인터 신호는 출력(2254)상의 데이터 입력 포인터 상태 머신(2214)에 의해 발생된다. 데이터 입력 포인터 상태 머신(2214)은 라인 (2253)상의 DATA_XSFR 및 F_WR에 의해 제어된다. 내부 I/O 컨트롤러(2203)는 라인(2253)상의 DATA_XSFR 및 F_WR을 발생시킨다. DATA_XSFR은 RCC 하드웨어 어레이와 RCC 컴퓨팅 시스템 또는 외부 인터페이스간의 데이터 전송을 원할 때마다 로직 "1"상태로 있다. F_RD 신호와 반대로, F_WR 신호는 RCC 하드웨어 어레이로의 기록을 원할 때마다 로직 "1"에 있다. F_RD 신호를 통한 판독은 RCC 하드웨어 어레이로부터 RCC 컴퓨팅 시스템 및 외부 인터페이스 중 하나로의 데이터 전송을 필요로 한다. DATA_XSFR 및 F_WR 신호 양쪽이 로직 "1"에 있으면, 데이터 입력 포인터 상태 머신은 적절한 프로그램된 시퀀스로 적절한 글로벌 또는 S2H 포인터 신호를 발생시킬 수 있다.
이러한 래치의 출력(2247-2252)은 사용자 설계의 하드웨어 모델의 여러 내부 노드에 연결된다. 내부 노드중 일부는 사용자 설계의 입력 핀-아웃에 해당한다. 사용자 설계는 일반적으로 핀-아웃을 통해 액세스될 수 없는 다른 내부 노드를 가지지만, 이러한 논-핀-아웃 내부 노드는 이들이 입력 핀-아웃인지 아닌지에 관계없이 사용자 설계내 여러 내부 노드에 스티멀러스를 주기를 원하는 설계자에게 융통성을 제공하기 위한 다른 디버깅 목적을 위한 것이다. 사용자 설계의 고도한 하드웨어 모델에 외부 인터페이스를 제공하는 스티멀러스를 위해, 데이터-인 로직 및 입력-핀-아웃에 해당하는 이러한 내부 노드가 수행된다. 예를 들면, 만일 사용자 설계가 CRTC(6845) 비디오 컨트롤러일 때, 몇몇 입력 핀-아웃은 다음과 같다:
LPSTPB - 광펜 스트로브 핀
~RESET - 6845 컨트롤러를 리셋하기 위한 로우 레벨 신호
RS - 레지스터 선택
E - 인에이블
CLK - 클럭
~CS - 칩 선택
다른 입력 핀-아웃은 또한 이러한 비디오 컨트롤러에서 사용될 수 있다. 외부 세계와 인터페이스하는 입력 핀-아웃의 수에 기초하여, 래치와 포인터의 수는 용이하게 결정될 수 있다. RCC 하드웨어 어레이내에 구성된 몇몇 하드웨어 모델은 예를 들면 총 180개의 래치(=30x6)에 대해 각각의 GLB_PTR0, GLB_PTR1, GLB_PTR2, GLB_PTR3, S2H_PTRO 및 S2H_PTR1과 관련된 30개의 분리 래치를 가진다. 다른 설계에서, GLB_PTR4 내지 GLB_PTR30과 같은 더 많은 글로벌 포인터가 필요에 따라 사용될 수 있다. 유사하게, S2H_PTR2 내지 S2H_PTR30과 같은 더 많은 S2H가 필요에 따라 사용될 수 있다. 이러한 포인터들과 이들의 해당 래치는 각각의 사용자 설계의 하드웨어 모델에 대한 요구조건에 기초한다.
도 70 및 도 72를 참조하면, FD 버스 라인상의 데이터는 래치가 적정 글로벌 포인터 또는 S2H 포인터 신호로 인에이블되기만 하면 이러한 내부 노드에 자신을 길을 형성한다. 그렇지 않다면, 이들 내부 노드는 FD 버스상의 임의의 데이터에 의해 구동되지 않는다. F_WR이 CPU_IN=1 시간 주기의 처음 반주기 동안 로직 "1"일 때, GLB_PTR0은 로직 "1"이 되어 라인 2247을 통해 해당 내부 노드로 FD1상의 데이터를 구동한다. 인에이블을 위해 GLB_PTR0에 의존하는 다른 래치가 존재한다면, 이러한 래치는 자신들이 해당 내부 노드에 데이터를 래칭할 것이다. CPU_IN=1 시간 주의 다음 반주기에서, F_WR은 GLB_PTR1이 로직 "1"로 증가되도록 트리거하여 로직 "1"로 간다. 이는 라인 2248에 연결된 내부 노드에 FD6상의 데이터를 구동한다. 이는 또한 래치(2205)에 의해 라인 2216에 래칭될 라인 2223상에 소프트웨어 신호를 송신하고 인에이블 라인 2215에 GLB_PTR1 신호를 송신한다. 소프트웨어 클럭은 외주 클럭 입력, 타겟 시스템 및 다른 외부 I/O 장치로 전달된다. GLB_PTR0 및 GLB_PTR1이 데이터-인 글로벌 사이클의 제 1 부분으로서만 사용되기 때문에, CPU_IN은 로직 "0"으로 되돌아가고, 이는 RCC 컴퓨팅 시스템으로부터 RCC 하드웨어 어레이로 글로벌 데이터의 전달을 완성한다.
데이터-인 글로벌 사이클의 제 2 부분이 설명될 것이고, 여기서 외부 인터페이스로부터의 글로벌 데이터는 RCC 하드웨어 어레이와 외부 버퍼에 전달된다. 다시, 사용자 설계에 맞도록 유도되는 타겟 시스템 또는 외부 I/O 장치로부터의 여러 입력 핀-아웃 신호는 하드웨어 모델과 소프트웨어 모델에 제공되어야만 한다. 이러한 데이터는 적정 포인터를 사용함으로써 하드웨어 모델에 전달되고 내부 노드를 구동하도록 래칭된다. 이러한 데이터는 소프트 웨어 모델의 내부 상태를 업데이팅하기 위해 RCC 연상 시스템에 의한 추후 검색을 위해 외부 버퍼(2201)내에 이들을 가장먼저 저장함으로써 소프트웨어 모델에 전달될 수 있다.
CPU_IN은 로직 "0"이고 EXT_IN은 로직 "1"이다. 따라서, 외부 I/O 컨트롤러 2200내 3상(tri-state) 버퍼(2206)은 버스 라인(2217과 2218)로서 PCI 버스 라인상에 데이터가 올려지도록 인에이블된다. 이러한 PCI 버스 라인은 또한 외부 버퍼 (2201)내 스토리지용 FD 버스 라인 2219에 연결된다. EXT_IN 신호가 로직 "1"일 때의 시간 주기의 처음 반주기에서, GLB_PTR2는 로직 "1"이다. 이는 FD4상의 데이터가 (버스 라인 2217, 2224 및 로컬 버스 라인 2228(LD4)을 통해) 라인 2249에 연결된 하드웨어 모델내 내부 노드로 래칭되도록 래칭한다.
EXT_IN 신호가 로직 "1"일 때의 시간 주기의 다음 반주기동안, GLB_PTR3은 로직 "1"이다. 이는 FD5상의 데이터가 (버스 라인 2218, 2225 및 로컬 버스 라인 2227(LD6)을 통해) 라인 2250에 연결된 하드웨어 모델내 내부 노드로 래칭되도록 래칭한다.
상술된 바와 같이, 타겟 시스템 또는 몇몇 다른 외부 I/O 장치로부터의 이러한 데이터는 소프트웨어 모델의 내부 상태를 업데이팅하기 위해 RCC 컴퓨팅 시스템에 의한 추후 검색을 위해 외부 버퍼(2201)에 이들을 가장 먼저 저장함으로써 소프트웨어 모델로 전달될 수 있다. 버스 라인 2217과 2218상의 이러한 데이터는 외부 버퍼(2201)에 대해 FD 버스 FD[63:0]으로 제공된다. 각각의 데이터가 외부 버퍼 (2201)에 저장되는 특정 메모리 어드레스는 외부 버퍼(2201)에 버스(2220)를 통해 메모리 어드레스 카운터(2201)에 의해 제공된다. 이러한 저장을 가능케 하기 위해, WR_EXT_BUF 신호가 라인 2221을 통해 외부 버퍼(2201)에 제공된다. 외부 버퍼 (2201)가 채워지기 전에, RCC 컴퓨팅 시스템은 적정 업데이트가 소프트웨어 모델로 형성될 수 있도록 외부 버퍼(2201)의 콘텐츠를 판독할 것이다. RCC 하드웨어 어레이내 하드웨어 모델의 여러 내부 노드에 전달된 임의의 데이터는 하드웨어 모델내 몇몇 내부 상태 변화를 야기할 것이다. RCC 컴퓨팅 시스템이 소프트웨어내 전체 사용자 설계의 모델을 가지기 때문에, 하드웨어 모델내 이러한 내부 상태 변화는 소프트웨어 모델내에 반영되어야 한다. 이는 데이터-입력 글로벌 사이클을 마무리한다.
S2H 사이클이 이하에서 설명될 것이다. S2H 사이클은 RCC 컴퓨팅 시스템으로부터 RCC 하드웨어 어레이로 테스트 벤치 데이터를 전달하는데 사용되고, 다음으로 각각의 보드를 위해 하나의 칩으로부터 다음 칩으로 순차적으로 데이터를 이동한다. CPU-IN 신호가 로직 "1"인 반면 EXT_IN 신호는 데이터 전달이 RCC 컴퓨팅 시스템과 RCC 하드웨어 어레이 사이임을 나타내는 로직 "0"으로 간다. 외부 인터페이스는 관련되지 않는다. CPU_IN 신호는 또한 로컬 버스(2222)로부터 내주 I/O 컨트롤러 2203으로 데이터가 통과될 수 있도록 하기 위해 3상 버퍼(2202)를 인에이블시킨다.
CPU_IN=1 시간 주기의 시작시, S2H_PTR0은 라인 2251에 연결된 하드웨어 모델내 내부 노드에 래칭될 (로컬 버스 2222, 로컬 버스 라인 2229, 버스 라인 2234 및 FD 버스 2239를 통해) FD5상에 데이터를 래칭하는 로직 "0"으로 간다. CPU_IN=1 시간 주기의 제 1 부분에서, S2H_PTR1은 라인 2252에 연결된 하드웨어 모델내 내부 노드에 래칭될 (로컬 버스 2222, 로컬 버스 라인 2230, 버스 라인 2235 및 FD 버스 2240을 통해) FD7상에 데이터를 래칭하는 로직 "1"로 간다. 순차적인 데이터 평가 동안, RCC 컴퓨팅 시스템으로부터의 데이터가 칩 m1에 가장 먼저 전달되고, 다음으로 칩0_1(즉, 보드 1상의 칩 0), 칩1)1(즉, 보드 1상의 칩1)로 전달되어 마지막 보드상의 최종 칩, 칩7_8(즉, 보드8상의 칩7)로 전달된다. 만일 칩 m2가 사용 가능하다면, 데이터는 이러한 칩으로 이동될 수 있다.
데이터 전달의 끝에서, DATA_XSFR은 로직 "0"으로 돌아간다. 외부 인터페이스로부터의 I/O 데이터가 글로벌 데이터로서 간주되고 글로벌 사이클 동안 처리된다. 이는 데이터-인 제어 로직 및 데이터-입력 사이클의 결과를 마무리한다.
데이터-아웃
본 발명의 데이터-아웃 제어 로직 실시예가 이하에서 설명된다. 본 발명의 실시예에 따른 데이터-아웃 제어 로직는 RCC 하드웨어 어레이로부터 RCC 컴퓨팅 시스템과 외부 인터페이스로 전달된 데이터를 처리할 책임이 있다. 스티멀러스(외부 또는 그외)에 응답하여 데이터를 처리하는 과정동안, 하드웨어 모델은 타겟 응용 또는 몇몇 I/O 장치가 사용되는 특정 출력 데이터를 발생시킨다. 이러한 출력 데이터는 독립 데이터, 어드레스, 제어 정보 또는 다른 응용이나 장치가 자신의 처리에 필요한 다른 관련 정보일 수 있다. RCC 컴퓨팅 시스템에 대한 이러한 출력 데이터(소프트웨어내 다른 외부 I/O 장치의 모델을 가진), 타겟, 시스템 또는 외부 I/O 장치가 여러 내부 노드에 제공된다. 데이터-인 로직에 대해 상술된 바와 같이, 이러한 내부 노드의 일부가 사용자 설계의 출력 핀-아웃에 해당한다. 사용자 설계는 핀-아웃을 통해 일반적으로 액세스되지 않는 다른 내부 노드를 가지지만, 이러한 논-핀-아웃 내부 노드는 이들이 출력 핀-아웃인지 아닌지에 관계없이 사용자 설계내 여러 내부 노드에서 스티멀러스 응답을 판독하고 분석하길 원하는 설계자에게 융통성을 제공할 다른 디버깅 목적을 위한 것이다. 사용자 설계의 고도한 하드웨어 모델로부터(소프트웨어내 다른 I/O 장치의 모델을 가진) RCC 컴퓨팅 시스템 도는 외부 인터페이스로 제공된 스티멀러스에 대해, 데이터-아웃 로직와 출력 핀-아웃에 해당하는 이러한 내부 노드가 수행된다.
예를 들면, 만일 사용자 설계가 CRTC 6845 비디오 컨트롤러라면, 몇몇 출력 핀-아웃은 다음과 같다:
MA0-MA13 - 메모리 어드레스
D0-D7 - 데이터 버스
DE - 디스플레이 인에이블
CURSOR - 커서 위치
VS - 수직 동기화
HS - 수평 동기화
다른 출력 핀-아웃은 이러한 비디오 컨트롤러에서 사용될 수 있다. 외부 세계와 인터페이스하는 출력 핀-아웃의 수에 기초하여, 노드 수와 이에 따른 게이트 로직와 포인터의 수는 빠르게 결정될 수 있다. 따라서, 비디오 컨트롤러상의 출력 핀-아웃 MA0-MA13은 비디오 RAM용 메모리 어드레스를 제공한다. VS 출력 핀-아웃은 수직 동기화용 신호를 제공하고, 따라서 모니터상의 수직 리트레이스(retrace)를 야기한다. 출력 핀-아웃 D0-D7은 타겟 시스템내 CPU에 의해 내부 6945 레지스터를 액세스하기 위한 양방향 데이터 버스를 형성하는 8개의 단자이다. 이러한 출력 핀-아웃은 하드웨어 모델내 특정 내주 노드에 해당한다. 물론, 이러한 내부 노드의 수와 특성은 사용자 설계에 따라 변한다.
RCC 컴퓨팅 시스템이 소프트웨어내 전체 사용자 설계의 모델을 포함하기 때문에 이러한 출력 핀-아웃 내부 노드는 RCC 컴퓨팅 시스템에 제공되어야 하고, 소프트웨어 모델내에서 발생하는 임의의 경우 해당 변화가 형성될 수 있도록 소프트웨어 모델과 통신하여야 한다. 이러한 방식으로, 소프트웨어 모델은 하드웨어 모델과 일치하는 정보를 가질 것이다. 추가적으로, RCC 컴퓨팅 시스템은 외부 I/O 확장상의 포트중 하나에 실제 장치를 연결시키는 것을 제외하고 소프트웨어내에 모델에 전용된 사용자 또는 설계자인 I/O 장치의 장치 모델을 가진다. 예를 들면, 사용자는 실제 모니터 또는 스피커를 외부 I/O 확장기 포트에 프러깅하는 것을 제외하고 소프트웨어내 모니터 또는 스피커를 모델링하는 것이 더 쉽고 효율적인지를 결정한다. 더욱이, 하드웨어 모델내 이러한 내부 노드로부터의 데이터는 타겟 시스템 및 다른 외부 I/O 장치에 제공되어야 한다. 이러한 출력 핀-아웃 내부 노드가 RCC 컴퓨팅 시스템 및 타겟 시스템과 다른 외부 I/O 장치로 전달될 수 있도록 하기 위해, 본 발명의 일 실시예에 따른 데이터-아웃 제어 로직는 공동인증 시스템내에 제공된다.
데이터-아웃 제어 로직는 RCC 하드웨어(2190)로부터 RCC 컴퓨팅 시스템(2141) 및 외부 인터페이스(외부 I/O 확장기 2139)로의 데이터 전달을 포함하는 데이터-아웃 사이클을 사용한다. 도 69에서, 외부 인터페이스(외부 I/O 확장기 2139)와 공동인증 2140 사이의 데이터 전달을 위한 제어 로직이 각각의 보드(2145-2149)에 보여진다. 제어 로직의 주요부가 외부 I/O 컨트롤러(2152)에서 보여지지만 다른 부분은 여러 내부 I/O 컨트롤러(예를 들면, 2156 및 2158)와 리컨피규러블 제어 엘리먼트(예를 들면, FPGA 칩 2159 및 2165)에서 보여진다. 다시, 기구적인 목적으로, 모든 보드내 모든 칩에 대한 동일한 반복 로직 구조 대신에 이러한 제어 로직의 일부를 도시하는 것만이 필요하다. 도 69의 덤선 2150내 공동인증 시스템 부분 2140은 제어 로직의 서브세트를 포함한다. 이러한 제어 로직는 도 71과 도 73과 관련하여 전반적으로 설명될 것이다. 도 71은 데이터-아웃 사이클에 사용되는 제어 로직을 도시한다. 도 73은 데이터-아웃 사이클의 타이밍 도면을 도시한다.
데이터-아웃 제어 로직의 특정 서브세트가 도 71에 도시되어 있고, 외부 I/O 컨트롤러 2300, 3상 버퍼 2301, 내부 I/O 컨트롤러 2302, 리컨피규러블 로직 엘리먼트 2303 및 여러 버스와 제어 라인을 포함하여 이들 사이의 데이터 전송을 가능케 한다. 이러한 서브세트는 외부 인터페이스와 RCC 컴퓨팅 시스템으로부터의 데이터가 RCC 하드웨어 어레이로 전달되는 데이터-아웃 동작에 필요한 로직를 도시한다. 도 71의 데이터-아웃 제어 로직와 도 73의 데이터-아웃 타이밍 도면이 함께 설명될 것이다.
데이터-아웃 사이클의 두 형태에 비교하여, 데이터-아웃 사이클은 오로지 한 형태의 사이클만을 포함한다. RCC 하드웨어 모델로부터의 데이터가 (1) RCC 컴퓨팅 시스템으로 그리고 (2) RCC 컴퓨팅 시스템과 외부 인터페이스(타겟 시스템과 외부 I/O 장치)로 순차적으로 전달되는 것을 필요로 한다. 특히, 데이터-아웃 사이클은 RCC 하드웨어 어레이내 하드웨어 모델의 내부 노드로부터의 데이터가 RCC 컴퓨팅 시스템에 가장먼저 전달되고 이후 RCC 컴퓨팅 시스템과 각각의 칩내의 외부 인터페이스에 각각의 보드내에서 시간별로 하나의 칩과 하나의 보드에 다음으로 전달되는 것을 요구한다.
데이터-아웃 제어 로직와 같이, 포인터가 내부 노드로부터 RCC 컴퓨팅 시스템과 외부 인터페이스로 데이터를 선택(또는 게이트)하는데 사용될 것이다. 도 71과 도 73에 도시된 실시예에서, 데이터-아웃 포인터 상태 머신(2319)는 하드웨어-하드웨어 데이터 및 하드웨어-외부 인터페이스 데이터 모두를 위해 버스 2359상의 5개의 포인터 H2S_PTR[4:0]을 발생시킨다. 데이터-아웃 포인터 상태 머신(2319)는 라인 2358상의 DATA_XSFR 및 F_RD 신호를 발생시킨다. 내부 I/O 컨트롤러(2302)는 라인 2358상에서 DATA_XSFR 및 F_RD 신호를 생성한다. DATA_XSFR은 RCC 하드웨어 어레이와 RCC 컴퓨팅 시스템 또는 외부 인터페이스 사이의 데이터 전달이 요구될 때마다 항상 로직 "1"이다. F_RD 신호는 F_WR 신호와 비교하여, RCC 하드웨어 어레이로부터의 판독이 요구될 때마다 로직 "1"이다. 만일 DATA_XSFR 및 F_RD가 로직 "1"이라면, 데이터-아웃 포인터 상태 머신(2319)은 적정 프로그램된 시퀀스로 적정 H2S 포인터 신호를 발생시킬 수 있다. 다른 실시예는 사용자 설계에 필요한 더 많은 포인터(또는 더 적은 포인터)를 사용할 수 있다.
이러한 H2S 포인터 신호는 게이트 로직에 제공된다. 게이트 로직로의 입력 세트 2353-2357은 수 개의 AND 게이트 2314-2318로 지향된다. 다른 입력 세트 2348-2352는 하드웨어 모델의 내부 노드에 연결된다. 따라서, AND 게이트(2314)는 내부 노드로부터의 입력(2348) 및 H2S_PTR0로부터의 입력(2353)을 갖으며; AND 게이트(2315)는 내부 노드로부터의 입력(2349) 및 H2S_PTR1로부터의 입력(2354)을 갖으며; AND 게이트(2316)는 내부 노드로부터의 입력(2350) 및 H2S_PTR2로부터의 입력(2355)을 갖으며; AND 게이트(2317)는 내부 노드로부터의 입력(2351) 및 H2S_PTR3로부터의 입력(2356)을 갖으며; AND 게이트(2318)는 내부 노드로부터의 입력(2352) 및 H2S_PTR3로부터의 입력(2357)을 갖는다. 적절한 H2S_PTR 포인터 신호없이, 내부 노드는 RCC 컴퓨팅 시스템 또는외부 인터페이스중 어떤 것에서도 구동될 수 없다.
상기 AND 게이트(2314-2318)의 개별적인 출력(2343-2347)은 OR 게이트(2310-2313)에 결합된다. 따라서, AND 게이트 출력(2343)은 OR 게이트(2310)의 입력에 결합되며; AND 게이트 출력(2344)은 OR 게이트(2311)의 입력에 결합되며; AND 게이트 출력(2345)은 OR 게이트(2312)의 입력에 결합되며; AND 게이트 출력(2346)은 OR 게이트(2313)의 입력에 결합된다. AND 게이트(2315)의 출력(2344)은 비할당된 OR 게이트에서 결합되지 않지만, 출력(2344)은 AND 게이트(2316)의 출력(2345)에 결합된 OR게이트(2311)에 결합됨이 언급된다. OR 게이트(2310-2313)에 대한 다른 입력(2360-2366)은 스스로 다른 내부 노드 및 H2S_PTR 포인터에 결합되는 다른 AND 게이트(비도시)의 출력에 결합된다. 상기 OR 게이트 및 그들의 특정 입력의 사용은 사용자 설계 및 구성된 하드웨어 모델을 기반으로 한다. 따라서, 다른 설계에서, 사용될 수 있는 더 많은 포인터 및 AND 게이트(2315)로부터의 출력(2344)은 OR 게이트(2311)가 아닌 서로 다른 OR 게이트에 결합된다.
OR 게이트(2310-2313)의 출력(2339-2342)은 FD 버스 라인 FD0, FD3, FD1, 및 FD4에 결합된다. 사용자 설계의 특정 예에서, 오직 4개의 출력 핀아웃 신호는 RCC 컴퓨팅 시스템 및 외부 인터페이스에서 전달될 것이다. 따라서, FD0는 OR 게이트(2310)의 출력에 결합되고; FD3는 OR 게이트(2311)의 출력에 결합되고; FD1는 OR 게이트(2312)의 출력에 결합되고; FD4는 OR 게이트(2313)의 출력에 결합된다. 상기 FD 버스 라인은 내부 I/O 컨트롤러(2302)의 내부 라인(2334-2338)를 통해 로컬 버스 라인(2330-2333)에 결합된다. 상기 실시예에서, 로컬 버스 라인(2330)은 LD0이고, 로컬 버스라인(2331)은 LD3이고, 로컬 버스라인(2332)은 LD1이고, 로컬 버스라인(2333)은 LD4이다.
로컬 버스라인(2330-2333)의 데이터가 RCC 컴퓨팅 시스템에 전달되도록 하기 위해, 상기 로컬 버스라인은 3상태 버퍼(2301)에 결합된다. 정규 상태에서 3상태 버퍼(2301)는 데이터가 로컬 버스라인(2330-2333)으로부터 로컬 버스(2320)로 통과하도록 허용한다. 대조적으로, 데이터-인동안, 데이터는 CPU_IN 신호가 3상태 버퍼(2301)에 제공될 때에만 RCC 컴퓨팅 시스템으로부터 RCC 하드웨어 어레이를 통과하도록 허용된다.
상기 로컬 버스라인(2330-2333)의 데이터가 외부 인터페이스에 전달되도록 하기 위해 라인(2321-2324)이 제공된다. 라인(2321)은 라인(2330)및 외부 I/O 컨트롤러(2300)에서의 임의의 래치(비도시)에 결합되며; 라인(2322)은 라인(2331)및 외부 I/O 컨트롤러(2300)에서의 임의의 래치(비도시)에 결합되며; 라인(2323)은 라인(2332)및 외부 I/O 컨트롤러(2300)에서의 래치(2305)에 결합되며; 라인(2324)은 라인(2333)및 외부 I/O 컨트롤러(2300)에서의 래치(2306)에 결합된다.
상기 래치(2305 및 2306)의 각각의 입력은 버퍼 및 타겟 시스템의 적절한 출력 핀-아웃 또는 외부 I/O 에 결합되는 외부 인터페이스에 결합된다. 따라서, 래치(2305)의 출력은 버퍼(2307) 및 라인(2327)에 결합된다. 또한, 래치(2306)의 출력은 버퍼(2308) 및 라인(2328)에 결합된다. 또 다른 래치(비도시)의 또 다른 출력은 라인(2329)에 결합될 수 있다. 상기 예에서, 라인(2327-2329)은 타겟 시스템 또는 임의의 외부 I/O 디바이스의 와이어1, 와이어4, 및 와이어3과 각각 일치한다. 최종적으로, 상기 하드웨어 모델로부터 상기 외부 인터페이스로 데이터를 전송하는 동안, 상기 사용자 설계의 하드웨어 모델은 라인(2350)에 연결되어 있는 내부 노드가 라인(2329)상의 와이어(3)에 상응하며, 라인(2351)에 연결되어 있는 내부 노드는 라인(2327)상의 와이어(1)에 상응하며, 라인(2352)에 연결되어 있는 내부 노드는 아인(2328)상의 와이어(4)에 상응하도록 구성된다. 유사하게, 와이어(3)은 라인(2331)상의 KD3에 상응하며, 와이어(1)은 라인(2332)상의 LD1에 상응하며, 와이어(4)는 라인(2333)상의 LD4에 상응한다.
룩-업 테이블(2309)은 이러한 래치(2305, 2306)으로의 입력에 연결된다. 상기 룩-업 테이블(2309)은 조사표 주소 카운터(2304)의 작동을 트리거하는 라인(2367) 상의 F_RD 신호에 의해 제어된다. 카운터가 각각 증가할 때, 상기 포인터는 룩-업 테이블(2309)의 특정 열을 인에이블한다. 만약 상기 특정 열에서의 엔트리(또는 비트)가 로직 "1"이면, 상기 룩-업 테이블(2309)의 특정 엔트리에 연결되어 있는 LUT 출력 라인은 그것의 상응하는 래치를 인에이블하고 상기 데이터를 상기 외부 인터페이스로 구동하며, 최종적으로는 상기 타겟 시스템 또는 일정한 외부 I/O 기기의 원하는 지점으로 구동한다. 예를 들어, LUT 출력 라인(2325)는 래치(2305)로의 인에이블 입력에 연결되며, LUT 출력 라인(2326)은 래치(2306)으로의 인에이블 입력에 연결된다.
상기 예에서, 룩-업 테이블(2309)의 열(0-3)은 칩 m1의 내부 노드에 대한 출력 핀-아웃 와이어들에 상응하는 인에이블링 래치를 위해 프로그램된다. 유사하게, 열(4-6)은 칩0_1(즉, 보드1의 칩0)의 내부 노드에 대한 출력 핀-아웃 와이어들에 상응하는 인에이블링 래치를 위해 프로그램된다. 열4에서, 비트(3)은 로직"1"이다. 열(5)에서, 비트1은 로직"1"이다. 열(6)에서, 비트(4)는 로직"1"이다. 모든 다른 엔트리들과 비트 위치는 로직"0"이다. 룩-업 테이블의 어느 소정의 비트 위치에 대해, 단일 출력 핀-아웃 와이어은 다중 I/O기기를 구동할 수 없기 때문에, 단지 하나의 엔트리만이 로직"1"이다. 달리 말하면, 하드웨어 모델에서 출력 핀-아웃 내부 노드는 상기 외부 인터페이스에 연결되어 있는 단지 단일 와이어에만 데이터를 제공한다.
상기 언급한 것과 같이, 상기 데이터-아웃 제어 로직은 상기 RCC 하드웨어 모델에 있는 각 칩의 각 구성될 수 있는 로직 컴포넌트의 데이터가 순차적으로 (1) 상기 RCC 컴퓨팅 시스템 및 (2) 상기 RCC 컴퓨팅 시스템 및 상기 외부 인터페이스로(상기 타겟 시스템 및 상기 외부 I/O 기기) 함께 전달되는 것을 요구한다. 상기 RCC 컴퓨팅 시스템은 소프트웨어에서 일정한 I/O 기기의 모델을 가지고 있기 때문에 상기 데이터를 요구하며, 상기 모델링된 I/O 기기 중 하나로 향하지 않는 상기 데이터에 대해서는, 상기 RCC 컴퓨팅 시스템이 그것의 내부 상태가 상기 RCC 하드웨어 어레이의 상기 하드웨어 모델의 그것에 상응하도록 하기 위해 그들을 모니터할 필요가 있다. 도71과 73에서 설명된 예에서, 단지 7개의 내부 노드들이 상기 RCC 컴퓨팅 시스템과 외부 인터페이스로의 출력으로 구동될 것이다. 상기 내부 노드들 중에서 두개는 칩 m1에 있으며, 다른 5개의 내부 노드들은 칩0_1(즉, 보드1의 칩0)에 있다. 물론, 그것들 중에서 다른 내부 노드들과 다은 칩들은 상기 특정 사용자 설계를 이해 요구될 수 있지만, 도71과 73은 단지 7개의 노드들만을 설명하고 있다.
데이터 송신 동안에, 상기 DATA_XEFR 신호는 로직 "1"이다. 상기 시간 동안에, 상기 로컬 버스(2330-2333)은 상기 RCC 하드웨어 어레이에 있는 각 보드의 각 칩으로부터 순차적으로 상기 RCC 컴퓨팅 시스템과 상기 외부 인터페이스로 데이터를 송신하기 위해 종래의 시스템에서 사용될 것이다. 상기 DATA_XSFR과 F_RD 신호들은 상기 출력 핀-아웃 내부 노드로 향하는 적절한 게이트로의 상기 적절한 포인터 신호 H2S_PTR[4:0]을 발생하기 이해 상기 데이터 출력 포인터 상태 머신의 작동을 제어한다. 상기 F_RD 신호는 또한 내부 노드 데이터를 상기 외부 인터페이스로 전송하기 위해 상기 룩-업 테이블 주소 카운터(2304)를 제어한다.
칩 m1에 있는 상기 내부 노드는 처음으로 조정된다. F_RC가 데이터 전송 사이클에서 로직 "1"로 발생되면, 칩 m1에 있는 H2S_PTR0은 로직 "1"로 간다. 이것은 상기 H2S_PTR0에 근거하는 칩 m1의 내부 노드에 있는 데이터를 트라이-상태 버퍼(2301)과 국부 버스(2320)을 통해 상기 RCC 컴퓨팅 시스템으로 구동한다. 룩-업 테이블 어드레스 카운터(2304)가 카운팅되고 룩업 테이블(2309)의 로우(0)를 지시하여 칩 m1 의 적절한 데이터에서 외부 인터페이스로 래칭된다. F_RD 신호가 다시 로직 "1"로 돌아가면, H2S_PTR1에 의해 구동될 수 있는 내부 노드들에서의 데이터는 RCC 컴퓨팅 시스템 및 내부 인터페이스로 전달된다. H2S_PTR1은 로직 "1"로 진행하고 제 2 F_RD 신호에 응답하여, 룩 업 테이블 어드레스 카운터(2304)는 카운팅되고 룩업 테이블(2309)의 로우(1)을 지시하여 칩 m1의 적절한 데이터에서 외부 인터페이스로 래칭된다.
리컨피규러블 로직 엘리먼트(2303)(즉, 보드 1에서의 칩 0_1, 또는 칩 0)가 이제 처리될 것이다. 이러한 예에서, H2S_PTR0 및 H2S_PTR2와 관련된 2개의 내부 노드들은 단지 RCC 컴퓨팅 시스템으로 전달될 것이다. H2S_PTR2, H2S_PTR3, 및 H2S_PTR4와 관련된 3개의 내부 노드들로부터의 데이터는 RCC 컴퓨팅 시스템 및 외부 인터페이스로 전달될 것이다.
F_RD 가 로직 "1"이 되면, 칩(2303)의 H2S_PTR0는 로직 "1"이 된다. 이는 3-상태 버퍼(2301) 및 로컬 버스(2320)를 통해 RCC 컴퓨팅 시스템으로 H2S_PTR0에 의존하는 칩(2303)내의 이러한 내부 노드들을 구동한다. 이러한 예에서, 라인(2348)과 결합된 내부 노드는 라인(2353) 상에서 H2S_PTR0에 의존하는 라인(2348)과 결합된다. F_RD 신호가 다시 로직 "1"이 되면, H2S_PTR1에 의해 구동될 수 있는 내부 노드들에서의 데이터는 RCC 컴퓨팅 시스템으로 전달된다. 여기서, 라인(2349)과 결합된 내부 노드가 영향을 받는다. 이러한 데이터는 라인(2331 및 2322) 상에서 LD3로 구동된다.
F_RD 신호가 다시 로직 "1"이 되면, H2S_PTR2는 로직 "1"이 되고 라인(2350)과 결합된 내부 노드에서의 데이터가 LD3에서 제공된다. 이러한 데이터는 RCC 컴퓨팅 시스템 및 외부 인터페이스 모두에게 제공된다. 3-상태 버퍼(2301)는 데이터가 로컬 버스(2320)로 그리고 나서 RCC 컴퓨팅 시스템으로 전달될 수 있도록 하여준다. 외부 인터페이스에 대해서, 이러한 데이터는 H2S_PTR2 신호를 인에이블 함으로써 라인(2331 및 2322) 상에서 LD3로 구동된다. F_RD 신호에 응답하여, 룩-업 테이블 어드레스 카운터(2304)가 카운팅되고 룩-업 테이블(2309)을 로우(4)를 지시하여 외부 인터페이스에서 라인(2350) - 라인(2329)(와이어3)와 결합된 이러한 내부 노드로부터 적절한 데이터에서 래칭된다.
F_RD 신호가 다시 로직"1"이 되면, H2S_PTR3는 로직"1" 이 되고 라인(2351)과 결합된 내부 노드에서의 데이터가 LD1에서 제공된다. 이러한 데이터는 RCC 컴퓨팅 시스템 및 외부 인터페이스 모두에게 제공된다. 3-상태 버퍼(2301)는 데이터가 로컬 버스(2320)로 그리고 나서 RCC 컴퓨팅 시스템으로 전달될 수 있도록 하여준다. 외부 인터페이스에 대해서, 이러한 데이터는 H2S_PTR3 신호를 인에이블링 함으로써 라인(2332 및 2323) 상에서 LD1로 구동된다. F_RD 신호에 응답하여, 룩-업 테이블 어드레스 카운터(2304)가 카운팅되고 룩-업 테이블(2309)을 로우(5)를 지시하여 외부 인터페이스에서 라인(2351) - 라인(2327)(와이어1)와 결합된 이러한 내부 노드로부터 적절한 데이터에서 래칭된다.
F_RD 신호가 다시 로직"1"이 되면, H2S_PTR4는 로직"1" 이 되고 라인(2352)과 결합된 내부 노드에서의 데이터가 LD4에서 제공된다. 이러한 데이터는 RCC 컴퓨팅 시스템 및 외부 인터페이스 모두에게 제공된다. 3-상태 버퍼(2301)는 데이터가 로컬 버스(2320)로 그리고 나서 RCC 컴퓨팅 시스템으로 전달될 수 있도록 하여준다. 외부 인터페이스에 대해서, 이러한 데이터는 H2S_PTR4 신호를 인에이블링 함으로써 라인(2333 및 2324) 상에서 LD4로 구동된다. F_RD 신호에 응답하여, 룩-업 테이블 어드레스 카운터(2304)가 카운팅되고 룩-업 테이블(2309)을 로우(6)를 지시하여 외부 인터페이스에서 라인(2352) - 라인(2328)(와이어4)와 결합된 이러한 내부 노드로부터 적절한 데이터에서 래칭된다.
RCC 컴퓨팅 시스템으로 칩 m1의 내부 노드에서 데이터를 구동하고 그리고 나서 RCC 컴퓨팅 시스템 및 외부 인터페이스로 데이터를 구동하는 이러한 과정은 다른 칩들에 대해 순차적으로 계속된다. 첫째로, 칩 m1의 내부 노드가 구동된다. 둘째로, 칩0-1(칩2303)의 내부 노드가 구동한다. 다음으로, 존재한다면 칩1-1의 내부 노드가 구동할 것이다. 이것은 상기 마지막 보드의 마지막 칩들에서 마지막 노드가 구동할 때까지 게속된다. 따라서, 존재한다면, 칩7-8의 재부 노드가 구동할 것이다. 마지막으로, 존재한다면 상기 칩 m2의 내부 노드는 구동할 것이다.
비록 도71은 단지 칩(2303)의 내부 노드를 구동하기 위한 상기 데이터 출력 제어 로직을 도시하고 있지만, 다른 칩들은 또한 시스템과 상기 외부 인터페이스를 컴퓨팅하는 상기 RCC로 구동될 필요가 있는 내부 노드들을 가지고 있다. 내부 노드의 수에 무관하게, 상기 데이터 출력 로직은 한 칩에 있는 상기 내부 노드로부터 시스템을 컴퓨팅하는 상기 RCC로 상기 데이터를 구동할 것이며, 또 다른 사이클에 동일한 칩에 있는 내부 노드의 서로 다른 세트를 시스템과 외부 인터페이스를 컴퓨팅하는 상기 RCC로 구동한다. 상기 데이터 출력 제어 로직은 상기 다음 칩으로 이동하며, 시스템을 컴퓨팅하는 상기 RCC로 지정된 데이터를 구동하고 다음으로 상기 외부 인터페이스로 지정된 데이터를 상기 RCC 컴퓨팅 시스템과 내부 인터페이스로 구동하는 동일한 두 단계 연산을 수행한다. 상기 데이터는 상기 외부 인터페이스로 향하도록 되어 있더라도, 상기 RCC 컴퓨팅 시스템은 상기 RCC 하드웨어 어레이에 있는 상기 하드웨어 모델의 내부 상태 정보와 상응하는 내부 상태 정보를 가지고 있어야 하는 소프트웨어에서의 상기 전체 사용자 설계에 대한 모델을 가지고 있기 때문에, 상기 RCC 컴퓨팅 시스템은 상기 데이터에 대한 정보를 가지고 있어야 한다.
보드 레이아웃(Board layout)
본 발명의 일 실시예에 상응하는 공동검증 시스템의 상기 보드 레이아웃은 도74를 참고로 설명될 것이다. 상기 보드들은 상기 RCC 하드웨어 어레이에 인스톨될 수 있다. 상기 보드 레이아웃은 도8과 36-44에서 설명된 것과 다음에서 설명하는 것과 유사하다.
일 실시예에서, 상기 RCC 하드웨어 어레이는 6개의 보드들을 포함한다. 보드 m1은 보드1에 연결되어 있으며, 보드m2는 보드8에 연결되어 있다. 보드1, 보드2, 보드3 및 보드8의 장치와 연결은 도8과 도36-44를 참고로 설명되었다.
보드m1은 칩m1을 포함한다. 다른 보드들에 대해 상기 보드m1의 상호접속 구조는 칩m1이 상기 보드1의 칩0, 칩2, 칩4 및 칩6으로 남쪽(south) 상호접속부에 연결되어 있다. 유사하게, 보드m2은 칩m2을 포함한다. 다른 보드들에 대해 상기 보드m2의 상호접속 구조는 칩m2이 상기 보드8의 칩0, 칩2, 칩4 및 칩6으로 남쪽 상호접속부에 연결되어 있다.
본 발명의 한 실시예의 작동을 설명하기 위해, 가정적인 사용자 회로 설계가 사용될 것이다. 구조화된 레지스터 송신 레벨(RLT) HDL 코드에서, 상기 예시적인 사용자 회로 설계는 다음과 같다.
module register(clock, reset, d, q);
input clock,d,reset;
output q;
reg q;
always@(posedge clock or negedge reset)
if(~reset)
q=0;
else
q=d;
endmodule
module example;
wire d1, d2, d3;
wire q1, q2, q3;
reg sigin;
wire sigout;
reg clk, reset;
register reg1(clk, reset, d1,q1);
register reg2(clk, reset, d2,q2);
register reg3(clk, reset, d3,q3);
assign d1 = sigin ^q3;
assign d2 = q1 ^q3;
assign d3 = q2 ^q3;
assign sigout = q3;
// a clock generator
always
begin
clk = 0;
#5;
clk = 1;
#5;
end
//a signal generator
always
begin
#10;
sigin = $random;
end
//initialization
initial
begin
reset = 0;
sigin = 0;
#1;
reset = 1;
#5;
$monitor($time, "%b, %b," sigin, sigout);
#1000 $finish;
end
end module
상기 코드는 도26에서 나타낸다. 상기 회로 설계의 특정한 기능적인 세세한 부분들은 본 발명을 이해하기 위해 필요없다. 그러나, 독자는 상기 사용자는 시뮬레이션을 위한 회로를 설계하기 위해 상기 HDL 코드를 발생한다는 것을 이해해야 한다. 상기 코드에 의해 표현된 상기 회로는 입력 신호에 응답하여 상기 사용자가 설계한 일정 기능을 수행하며, 출력을 발생한다.
도27은 도26에서 설명된 상기 HDL 코드의 회로도를 도시하고 있다. 대부분의 경우, 상기 사용자는 실제적으로 상기 본질을 HDL 폼에 나타내기 전에 상기 본질의 회로도를 발생한다. 일정한 도식적인 캡쳐 툴은 도식적인 회로도이 입력되고 프로세싱된 후에 상기 유용한 코드를 발생하도록 한다.
도28에 도시되어 있는 것과 같이, 상기 시뮬레이션 시스템은 컴포넌트 타입 분석을 수행한다. 원래 사용자의 특정 회로 설계를 나타내는 도26에 제시되어 있는 것과 같이, 상기 HDL 코드는 현재 분석된다. 상기 "모듈 레지스터(clock, reset, d,q)"으로 시작하고 "endmodule"로 끝나는 코드의 처음 몇 줄(즉, 참조 번호(900)로 식별되는 부분)는 레지스터 정의 섹션이다.
다음 몇 줄의 코드,참조 번호(907),은 와이어 상호접속 정보를 나타낸다. 당업자에게 공지되어 있는 HDL의 와이어 변수는 게이트와 같은 구조적인 실체들 사이에서 물리적인 연결을 나타내는데 사용된다. HDL은 주로 디지털 회로를 모델하는데 사용되기 때문에, 와이어 변수들은 변수를 필요로 한다. 보통, "q"(예들 들어, q1, q2, q3)은 출력 와이어 라인을 나타내며, "d"(예를 들어, d1, d2, d3)는 입력 와이어 라인을 나타낸다.
참조 번호(908)는 테스트-벤치 출력인 "sigin"를 도시한다. 레지스터 번호(909)는 테스트 벤치 입력인 "sigout"를 도시한다.
참조 번호(901)는 레지스터 컴포넌트들(S1, S2 및 S3)을 도시한다. 참조번호(902)는 결합 컴포넌트(S4, S5, S6, S6)를 도시한다. 결합 컴포넌트 S4-S7은 상기 레지스터 컴포넌트 S1-S3으로의 입력인 출력 변수들 d1, d2, d3을 가지고 있다는 것에 유의하여야 한다. 참조번호(903)는 클럭 컴포넌트(S8)를 도시한다.
다음 시리즈의 코드 라인 번호들은 테스트 벤치 컴포넌트들을 도시한다. 참조번호(904)는 테스트 벤치 컴포넌트(드라이버)(S9)를 도시한다. 참조번호(905)는 테스트 벤치 컴포넌트(초기화)(S10, S11)를 도시한다. 참조 번호(904)는 테스트 벤치 컴포넌트(모니터)(S12)를 도시한다.
상기 컴포넌트 타입 분석은 다음의 테이블에서 정리된다.
컴포넌트 타입
S1 레지스터
S2 레지스터
S3 레지스터
S4 결합(combination)
S5 결합
S6 결합
S7 결합
S8 클럭
S9 테스트-벤치(드라이버)
S10 테스트-벤치(초기화)
S11 테스트-벤치(초기화)
S12 테스트-벤치(검사)
상기 컴포넌트 타입 분석에 근거하여, 상기 시스템은 상기 전체 회로를 위한 소프트웨어 모델과 상기 레지스터와 결합 컴포넌트에 대한 하드웨어 모델을 발생한다. S1-S3는 레지스터 컴포넌트들이고 S4-S7은 결합 컴포넌트들이다. 이러한 컴포넌트들은 하드웨어에서 모델되어 시뮬레이션 시스템의 사용자로 하여금 상기 전체 회로를 소프트웨어로 시뮬레이션하거나 또는 소프트웨어로 시뮬레이션하고 선택적으로 하드웨어에서 촉진할 수 있다. 각각의 경우에, 사용자는 시뮬레이션 및 하드웨어 가속 모드를 제어할 수 있다. 추가적으로, 상기 사용자는 시작하고, 중단하고 값들을 조사하고, 입력 값을 사이마다 입력하는 소프트웨어 제어를 유지하면서 타겟 시스템에 의해 상기 회로를 에뮬레이션할 수 있다.
도29는 동일한 구조화된 RTL 레벨 HDL 코드의 신호 네트워크 분석을 도시하고 있다. 도시되어 있는 것과 같이, S8, S9, S10, S11은 모델링되거나 소프트웨어로 제공된다. S9는 본질적으로 사인 신호들을 발생하는 상기 테스트-벤치 프로세스이며, S12는 본질적으로 상기 sigout 신호를 수신하는 상기 테스트벤치 모니터 프로세스이다. 이러한 예에서, 상기 S9는 상기 회로를 시뮬레이션하기 위해 랜덤 사인을 발생한다. 그러나, 레지스터 S1내지 S3 및 결합 컴포넌트 S4 내지 S7은 하드웨어 및 소프트웨어에서 모델링된다.
상기 하드웨어와 소프트웨어의 경계에서, 상기 시스템은 상기 소프트웨어 모델을 상기 하드웨어 모델로 인터페이스하는데 사용되는 여러 잔여 신호들에 대한 메모리 공간을 할당한다.(즉, q1, q2, q3, CLK, sign, sigout). 상기 메모리 공간 할당은 이하의 테이블과 같다:
신호 메모리 주소 공간
q1 REG
q2 REG
q3 REG
clk CLK
sign S2H
sigout H2S
도30은 상기 회로 설계 예에서 하드웨어/소프트웨어 부분 결과를 도시하고 있다. 도30은 상기 하드웨어/소프트웨어 부분에 대한 보다 현실적인 도시예이다. 상기 소프트웨어 측(910)은 상기 소프트웨어/하드웨어 경계(911)와 상기 PCI 버스(913)를 통해 상기 하드웨어 측(912)에 연결된다.
상기 소프트웨어 측(910)는 상기 소프트웨어 커널을 포함하고 있으며, 그것에 의해 제어된다. 일반적으로, 상기 커널은 상기 SEmulation 시스템의 전체 동작을 제어하는 메인 제어 루프이다. 일정한 테스트 벤치 프로세스가 액티브화되어 있는 동안에, 상기 커널은 상기 액티브화된 테스트-벤치 컴포넌트를 에뮬레이션하고 클럭 컴포넌트를 에뮬레이션하며, 결합 로직 데이터를 전파할 뿐만 아니라 레지스터와 메모리를 업데이트하기 위해 클럭 에지를 탐색하여, 상기 시뮬레이션 시간을 진행한다. 상기 커널이 상기 소프트웨어 측에 존재하더라도, 그것의 작동 중 일부분과 명령은 하드웨어 모델이 그러한 명령과 작동을 위해 존재하기 때문에 하드웨어에서 작동할 수 있다. 따라서, 상기 소프트웨어는 소프트웨어와 하드웨어 모델을 모두 제어한다.
상기 소프트웨어 측(910)는 S1-S12를 포함하는 상기 사용자 회로의 전체 모델을 포함하고 있다. 상기 소프트웨어 측의 상기 소프트웨어/하드웨어 경계 부분은 I/O버퍼 또는 주소 공간 S2H, CLK, H2S 및 REG를 포함한다. 드라이버 테스트-벤치 프로세스(S9)는 상기 S2H 주소 공간에 연결되어 있으며, 모니터 테스트 벤치 프로세스(S12)는 상기 H2S 주소 공간에 연결되어 있으며, 상기 클럭 발생기(S8)는 상기 CLK 주소 공간에 연결되어 있다. 상기 레지스터(S1-S3) 출력 신호들(q1-q3)는 REG 공간에 할당될 수 있다.
상기 하드웨어 모델(912)은 결합 컴포넌트(S4-S7)의 모델을 가지고 있는데, 상기 컴포넌트들은 순수한 하드웨어 측에 존재한다. 상기 하드웨어 모델(912)의 상기 소프트웨어/하드웨어 경계 부분에서, sigout, sigin, 레지스터 출력(q1-q3) 및 상기 소프트웨어 클럭(196)이 구현된다.
상기 사용자 회로 설계의 모델에 추가하여, 상기 시스템은 소프트웨어 클럭과 주소 포인터를 발생한다. 상기 소프트웨어 클럭은 레지스터(S1-S3)로의 인에이블 입력에 신호들을 제공한다. 상기 설명한 것과 같이, 본 발명에 상응하는 소프트웨어 클럭은 레이스 조건과 유지 시간 위반 문제를 제거한다. 상기 주요 클럭에 의해 클럭 에지가 소프트웨어에서 탐색될 때, 상기 탐색 로직는 하드웨어에서 상응하는 탐색 로직를 트리거한다. 시간적으로, 상기 클럭 에지 레지스터(916)는 레지스터 인에이블 입력이 상기 레지스터로의 입력에 남아있는 데이터로 게이트하기 위해 인에이블 신호를 발생한다.
주소 포인터(194)는 또한 예시적이고 개념적인 설명을 위해 도시되어 있다. 주소 포인터들은 실제적으로 각 FPGA 칩에서 구현되며, 상기 데이터가 선택적으로 그리고 연속해서 그것의 목적지로 전송되도록 한다.
상기 결합 컴포넌트들(S4-S7)은 또한 레지스터 컴포넌트(S1-S3, sign, sigout)에 연결되어 있다. 이러한 신호들은 상기 I/O 버스(915)상에서 상기 PCI 버스로 및 PCI 버스로부터 이동한다.
맵핑, 정착 및 단계의 라우팅 이전에, 완벽한 하드웨어 모델이 주소 포인터를 제외하고 도31에 도시되어 있다. 상기 시스템은 상기 모델을 특정 칩에 맵하지는 않는다. 레지스터(s1-S3)는 상기 I/O 버스와 상기 결합 컴포넌트(S4-S6)에 연결되지 위해 제공된다. 결합 컴포넌트(S7)는 상기 레지스터(S3)의 출력(q3)이다. 상기 sigin, sigout 및 소프트웨어 클럭(920)은 또한 모델링된다.
일단 상기 하드웨어 모델이 결정되면, 상기 시스템은 맵되고, 정착하며, 상기 모델을 하나 이상의 칩으로 라우팅한다. 이러한 특정 예는 실제적으로 단일 Altera FLEX 10K에서 구현될 수 있지만, 교육적인 목적에서 이러한 에는 상기 하드웨어 모델을 구현하기 위해 두 개의 칩이 요구된다는 것을 생각할 수 있다. 도32는 상기 예를 이한 한 특정 하드웨어 모델에 대한 칩 부분 결과를 도시하고 있다.
도32에서, 점선으로 표현된 칩 경계에 의해 완벽한 모델이 도시되어 있다(다만, 사기 I/O와 클럭 에지 레지스터는 제외된다). 상기 결과는 최종 구조 파일이 발생하기 전에 상기 SEmulation 시스템의 컴파일러에 의해 생산된다. 따라서, 상기 하드웨어 모델은 와이어 라인(921, 922 및 923)을 위한 상기 두 개의 칩들 사이에서 적어도 3개의 와이어을 요구한다. 상기 2개의 칩들(칩1, 칩2)사이에서 요구되는 핀/와이어들의 수를 최소화하기 위해, 또 다른 모델-칩 부분은 발생되어야 하거나 또는 멀티플렉싱 구조가 사용되어야 한다.
도32에 도시되어 있는 상기 특정 부분 결과를 분석할 때, 상기 2개의 칩들 사이에서 와이어의 수는 칩2로부터 칩1로의 sigin 와이어 라인(923)을 제거함으로써 줄어들 수 있다. 도33은 상기 부분을 도시하고 있다. 비록 도33의 상기 특정 부분은 와이어의 수만에 근거하여 도32의 부분보다는 더 좋은 부분으로 보이지만, 상기 예는 상기 SEmulation 시스템이 상기 맵핑, 정착 및 작동 라우팅의 수행 후에 도 32를 선택한 것으로 생각될 수 있다. 도32의 상기 결과 부분은 상기 구조 파일을 발생하는 기본으로 사용될 수 있을 것이다.
도34는 2개의 칩의 최종 실현이 도시되어 있는 상기 동일한 가정적인 예에 대해 상기 로직 패칭 작동을 도시한다. 상기 시스템은 상기 구조 파일을 발생하기 위해 도32의 상기 부분 결과 사용했다. 그러나, 상기 주소 포인터들은 간소화를 위해 도시되지 않는다. 상기 두개의 FPGA 칩들(930, 940)이 도시되어 있다. 칩(930)은 여러 컴포넌트들 중에서 상기 사용자 회로 설계의 분할된 부분들, TDM 유닛(931, 수신기 측), 상기 소프트웨어 클럭(932) 및 I/O 버스(933)를 포함한다. 칩(940)은 여러 컴포넌트들 중에서 상기 사용자 회로 설계의 분할된 부분들, 송신 측를 위한 TDM 유닛(941), 상기 소프트웨어 클럭(942) 및 I/O 버스(943)을 포함한다. 상기 TDM 유닛(931, 941)은 도 9A, 9B, 9C를 참고로 설명되었다.
상기 칩들(930, 940)은 하드웨어 모델을 함께 연결하는 2개의 상호접속 와이어들(944, 945)을 가지고 있다. 이러한 2개의 상호접속 와이어들은 도8에 도시되어 있는 상호접속부이다. 도8을 참고로, 상기 상호접속부는 칩F32와 칩F33에 위치하고 있는 상호접속부(611)이다. 일 실시예에서, 상기 각 상호접속을 위한 와이어/핀들의 최대 수는 44이다. 도34에서, 상기 모델링된 회로는 칩들(930, 940) 사이에서 단지 2개의 와이어/핀들을 요구한다.
상기 칩들(930, 940)은 상기 뱅크 버스(90)에 연결되어 있다. 단지 2개의 칩들이 구현되기 때문에, 2개의 칩들은 동일한 뱅크에 있거나 또는 각각은 서로 다른 뱅크에 존재할 수 있다. 궁극적으로, 한 칩은 하나의 뱅크 버스와 연결되며, 또 다른 칩은 서로 다른 뱅크에 연결되어, 상기 FPGA 인터페이스에서의 출력은 상 기 PCI 인터페이스의 출력과 동일하다.
전술한 본 발명의 바람직한 실시예는 예와 설명을 목적으로 제시된 것이며 개시된 정확한 형태로 상기 발명을 제한하려는 것은 아니다. 명확히, 당업자는 많은 교정과 변화를 가할 수 있다. 당업자는 본 발명의 범위와 정신을 벗어나지 않고 본 발명의 여러 교정을 가할 수 있다. 따라서, 본 발명은 이하 첨부된 청구항에 의해서만 제한된다.

Claims (20)

  1. 주문형 모델링 설계를 위한 VCD(value change dump) 파일을 생성하는 방법으로서,
    상기 모델링 설계의 시뮬레이션의 시뮬레이션 시간 t0에서 시작하여 시뮬레이션 시간 t3에서 종료되는 시뮬레이션 세션 범위를 선택하는 단계;
    상기 모델링 설계의 시뮬레이션의 시뮬레이션 시간 t1에서 시작하여 시뮬레이션 시간 t2에서 종료되는 시뮬레이션 타겟 범위를 선택하는 단계 - 상기 시뮬레이션 시간 t1은 상기 시뮬레이션 시간 t0 보다 크거나 같고, 상기 시뮬레이션 시간 t2는 상기 시뮬레이션 시간 t3 보다 작거나 같음 -;
    상기 모델링 설계의 시뮬레이션의 선택된 상기 시뮬레이션 타겟 범위 동안, 상기 모델링 설계의 VCD 파일을 생성하는 단계; 및
    시뮬레이션되는 상기 모델링 설계를 디버깅하기 위해 상기 시뮬레이션 시간 t1에서 상기 VCD 파일에 직접 액세스하는 단계
    를 포함하는 VCD 파일 생성 방법.
  2. 제 1 항에 있어서,
    상기 모델링 설계에 의한 평가를 위해 상기 모델링 설계에 1차 입력들을 제공함으로써 상기 모델링 설계를 시뮬레이션하는 단계; 및
    상기 시뮬레이션 세션 범위 동안 시뮬레이션 히스토리를 기록하는 단계
    를 더 포함하는, VCD 파일 생성 방법.
  3. 제 2 항에 있어서,
    상기 시뮬레이션 시간 t0로부터 상기 시뮬레이션 시간 t2까지 상기 모델링 설계의 시뮬레이션 히스토리를 평가함으로써 상기 모델링 설계를 시뮬레이션하는 단계를 더 포함하는, VCD 파일 생성 방법.
  4. 체 3 항에 있어서,
    상기 VCD 파일을 생성하는 단계는,
    상기 시뮬레이션 히스토리를 기반으로 상기 모델링 설계로부터 평가된 결과들을 생성하는 단계; 및
    상기 시뮬레이션 타겟 범위 동안 상기 평가된 결과들을 상기 VCD 파일에 저장하는 단계를 더 포함하는, VCD 파일 생성 방법.
  5. 제 4 항에 있어서,
    상기 시뮬레이션 히스토리를 기록하는 단계는,
    상기 1차 입력들을 압축하는 단계; 및
    상기 압축된 1차 입력들을 상기 시뮬레이션 히스토리로서 기록하는 단계를 더 포함하는, VCD 파일 생성 방법.
  6. 제 5 항에 있어서,
    상기 시뮬레이션 히스토리를 처리하는 단계는,
    상기 압축된 1차 입력들을 압축해제하는 단계; 및
    평가를 위해 상기 압축해제된 1차 입력들을 상기 처리되는 시뮬레이션 히스토리로서 상기 모델링 설계에 제공하는 단계를 더 포함하는, VCD 파일 생성 방법.
  7. 제 4 항에 있어서,
    상기 시뮬레이션 히스토리를 기록하는 단계는,
    상기 시뮬레이션 히스토리로서 상기 1차 입력들을 기록하는 단계를 포함하는, VCD 파일 생성 방법.
  8. 제 1 항에 있어서,
    상기 시뮬레이션 시간 t0에서 상기 모델링 설계의 상태 정보를 제 1 파일에 저장하는 단계; 및
    상기 시뮬레이션 시간 t3에서 상기 모델링 설계의 상태 정보를 제 2 파일에 저장하는 단계를 더 포함하는, VCD 파일 생성 방법.
  9. 사용자 설계를 검증하기 위한 전자 설계 자동화 시스템으로서,
    상기 사용자 설계의 시뮬레이션을 위해, 소프트웨어의 사용자 설계를 모델링하기 위한 중앙 처리 유닛(CPU) 및 메모리를 포함하는 컴퓨팅 시스템;
    상기 컴퓨팅 시스템에 연결되는 내부 버스 시스템;
    상기 사용자 설계의 시뮬레이션을 위해, 상기 내부 버스 시스템에 연결되고 하드웨어의 사용자 설계의 적어도 일부를 모델링하기 위한 리컨피규러블(reconfigurable) 하드웨어 로직;
    상기 리컨피규러블 하드웨어 로직과 상기 컴퓨팅 시스템간의 데이터 전달을 제어하기 위해 상기 내부 버스 시스템에 연결되는 제어 로직; 및
    선택된 시뮬레이션 세션 범위 동안 시뮬레이션 히스토리를 기록하고, 선택된 시뮬레이션 타겟 범위 동안 하드웨어 모델로부터 상태 정보를 VCD 파일로 덤핑(dumping)하기 위한 주문형 VCD 로직 - 상기 시뮬레이션 타겟 범위는 상기 시뮬레이션 세션 범위내에 있음 -
    을 포함하는 전자 설계 자동화 시스템.
  10. 제 9 항에 있어서,
    상기 주문형 VCD 로직은,
    시뮬레이션 시간 t0에서 시작하여 시뮬레이션 시간 t3에서 종료되는 시뮬레이션 세션 범위를 선택하기 위한 제 1 범위 선택 로직;
    시뮬레이션 시간 t1에서 시작하여 시뮬레이션 시간 t2에서 종료되는 시뮬레이션 타겟 범위를 선택하기 위한 제 2 범위 선택 로직 - 상기 시뮬레이션 시간 t1은 상기 시뮬레이션 시간 t0 보다 크거나 같고, 상기 시뮬레이션 시간 t2는 상기 시뮬레이션 시간 t3 보다 작거나 같음 -;
    상기 선택된 시뮬레이션 타겟 범위 동안 상기 사용자 설계의 VCD 파일을 생성하기 위한 덤프(dump) 로직; 및
    상기 사용자 설계를 디버깅하기 위해 상기 시뮬레이션 시간 t1에서 상기 VCD 파일에 직접 액세스하기 위한 액세스 로직
    을 더 포함하는, 전자 설계 자동화 시스템.
  11. 제 10 항에 있어서,
    상기 주문형 VCD 로직은,
    상기 사용자 설계에 의한 평가를 위해 상기 사용자 설계에 1차 입력들을 제공함으로써 상기 사용자 설계를 시뮬레이션하기 위한 테스트 벤치 프로세스; 및
    상기 시뮬레이션 세션 범위 동안 시뮬레이션 히스토리를 기록하기 위한 상기 컴퓨팅 시스템의 기록 로직
    을 더 포함하는, 전자 설계 자동화 시스템.
  12. 제 11 항에 있어서,
    상기 주문형 VCD 로직은,
    상기 시뮬레이션 시간 t0에서 상기 시뮬레이션 시간 t2까지 상기 사용자 설계의 시뮬레이션 히스토리를 평가함으로써 상기 사용자 설계를 시뮬레이션하기 위한 상기 리컨피규러블 하드웨어 로직의 평가 로직
    을 더 포함하는, 전자 설계 자동화 시스템.
  13. 제 12 항에 있어서,
    상기 덤프 로직은 상기 시뮬레이션 타겟 범위 동안 상기 시뮬레이션 히스토리를 기반으로 상기 사용자 설계로부터의 평가 결과들을 상기 VCD 파일로 덤핑하는, 전자 설계 자동화 시스템.
  14. 제 13 항에 있어서,
    상기 기록 로직은,
    상기 1차 입력들을 압축하기 위한 압축 로직; 및
    상기 압축된 1차 입력들을 상기 시뮬레이션 히스토리로서 라이트(write)하기 위한 라이트 로직
    을 더 포함하는, 전자 설계 자동화 시스템.
  15. 제 14 항에 있어서,
    상기 처리 로직은,
    상기 압축된 1차 입력들을 압축해제하기 위한 압축해제 로직; 및
    평가를 위해 상기 압축해제된 1차 입력들을 상기 시뮬레이션 히스토리로서 상기 사용자 설계로 전달하기 위한 데이터 전달 로직
    을 더 포함하는, 전자 설계 자동화 시스템.
  16. 제 13 항에 있어서,
    상기 기록 로직은 상기 시뮬레이션 히스토리로서 상기 1차 입력들을 라이트하기 위한 라이트 로직을 더 포함하는, 전자 설계 자동화 시스템.
  17. 제 9 항에 있어서,
    시뮬레이션 시간 t0에서 상기 사용자 설계의 상태 정보를 제 1 파일에 저장하고, 시뮬레이션 시간 t3에서 상기 사용자 설계의 상태 정보를 제 2 파일에 저장하기 위한 상태 저장 로직을 더 포함하는, 전자 설계 자동화 시스템.
  18. 시뮬레이션 시간들의 선택된 시뮬레이션 타겟 범위 동안 시뮬레이션되는 모델링 설계로부터 평가 정보를 제공하기 위한 주문형 VCD 시스템으로서,
    시뮬레이션 시간 t0에서 시작하여 시뮬레이션 시간 t3에서 종료되는 시뮬레이션 세션 범위를 선택하기 위한 제 1 로직;
    시뮬레이션 시간 t1에서 시작하여 시뮬레이션 시간 t2에서 종료되는 시뮬레이션 타겟 범위를 선택하는 제 2 로직 - 상기 시뮬레이션 시간 t1은 상기 시뮬레이션 시간 t0 보다 크거나 같고, 상기 시뮬레이션 시간 t2는 상기 시뮬레이션 시간 t3 보다 작거나 같음 -;
    상기 선택된 시뮬레이션 타겟 범위 동안, 상기 평가 정보의 VCD 파일을 생성하기 위한 생성 로직; 및
    상기 모델링 설계를 디버깅하기 위해 상기 시뮬레이션 시간 t1에서 상기 VCD 파일에 직접 액세스하기 위한 액세스 로직
    을 포함하는 주문형 VCD 시스템.
  19. 제 18 항에 있어서,
    상기 시뮬레이션 세션 범위의 시간주기 동안, 1차 입력 데이터를 수신하여 압축하기 위한 압축 로직; 및
    상기 압축된 1차 입력 데이터를 압축해제하고, 상기 압축해제된 1차 입력 데이터를 평가를 위해 상기 모델링 설계로 전달하기 위한 압축해제 로직
    을 더 포함하는, 주문형 VCD 시스템.
  20. 제 19 항에 있어서,
    상기 생성 로직은 평가되는 정보를 상기 VCD 파일로 덤핑하기 위한 덤프 로직을 더 포함하며, 상기 평가되는 정보는 상기 모델링 설계에 의해 상기 압축해제된 1차 입력들을 평가함으로써 생성되는, 주문형 VCD 시스템.
KR1020037002218A 2001-08-14 2001-08-14 주문형 vcd 시스템 및 방법 KR100928134B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2001/025558 WO2003017099A1 (en) 2001-08-14 2001-08-14 Vcd-on-demand system and method

Publications (2)

Publication Number Publication Date
KR20040028598A KR20040028598A (ko) 2004-04-03
KR100928134B1 true KR100928134B1 (ko) 2009-11-25

Family

ID=21742775

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020037002218A KR100928134B1 (ko) 2001-08-14 2001-08-14 주문형 vcd 시스템 및 방법

Country Status (7)

Country Link
EP (1) EP1417577A4 (ko)
JP (1) JP4102752B2 (ko)
KR (1) KR100928134B1 (ko)
CN (1) CN1308819C (ko)
CA (1) CA2420027C (ko)
IL (3) IL160392A0 (ko)
WO (1) WO2003017099A1 (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005093575A1 (en) * 2004-03-09 2005-10-06 Seiyang Yang Dynamic-verification-based verification apparatus achieving high verification performance and verification efficency and the verification methodology using the same
JP2007305137A (ja) * 2006-05-12 2007-11-22 Samsung Electronics Co Ltd 分配された同時的シミュレーション
US10210162B1 (en) 2010-03-29 2019-02-19 Carbonite, Inc. Log file management
US9715325B1 (en) 2012-06-21 2017-07-25 Open Text Corporation Activity stream based interaction
WO2014038030A1 (ja) * 2012-09-06 2014-03-13 株式会社日立製作所 協調シミュレーション用計算機システム、組込みシステムの検証システム及び組込みシステムの検証方法
US9208008B2 (en) 2013-07-24 2015-12-08 Qualcomm Incorporated Method and apparatus for multi-chip reduced pin cross triggering to enhance debug experience
KR101660580B1 (ko) 2014-04-02 2016-09-28 프레스티지 바이오파마 피티이. 엘티디. 항체의 당 함량 조절을 통한 항체의 제조 방법
WO2015200211A1 (en) 2014-06-22 2015-12-30 Webroot Inc. Network threat prediction and blocking
US10289686B1 (en) 2015-06-30 2019-05-14 Open Text Corporation Method and system for using dynamic content types
CN109426518B (zh) * 2017-08-29 2021-02-19 杭州旗捷科技有限公司 单核处理器设备的并行写码方法、电子设备、存储介质
US10728034B2 (en) 2018-02-23 2020-07-28 Webroot Inc. Security privilege escalation exploit detection and mitigation
CN109710536B (zh) * 2018-12-29 2022-03-18 湖北航天技术研究院总体设计所 一种自动提取fpga软件验证结果仿真波形的系统及方法
CN109740250B (zh) * 2018-12-29 2022-03-18 湖北航天技术研究院总体设计所 基于uvm的fpga软件验证结果仿真波形的获取方法和系统
US11314863B2 (en) 2019-03-27 2022-04-26 Webroot, Inc. Behavioral threat detection definition and compilation
CN111125975B (zh) * 2019-12-09 2024-06-14 上海思尔芯技术股份有限公司 一种fpga时分复用多路数据传输的方法、存储介质及终端
CN112486076B (zh) * 2020-12-08 2022-02-15 长光卫星技术有限公司 一种多fpga间时钟同步与复位同步系统
CN113342697B (zh) * 2021-07-19 2022-08-26 英韧科技(上海)有限公司 闪存转换层仿真测试系统及方法
US20240070345A1 (en) * 2022-08-30 2024-02-29 Rockwell Automation Technologies, Inc. Parallel emulation for controls testing

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6083269A (en) 1997-08-19 2000-07-04 Lsi Logic Corporation Digital integrated circuit design system and methodology with hardware
US6249891B1 (en) 1998-07-02 2001-06-19 Advantest Corp. High speed test pattern evaluation apparatus

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6009256A (en) * 1997-05-02 1999-12-28 Axis Systems, Inc. Simulation/emulation system and method
JP3506202B2 (ja) * 1997-06-30 2004-03-15 住友電装株式会社 基板用コネクタ
US6061283A (en) * 1998-10-23 2000-05-09 Advantest Corp. Semiconductor integrated circuit evaluation system
US6678645B1 (en) * 1999-10-28 2004-01-13 Advantest Corp. Method and apparatus for SoC design validation

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6083269A (en) 1997-08-19 2000-07-04 Lsi Logic Corporation Digital integrated circuit design system and methodology with hardware
US6249891B1 (en) 1998-07-02 2001-06-19 Advantest Corp. High speed test pattern evaluation apparatus

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
KATZ et al., A New Paradigm in Test for Next Millenium, ITC International Test Conference, Proceedings, 2000, pages 468-476.
LIU et al. CHIEN-NAM JIMMY, "A Novel Approach for Functional Coverage Measurement in HDL" The 2000 IEEE International Symposium on Circuits and Systems, ISCAS 2000, 2000.05, pages 217-220.

Also Published As

Publication number Publication date
IL154481A (en) 2008-03-20
EP1417577A4 (en) 2009-08-26
IL154481A0 (en) 2003-09-17
IL160392A0 (en) 2004-07-25
JP2005500618A (ja) 2005-01-06
KR20040028598A (ko) 2004-04-03
CA2420027C (en) 2012-01-03
CN1308819C (zh) 2007-04-04
EP1417577A1 (en) 2004-05-12
WO2003017099A1 (en) 2003-02-27
CN1491385A (zh) 2004-04-21
CA2420027A1 (en) 2003-02-27
JP4102752B2 (ja) 2008-06-18

Similar Documents

Publication Publication Date Title
JP4125675B2 (ja) タイミングに鈍感なグリッチのない論理システムおよび方法
US7512728B2 (en) Inter-chip communication system
US6321366B1 (en) Timing-insensitive glitch-free logic system and method
US6785873B1 (en) Emulation system with multiple asynchronous clocks
US6810442B1 (en) Memory mapping system and method
US6389379B1 (en) Converification system and method
US9195784B2 (en) Common shared memory in a verification system
US7480606B2 (en) VCD-on-demand system and method
US6651225B1 (en) Dynamic evaluation logic system and method
US6754763B2 (en) Multi-board connection system for use in electronic design automation
US6134516A (en) Simulation server system and method
US6026230A (en) Memory simulation system and method
US6421251B1 (en) Array board interconnect system and method
US6009256A (en) Simulation/emulation system and method
KR100928134B1 (ko) 주문형 vcd 시스템 및 방법
KR100483636B1 (ko) 에뮬레이션및시뮬레이션을이용한설계검증방법및장치
JP2005011344A (ja) ネットワークベースの階層エミュレーションシステム

Legal Events

Date Code Title Description
PA0105 International application

Patent event date: 20030214

Patent event code: PA01051R01D

Comment text: International Patent Application

PG1501 Laying open of application
N231 Notification of change of applicant
PN2301 Change of applicant

Patent event date: 20060303

Comment text: Notification of Change of Applicant

Patent event code: PN23011R01D

A201 Request for examination
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20060808

Comment text: Request for Examination of Application

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20071109

Patent event code: PE09021S01D

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20080627

Patent event code: PE09021S01D

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20090416

Patent event code: PE09021S01D

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20091028

GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20091116

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20091116

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
LAPS Lapse due to unpaid annual fee
PC1903 Unpaid annual fee

Termination category: Default of registration fee

Termination date: 20131009