KR20040028599A - 타이밍-비민감성 글리치 없는 로직 시스템 및 방법 - Google Patents

타이밍-비민감성 글리치 없는 로직 시스템 및 방법 Download PDF

Info

Publication number
KR20040028599A
KR20040028599A KR10-2003-7002219A KR20037002219A KR20040028599A KR 20040028599 A KR20040028599 A KR 20040028599A KR 20037002219 A KR20037002219 A KR 20037002219A KR 20040028599 A KR20040028599 A KR 20040028599A
Authority
KR
South Korea
Prior art keywords
hardware
logic
clock
software
input
Prior art date
Application number
KR10-2003-7002219A
Other languages
English (en)
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 액시스 시스템즈, 인크.
Priority claimed from PCT/US2001/025546 external-priority patent/WO2003017148A1/en
Publication of KR20040028599A publication Critical patent/KR20040028599A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • G06F30/331Design verification, e.g. functional simulation or model checking using simulation with hardware acceleration, e.g. by using field programmable gate array [FPGA] or emulation
    • 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/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)
  • Debugging And Monitoring (AREA)

Abstract

여기에 제시된 장치들은 타이밍 인센서티브 글리치-프리(TIGF) 논리 장치에 대한 다양한 형태들에 관한 것이다. TIGF 논리 장치는 임의의 래치 또는 에지-트리거된 플립플롭의 형태를 취할 수 있다. 일 실시예에서, 트리거 신호는 TIGF 논리 장치를 갱신하기 위해 제공된다. 이러한 트리거 신호는 평가 주기로부터 인접한 시간에서 발생하는 짧은 트리거 주기 동안 제공된다. 래치 형태에서, TIGF 래치는 트리거 신호가 수신되기까지 TIGF 래치의 현재 상태를 홀딩하는 플립-플롭을 포함한다. 새로운 입력 값 및 이전에 저장된 값을 수신하기 위해 멀티플렉서가 제공된다. 인에이블 신호는 멀티플렉서에 대한 선택 신호로서 기능한다. 트리거 신호는 TIGF 래치의 갱신을 제어하기 때문에, TIGF 래치에 대한 D 입력에서의 데이터 및 인에이블 입력에서의 제어 데이터가 홀드 타입 위반을 겪지 않고 임의의 순서로 도달할 수 있다. 또한, 트리거 신호는 TIGF 갱신을 제어하기 때문에, 인에이블 신호는 TIGF 패치의 적절한 작동에 부정적인 영향을 끼침이 없이 종종 글리치(glitch)된다. 플립-플롭 형태에서, TIGF 플립-플롭은 새로운 입력값을 홀딩하는 제1 플립 플롭, 현재 저장된 값을 홀딩하는 제2 플립-플롭, 및 클록 에지 검출기를 포함한다. 이러한 3개의 컴포넌트들 모두는 TIGF 플립-플롭을 갱신하기 위해 트리거 신호에 의해 제어된다. 멀티플렉서에는 또한 선택 신호로서 작용하는 에지 검출기 신호가 제공된다. 하나의 전용 제1 플립-플롭이 평가기간 동안 입력 변화를 효과적으로 차단하는 새로운 입력을 저장하기 때문에, 홀드 타임 위반이 피해질 수 있다. TIGF 플립-플롭 갱신을 제어하는 트리거 신호를 통해, 클록 글리치는 에뮬레이트된 플립-플롭으로서 TIGF 플립-플롭을 사용하는 사용자 디자인 회로의 하드웨어 모델에 영향을 미치지 않게 된다.

Description

타이밍-인센서티브 글리치-프리 논리 시스템 및 방법{TIMING-INSENSITIVE GLITCH-FREE LOGIC SYSTEM AND METHOD}
일반적으로, 전자 설계 자동화(EDA, electronic design automation)는 사용자의 주문 회로 설계를 설계하고 검증하기 위한 자동 또는 반자동 툴을 설계자에게 공급하기 위하여 다양한 워크스테이션에서의 컴퓨터 기반을 구성된 툴이다. EDA는 일반적으로 시뮬레이션, 에뮬레이션, 견본형성, 실행 또는 연산을 목적으로 임의의 전자 설계를 창조하고, 분석하며 편집하기 위하여 사용된다. EDA기술은 또한 사용자 설계 서브 시스템 또는 컴포넌트를 사용할 시스템(타겟 시스템)을 개발하는데 사용된다. EDA의 최종 목적은 전형적으로 추상적인 집적회로 또는 인쇄회로 기판의 형태의, 즉 원형 설계의 정신을 유지하면서 원형 설계에 대한 개선인, 수정되고 보강된 설계이다.
하드웨어 에뮬레이션에 앞서는 회로 설계의 소프트웨어 시뮬레이팅의 가치는 EDA 기술을 사용하고 EDA 기술의 이점을 이용하는 여러 가지 산업에서 인식되어 있다. 그럼에도 불구하고, 현재 소프트웨어 시뮬레이션 및 하드웨어 에뮬레이션/가속화는 이들 처리의 분리되고 독립적인 성질때문에 사용자에게 번거로운 것이다. 예컨대, 사용자는 모든 하나의 디버그/테스트 세션에 있어서 시간의 일부분 동안 소프트웨어 시뮬레이션을 이용하여 회로 설계를 디버그하거나 시뮬레이션하고, 그들 결과를 이용하여 다른 시간동안 하드웨어 모델을 이용하여 시뮬레이션 프로세스를 가속화하며, 나중에는 소프트웨어 시뮬레이션으로 되돌아간다. 게다가, 시뮬레이션 시간이 진행됨에 따라서 내부 레지스터와 조합 논리값이 변화하기 때문에, 사용자는 그 변화가 하드웨어 가속화/에뮬레이션 프로세스 동안 하드웨어 모델에 발생한다 하더라도 이들 변화를 모니터링할 수 있어야 한다.
코시뮬레이션(Co-simulation)은 두개의 분리되고 독립적인 순수 소프트웨어 시뮬레이션 프로세스와 순수 에뮬레이션/가속화 프로세스를 이용하는 번거로운 성질에 있어서의 몇가지 문제점을 바로잡고, 전반적인 시스템을 보다 사용자 친화적으로 만들 필요성에서 발생되었다. 그러나, 코시뮬레이션은 여전히 몇가지 결점이 있다: (1)코시뮬레이션 시스템은 수동 분할(manual partitioning)을 필요로 하고, (2)코시뮬레이션은 두개의 소결합 엔진을 사용하며, (3)코시뮬레이션 속도는 소프트웨어 시뮬레이션 속도만큼 느리며, (4)코시뮬레이션 시스템은 레이스 컨디션과 충돌한다.
우선, 소프트웨어와 하드웨어 사이의 분할은 자동적으로 행해지는 대신에 수동적으로 행해지고, 더욱이 사용자에게는 부담이다. 본질적으로, 코시뮬레이션은 사용자가 설계를 분할(가동레벨에서 시작하여, 그리고 나서 RTL, 및 게이트 레벨)하고, 소프트웨어와 하드웨어 중에서 매우 큰 기능 블럭으로 상기 모델을 그들 스스로 테스트하는 것을 요구한다. 이러한 제한은 사용자에게 어느 정도 복잡한 것을 요구한다.
두 번째로, 코시뮬레이션 시스템은 두개의 소결합 및 독립 엔진을 이용하며, 이것은 내부 엔진 동기화, 조정, 및 유연성 이슈를 유발한다. 코시뮬레이션은 두개의 다른 검증 엔진 - 소프트웨어 시뮬레이션 및 하드웨어 에뮬레이션의 동기화를 요구한다. 소프트웨어 시뮬레이션쪽이 하드웨어 가속화쪽에 연결되어 있다고 해도, 외부의 핀아웃 데이터(pin-out data)만이 검사 및 로딩에 유용하다. 레지스터에서의 모델 회로 내부의 값과 조합 논리 레벨은 용이한 검사 및 한쪽에서 다른 한쪽으로의 다운로딩에 있어서 유용하지 않으며, 이들 코시뮬레이션 시스템의 이용을 제한한다. 전형적으로 사용자는 사용자가 소프트웨어 시뮬레이션에서 하드웨어 가속화로 전환하여 되돌린다면 전체 설계를 다시 시뮬레이션해야 할 수도 있다. 따라서, 사용자가 단일 디버그 세션 동안 소프트웨어 시뮬레이션과 하드웨어 에뮬레이션 사이에서 전환을 원하는 한편, 레지스터와 조합 논리값을 검사할 수 있다면, 코시뮬레이션 시스템은 이러한 능력을 제공하지 않는다.
세번째로, 코시뮬레이션 속도는 시뮬레이션 속도만큼 느리다. 코시뮬레이션은 두개의 다른 검증엔진- 소프트웨어 시뮬레이션 및 하드웨어 에뮬레이션의 동기화를 요구한다. 각각의 엔진은 시뮬레이션 또는 에뮬레이션을 구동하기 위한 그자신의 제어 메커니즘을 가진다. 이것은 소프트웨어와 하드웨어 사이의 동기화가 전체적인 성능을 소프트웨어 시뮬레이션만큼 낮은 속도로 추진한다는 것을 의미한다. 이들 두개의 엔진의 동작을 조정하기 위한 부가적인 부담이 코시뮬레이션 시스템의 낮은 속도에 부가된다.
네번째로, 코시뮬레이션 시스템은 클럭 신호 사이의 레이스 컨디션에 기인한 셋업, 유지시간 및 클럭 글릿치 문제에 직면한다. 코시뮬레이션은 하드웨어 구동 클럭을 이용하며, 그것은 서로 다른 배선 길이로 인하여 다른 시간에서 다른 논리 소자에 대하여 입력에서 찾아낼 수 있다. 이들 논리 소자가 데이터를 함께 평가하여야 하는 경우, 이것은 임의의 논리소자가 임의의 시간 기간에서 데이터를 평가하고 다른 논리소자가 다른 시간 기간에서 데이터를 평가하기 때문에 평가 결과의 불확실성을 초래한다.
따라서, 현재 알려진 시뮬레이션 시스템, 하드웨어 에뮬레이션 시스템, 하드웨어 가속화, 코시뮬레이션, 및 공동 검증(coverification) 시스템에 의해 유발된 문제점을 바로 잡는 시스템 및 방법에 대한 필요성이 산업 분야에 존재한다.
본 발명은 1997년 5월 2일에 미국특허청(USPTO)에 제출된 미국 특허 출원 제08/850,136호의 일부 연속 출원(CIP)과 관련된 출원이다.
본 발명은 전자 설계 자동화(EDA)에 관련된 것이다. 특히, 본 발명은 시뮬레이션, 하드웨어 가속, 및 커버피케이션(coverfication)을 포함하는 다양한 애플리케이션들에서 홀드 타임 및 클록 글리치 문제들을 취급하는 디지털 논리 장치에 관한 것이다.
도 1은 워크스테이션, 재구성가능한 하드웨어 에뮬레이션 모델, 에뮬레이션 인터페이스 및 PCI 버스에 결합된 타겟 시스템을 포함하는, 본 발명의 하나의 실시예의 상위 개략도를 나타내고,
도 2는 본 발명의 하나의 특정된 이용 흐름도를 나타내며,
도 3은 본 발명의 일실시예에 따라 컴파일링 시간 및 런타임동안 소프트웨어 컴파일레이션 및 하드웨어 구성의 상위도를 나타내며,
도 4는 소프트웨어/하드웨어 모델 및 소프트웨어 커널 코드 발생을 포함하는 컴파일레이션 프로세스의 흐름도를 나타내고,
도 5는 전체 SEmulation 시스템을 제어하는 소트프웨어 커널을 나타내며,
도 6은 맵핑, 배치, 및 라우팅을 통하여 하드웨어 모델을 재구성가능보드에 맵핑하는 방법을 나타내고,
도 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는 본 발명의 일실시예를 따라서 타이밍에 영향을 받지 않고 글릿치가 없는 래치 및 플립플롭의 트리거 메카니즘의 타이밍도를 나타낸다.
이들 특징은 본 발명의 여러가지 다양한 태양 및 실시예와 관련하여 이하에서 논의될 것이다.
본원발명은 소위 "세뮬레이션(SEmulation) 시스템" "세뮬레이터(SEmulator) 시스템" 으로 불려지는 유연하고 고속의 시뮬레이션/에뮬레이션 시스템, 또는 재구성 계산 시스템(RCC 계산 시스템) 및 재구성 하드웨어 어레이(RCC 하드웨어 어레이)를 포함하는 커버리피케이션(Coverification) 시스템 형태에서의 앞서 언급된문제점들에 대한 해결책을 제공한다.
본원발명의 세뮬레이션 시스템 및 방법은 시뮬레이션을 위해 사용자들의 전기적 시스템 디자인들을 소프트웨어 및 하드웨어 표현들로 전환하는 능력을 사용자들에게 제공한다. 일반적으로, 세뮬레이션 시스템은 소프트웨어 제어된 에뮬레이터 또는 하드웨어-가속된 시뮬레이터이고, 그 방법은 여기에 사용되는 방법이다. 따라서, 순수한 소프트웨어 시뮬레이션이 가능하지만, 시뮬레이션은 하드웨어 모델의 사용을 통해 가속될 수도 있다. 또한 인-회로 에뮬레이션 모드가 회로의 타겟 시스템 환경에서 사용자 회로 디자인을 테스트하기 위해 제공될 수 있다. 또한, 소트트웨어 제어가 이용될 수 있다.
사용자가 시작, 중지, 값들의 어써트(assert), 값들의 조사 및 다양한 모드들 사이에서의 스위칭할 수 있도록 함으로써 사용자에 대한 보다 큰 런-타임 유연성을 제공하기 위해 소프트웨어 및 하드웨어 모델들 모두를 제어하는 소프트웨어 커널이 본 시스템의 핵심이다. 이러한 커널은 리지스터들에 대한 인에이블 입력들을 통해 하드웨어에서의 데이터 평가를 제어함으로써 다양한 모드들을 제어한다.
본원발명에 따른 세뮬레이션 시스템 및 방법은 4개의 동작 모두를 제공한다: (1) 소프트웨어 시뮬레이션, (2) 하드웨어 가속을 통한 시뮬레이션, (3) 인-회로 에뮬레이션(ICE), 및 (4) 포스트(Post)-시뮬레이션 분석. 상위레벨에서, 본원발명은 상기 4개의 모드들 각각에서 또는 다음과 같이 이러한 모드들의 다야한 조합에 의해 실행된다: (1) 소프트웨어 시뮬레이션 단독 (2) 하드웨어 가속을 통한 시뮬레이션 단독 (3) 인 - 회로 에뮬레이션(ICE) 단독 (4) 포스트-시뮬레이션 단독 (5)소프트 시뮬레이션 및 하드웨어 가속을 통한 시뮬레이션 (6) 소프트웨어 시뮬레이션 및 ICE (7) 하드웨어 가속을 통한 시뮬레이션 및 ICE (8) 소프트웨어 시뮬레이션, 하드웨어 가속을 통한 시뮬레이션 및 ICE (9) 소프트웨어 시뮬레이션 및 포스트-시뮬레이션 분석 (10) 하드웨어 가속을 통한 시뮬레이션 및 포스트-시뮬레이션 분석 (11) 소프트웨어 시뮬레이션, 하드웨어 가속을 통한 시뮬레이션 및 포스트-시뮬레이션 분석 (12)ICE 및 포스트-시뮬레이션 분석 (13) 소프트웨어 시뮬레이션, ICE, 포스트-시뮬레이션 분석 (14) 하드웨어 가속을 통한 시뮬레이션, ICE, 포스트 시뮬레이션 분석 (15) 소프트웨어 시뮬레이션, 하드웨어 가속을 통한 시뮬레이션, ICE 및 포스트-시뮬레이션 분석. 다른 조합들 역시 가능하며, 이 역시 본원발명의 영역에 포함된다.
각각의 모드 또는 그 모드들의 조합은 다음 특징 또는 특징들의 조합을 제공한다: (1)수동 또는 자동으로 모드들 사이의 스위칭 (2)용법-사용자는 모드들 사이에서 스위치할 수 있고, 시작, 중단, 값 어서트, 값 조사, 및 시뮬레이션 또는 에뮬레이션 과정을 통해 단일 단계 사이클을 수행할 수 있음 (3)소프트웨어 모델 및 하드웨어 모델들을 발생시키기 위한 편집 과정 (4)일 실시예에서 시스템을 초기화하고, 확성 테스트 밴치 프로세스/컴포넌트들을 평가하고, 클록 컴포넌트들을 평가하고, 클록 에지를 검출하고, 리지터들 및 메모리들을 갱신하고, 조합 컴포넌트들을 전달하고, 시뮬레이션 시간을 앞당기고, 활성 테스트 벤치 프로세스가 존재하는 한 이러한 루프를 계속하는 단계들을 포함하는 주 제어 루프를 통해 모든 모드들을 제어하는 소프트웨어 커널 (5)하드웨어 모델들을 발생시키기 위한 컴포넌트 타입분석 (6) 일 실시예에서 클러스터링, 배치, 및 라우터링을 통해 재구성 보드들에 하드웨어 모델들을 매핑시킴 (7) 일 실시예에서 게이트된 클록 논리 분석 및 게이트논 데이터 논리 분석을 통해 레이스(race) 상태들을 피하도록 소프트웨어 클록 셋-업 (8) 하드웨어 모델에서 인에이블 신호를 트리거하고, 게이트된 클록 논리를 통해 주요 클록으로부터 클록 에지 레지스터의 클록 입력으로 신호를 전송하고, 클록 인에이블 신호를 하드웨어 모델 레지스터의 인에이블 입력으로 전송하고, 하드웨어 모델의 레지스터들의 인에이블 입력으로의 클록 인에이블 신호를 디스에이블링하는 클록 에지 레지스터를 리셋하기 위해 소프트웨어 모델의 클록 에지 검출을 통해 소프트웨어 클록 실행 (9) 디버스 세션들 및 포스트-시뮬레이션 분석을 위한 로그 선택적 데이터 (10) 조합 논리 재발생 (11)일 실시예에서, 기본 빌딩 블록은 비동기 입력들 및 동기 입력들을 갖는 D-타입 레지스터임 (12) 각 칩에서의 어드레스 포인터들 (13) 멀티플렉싱된 크로스 칩 어드레스 포인터 체인 (14) FPGA 칩들의 어레이 및 그들의 상호접속 방식 (15) PCI 버스 시스템의 성능을 트랙팅하는 버스를 갖는 FPGA 칩들의 뱅크들(banks) (16) 피기백(piggyback) 보드들을 통한 확장을 허용하는 FPGA 뱅크들 (17) 최적 핀 사용을 위한 시분할 멀티플렉싱(TDM) 회로. 본원발명은 이러한 다양한 실시예들을 통해 상기한 특징들 이외의 여기서 논의된 다양한 특징들을 제공한다.
본원발명의 일 실시예는 시뮬레이션 시스템이다. 이러한 시뮬레이션 시스템은 회로의 동작을 시뮬레이팅하는 호스트 컴퓨터에서 동작한다. 이러한 호스트 컴퓨터 시스템은 중앙 처리 유닛(CPU), 주 메모리, 및 주 메모리와 CPU를 연결하고CPU 와 주 메모리 사이의 통신을 허용하는 로컬 버스를 포함한다. 이러한 회로는 컴포넌트 타입 및 연결들로서 회로를 기술할 수 있는 HDL과 같은 하드웨어 언어에서 규정된 구조 및 기능을 갖는다. 시뮬레이션 시스템은 소프트웨어 모델, 소프트웨어 제어 로직 및 하드웨어 로직 엘리먼트를 포함한다.
회로의 소프트웨어 모델은 로컬 버스에 연결된다. 일반적으로, 상기 모델은 메인 메모리에 상주한다. 소프트웨어 제어 로직은 소프트웨어 모델 및 하드웨어 로직 엘리먼트의 동작을 제어하기 위해 소프트웨어 모델과 하드웨어 로직 엘리먼트에 연결된다. 소프트웨어 제어 로직은 외부 프로세스로부터 입력 데이터 및 클록 신호를 수신할 수 있는 인터페이스 로직 및 클록 신호의 능동 에지를 검출하고 트리거 신호를 발생시키는 클록 검출 로직을 포함한다. 상기 하드웨어 로직 엘리먼트는 또한 로컬 버스에 연결되며 소자 유형에 기초하여 회로의 적어도 일부분의 하드웨어 모델 및 트리거 신호에 응답하여 하드웨어 모델에서 데이터를 평가하는 클록 인에이블 로직을 포함한다.
하드웨어 로직 엘리먼트는 또한 어레이 또는 함께 연결된 다수의 필드 프로그램가능 장치를 포함한다. 각 필드 프로그램가능 장치는 회로의 하드웨어 모델의 일부분을 포함하며, 따라서, 모든 필드 프로그램가능 장치의 결합은 전체 하드웨어 모델을 포함한다. 다수의 상호접속부는 또한 하드웨어 모델의 부분을 함께 결합한다. 각 상호접속은 동일한 행 또는 열에 위치한 두개의 필드 프로그램가능 장치간의 직접 접속을 나타낸다. 어레이의 상기 두개 필드 프로그램가능 장치간의 최단 경로는 두개 상호접속 또는 "홉(hop)"이다.
본 발명의 또 다른 실시예는 회로가 소프트웨어에 모델링되며 상기 회로의 적어도 일부분이 하드웨어 모델링되는 경우에 회로를 시뮬레이팅하는 시스템 및 방법이다. 데이터 평가는 하드웨어에서 발생하지만 소프트웨어 클록을 통해 소프트웨어에서 제어된다. 평가되는 데이터는 하드웨어 모델로 전파되고 안정화된다. 소프트웨어 모델이 능동 클록 에지를 검출하면, 상기 소프트웨어 모델은 데이터 평가를 구동하기 위해 인에이블 신호를 하드웨어 모델에 전송한다. 하드웨어 모델은 데이터를 평가하고 그후에 소프트웨어 모델에서 다음의 능동 클록 에지 신호 검출시에 평가될 수 있는 새로운 수신 데이터를 대기한다.
본 발명의 또 다른 실시예는 소프트웨어 모델 및 하드웨어 모델의 동작을 제어하는 소프트웨어 커널을 포함한다. 소프트웨어 커널은 능동 테스트 벤치 프로세스/소자를 평가하는 단계, 클록 소자를 평가하는 단계, 클록 에지를 검출하는 단계, 레지스터 및 메모리를 검출하는 단계, 결합 소자를 전달하는 단계, 시뮬레이션 시간을 증대하는 단계 및 능동 테스트 벤치 프로세스가 존재하는한 루프를 계속하는 단계를 포함한다.
본 발명의 부가 실시예는 회로가 HDL과 같은 하드웨어 언어에서 특정된 구조 및 기능을 갖는 경우에 회로를 시뮬레이팅하는 방법이다. 하드웨어 언어는 또한 회로를 소자로 기술하거나 감소시킬 수 있다. 상기 방법은 (1) 하드웨어 언어의 소자 유형을 결정하는 단계; (2) 소자 유형에 기초한 회로의 모델을 발생시키는 단계; 및 (3) 입력 데이터를 모델에 제공함으로써 상기 모델을 갖는 회로의 동작을 시뮬레이팅하는 단계를 포함한다. 모델을 발생시키는 단계는, (1) 회로의 소프트웨어 모델을 발생시키는 단계; 및 (2) 소자 유형에 기초하여 회로의 하드웨어 모델을 발생시키는 단계를 포함한다.
또 다른 실시예에서, 본 발명은 회로를 시뮬레이팅하는 방법이다. 상기 방법은 (1) 회로의 소프트웨어 모델을 발생시키는 단계; (2) 회로의 하드웨어 모델을 발생시키는 단계; (3) 입력 데이터를 소프트웨어 모델에 제공함으로써 소프트웨어 모델을 갖는 회로의 동작을 시뮬레이팅하는 단계; (4) 상기 하드웨어 모델을 선택적으로 스위칭하는 단계; (5) 입력 데이터를 상기 하드웨어 모델에 제공하는 단계; 및 (6) 상기 하드웨어 모델의 시뮬레이션을 가속함으로써 하드웨어 모델을 갖는 회로의 동작을 시뮬레이팅하는 단계를 포함한다. 상기 방법은 또한 (1) 선택적으로 소프트웨어 모델로 스위칭하는 단계; 및 (2) 입력 데이터를 상기 소프트웨어 모델에 제공함으로써 상기 소프트웨어 모델을 갖는 회로의 동작을 시뮬레이팅하는 단계를 더 포함한다. 상기 시뮬레이션은 또한 상기 소프트웨어 모델에 의해 중단될 수 있다.
상기 인-회로 에뮬레이션 모드에서, 상기 방법은 (1)상기 회로의 소프트웨어 모델을 발생하는 단계; (2) 상기 회로의 적어도 일부분에 대한 하드웨어 모델을 발생하는 단계; (3) 상기 목표 시스템으로부터 상기 하드웨어 모델로 입력 신호를 제공하는 단계; (4) 상기 하드웨어 모델로부터 상기 목표 시스템으로 출력 신호를 제공하는 단계; (5) 상기 호로의 동작을 상기 하드웨어 모델로 시뮬레이트하는 단계로서, 상기 소프트웨어 모델은 사이클별로 상기 시뮬레이션과 에뮬레이션을 제어할 수 있는 단계를 포함한다.
상기 포스트-시뮬레이션 분석에서, 상기 회로를 시뮬레이션하는 방법은 (1)상기 회로의 모델을 발생하는 단계; (2) 입력 데이터를 상기 모델로 제공함으로써 상기 모델에 의해 상기 회로의 동작을 시뮬레이트하는 단계; (3) 상기 모델로부터 포인트들을 로그할 때 선택적인 입력과 선택적인 출력을 로깅하는 단계를 포함한다. 상기 방법은 또한 (1) 상기 시뮬레이션에서 원하는 시간 의존 포인트를 선택하는 단계; (2) 상기 선택된 시간 의존 포인트에서 또는 이전에 로그 포인트를 선택하는 단계; (3) 입력 데이터를 상기 하드웨어 모델에 제공하는 단계; (4) 상기 선택된 로그 포인트로부터 상기 하드웨어 모델에 의해 상기 회로의 동작을 시뮬레이트하는 단계를 포함한다.
본 발명의 또 다른 실시예는 회로를 시뮬레이트하기 위해 시뮬레이션 시스템에 대한 모델을 발생하는 방법이다. 상기 단계들은 (1) 상기 회로의 시뮬레이션을 발생하는 단계; (2) 레지스터 구성요소와 결합 구성요소를 포함하고 있는 구성요소 타입에 근거하여 상기 회로의 적어도 부분에 대한 하드웨어 모델을 발생하는 단계; (3) 상기 소프트웨어 모델의 클록 에지 탐색에 응답하여 하드웨어 모델의 데이터 평가를 트리거하기 위해 상기 하드웨어 모델에서 클록 발생 회로를 발생하는 단계를 포함한다.
본 발명의 여러 실시예는 상기 표준 디자인 플립-플롭과 래치를 대신하는 특별히 설계된 논리 기기에 의해 상기 문제들을 해결한다. 본 발명의 한 실시예는 타이밍 인센서티브 글리치-프리(TIGF) 논리 기기이다. 상기 TIGF 논리 기기는 일정한 래치의 형태 또는 에지-트리거된 플립 플롭의 형태를 취한다. 본 발명의 한실시예에서, 트리거 신호는 상기 TIGF 논리 기기를 업데이트하기 위해 제공된다. 상기 트리거 신호는 상기 평가 주기로부터의 인접 시간에서 발생하는 짧은 주기 동안에 제공된다.
래치 형태에서, 상기 TIGF 래치는 트리거 신호가 수신될 때가지 상기 TIGF 래치의 현 상태를 유지하는 플립-플롭을 포함한다. 멀티플렉서는 또한 새로운 입력 값과 예전에 저장된 값을 수신하기 위해 제공된다. 상기 인에이블 신호는 상기 멀티플렉서를 위한 상기 선택된 신호로서 작동한다. 상기 트리거 신호는 상기 TIGF 래치의 업데이트를 제어하는데 사용되기 때문에, 상기 인에니블 입력에서 상기 제어 데이터는 유지 기간 방해를 받지 않고 일정한 순서로 도달할 수 있다. 또한 , 상기 트리거 신호는 상기 TIGF 업데이트를 제어하기 때문에, 상기 인에이블 신호는 상기 TIGF 래치의 적절한 작동에 부정적인 영향을 미치지 않으면서 종종 글리치될 수 있다.
플립-플롭 형태에서, 상기 TIGF 플립-플롭은 새로운 입력 값을 가지고 있는 제1 플립-플롭, 현재 저장된 값을 유지하고 있는 제2 플립-플롭, 및 클록 에지 탐색기를 포함한다. 이러한 구성요소들 모두는 상기 TGIF 플립-플롭을 업데이트하기 위해 상기 트리거 신호에 의해 제어된다. 멀티플렉서는 또한 상기 선택기 신호로 작동하는 상기 에지 탐색기 신호에 의해 제공된다. 하나의 전용 제1 플립-플롭은 평가 동안에 입력 변화를 효율적으로 제한하는 새로운 입력 값을 저장하기 때문에, 유지 시간 방해는 피해진다. 상기 TIGF 플립-플롭 업데이트를 제어하는 트리거 신호에 의해, 클록 글린치는 상기 TIGF 플립-플롭을 이뮬레이트된 플립-플롭으로 사용하는 상기 사용자 설계 회로의 상기 하드웨어 모델에 영향을 미치지 않는다.
이러한 그리고 다른 실시예들은 다음의 상세한 설명 섹션에서 자세히 설명되고 있다.
본 발명의 상기 목적 및 상세한 설명은 이하의 본문과 첨부 도면으로부터 보다 명백하게 이해될 것이다.
본 명세서는 "SEmulator"또는 "SEmulation" 시스템으로 칭하는 시스템의 배경을 통하여 그리고 시스템의 배경내에서 본 발명의 다양한 실시예를 설명할 것이다. 명세서 전반에 걸쳐, "SEmulator system", "SEmulator" 또는 단순히 시스템이라는 용어가 사용될 수 있다. 이들 용어는 (1) 소프트웨어 시뮬레이션, (2) 하드웨어 가속화를 통한 시뮬레이션, (3) 회로 내 에뮬레이션(ICE) 및, (4) 그들 각각의 셋업 또는 전-처리 단계를 포함하는 후-시뮬레이션 분석;의 4가지 동작 모드의 임의의 조합을 위한 본 발명에 따라는 다양한 장치 및 방법 실시예를 언급한 것이다. 다른 때는, "SEmulation"이라는 용어가 사용될 수 있다. 이 용어는 여기에서 설명되는 새로운 프로세스를 언급한다.
유사하게, 재구성가능한 컴퓨팅(RCC, reconfigurable computing) 어레이 시스템, 또는 RCC 컴퓨팅 시스템과 같은 용어는 메인 프로세서, 사용자 설계의 소프트웨어 커널 및 소프트웨어 모델을 포함하는 시뮬레이션/공동 검증 시스템 부분을 언급한다. "재구성 가능한 하드웨어 어레이" 또는 "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 시스템의 메인 프로그램 으로서 기능한다. 임의의 테스트 벤치 프로세스가 작동하는 한, 커널은 능동 테스트 벤치 컴포넌트를 평가하고, 클럭 컴포넌트를 평가하며, 클럭 에지를 검출하여 조합 논리 데이터 뿐만 아니라 레지스터와 메모리를 업데이트하며, 시뮬레이션 타임을 진척시킨다. 이러한 소프트웨어 커널은 하드웨어 가속 엔진과 엄격하게 결합된 특성의 시뮬레이션 엔진을 위해 제공된다. 소프트웨어/하드웨어 경계에 있어서, SEmulator 시스템은 많은 I/O 어드레스 공간 - REG(레지스터), CLK(소프트웨어 클럭), S2H(소프트웨어 대 하드웨어) 및 H2S(하드웨어 대 소프트웨어)를 제공한다.
SEmulator는 4개 모드의 동작 중에서 선택적으로 전환할 수 있는 능력을 가진다. 이러한 시스템의 사용자는 시뮬레이션을 시작하고, 시뮬레이션을 중단하며, 입력값을 주장하고, 값을 검사하며, 사이클마다 단일 단계를 진행하며, 4개의 다른 모드 사이에서 전후 전환한다. 예컨대, 상기 시스템은 시간 기간 동안 소프트웨어로 회로를 시뮬레이팅하고, 하드웨어 모델을 통한 시뮬레이션을 가속하며, 소프트웨어 시뮬레이션 모드를 다시 되돌릴 수 있다.
일반적으로 SEmulation 시스템은 사용자에게 그것이 소프트웨어로 모델링하거나 하드웨어로 모델링하는지에 상관없이 모든 모델링된 컴포넌트를 인식할 수 있는 능력을 제공한다. 여러가지의 이유로, 조합 컴포넌트는 레지스터와 같이 가시적이지 않으며, 따라서 조합 컴포넌트 데이터의 획득은 어렵다. 하나의 이유는, 실제의 조합 컴포넌트 대신에, 전형적으로는 룩업 테이블(LUT)과 같은 조합 컴포넌트를 사용자 회로설계의 하드웨어 부분을 모델링하기 위하여 재구성가능한 보드내에사용되는 FPGA가 모델링한다는 것이다. 따라서, SEmulation 시스템은 레지스터 값을 판독하여, 조합 컴포넌트를 재발생시킨다. 조합 컴포넌트를 발생시키는데 있어서 부담이 조금 있으므로, 이러한 재발생 프로세스는 항상 수행되는 것은 아니며, 오히려, 사용자의 요청에 의해서만 행해진다.
소프트웨어 커널은 소프트웨어 측에 존재하기 때문에, 클럭 엣지 검출 메카니즘은 하드웨어 모델내의 다양한 레지스터로 작동 입력을 구동하는 소위 소프트웨어 클럭의 발생을 트리거하도록 제공된다. 그 타이밍은 소프트웨어 클럭 작동 신호가 이들에 대한 데이터의 모델링 전에 레지스터 모델로 진입하도록 이중 버퍼 회로 실행을 통하여 엄격하게 제어된다. 일단 이들 레지스터 모델에 대한 데이터 입력이 안정화되면, 소프트웨어 클럭은 유지시간의 침해의 어떠한 위험도 없이 모든 데이터 값이 함께 게이트되는 것을 보장하기 위하여 동시에 데이터를 게이트한다.
시스템은 모든 입력값 및 선택된 레지트터값/상태만을 로그하기 때문에 소프트웨어 시뮬레이션은 또한 신속하며, 따라서 I/O 동작 수를 감소시킴으로써 부담은 경감된다. 사용자는 선택적으로 로깅 주파스를 선택할 수 있다.
B. 타겟 시스템 모드에 의한 에뮬레이션
SEmulation 시스템은 그 타겟 시스템 환경내에서 사용자의 회로를 에뮬레이팅할 수 있다. 타겟 시스템은 평가용 하드웨어 모델에 데이터를 출력하고, 하드웨어 모델은 또한 타겟 시스템으로 데이터를 출력한다. 부가적으로, 소프트웨어 커널은 사용자가 여전히 개시하고, 중단하며, 값을 주장하고, 단일 단계를 진행하며, 한 모드에서 다른 모드로 전환하기 위한 선택을 하도록 이러한 모드의 동작을 제어한다.
C. 후-시뮬레이션 분석 모드
로그는 시뮬레이션 세션의 기록 레코드를 사용자에게 제공한다. 공지된 시뮬레이션 시스템과는 달리, SEmulation 시스템은 단일값, 내부 상태, 또는 시뮬레이션 프로세스 동안 값 변화마다 로깅하지는 않는다. SEmulation 시스템은 오직 로깅 주파수(즉, N사이클 마다 log 1 레코드)에 근거하여 선택된 값과 상태를 로그한다. 후-시뮬레이션 단계 동안, 사용자가 방금 종료한 시뮬레이션 세션 내의 X 지점 근방의 다양한 데이터를 검사하기 원한다면, 사용자는 로그된 지점 중의 하나로 가서, 지점 X에 가장 가깝고 그 이전에 일시적으로 위치한 로그된 지점 Y를 말한다. 그리고 나서, 사용자는 시뮬레이션 결과를 얻기 위하여 선택된 로그된 지점 Y로부터 원하는 지점 X까지 시뮬레이팅한다.
또한, 주문형 VCD 시스템은 이하에 설명될 것이다. 이러한 주문형 VCD 시스템은 사용자가 시뮬레이션 재가동을 하지 않고 임의의 시뮬레이션 타겟 범위(즉, 시뮬레이션 시간)를 관찰하도록 한다.
D. 하드웨어 실행 구조
SEmulation 시스템은 재구성 가능한 보드 상에 FPGA칩 어레이를 실행한다. 하드웨어 모델에 근거하여, SEmulation 시스템은 사용자의 회로 설계의 선택된 부분 각각을 FPGA칩 상으로 분할하고, 맵핑하며, 배치하고 라우팅한다. 따라서, 예컨대, 4x4 어레이의 16개의 칩은 이들 16개의 칩을 가로질러 확장된 대형회로의 모델링일 수 있다. 내부 접속 구조는 각각의 칩이 2 점프 또는 링크 내에서 다른 칩으로 억세스하는 것을 허용한다.
각각의 FPGA칩은 I/O 어드레스 공간(즉, REG, CLK, S2H, H2S) 각각에 대한 어드레스 포인터를 실행한다. 특정 어드레스 공간과 연관된 모든 어드레스 포인터의 조합은 서로 연쇄되어 있다. 그래서, 데이터 전송 동안, 각각의 칩 내의 워드 데이터는 메인 FPGA 버스 및 PCI 버스로부터/로 각 칩내의 선택된 어드레스 공간에 대하여 한번에 하나의 워드가, 한번에 하나의 칩이, 원하는 워드 데이터가 선택된 어드레스 공간에 대하여 억세스될 때까지 연속적으로 선택된다. 이러한 워드데이터의 연속적인 선택은 워드 선택 신호의 전달에 의해 달성된다. 이러한 워드 선택 신호는 칩내의 어드레스 포인터를 통하여 진행하며, 그리고 나서 다음 칩의 어드레스 포인터까지 전파되며, 마지막 칩 또는 시스템이 어드레스 포인터를 초기화할 때까지 계속한다.
재구성가능한 보드 내의 FPGA 버스 시스템은 PCI 버스 대역폭의 두배의 대역폭, PCI 버스 속도의 절반 속도에서 동작한다. 따라서, FPGA 칩은 보다 큰 대역폭의 버스를 이용하기 위하여 뱅크로 분리된다. 이러한 FPGA 버스 시스템의 스루풋은 PCI 버스 시스템의 스루풋을 추적할 수 있어, 버스 속도를 줄임으로써 성능을 상실하지 않는다. 확장은 뱅크 길이를 연장하는 피기백(piggyback)보드를 통하여 가능하다.
본 발명의 다른 실시예에 있어서, 고밀도의 FPGA칩이 사용된다. 하나의 이러한 고밀도의 칩은 알테라 10K 130V 및 10K 250V 칩이다. 이들 칩의 사용은 조금 덜 밀집된 8개의 FPGA 칩대신에 단지 4개의 FPGA칩(알테라 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) 임의의 어레이 보드 사이에서 신호를 전달하기 위하여 다양한 보드를 가로질러 서로 내부 접속하도록 제공된다.
머더보드 접속기는 보드를 머더모드에, 따라서, PCI 버스, 전력, 및 접지에 연결한다. 몇개의 보드에 있어서, 머더 보드 접속기는 머더보드로의 직접 접속에는 사용되지 않는다. 6개의 보드 구조에 있어서, 단지 보드 1, 3 및 5 만이 머더보드에 직접 접속되는 한편, 나머지 보드 2, 4, 및 6은 머더보드 연결성을 위하여 그들의 인접 보드에 의지한다. 따라서, 다른 모든 보드는 머더 보드에 직접 연결되며, 이들 버스의 로컬 버스 및 내부 접속은 솔더 측 내지 컴포넌트 측에 배열된 내부 보드 접속기를 통하여 함께 결합된다. PCI신호는 보드 중 하나(통상적으로 첫번째의 보드)만을 통하여 라우팅된다. 전력 및 접지는 그들 보드를 위한 다른 머더보드 접속기에 인가된다. 솔더 측 내지 컴포넌트 측에 배치되면, 다양한 내부 보드 접속기가 PCI 버스 컴포넌트, FPGA 논리 장치, 메모리 장치 및 다양한 시뮬레이션 시스템 제어 회로 사이에서 통신을 허용한다.
E. 시뮬레이션 서버
본 발명의 다른 실시예에서, 시뮬레이션 서버는 다수의 사용자가 동일한 재구성 가능한 하드웨어 유닛을 억세스하는 것을 허용하도록 제공된다. 하나의 시스템 구조에 있어서 하나의 네트웍을 가로지르는 다수의 워크 스테이션, 또는 비네트웍 환경내의 다수의 사용자/프로세스가 동일한 또는 다른 사용자 회로 설계를 리뷰/디버그하도록 동일한 서버 기반 재구성 가능한 하드웨어 유닛을 억세스할 수 있다. 상기 억세스는 스케쥴러가 다수의 사용자에 대한 억세스 우선순위를 결정하고, 잡(job)을 교환하며, 예정된 사용자 사이에서 선택적으로 하드웨어 모델 억세스를 로크(lock)하는 시간 공유 프로세스를 통하여 달성된다. 하나의 시나리오에서, 각 사용자는 처음으로 재구성 가능한 하드웨어 모델로 그/그녀 각각의 사용자 설계를 맵핑하기 위하여 서버에 억세스할 수 있으며, 그 경우 시스템은 소프트웨어 및 하드웨어 모델을 발생시키기 위하여 설계를 컴파일하고, 클러스터링 동작을 수행하며, 플레이스 및 라우트 동작을 수행하고, 비트스트림 구조 파일을 발생시키고, 사용자 설계의 하드웨어 부분을 모델링하기 위하여 재구성가능한 하드웨어 유닛의 FPGA칩을 재구성한다. 하나의 사용자가 하드웨어 모델을 사용하여 그 설계를 가속화하고, 소프트웨어 시뮬레이션용 그 자신의 메모리에 하드웨어 상태를 다운로드하는 경우, 하드웨어 유닛은 다른 사용자에 의한 억세스로부터 해방될 수 있다.
서버는 가속화 및 하드웨어 상태 교환목적으로 재구성 가능한 하드웨어를 억세스하기 위하여 다수의 사용자 또는 프로세스를 제공한다. 시뮬레이션 서버는 스케쥴러 또는 하나 이상의 디바이스 드라이버, 및 재구성가능한 하드웨어 유닛을 포함한다. 시뮬레이션 서버 내의 스케쥴러는 선점 라운드 로빈 알고리즘에 기초한다. 서버 스케쥴러는 시뮬레이션 잡 큐 테이블(simulation job queue table), 우선순위 분류기 및 잡 교환기를 포함한다. 본 발명의 복원 및 재생 기능은 네트웍 다중 사용자 환경뿐만 아니라 비네트웍 멀티프로세싱 환경을 용이하게 하고, 이전의 체크포인트 상태 데이터가 다운로드될 수 있으며, 그 체크포인트와 관련된 전체 시뮬레이션 상태는 재생 디버깅 또는 사이클별 스텝핑을 위해 복원될 수 있다.
F. 메모리 시뮬레이션
본 발명의 메모리 시뮬레이션 또는 메모리 맵핑 태양은 재구성가능한 하드웨어 유닛내의 FPGA 칩 어레이로 프로그래밍된, 사용자 설계의 구성된 하드웨어 모델과 관련된 다양한 메모리블럭을 관리하기 위하여 시뮬레이션 시스템에 대하여 효과적인 방안을 제공한다. 본 발명의 상기 메모리 시뮬레이션 태양은 사용자 설계와관련된 수많은 메모리 블럭이 논리 장치 내부 대신에 시뮬레이션 시스템 내의 SRAM 메모리 장치로 맵핑되어 있으며, 그것은 사용자 설계를 구성하고 모델링하는데 이용된다. 메모리 시뮬레이션 시스템은 메모리 상태 머신, 평가 상태 머신 및 제어 및 중개를 위한 그들의 연관된 로직과 함께; (1) 메인 컴퓨팅 시스템 및 그와 연관된 메모리 시스템, (2) 시뮬레이션 시스템내의 FPGA 버스에 결합된 SRAM 메모리 장치, 및 (3) 디버그되는 형성되고 프로그래밍된 사용자 설계를 포함하는 FPGA 논리 장치를 포함한다. 본 발명의 일실시예에 따른 메모리 시뮬레이션 시스템의 동작은 일반적으로 이하와 같다. 시뮬레이션 기록/판독 사이클은 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 장치에 결합된) 외부 인터페이스, 및 (3) RCC 하드웨어 어레이 사이에서 트래픽 제어를 제공하는 제어로직을 포함한다. RCC 컴퓨팅 시스템은 RCC 하드웨어 어레이에 모델링된 사용자 설계 부분을 포함하는, 소프트웨어로 전체 설계의 모델을 가지므로, RCC 컴퓨팅 시스템은 또한 외부 인터페이스 및 RCC 하드웨어 어레이 사이를 통과하는 모든 데이터에 대하여 억세스하여야 한다. 제어 로직은 RCC 컴퓨팅 시스템이 이들 데이터를 억세스하는 것을 보장한다.
II. 시스템 설명
도 1은 본 발명의 일실시예의 상위 개략도를 나타낸다. 워크 스테이션(10)은 PCI 버스 시스템을 통하여 하드웨어 모델(20) 및 에뮬레이션 인터페이스(30)에 결합되어 있다. 재구성가능한 하드웨어 모델(20)은 케이블(61) 뿐만 아니라, PCI버스(50)를 통하여 에뮬레이션 인터페이스(30)에 결합되어 있다. 타겟 시스템(40)은 케이블(60)을 통하여 에뮬레이션 인터페이스(30)에 결합되어 있다. 다른 실시예에서, 에뮬레이션 인터페이스(30) 및 타겟 시스템(40)(점선 박스로 나타낸)을 포함하는 회로 내부 에뮬레이션 셋업(70)은 타겟 시스템의 환경 내에서 사용자 설계의 에뮬레이션이 특정 테스트/디버그 세션 동안 요구되지 않는 경우, 이 셋업 내에 제공되지 않는다. 회로 내부 에뮬레이션 셋업(70)없이, 재구성 가능한하드웨어 모델(20)은 PCI 버스(50)를 통하여 워크스테이션(10)과 교신한다.
회로 내부 에뮬레이션 셋업(70)과 함께, 재구성가능한 하드웨어 모델(20)은 타겟 시스템 내의 몇개의 전자 서브시스템의 사용자의 회로 설계를 모방하거나 모사한다. 타겟 시스템의 환경 내에서 전자 서브시스템의 사용자의 회로 설계의 정확한 동작을 보장하기 위하여, 타겟 시스템(40) 및 모델링된 전자 서브시스템 사이의 입력 및 출력 신호는 평가용 재구성 가능한 하드웨어 모델(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에는 나타나 있지 않지만, 사용자 인터페이스는 모니터로 보여지며 키보드와 마우스로 입력될 수 있는 사용자 억세스가능한 메뉴방식 옵션 및 커맨드 세트를 포함한다.
사용자는 통상적으로 전자시스템의 특정 회로 설계를 만들어내고, 워크스테이션(10)으로 그의 설계된 시스템의 HDL(보통은 RTL 레벨로 구성된) 코드 기술을 입력한다. 본원 발명의 SEmulation 시스템은 소프트웨어 및 하드웨어 사이의 모델링을 분할하기 위하여, 다른 동작들 사이에서 컴퍼넌트 형태 분석을 수행한다. SEmulation 시스템은 소프트웨어의 작용, RTL 및 게이트 레벨 코드를 모델링한다. 하드웨어 모델링에 있어서, 시스템은 RTL 및 게이트 레벨 코드를 모델링할 수 있으나, RTL레벨은 하드웨어 모델링 이전에 게이트 레벨에 통합되어야 한다. 게이트 레벨 코드는 하드웨어 모델링을 위한 사용가능한 소스 설계 데이터 베이스 포맷으로 바로 프로세싱될 수 있다. RTL 및 게이트 레벨 코드를 사용하여, 시스템은 자동적으로 분할 단계를 완성하기 위하여 컴포넌트 형태 분석을 수행한다. 소프트웨어 컴파일 시간동안의 분할 분석을 기반으로, 시스템은 하드웨어 가속화를 통하여 신속한 시뮬레이션을 위한 하드웨어로 회로설계의 몇개 부분을 맵핑한다. 사용자는 모델화된 회로 설계를 회로 에뮬레이션 내의 실제 환경을 위한 타겟 시스템에 결합할 수도 있다. 소프트웨어 시뮬레이션과 하드웨어 가속 엔진은 밀접하게 결합되어 있기 때문에, 소프트웨어 커널을 통하여, 사용자는 소프트웨어 시뮬레이션을 사용하여 전체 회로 설계를 시뮬레이트하고, 맵핑된 화로 설계의 하드웨어 모델을 사용하여 테스트/디버그 프로세스를 가속시키며, 시뮬레이션부로 리턴하며, 그리고 테스트/디버그 프로세스가 수행될 때 까지 하드웨어 가속으로 리턴할 수 있다. 사이클-바이-사이클 및 사용자 마음대로 소프트웨어 시뮬레이션 및 하드웨어 가속 간의 스위치를 할 수 있는 능력은 본 실시예의 가치 있는 특징중의 하나이다. 이러한 특징은 다양한 지점의 검사한 뒤에 회로 설계의 결함을 고치기 위하여, 하드웨어 가속 모드를 사용하고 소프트웨어 시뮬레이션을 사용하여 사용자가 매우 신속하게 특정 지점 또는 사이클로 가는 것을 허용함으로써 디버그 프로세스에서 특히 유용하다. 더욱이, 에스 에뮬레이션(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으로 유도한다.
중단 후에, 사용자가 조합 컴포넌트 값을 검사하기를 원한다면, 조합 컴포넌트를 포함하는 전체 소프트웨어 모델을 재생성하기 위하여 하드웨어 레지스터 컴포넌트의 상태를 역판독한다. 전체 소프트웨어 모델을 저장한 후에, 사용자는 시스템내의 임의의 신호 값을 검사할 수 있다. 중단 및 검사 후에, 사용자는 시뮬레이션 모드 또는 하드웨어 가속 모드에서 계속 실행할 수 있다. 중단/값 검사 루틴은 단계 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에서, 사용자는 타겟 시스템 환경내에서 시뮬레이트된 회로 설계를 에뮬레이트하기 위하여 선택할 수 있다. 만약 타겟 시스템을 갖는 에뮬레이션이 요구된다면, 알고리즘은 단계 150을 진행한다. 이러한 단계는 에뮬레이션 인터페이스 보드 활성화, 케이블 및 칩 핀 어댑터를 타겟 시스템에 플러깅 및 타겟 시스템으로부터 시스템 I/O를 획득하기 위하여 타겟 시스템을 실행하는 단계를 포함한다. 타겟 시스템으로부터 시스템 I/P는 타겟 시스템 및 회로 설계의 에뮬레이션 사이의 신호를 포함한다. 에뮬레이트된 회로 설계는 타겟 시스템으로부터 입력 신호를 수신하고, 이것을 처리하며, 다른 프로세싱을 위하여 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 칩안에 맵핑되고, 분할된다.
상기에서 설명된 바와 같이, 사용자 테스트-벤치 스티멀러스 및 테스트 벡터 데이터 및 다른 테스트-벤치 자원(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)을 이진 포맷으로 축소하여, 행동 레벨 코드, 레지스터 트랜스퍼 레벨(RTL) 및 게이트 레벨 코드가 SEmulation 시스템에 의해 허용가능한 내부 데이터 구조 형태로 감소될 수 있다. 시스템은 축소된 HDL 코드를 함유하는 소스 설계 데이터베이스를 생성한다.
단계 302는 HDL 컴포넌트를 컴포넌트 형태 자원(303)으로 도시된 조합 컴포넌트, 레지스터 컴포넌트, 클록 컴포넌트, 메모리 컴포넌트 및 테스트-벤치 컴포넌트로 분류함으로써 컴포넌트 형태 분석을 실행한다. SEmulation 시스템은 이하에서 논의되는 예외를 가지면서, 레지스터 및 조합 컴포넌트를 위한 하드웨어 모델을 생성한다. 테스트-벤치 및 메모리 컴포넌트는 소프트웨어에 맵핑된다. 일부 클록 컴포넌트(예를 들면, 유도된 클록)는 하드웨어내에 모델화되며, 다른 나머지는 소프트웨어/하드웨어 바운더리(예를 들면, 소프트웨어 클록)내에 모델화된다.
조합 컴포넌트는 스테이트리스 로직 컴포넌트이며, 그것의 출력값은 현재 입력값의 함수이며, 과거 입력 값에 의존하지 않는다. 조합 컴포넌트의 예는 기본 게이트(예를 들면, AND, OR, XOR, NOT), 선택기, 어댑터, 멀티플렉서, 시프터, 및 버스 드라이버를 포함한다.
레지스터 컴포넌트는 간단한 저장 소자이다. 레지스터의 상태 변이는 클록 신호에 의해 제어된다. 레지스터의 한 형태는 에지가 검출될 때 상태가 변화하는 에지-트리거 레지스터이다. 다른 형태의 레지스터는 레벨 트리거되는 래치이다. 예는 플립-플롭(D-타입, JK-타입) 및 레벨-감지 래치를 포함한다.
클록 컴포넌트는 로직 디바이스의 동작을 제어하기 위하여 로직 디바이스에 주기적인 신호를 보내는 소자이다. 통상적으로 클록 신호는 레지스터의 업데이트를제어한다. 주요 클록은 셀프-타임 테스트-벤치 프로세스로부터 발생된다. 예를 들면, 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은 레지던스 선택을 실행한다. 사용자와 관련하여, 시스템은 하드웨어 모델을 위한 컴포넌트를 선택한다; 즉, 사용자의 회로 설계의 하드웨어 모델내에서 구현될 수 잇는 하드웨어 컴포넌트중에서, 일부 하드웨어 컴포넌트는 다양한 이유로 인하여 하드웨어 내에서 모델되지 않을 것이다. 이러한 이유는 컴포넌트 형태, 하드웨어 자원 제한(즉, 유동점 동작 및 소프트웨어 내의 대량의 멀티플라이 동작), 시뮬레이션 및 통신 오버헤드(즉, 소프트웨어 내에서 상주하는 테스트-벤치 프로세스들 사이의 작은 브리지 로직, 및 소프트웨어 내에서 상주하는 테스트-벤치 프로세스에 의해 모니터되는 신호), 및 사용자의 선택을 포함한다. 성능 및 시뮬레이션 모니터링을 포함하는 다양한 이유를 위하여, 사용자는 소프트웨어에 상주하도록 하드웨어내에서 모델화되는 특정 컴포넌트가 되도록 할 수 있다.
단계 307은 선택된 하드웨어 모델을 재구성가능한 하드웨어 에뮬레이션 보드에 맵핑시킨다. 특히, 단계 307 맵은 네트리스트를 취하며, 회로 설계를 특정 FPGA 칩에 맵핑시킨다. 이러한 단계는 로직 소자를 함께 그룹화하거나 클러스터하는 단계를 포함한다. 그리고 나서, 시스템은 각 그룹에 단일 FPGA 칩을 할당하거나, 또는 몇몇 그룹에 단일 FPGA 칩을 할당한다. 시스템은 상이한 FPGA 칩에 할당하기 위하여 그룹을 분리하기도 한다. 일반적으로, 시스템은 그룹을 FPGA 칩에 할당한다. 더욱 상세한 논의는 도 6과 관련하여 제공될 것이다. 시스템은 내부-칩 통신 오버헤드를 최소화하기 위하여 하드웨어 모델 컴포넌트를 FPGA 칩의 메쉬에 놓는다. 일 실시예에서, 어레이는 FPGA의 4×4 어레이, PCI 인터페이스 유닛 및 소프트웨어 클록 제어 유닛을 포함한다. FPGA 어레이는 이러한 소프트웨어 편집 프로세스의 단계 302-306에서 결정된 바와 같이, 사용자의 하드웨어 회로 설계의 부분을 구현한다. PCI 인터페이스 유닛은 재구성가능한 하드웨어 에뮬레이션 모델이 PCI 버스를 통하여 워크스테이션과 통신하도록 한다. 소프트웨어 클록은 FPGA의 어레이에 다양한 클록 신호를 위하여 레이스 조건을 회피한다. 더욱이, 단계 307은 하드웨어 모델중의 통신 스케쥴에 따라 FPGA 칩을 라우트한다.
단계 308은 제어 회로를 삽입한다. 이러한 제어 회로는 I/O 어드레스 포인터 및 시뮬레이터(도 11, 12 및 14와 관련하여 이하에서 논의됨)에 DMA 엔진과 통신하기 위한 데이터 버스 로직, 및 하드웨어 상태 변이 및 와이어 멀티플렉싱(도 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)의 조합을 사용한다. 이러한 기술은 상호 접속의 전체 네트 길이 또는 다양한 변중에서 임계 신호 경로의 세트에 따른 지연에 좌우되는 다양한 비용 함수에 기초한 최적 배치를 결정한다. 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 칩 내에 클러스터의 거친-그레인 배치 동작(352)이 수행된다. 거친-그레인 배치 동작(352)은 우선 로직 소자의 클러스터를 선택된 FPGA 칩에 배치한다. 만약, 필요하다면, 시스템은 합성기 서버(360)가 화살표(367)에 의해 표현된 바와 같이 거친-그레인 배치 동작(352)에 이용가능하게 한다. 미세-그레인 배치 동작은 최초 배치를 미세-조정하기 위하여, 거친-그레인 배치 동작을 한 후에 수행된다. 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)는 다음과 같이 정의된다.
이러한 등식은 다음과 같이 간략화될 수 있다.
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의 초기 배치에서의 게이트-대-게이트 홉의 최적화보다 더욱 중요하다는 것을 결정한다. 이러한 반복에서, 시스템은 게이트-대-게이트 홉의 최적화가 핀 사용량/이용가능성 및 게이트 사용량/이용가능성의 최적화보다 더 중요하는 것을 결정한다.
미세-그레인 배치 동작동안에, 시스템은 동일한 비용 함수를 사용한다. 일 실시예에서, 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은 상당히 변화할 수 있다. 비용 함수 F(P, G, D)의 제 1항(즉, C0*P)를 평가하기 위하여, Pused/Pavailable비율은각각의 FPGA 칩을 위하여 계산된다. 그러므로, FPGA 칩의 4×4 어레이를 위하여, 16 비율 Pused/Pavailable가 계산된다. 소정 개수의 이용가능한 핀을 위하여 더 많은 핀이 사용되면, 비율은 더 높아진다. 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)는 다음과 같이 긴 형태로 표현된다.
제 3항은 가중 상수(C2)와 컴포넌트(S...)의 합계의 곱이다. 합 성분은 칩 대 칩 상호접속을 필요로하는 사용자의 회로 설계에서 각각의 게이트 i와 게이트 j 사이의 모든 홉의 합이다. 상술한 바와 같이, 모든 게이트가 내부 칩 상호접속을 필요로 하는 것은 아니다. 내부 칩 상호접속을 요구하는 게이트 i와 게이트 j를 우하여, 홉의 개수가 결정된다. 모든 게이트 i와 게이트 j를 위하여, 홉의 전체 개수는 모두 합해진다.
거리 계산은 다음과 같이 정의될 수도 있다.
여기서, M은 접속 메트릭스이다. 접속 메트릭스의 일 실시예는 도 7에 도시된다. 거리는 상호접속을 요구하는 각각의 게이트 대 게이트 접속을 위해 계산된다. 그러므로, 각각의 게이트 i와 게이트 j 비교를 위하여, 접속 메트릭스 M이 시험된다. 더욱, 구체적으로는
메트릭스는 각각의 칩이 확인가능한 번호화되도록 어레이내의 모든 칩과 함께 세트된다. 이러한 확인 번호는 칼럼 헤더로서 메트릭스의 상부에 세트된다. 유사하게, 이러한 확인 번호는 로우 헤더로서 메트릭스의 측면을 따라 셋업된다. 이러한 메트릭스내의 로우와 칼럼의 교차점에서의 특정 엔트리는 로우에 의해 확인된 칩과 칼럼에 의해서 확인된 칩 사이의 접속 데이터를 직접 제공하며, 이는 교차점에서 발생한다. 칩 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)이다. 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 바탕으로, 코스트 (cost )은 도 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)을 포함한다. 얼터러 MAX+PLUS Ⅱ 프로그래머는 FPGA 어레이를 프로그램하기 위하여 얼터러 하드웨어 프로그램 가능 장치와 함께 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)상 데이타는 회로(960)로부터 와이어(966) 또는 와이어(967)에 존재한다.
TDM 회로의 수신측 일실시예는 도 9(C)에 도시된다. 칩(991)(도 9(A) 및 9(B))에서 와이어(966 및 967)상 와이어로부터의 신호는 도 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)를 통하여 회로(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)는 공간 인덱스를 사용함으로써 소프트웨어/하드웨어 바운드리에 해당하는 특정 어드레스 공간(즉, REG, S2H, H2S 및 CLK)을 선택한다. 일단 어드레스 공간이 선택되면, 각각의 FPGA 칩내의 선택된 어드레스 공간에 해당하는 특정 어드레스 포인터는 선택된 어드레스 공간내의 동일한 워드에 해당하는 특정 워드를 선택한다. 각각의 FPGA 칩내의 어드레스 포인터 및 소프트웨어/하드웨어 바운드리내의 어드레스 공간의 최대 크기는 선택된 FPGA 칩의 메모리/워드 용량에 따른다. 예를들어, 본 발명의 일실시예는 FPGA 칩의 얼터러 FLEX 10K 패밀리를 사용한다. 따라서, 각각의 어드레스 공간에 대한 평가된 최대 크기는 : REG, 3,000 워드; CLK, 1 워드; S2H, 10 워드; 및 H2S, 10 워드이다. 각각의 FPGA 칩은 대략 100 워드를 홀딩할수있다.
SEmulation 시스템은 사용자가 시작하고, 입력 값을 주장하고, SEmulation 처리시 임의의 시간에 값을 검사하도록 하는 특징을 가진다. 시뮬레이터의 적응성을 제공하기 위하여, SEmulator는 부품의 내부 구현형태가 소프트웨어인지 하드웨어인지에 관계없이 사용자에게 모든 부품이 가시적이어야 한다. 소프트웨어에서, 결합 부품은 모델링되고 값은 시뮬레이션 처리동안 계산된다. 따라서, 이들 값은 시뮬레이션 처리 동안 임의의 시간에 사용자가 액세스하도록 완전히 "가시적"이다.
그러나, 하드웨어 모델에서 결합 부품은 직접적으로 "가시적"이지 않다. 비록 레지스터가 소프트웨어 커널에 의해 쉽고 직접적으로 액세스 가능(즉, 판독/기록) 하지만, 결합 부품은 결정하기가 보다 어렵다. FPGA에서, 대부분의 결합 부품은 룩업 테이블로서 모델링되어 게이트 활용도를 높인다. 결과적으로, 룩업 테이블 맵핑은 효과적인 하드웨어 모델링을 제공하지만 대부분의 결합 논리 신호의 가시도를 손상시킨다.
결합 부품의 가시도 부족으로 인한 이들 문제에도 불구하고, 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 공간은 커널로부터 하드웨어 모델로의 주요 입력이다. 상기된 바와같이, 하드웨어 모델은 사용자의회로 설계의 결합 부품 및 레지스터 부품 모두를 실질적으로 홀딩한다. 게다가, 소프트웨어 클럭은 소프트웨어로 모델화되고 하드웨어 모델과 인터페이스하도록 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)의 설계에 통합되면 실현될수있다. 타켓 시스템(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후 모든 하드웨어 부품의 값 변화 덤프를 계산하기 위해 하드웨어 모델에 대한 입력 로그를 가진 소프트웨어 시뮬레이션을 운행함으로써 분석을 수행한다. 사용자는 적시에 임의의 레지스터 로그 포인트를 선택하고 적시에 로그 포인트가 진행하는 값 변화 덤프를 시작한다. 이런 값 변화 덤프 방법은 포스트 시뮬레이션 분석을 위해 임의의 시뮬레이션 파형 뷰어에 링크할수있다.
Ⅵ. 하드웨어 구현 방식
A. 개요
SE뮬레이션(SEmulation) 시스템은 재구성 가능한 보드 상에 FPGA 칩의 어레이를 구현한다. 상기 하드웨어 모델을 토대로 하여, SE뮬레이션 시스템은 사용자 회로 디자인의 각각의 선택된 부분을 FPGA 칩 상으로 분할하고, 랩핑하고, 위치시키고 루팅한다. 그러므로, 예를 들어, 16 칩의 4x4 어레이는 이러한 16 칩에 걸쳐서 퍼진 큰 회로를 모델링할 수 있다. 상호접속 방식은 각각의 칩이 2 "점프" 또는 링크 내에서 다른 칩에 액세스하도록 한다.
각각의 FPGA 칩은 각각의 I/O 어드레스 스페이스(즉, REG, CLK, S2H, H2S)를 위한 어드레스 포인터를 구현한다. 특정 어드레스 스페이스와 관련된 모든 어드레스 포인터의 조합은 함께 연쇄(chain)될 수 있다. 그래서, 데이터 전달 동안, 각각의 칩 내의 워드 데이터는 메인 FPGA 버스 및 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)는 휴지 상태이다. DATA_XSFR이 "1"로 설정될때, 시스템은 상태(461)로 진행하며, 여기서 어드레스 포인터는 초기화된다. 여기서, INITIALIZE 신호가 나타난다. 각각의 어드레스 포인터 내의 제 1 플립-플롭이 "1"로 설정되고 어드레스 포인터 내의 모든 다른 플립-플롭이 "0"으로 설정된다. 이 지점에서, 어드레스 포인터의 초기화는 임의의 워드 선택을 인에이블시키지 않을 것이다: 즉, 모든 Wn 출력이 여전히 "0"이다. 다음 상태는 대기 상태(462)이며 DATA_XSFR은 여전히 "1"이다. DATA_XSFRdl "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-이동 = (SPACE-인덱스==#REG)& READ;
REG 스페이스 기록 포인터: REGW-이동 = (SPACE-인덱스==#REG)& WRITE;
S2H 스페이스 판독 포인터: S2H-이동 = (SPACE-인덱스==#S2H)& READ;
H2S 스페이스 기록 포인터: H2S-이동 = (SPACE-인덱스==#H2S)& WRITE;
CLK 스페이스 판독 포인터: CLK-이동 = (SPACE-인덱스==#CLK)& WRITE;
이것은 도 13의 MOVE 신호 발생기의 논리도에 대한 등기 코드이다.
전술한 바와 같이, 각각의 FPGA 칩은 소프트웨어/하드웨어 경계에서의 어드레스 공간과 동일한 수의 어드레스 포인터를 갖는다. 소프트웨어/하드웨어 경계가 4 개의 어드레스 스페이스(즉, REG, S2H, H2S 및 CLK)를 갖는 경우, 각각의 FPGA 칩은 4 개의 어드레스 스페이스에 대응하는 4 개의 어드레스 포인터를 갖는다. 각각의 FPGA는 처리되고 있는 선택된 어드레스 스페이스 내의 특정 선택 워드가 임의의 하나 이상의 FPGA 칩에 존재하거나, 선택된 어드레스 스페이스 내의 데이터가 각각의 FPGA 칩에서 모델링되고 구현된 다양한 회로 엘리먼트에 영향을 주기 때문에, 이러한 4 개의 어드레스 포인터를 필요로 한다. 선택된 워드가 적절한 FPGA 칩(들) 내의 적절한 회로 엘리먼트(들)에 의해 처리되도록 하기 위하여, 소정 소프트웨어/하드웨어 경계 어드레스 스페이스(즉, REG, S2H, H2S 및 CLK)와 관련된 어드레스 포인터의 각 세트는 몇 개의 FPGA 칩에 걸쳐서 함께 "연쇄"된다. 도 11과 관련하여 전술한 바와 같은 MOVE 신호를 통한 특성 시프팅 또는 전파 워드 선택 메커니즘은 이 "체인" 실시예에서, 하나의 FPGA 칩 내의 특정 어드레스 스페이스와 관련된 어드레스 포인터가 다음 FPGA 칩 내의 동일한 어드레스 스페이스와 관련된 어드레스 포인터에 "연쇄"된다는 것을 제외하고, 여전히 사용된다.
어드레스 포인터를 연쇄하기 위하여 4 개의 입력 핀 및 4 개의 출력 핀을 구현하는 것은 동일한 목적을 달성할 것이다. 그러나, 이러한 구현은 자원의 효율적인 사용면에서 너무 비용이 많이 들게 될 것이다; 즉, 두 개의 칩들 사이에 4 개의와이가 필요로될 것이고, 각 칩에서 4 개의 입력 핀 및 4 개의 출력 핀이 필요로될 것이다. 본 발명에 따른 일 실시예는 하드웨어 모델이 칩들 사이에서 단지 하나의 와이어가 사용되도록 하고 각 칩에서 단지 1 입력 핀 및 1 출력 핀(칩 내에 2 I/O 핀)이 사용되도록 하는 다중화된 교차 칩 어드레스 포인터 체인을 사용한다. 다중화된 교차 칩 어드레스 포인터 체인의 일 실시에가 도 14에 도시되어 있다.
도 14에 도시된 실시예에서, 사용자의 회로 디자인은 재구성 가능한 하드웨어 보드(470) 내의 세 개의 FPGA 칩(415-417)에서 맵핑되고 분할된다. 어드레스 포인터는 블럭(421-432)으로 도시된다. 각각의 어드레스 포인터, 예를 들어 어드레스 포인터(427)는 워드수(Wn) 및 플립-플롭수가 얼마나 많은 워드가 사용자의 커스텀 회로 디자인(custom circuit design)을 의해 각 칩에서 구현될 있는지에 따라 가변할 수 있다는 것을 제외하면 도 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)는 네 개의 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)의 출력은 체인-아웃 신호(chain-out signal)이다. 각 어드레스 포인터 내의 플립-플롭은 통한 워드 선택 신호(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")으로 나타난다. 그러므로, 액세스가 한번에 한칩에 대해 발생된다; 즉, 워드 선택 신호는 워드 선택 시프트 동작이 다른 칩에 대해 수행되기 전에 한 칩 내의 플립-플롭을 통하여 시프트된다. 체인-아웃 신호는 워드 선택 신호가 각 칩에서 어드레스 포인터의 끝에 도달할때만 나타난다. 코드에서, 체인-아웃 신호는:
체인-아웃= (REGR-이동&REGR-아웃)|(REGW-이동*REGW-아웃)|(S2H-이동&S2H-아웃)|(H2S-이동&H2S-아웃);
요컨데, 시스템 내의 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은 또한 게이팅된 이미지 분석을 도시한다.
SE뮬레이션 시스템은 소프트웨어에서 사용자 회로 디자인의 완전한 모델 및 하드웨어에서 사용자 회로 디자인의 일부분을 갖는다. 이러한 하드웨어 부분은 클럭 요소, 특히 유도된 클럭을 포함한다. 클럭 전달 타이밍 발행은 소프트웨어 및 하드웨어 사이의 경계로 인하여 발생한다. 완전 모델이 소프트웨어에 존재하기 때문에, 소프트웨어는 레지스터 값에 영향을 주는 클럭 에지를 검출할 수 있다. 레지스터의 소프트웨어 모델 이외에, 이러한 레지스터는 물리적으로 하드웨어 모델 내에 위치된다. 하드웨어 레지스터가 자신의 각각의 입력(즉, D 입력에서 Q 출력으로 데이터를 이동시키는 것)을 또한 평가하도록 하기 위하여, 소프트웨어/하드웨어 경계는 소프트웨어 클럭을 포함한다. 소프트웨어 클럭은 하드웨어 모델 내의 레지스터가 정확하게 평가한다는 것을 보증한다. 소프트웨어 클럭은 본질적으로 하드웨어 레지스터 소자로의 클럭 입력을 제어하기보다는 오히려 하드웨어 레지스터의 인에이블 입력을 제어한다. 이 소프트웨어 클럭은 경쟁 조건(race condition)을 피하며, 이에 따라서 유지-시간 위반을 피하기 위한 정확한 타이밍 제어가 필요하지 않다. 도 16에 도시된 클럭 네트워크 및 게이팅된 데이터 논리 분석 공정은 경쟁 조건이 피해지고 가요적인 소프트웨어/하드웨어 경계 구현이 제공되도록 하드웨어 레지스터에 대한 클럭 및 데이터 전달 시스템을 모델링하고 구현하는 방식을 제공한다.
전술한 바와 같이, 제 1 클럭은 테스트-벤치 공정으로부터의 클럭 신호이다. 조합한 소자로부터 유도된 그러한 클럭 신호와 같은 모든 다른 클럭은 유도되거나 게이팅된 클럭이다. 제 1 클럭은 게이팅된 클럭 및 게이팅된 데이터 신호 둘 모두를 유도할 수 있다. 대부분에 대해, 단지 몇 개(예를 들어, 1-10)의 유도되거나 게이팅된 클럭이 사용자의 회로 디자인 내에 존재한다. 이러한 유도된 클럭은 소프트웨어 클럭으로 구현될 수 있고 소프트웨어 내에 있게 될 것이다. 상대적으로 큰 수(예를 들어 10 이상)의 유도 클럭이 회로 디자인 내에 제공되는 경우, SE뮬레이션 시스템은 I/O 오버헤드를 감소시키기 SE뮬레이션 시스템의 성능을 유지시키기 위하여 이것을 하드웨어 내로 모델링할 것이다. 게이팅된 데이터는 어떤 조합 논리를 통하여 제 1 클러으로부터 유도된 클럭과는 다른 레지스터의 데이터 또는 제어 입력이다.
게이팅된 데이터/클럭 분석 공정은 단계(500)에서 시작한다. 단계(501)는 HDL 코드로부터 발생된 유용한 자원 디자인 데이터베이스 코드를 사용하고 SE뮬레이션 시스템의 레지스터 소자로 사용자의 레지스터 엘리먼트를 맵핑한다. SE뮬레이션 레지스터로의 사용자 레지스터의 이러한 일-대-일 맵핑은 이후의 모델링 단계를 용이하게 한다. 어떤 경우에, 이 맵핑은 특정 프리미티브(primitive)를 갖는 레지스터 엘리먼트를 설명하는 사용자 회로 디자인을 처리하는 것을 필요로 한다. 그러므로, RTL 레벨 코드에 대하여, SE뮬레이션 레지스터는 RTL 레벨 코드가 더 낮은 레벨 구현을 가변시키도록 하는 충분히 높은 레벨에 있기 때문에 쉽게 고속으로 사용될 수 있다. 게이트 레벨 넷리스트(gate level netlist)에 대하여, SE뮬레이션 시스템은 소자의 셀 라이브러리에 액세스하여 이를 특정 회로 디자인-특정 논리 엘리먼트에 적합하게 하기 위하여 변경할 것이다.
단계(502)는 하드웨어 모델의 레지스터 소자로부터 클럭 신호를 추출한다. 이 단계는 시스템이 제 1 클럭 및 유도된 클럭을 결정하도록 한다. 이 단계는 또한 회로 디자인의 다양한 소자에 의해 필요한 모든 클럭 신호를 결정한다. 이 단계로부터의 정보는 소프트웨어/하드웨어 클럭 모델링 단계를 용이하게 한다.
단계(503)는 제 1 클럭 및 유도된 클럭을 결정한다. 제 1 클럭은 테스트-벤치 소자로부터 발생되어 소프트웨어에서만 모델링된다. 유도된 클럭은 결합 논리로부터 유도되고, 이 논리는 차례로 제 1 클럭에 의해 유도된다. 디폴트(default)에 의해, 본 발명의 SE뮬레이션 시스템은 유도된 클럭을 소프트웨어에 유지할 것이다. 유도된 클럭의 수가 작은 경우(예를 들어 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 combination 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은 본 발명의 일 실시예에 따른 하드웨어 모델의 기본적인 구조 블럭을 도시한 것이다. 레지스터 소자에 대하여, SE뮬레이션 시스템은 에지 트리거(즉, 플립-플롭) 및 레벨 감지(즉, 래치) 레지스터 하드웨어 모델 둘 모두를 구성하기 위한 기본적인 블럭으로서 비동기 부하 제어를 갖는 D-형 플립-플롭을 사용한다. 블럭을 구성하는 이 레지스터 모델은 다음의 포트: Q(출력 상태);A_E(비동기 인에이블);A_D(비동기 데이터);S_E(동기 인에이블);S_D(동기 데이터); 및 시스템.clk(시스템 클럭)을 갖는다.
이 SE뮬레이션 레지스터 모델은 비동기 인에이블(A_E) 입력의 양의 레벨 또는 시스템 클럭의 양의 에지에 의하여 트리거된다. 이러한 두 개의 양의 에지 또는 양의 레벨 트리거링 이벤트중 하나가 발생할때, 레지스터 모델은 비동기 인에이블(A_E) 입력을 찾는다. 비동기 인에이블(A_E) 입력이 인에이블되는 경우, 출력 (Q)은 비동기 데이터(A_D)의 값을 나타낸다; 그렇지 않으면, 동기 인에이블(S_E)이 인에이블되는 경우, 출력(Q)은 동기 데이터(S_D)의 값을 나타낸다. 한편, 비동기 인에이블(A_E)도 동기 인에이블(S_E) 입력도 인에이블되지 않는 경우, 출력(Q)은 시스템 클럭의 양의 에지의 결정에도 불구하고 평가되지 않는다. 이 방식에서, 이러한 인에이블 포트로의 입력은 이 기본 구성 블럭 레지스터 모델의 동작을 제어한다.
시스템은 이러한 레지스터 모델의 인에이블 입력을 제어하기 위한 특정 인에이블 레지스터인 소프트웨어 클럭을 사용한다. 복잡한 사용자 회로 디자인에서, 수 백만 개의 엘리먼트가 회로 디자인에서 발견되고, 이에 따라서 SE뮬레이션 시스템은 하드웨어 모델에서 수 백만 개의 엘리먼트를 구현할 것이다. 이러한 엘리먼트 모두를 개별적으로 제어하는 것은 하드웨어 모델로 수 백만 개의 신호를 전송하는 오버헤드가 소프트웨어에서 이러한 엘리먼트를 평가하는 것보다 많은 시간이 들것이기 때문에, 값이 비싸다. 그러나, 이 복잡한 회로 디자인은 통상적으로 단지 몇 개(1-10)의 클럭만을 요구하며 레지스터 및 결합 소자만을 갖는 시스템의 상태 변화를 제어하는데 클럭들만으로도 충분하다. SE뮬레이터 시스템의 하드웨어 모델은 단지 레지스터 및 결합 소자만을 사용한다. SE뮬레이터 시스템은 또한 소프트웨어 클럭을 통하여 하드웨어 모델의 평가를 제어한다. SE뮬레이션 시스템에서, 레지스터용 하드웨어 모델은 다른 하드웨어 소자에 직접 접속된 클럭을 갖지 않으며; 오히려, 소프트웨어 커넬(kernel)이 모든 클럭의 값을 제어한다. 몇 개의 클럭 신호를 제어함으로써, 커넬은 무시 가능한 양의 코프로세서 개입 오버헤드를 가지고 하드웨어 모델의 평가를 완전히 제어할 수 있게 된다.
레지스터 모델이 래치로서 사용되는지 또는 플립-플롭으로 사용되는지 여부에 따라서, 소프트웨어 클럭은 비동기 인에이블(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 클럭에 의해 차례로 구동되는 결합 논리 및 레지스터의 네트워크로부터 발생된다. 디폴트에 의하여, 본 발명의 SE뮬레이션 시스템은 유도된 클럭을 소프트웨어에 유지시킬 것이다. 유도된 클럭의 수가 작은 경우(예를 들어, 10 이하), 이러한 유도된 클럭은 소프트웨어 클럭으로 모델링될 수 있다. 이러한 유도 클럭을 발생시키기 위한 결합 소자의 수가 적어서, 소프트웨어 내의 이러한 결합 소자를 모델링함으로써 I/O 오버헤드가 부가되지 않는다. 그러나, 유도된 클럭의 수가 큰 경우(예를 들어, 10 이상), 이러한 유도된 클럭 및 이들의 결합 소자는 I/O 오버헤드를 최소화하기 위하여 하드웨어에서 모델링될 수 있다.
궁극적으로, 본 발명의 일 실시예에 따라서, (제 1 클럭으로의 입력을 통하여) 소프트웨어에서 발생된 클럭 에지 검출은 (클럭 에지 레지스터로의 입력을 통하여) 하드웨어에서의 클럭 검출로 변화될 수 있다. 소프트웨어에서의 클럭 에지 검출은 하드웨어에서의 이벤트를 트리거하여 데이터 신호 이전에 클럭 인에이블 신호를 수신해서, 데이터 신호의 평가가 유지-시간 위반을 피하기 위해 시스템 클럭과 동기화되어 발생하도록 한다.
전술한 바와 같이, SE뮬레이션 시스템은 소프트웨어에서 사용자의 회로 디자인의 완전 모델 및 하드웨어에서 사용자의 회로 디자인의 일부를 갖는다. 커넬에서 규정된 바와 같이, 소프트웨어는 하드웨어 레지스터 값에 영향을 주는 클럭 에지를 검출할 수 있다. 하드웨어 레지스터가 또한 자신들의 각 입력을 평가하도록하기 위하여, 소프트웨어/하드웨어 경계는 소프트웨어 클럭을 포함한다. 소프트웨어 클럭은 하드웨어 모델 내의 레지스터가 시스템 클럭과 동기화하여 그리고 임의의 유지-시간 위반 없이 평가되도록 한다. 소프트웨어 클럭은 본질적으로 하드웨어 레지스터 소자로의 클럭 입력을 제어한다기 보다는 차라리 하드웨어 레지스터 소자의 인에이블 입력을 제어한다. 소프트웨어 클럭을 구현하기 위한 이중-버퍼링된 방법은 레지스터가 경쟁 조건을 피하기 위하여 시스템 클럭과 동기화하여 평가되도록 하고 유지-시간 위반을 피하기 위한 정확한 타이밍 제어에 대한 필요성을 제거하도록 한다.
도 19는 본 발명에 따른 클럭 구현 시스템의 일 실시예를 도시한 것이다. 처음에, 게이팅된 클럭 논리 및 게이팅된 데이터 논리는 도 16과 관련하여 전술한 바와 같이 SE뮬레이션 시스템에 의해 결정된다. 그리고 나서, 게이팅된 클럭 논리 및 게이팅된 데이터 논리가 분리된다. 이중 버퍼를 구현할때, 구동 소스 및 이중 버퍼링된 제 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"로 설정된다.
인터-보드(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)에는 북엔드(bookend) 보드가 제공되지만, 보드(2;1552)와 보드(3;1553)(도 39참조)는 중간 보드이다. (도 38A와 도 38B를 참조로 설명된 바와 같이) 본 발명에 따라서 마더보드에 결합될 때, 보드(1)과 보드(2)는 쌍을 이루며 보드(3)과 보드(6)은 쌍은 이룬다.
6-보드 구성에서, 상기 설명과 같이 보드(1)과 보드(6)에는 북엔드(bookend) 보드가 제공되지만, 보드(2;1552), 보드(3;1553), 보드(4;1554)와 보드(5;1555)(도 39참조)는 중간 보드이다. (도 38A와 도 38B를 참조로 설명된 바와 같이) 본 발명에 따라서 마더보드에 결합될 때, 보드(1)과 보드(2)는 쌍을 이루며 보드(3)과 보드(4)은 쌍은 이루고 보드(5)과 보드(6)은 쌍은 이룬다.
더 많은 보드가 필요에 따라서 제공될 수 있다. 그러나, 시스템에 추가될 보드의 수와는 관련없이, (도 39의 보드(1)과 보드(6)과 같이) 북엔드 보드는 메시 어레이 접속을 완전하게 하는 필수 종결부(requisite termination)를 가진다. 일 실시예에서, 최소 구성은 도 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)의 일 예는 Altra10K50 칩과 같이, 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 single-board boundary scan test)를 위해 사용된다. 아래의 표 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:J17 로우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[3]로우B:S[0], 4x VCC3V,4x GND, S[3] 0.05" 피치,2x45 스루-홀 헤더,SAMTEC, 콤프/솔더 사이드
J20 로우A:S[0], 4x VCC3V,4x GND, S[3]로우B:S[0], 4x VCC3V,4x GND, S[3] 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, 솔더 사이드
음영진 커넥터는 스루-홀 타입니다. 표 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_CLKJ4용 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) 로직 디바이스로 대체된다. 일 실시예에서, 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) 구현에서, 만약 클록이 프라이머리(primary)로부터 직접 생성된다면, 회로는 낮은 스큐 네트워크가 클록 신호를 모든 로직 엘리먼트에 분배할 수 있어 로직 엘리먼트가 실질적으로 동시에 클록 에지를 검출하도록 설계될 수 있다. 이전 클록은 셀프-타임 테스트-벤치 프로세스로부터 생성된다. 일반적으로, 주요 클록 신호는 소프트웨어에서 생성되고 오로지 적은(1-10) 프라이머리 클록이 통상적인 사용자 회로 설계에서 발견된다.
그러나, 만약 클록 신호가 프라이머리 입력부 대신에 내부 로직으로부터 생성된다면, 홀드 시간은 더 중요하게 된다. 유도 또는 게이트 클록은 프라이머리 클록에 의해 얻어진 조합 로직 및 레지스터의 네트워크로부터 생성된다. 많은 (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)를 생성하기 위해 프라이머리 클록 입력(또는 또 다른 얻어진 클록 입력)을 수신한다. 상기 내부 크록 신호(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 기술에 소개된 타이밍 합성이다. 타이밍 합성 개념은 원격 상태의 머신과 레지스터를 통해 클록의 타이밍과 핀-아웃 신호의 엄격한 제어동안 사용자의 회로 설계를 기능적으로 동일한 설계로 변형하는 것을 포함한다. 타이밍 합성은 단일 고속 클록에 의해 도입되는 사용자의 회로 설계를 리타이밍한다. 또한 래치, 게이트 클록, 여러 동기 및 비동기 클록을 플립플롭 기반 단일-클록 동기 설계로 변환한다. 따라서, 타이밍 합성은 인터-칩 홀드 시간 위반이 발생하지 않도록 정교한 인터-칩 신호 움직임을 제어하기 위해 각각의 칩의 입력 및 출력 핀-아웃에서 레지스터를 사용한다. 또한 타이밍 합성은 다른 칩으로부터 입력을 계획하고, 다른 칩으로 출력을 계획하며 기준 클록에 기초한 내부 플립플롭의 갱신을 계획하기 위해 각 칩의 원격 상태의 머신을 사용한다.
도 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)으로 출력한다.
칩(2434)는 원래의 플립플롭(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 로직 디바이스로 대체되는 것은 아니다. 사용자 설계 회로는 프라이머리 클록에 의해 이네이블 또는 클록킹된 부분과 게이트 또는 얻어진 클록에 의해 제어된 다른 부분을 포함한다. 홀드 시간 위반과 클록 글리치는 로직 디바이스가 게이트 또는 얻어진 클록에 의해 제어되는 경우에 발생하기 때문에, 오로지 게이트 또는 얻어진 클록에 의해 제어된 특정 로직 디바이스가 본 발명의 일 실시예에 따라서 TIGF로 대체된다. 다른 실시예에서, 사용자 설계 회로에 발견된 모든 로직 디바이스는 TIGF 로직 디바이스로 대체된다.
본 발명의 TIGF 래치 및 플립플롭 실시예를 설명하기 전에, 글로벌 트리거 신호가 설명된다. 일반적으로, 글로벌 트리거 신호는 TIGF 래치 및 플립플롭이 산정 주기 동안 상태(이전 입력값)를 유지하게 하고, 짧은 트리거 주기동안 상태(새로운 입력값)를 갱신하게 한다. 일 실시예에서, 도 82에 도시된 글로벌 트리거 신호는 상기 설명한 EVAL 신호로부터 분리되고 얻어진다. 상기 실시예에서, 글로벌트리거 신호는 짧은 트리거 주기가 뒤따르는 긴 산정 주기를 가진다. 글로벌 트리거 신호는 산정 주기동안 EVAL 신호를 추적하고, EVAL 사이클의 결과에서, 짧은 트리거 신호가 TIGF 래치와 플립플롭을 갱신하기 위해 생성된다. 또 다른 실시예에서, EVAL 신호는 글로벌 트리거 신호이며, EVAL 신호는 산정 주기동안 하나의로직 상태(로직0)를 가지며, 비산정 또는 TIGF 래치/플립플롭 갱신 주기동안 또다른 로직 상태(로직1)를 가진다.
RCC 컴퓨팅 시스템과 RCC 하드웨어 어레이를 참조하여 설명한 산정 주기는 모든 프라이머리 입력을 진행하는데 사용되고 플립플롭/래치 디바이스는 임의의 시간에서의 시뮬레이션 사이클을 전체 사용자 설계로 변화시킨다. 전파(propagation) 도중에, RCC 시스템은 시스템 내의 모든 신호들이 정상 상태(steady-state)를 달성할 때까지 대기하게 된다. 사용자 설계가 맵핑되어 RCC 어레이의 적절한 재구성가능(reconfigurable) 논리 소자(예를들어, FPGA 칩)에 배치된 후에, 평가 기간이 계산된다. 따라서, 평가 기간은 설계 특정 사항이다. 즉, 한 사용자 설계에 대한 평가 기간이 다른 사용자 설계에 대한 평가 기간과 상이할 수 있다. 이 평가 기간은 시스템 내의 모든 신호가 전체 시스템을 통과하여 전파되고 다음의 짧은 트리거 기간 전에 정상 상태에 도달하는 것을 보장할 수 있도록 충분히 길어야 한다.
짧은 트리거 기간은 도82에 도시된 바와 같이, 평가 기간에 인접한 시간에 발생한다. 본 발명의 일 실시예에서, 짧은 트리거 기간은 평가 기간 후에 일어난다. 이 짧은 트리거 기간 전에, 입력 신호가 평가 기간 도중에 사용자 설계 회로의 하드웨어 모델 구조화 부분을 통과하여 전파된다. 본 발명의 일 실시예에 따른 EVAL 신호의 논리 상태의 변화에 의해 표시되는 짧은 트리거 기간은 정상 상태가 도달된 후의 평가 기간으로부터 전파된 새로운 값으로 업데이트될 수 있도록, 사용자 설계 내의 모든 TIGF 래치와 플립플롭을 제어한다. 짧은 트리거 기간은 낮은 스큐(skew) 네트워크에 전체적으로 분산되며 재구성가능 논리 소자가 적절한 동작을 허용할 수 있을 정도만큼 짧을 수 있다(즉, 도82에 도시된 지속시간 t2에서 t3뿐만 아니라 t0에서 t1의 지속시간). 짧은 트리거 기간 도중에, 새로운 1차(primary) 입력이 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)하며 비동기적(asynchronous)이므로, 클록 입력이 인에이블되고 래치 인에이블 입력이 인에이블되는 동안은, 출력(Q)이 입력(D)을 추적한다.
도80(B)은 본 발명의 일 실시예에 따른 TIGF 래치를 나타낸다. 도80(A)에 도시된 바와 같이, TIGF 래치는 D 입력, 인에이블 입력, 셋(S), 리셋(R), 및 출력 Q를 갖는다. 따라서, TIGF 래치는 트리거 입력을 갖는다. TIGF 래치는 D 플립플롭(2471), 멀티플렉서(2472), OR 게이트(2473), AND 게이트(2474), 및 다양한 인터커넥션(interconnection)을 갖는다.
D 플립플롭(2471)은 라인(2476)을 경유하여 AND 게이트(2474)의 출력으로부터 D 플립플롭(2471)의 입력을 수신한다. D 플립플롭은 또한 라인(2477) 상의 트리거 신호에 의해 입력된 클록에서 트리거되며, 상기 트리거 신호는 평가 사이클에 기초한 엄격한 스케줄에 따라 RCC 시스템에 의해 전체적으로 분산되어 있다. D 플립플롭(2471)의 출력은 라인(2478)을 경유하여 멀티플렉서(2472)의 한 입력에 연결된다. 멀티플렉서는 라인(2484) 상의 인에이블 신호에 의해 제어된다. 멀티플렉서(2472)의 출력은 라인(2479)을 경유하여 OR 게이트(2473)의 입력에 연결된다. OR 게이트(2473)의 다른 입력은 라인(2480) 상의 셋(S) 입력에 연결된다. OR 게이트(2473)의 출력은 라인(2481)을 경유하여 AND 게이트(2474) 상의 리셋(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 래치는 또한 클록 돌발사고(glitch) 문제를 해결한다. 클록신호가 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), 및 출력(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 플립플롭이 업데이트되고 다음 평가 기간 이전인, 모방된(emulated) 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 플립플롭으로부터 유도될 수 있다.
Ⅶ. 시뮬레이션 서버
본 발명의 또다른 실시예에 따른 시뮬레이션 서버는 다중 사용자들이 동일한 재구성가능 하드웨어 유닛을 액세스하여 시간 공유된 방식으로 이들 또는 상이한 사용자 설계를 시뮬레이트하고 가속하도록 제공된다. 고속 시뮬레이션 스케줄러 및 상태 교체(swapping) 메커니즘이 높은 수율을 야기하는 액티브 시뮬레이션 프로세스를 갖는 시뮬레이션 서버를 제공하기 위해 이용된다. 상기 서버는 가속 및 하드웨어 상태 교체 목적을 위해 재구성가능한 하드웨어 유닛을 액세스하도록 다중 사용자 또는 프로세스에 제공된다. 가속이 달성되거나 하드웨어 상태가 액세스되면, 각 사용자 또는 프로세스는 소프트웨어에서만 시뮬레이션되고, 이에 의해 다른 사용자 또는 프로세스에 재구성가능한 하드웨어 유닛의 제어를 해제시킨다.
본 명세서의 시뮬레이션 서버 부분에서, "작업(job)" 및 "프로세스"와 같은 용어가 사용된다. 본 명세서에서, 용어 "작업(job)" 및 "프로세스"는 일반적으로 상호교환적으로 사용된다. 과거에는, 배치(batch) 시스템이 "작업"을 실행하였고 시간 공유 시스템이 "프로세스" 또는 프로그램을 저장 및 실행하였다. 오늘날의 시스템에서, 이들 작업 및 프로세스는 유사하다. 따라서, 본 명세서에서, 용어 "작업"은 배치 타입 시스템에 국한되지 않고 "프로세스"는 시간 공유 시스템에 국한되지 않는다. 오히려, "프로세스"가 시간 슬라이스(slice) 내에 또는 다른 시간 공유 인터럽터(interrupter)에 의해 어떠한 인터럽트가 없이 수행되는 극단적인 경우에, "작업"이 "프로세스"와 동일하며, "작업"이 완결되기 위해 다중 시간 슬라이스를 요구하는 경우인 다른 극단적인 경우에는 "작업"은 "프로세스"의 서브셋(subset)이 된다. 따라서, "프로세스"가 다른 동일한 우선순위를 갖는 사용자/프로세스의 존재로 인하여 완결된 실행을 위해 다중 시간 슬라이스를 요구하는 경우에, "프로세스"는 "작업"으로 분할된다. 또한, 유일한 높은 우선순위 사용자 또는 프로세스가 시간 슬라이스 내에서 완결될 정도로 충분히 기 때문에 "프로세스"가 완결된 실행을 위해 다중 시간 슬라이스를 요구하지 않는다면, "프로세스"는 "작업"과 동일하다. 따라서, 사용자는 시뮬레이션 시스템에서 실행되고 로딩된 하나 이상의 "프로세스" 또는 프로그램과 상호작용할 수 있으며, 각 "프로세스"는 시간 공유 시스템을 완결하기 위해서 하나 이상의 "작업"을 필요로 할 수 있다.
본 발명의 한 구조에서, 원격 터미널을 경유한 다중 사용자는, 동일한 재구성가능 하드웨어 유닛을 액세스하고 동일 또는 상이한 사용자 회로 설계를 검토/디버깅하기 위해서, 비(non)-네트워크 환경의 동일한 마이크로 프로세서 워크스테이션(workstation)을 이용할 수 있다. 비-네트워크 환경에서, 원격 터미널은 동작 기능에 대한 액세스를 위해 주 컴퓨팅 시스템에 연결될 수 있다. 이 비-네트워크 구조는 다중 사용자들이 병렬 디버깅 목적을 위해 동일한 사용자 설계에 대한 액세스를 공유하는 것을 가능케한다. 상기 액세스는 스케줄러(scheduler)가 다중 사용자에 대한 액세스 우선순위, 교체(swap) 작업, 및 선택적으로 예정된 사용자중에 록(lock) 하드웨어 유닛을 결정하는 시간 공유 프로세스에 의하여 달성된다. 다른 경우에는, 다중 사용자들이 디버깅 목적을 위한 사용자들의 분리된 상이한 사용자 설계용 서버를 이용하여 동일한 재구성가능 하드웨어 유닛을 액세스할 수 있다. 다른 구조에서는, 다중 사용자 또는 프로세스가 운영체제와 함께 워크스테이션 내의 다중 마이크로프로세서를 공유한다. 또다른 구조에서는, 분리된 마이크로프로세서 기반 워크스테이션 내의 다중 사용자 또는 프로세스가 동일 또는 상이한 사용자 회로 설계를 네트워크 전체에 대해 검토/디버깅하기 위해 동일한 재구성가능 하드웨어 유닛을 액세스할 수 있다. 유사하게, 다중 사용자, 교체 작업, 및 선택적으로 스케줄된 사용자 중에서 록 하드웨어 유닛 액세스에 대한 액세스 우선순위를 결정하는 시간 공유 프로세스에 의해 스케줄러가 달성된다. 네트워크 환경에서, 스케줄러는 UNIX 소켓(socket) 시스템 콜(call)을 통해 네트워크 요구를 청취한다.운영 체제는 스케줄러에게 명령을 전달하기 위해 소켓을 이용한다.
위에서 언급한 바와 같이, 시뮬레이션 스케줄러는 선점의(preemptive) 다중 우선순위 라운드(round) 로빈(robin) 알고리즘을 사용한다. 즉, 높은 우선순위 사용자 또는 프로세스는 상기 사용자 또는 프로세스가 작업을 완결하고 세션(session)을 종결할 때까지 먼저 서비스된다. 동일한 우선순위 사용자 또는 프로세스 중에서, 각 사용자 또는 프로세스에 동일한 시간 슬라이스가 할당되어 완결되기까지 동작이 실행되는 선점 라운드 로빈 알고리즘이 사용된다. 시간 슬라이스는 다중 사용자 또는 프로세스가 서비스되기 전에 오랜시간을 대기할 필요가 없을 정도로 충분히 짧다. 시뮬레이션 서버의 스케줄러가 한 사용자 또는 프로세스를 인터럽트하여 교체되고 새로운 사용자 작업을 실행하기 전에 충분한 동작이 실행될 정도로 시간 슬라이스는 또한 충분히 길다. 본 발명의 일 실시예에서, 디폴트 시간 슬라이스는 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)에 의한 인터럽트 신호의 생성을 개시함에 의해 선점을 다룬다. 이러한 인터럽트 신호 발생이 현재 작업을 중지하고, 현재 인터럽트된 작업에 대한 상태 정보를 저장하고, 작업을 교체하고, 새로운 작업을 실행하는 것을 포함하는 스케줄링 알로리즘에 대한 다수의 단계들중 하나가 된다. 서버 스케줄링 알고리즘이 이하에서 설명될 것이다.
소켓 및 소켓 시스템 콜을 간략히 설명하고자 한다. 일 실시예의 UNIX 운영체제는 시간 공유 모드로 동작할 수 있다. UNIX 커널(kernel)은 CPU를 시간 기간(예를들어, 시간 슬라이스) 동안과 시간 슬라이스의 말미에서 프로세스에 할당시키고, 상기 프로세스를 선점하고 다음 시간 슬라이스에 대하여 다음 것을 스케줄한다. 이전 시간 슬라이스로부터 선점된 프로세스는 나중 시간 슬라이스에서 실행을 위해 리스케줄된다.
프로세스간 통신을 가능 및 용이하게 하고 복잡한 네트워크 프로토콜의 사용을 가능하게 하기 위한 하나의 구조는 소켓이다. 커널은 클라이언트-서버 모델의 범주에서 동작하는 세 개의 층을 포함한다. 소켓 층인 상부층은 시스템 콜과 하부층(프로토콜 층 및 디바이스 층) 간의 인터페이스를 제공한다. 통상, 소켓은 클라이언트 프로세스를 서버 프로세스와 결합시키는 엔드 포인트(end point)를 갖는다. 소켓 엔드 포인트는 다른 장치일 수 있다. 프로토콜층인 중간 층은 TCP 및 IP와 같은 통신용 프로토콜 모듈을 제공한다. 장치 층인 하부층은 네트워크 장치를 제어하는 장치 구동기를 포함한다. 장치 구동기의 일예가 이더넷(Ethernet) 기반 네트워크 상의 이더넷 구동기이다.
서버 프로세스가 하나의 엔드 포인트에서 소켓을 청취하고 클라이언트 프로세스가 양방향 통신 경로의 다른 엔드 포인트에서 다른 소켓 상의 서버 프로세스를 청취하는 클라이언트-서버 모델을 이용하여 프로세스가 통신한다. 커널은 각 클라이언트와 서버의 세 개의 층들 중에서 내부 접속을 유지하고 필요한 경우 클라이언트로부터 서버로 데이터를 전송한다.
소켓은 통신 경로의 엔드 포인트를 형성하는 소켓 시스템 콩을 포함하는 수개의 시스템 콜을 포함한다. 다수의 프로세스가 다수의 시스템 콜의 소켓 디스크립터(descriptor)를 사용한다. 바인드(bind) 시스템 콜은 이름을 소켓 디스크립터와 연관시킨다. 일부 다른 예시적인 시스템은 콜은 커널이 소켓에 접속시키는 연결 시스템 콜 요구를 포함하며, 폐(close) 시스템 콜을 소켓을 폐쇄시키고, 셧다운(shutdown) 시스템 콜은 소켓 접속을 폐쇄시키며, 송신 및 수신 콜은 연결된 소켓을 통해 데이터를 전송한다.
도46은 다중 워크스테이션이 네트워크를 통해 시간 공유 기반의 단일 시뮬레이션 시스템을 공유하는 본 발명의 다른 실시예를 도시한다. 시뮬레이션 시스템의 컴퓨팅 환경 내에서, 단일 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 시스템은 로컬 버스에 연합됨(tying up) 대신에 메모리용 버스를 경유하여 크로스바(crossbar) 스위치를 통하여 멀티프로세서가 메모리에 액세스하는 것을 가능하게 한다.
도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 소켓 프로토콜을 경유하여 서버에 요구를 전달하는 다중 클라이언트가 포함된다. 각 요구를 위하여, 서버는 명령이 성공적으로 실행되었는지에 대한 요구를 인식한다(acknowledge). 서버 큐 상태의 요구를 위하여, 서버는 현재 큐 상태를 응답하여 사용자에게 적절하게 표시될 수 있게 된다. 아래의 표 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), 및 작업 교체기(1144)는 도47에 도시된 스케줄러(1137)를 구성한다.
서버 모니터(1141)는 시스템의 관리자를 위한 사용자 인터페이스 기능을 제공한다. 사용자는 큐 내의 시뮬레이션 작업을 표시하도록 명령하고, 우선순위, 사용 내역, 및 시뮬레이션 작업 교체 효율을 스케줄링함에 의해 시뮬레이션 서버 상태를 모니터할 수 있다. 다른 사용 기능에는 작업 우선순위를 편집하고, 시뮬레이션 작업을 삭제하고, 시뮬레이션 서버 상태를 리셋하는 것이 포함된다.
시뮬레이션 작업 큐 테이블(1142)은 스케줄러에 의해 삽입된 큐 내의 모든 미해결된 시뮬레이션 요구의 리스트를 보유한다. 테이블 입력은 작업 번호, 소프트웨어 시뮬레이션 프로세스 번호, 소프트웨어 시뮬레이션 이미지, 하드웨어 시뮬레이션 이미지 파일, 설계 구조 파일, 우선순위 번호, 하드웨어 사이즈, 소프트웨어 사이즈, 시뮬레이션 실행(run)의 누적 시간, 및 소유자 식별을 포함한다. 작업 큐는 선입선출(FIFO) 큐를 이용하여 구현된다. 따라서, 새로운 작업이 요구되는 경우, 큐의 말단에 배치되게 된다.
우선순위 분류기(1143)는 큐 내의 어떠한 작업이 실행될 것인지 결정한다. 일 실시예에서, 시뮬레이션 작업 우선순위 구조는 어떠한 시뮬레이션 프로세스가 현재 실행에 대해 우선순위를 갖는지 제어하기 위해 사용자 정의가능(즉, 시스템 관리자에 의해 제어가능 및 정의가능)하다. 다른 실시예에서, 우선순위 레벨은 동적이며 시뮬레이션 도중에 변경될 수 있다. 바람직한 실시예에서, 우선순위는 사용자 ID에 기초한다. 통상, 한 사용자는 높은 우선순위를 갖고 나머지 모든 사용자들은 낮으나 동일한 우선순위를 갖는다.
우선순위 레벨은 시스템 관리자에 의해 설정가능하다. 시뮬레이터 서버는 UNIX 장비로부터 "/etc/passwd"로 불리는 UNIX 사용자 파일에서 존재하는 모든 사용자 정보를 입수한다. 새로운 사용자를 부가하는 것은 UNIX 시스템 내에 새로운 사용자를 부가하는 과정 내내 일정하다. 모든 사용자가 정의된 후에, 시뮬레이션 서버 모니터가 사용자용 우선순위 레벨을 조정하기 위해 사용될 수 있다.
작업 교대기(1144)는 사용자용으로 프로그램된 우선순위 결정에 기초하여 한 프로세스 또는 한 워크스테이션과 연관된 한 시뮬레이션을 다른 프로세스 또는 워크스테이션과 연관된 다른 시뮬레이션으로 일시적으로 대치한다. 다중 사용자가 동일한 설계를 시뮬레이트하는 경우에, 작업 교대기가 시뮬레이션 세션 동안 단지 저장된 시뮬레이션 상태에서 교대된다. 그러나, 다중 사용자가 다중 설계를 시뮬레이트하는 경우에, 작업 교대기는 시뮬레이션 상태의 교대 전에 하드웨어 구조용 설계에 로딩한다. 일 실시예에서, 작업 교대가 단지 재구성가능 하드웨어 유닛 액세스만을 위해 행해져야 하기 때문에 작업 교대 메커니즘은 본 발명의 시간 공유실시에의 성능을 향상시킨다. 따라서, 한 사용자가 일부 시간 주기 동안에 소프트웨어 시뮬레이션을 필요로 한다면, 서버는 다른 사용자를 위해 다른 작업으로 교대되어 이 다른 사용자가 하드웨어 가속을 위해 재구성가능 하드웨어 유닛에 액세스할 수 있게 된다. 작업 교대의 빈도는 사용자가 조정가능하고 프로그램가능하다. 또한, 장치 구동기는 작업을 교대하기 위해 재구성가능한 하드웨어 유닛과 통신한다.
시뮬레이션 서버의 동작을 설명하고자 한다. 도49는 동작 중의 시뮬레이션 서버의 흐름도를 나타낸다. 먼저, 단계(1160)에서, 시스템이 유휴상태(idle)가 된다. 시스템이 단계(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)의 작업 교체 단계의 완결시에, 서버의 장치 구동기는 재구성가능 하드웨어 유닛을 로킹하여 단지 현재 예정된 사용자 또는 프로세스만이 하드웨어 모델을 시뮬레이트하고 이용하도록 한다. 로킹 및 시뮬레이션 단계는 단계(1165)에서 일어난다.
이벤트(1166)에서 현재 시뮬레이팅 세션의 시뮬레이션 또는 중지의 완결의 발생하면, 서버는 현재 시뮬레이션 작업의 우선순위를 결정하기 위해 우선순위 분류기 단계(1163)로 복귀하고 나중에 필요한 경우 시뮬레이션 작업을 교체한다. 유사하게, 서버를 우선순위 분류기 상태(1163)로 복귀시키기 위해서, 서버는 이벤트(1167)에서 진쟁중인 활성 시뮬레이션 작업의 동작을 선점할 수 있다. 선점은 단지 어떠한 조건하에서만 발생된다. 이러한 조건중 하나는 높은 우선순위의 작업이 진행중인 경우이다. 이런 조중 다른 하나는 시스템이 계산이 집중적인 시뮬레이션 작업을 현재 구동시키고 있는 경우이며, 이 경우 스케줄러는 타임아웃 타이머를 이용하여 동일한 우선순위를 갖는 작업을 스케줄하도록 현재 진행중인 작업을 선점하도록 프로그램될 수 있다. 일 실시예에서, 타임아웃 타이머는 5분으로 설정되고 현재 작업이 5분 동안 수행된다면, 시스템은 현재 작업을 선점하고 진행중인 작업을 우선순위 레벨에 있다 하더라도 교체한다.
도50은 작업 교체 프로세스의 흐름도이다. 작업 교체 기능은 도49의단계(1164)에서 수행되며 도48의 작업 교체기로서 시뮬레이션 서버 하드웨어에 도시되어 있다. 도50에서, 시뮬레이션 작업이 다른 시뮬레이션 작업으로 교체될 필요가 있는 경우에, 작업 교체기는 단계(1180)에서 재구성가능 하드웨어 유닛에 인터럽트를 전송한다. 재구성가능 하드웨어 유닛이 현재 임의의 작업을 행하지 않는 경우에(즉, 시스템이 유휴상태이거나 사용자가 하드웨어 가속 개입만이 없이 소프트웨어 시뮬레이션 모드에서 동작하고 있는 경우에), 인터럽트는 즉시 작업 교체를 위한 재구성가능 하드웨어 유닛을 준비한다. 그러나, 재구성가능 하드웨어 유닛이 현재 작업을 동작시키고 있고 명령을 실행하거나 데이터를 처리하고 잇는 도중인 경우에, 인터럽트 신호는 인식되나 재구성가능 유닛은 현재 진행중인 명령을 실행하고 현재 작업에 대한 데이터를 처리한다. 재구성가능 하드웨어 유닛이 인터럽트 신호를 수신하고 현재 시뮬레이션 작업이 명령을 실행하거나 데이터를 처리하는 중이 아닌 경우에, 인터럽트 신호는 본질적으로 즉시 재구성 가능 하드웨어 유닛의 동작을 중단시킨다.
단계(1181)에서, 시뮬레이션 시스템은 현재 시뮬레이션 이미지(즉, 하드웨어 및 소프트웨어 상태)를 저장한다. 이 이미지를 저장함에 의해, 사용자는 나중에 전체 시뮬레이션을 상기 저장된 지점까지 재실행시킴 없이 시뮬레이션 실행을 복구할 수 있다.
단계(1182)에서, 시뮬레이션 시스템은 재구성가능 하드웨어 유닛을 새로운 사용자 설계로 구성한다(configure). 이 구성(configuration) 단계는 단지 새로운 작업이 이미 구성되어 재구성가능 하드웨어 유닛에 로딩되고 그 실행이 인터럽트된 사용자 설계와 상이한 사용자 설계에 관련되어 있는 경우에만 요구된다. 구성 후에, 저장된 하드웨어 시뮬레이션 이미지가 단계(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비트 COMAND 신호, 및 라인(1233) 상의 단일 비트 DONE 신호이다. 핸드셰이크 논리 인터페이스는 이들 신호들이 수행될 필요가 있는 다양한 동작에 대하여 적절한 모드로 재구성 가능 하드웨어 유닛에 배치되도록 이들 신호를 처리하는 논리 회로를 포함한다. 상기 인터페이스는 CTRL_FPGA 유닛(또는 FPGA I/O 제어기)에 결합된다.
3 비트 SPACE 신호에 대하여, PCI 버스를 통한 시뮬레이션 시스템의 컴퓨팅 환경과 재구성 가능 하드웨어 유닛 사이의 데이터 전송이 소프트웨어/하드웨어 경계--REG(레지스터), CLK(소프트웨어 클록), S2H(소프트웨어에서 하드웨어로), 및 H2S(하드웨어에서 소프트웨어로)--의 임의의 I/O 어드레스 공간에 대해 지정된다. 위에서 설명한 바와 같이, 시뮬레이션 시스템은 하드웨어 모델을 상이한 컴포넌트 타입과 제어 기능에 따라 주 메모리의 네 개의 어드레스 공간으로 맵핑한다. CLK 공간은 소프트웨어 클록으로 지정되고, S2H 공간은 소프트웨어 테스트-벤치 컴포넌트의 하드웨어 모델로의 출력으로 지정되고, H2S 공간은 하드웨어 모델의 소프트웨어 테스트-벤치 컴포넌트의 출력으로 지정된다. 이들 지정I/O 버퍼 공간은 시스템 초기화 기간 중에 커널의 주 메모리 공간으로 맵핑된다.
다음 표G는 각 SPACE 신호를 설명한다.
표G: SPACE 신호
SPACE 설명
000 전체(또는 CLK) 공간 및 소프트웨어에서 하드웨어(DMA wr)
001 레지스터 기록(DMA wr)
010 하드웨어에서 소프트웨어로 (DMA wd)
011 레지스터 판독 (DMA wd)
100 SRAM 기록 (DMA wr)
101 SRAM 판독 (DMA wd)
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 OR 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의 어레이로 프로그램된다. 본 발명의 일 실시예를 구현함으로써, 메모리 시뮬레이션 스킴(scheme)은 메모리 액세스를 처리하는 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 메모리 디바이스)에서 호스트 컴퓨팅 시스템으로 데이터를 전송한다.
"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 로직 디바이스를 기다린다. 만약, 오퍼레이션이 기록 오퍼레이션이면, 어드레스, 제어, 및 데이터 신호들이 FPGA 로직 디바이스에서 각 SRAM 메모리 디바이스로 전송된다. 만약, 오퍼레이션이 판독 오퍼레이션이면, 어드레스, 제어, 및 데이터 신호들이 지정 SRAM 메모리 디바이스로 제공되고, 데이터 신호가 SRAM 메모리 디바이스에서 각 FPGA 로직 디바이스로 전송된다. 결국, 모든 FPGA 로직 디바이스에서 원하는 메모리 블록이 액세스되고, 메모리 시뮬레이션 기록/판독 사이클은 완성되며, 메모리 시뮬레이션 시스템은 다음 메모리 시뮬레이션 기록/판독 사이클이 온셋(onset)될 때까지 대기한다.
도 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이다. 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])을 통해서 이루어진다.
도 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 유니트) 및 버스를 포함한다. 전술한 인터-보드 커넥터는 보드들 사이에 제공되어, 모든 보드에서의 로직 디바이스가 서로 연결되어 평가 주기동안 통신할 수 있도록 하며, 로컬 버스는 이러한 모든 보드들을 서로 연결한다. 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의 출력은 라인 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이면, 시뮬레이션 기록/판독 사이클이 완료된다. 그리고, 시뮬레이션 시스템은 상태 1300으로 진행하고, 여기서 DATAXSFR=0인동안 대기한다.
대안적으로, 하이 뱅크 및 로우 뱅크 상태 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 버스로부터 어드레스/제어 신호를 래칭(latch)하고 mem_wr 신호를 추출하며 어드레스/제어 먹스(mux)에 적절한 선택 신호를 발생시켜 어드레스/제어 신호가 MA[18:2]/제어 버스 상에 배치될 수 있게 하는 시간을 요구하기 때문이다. 부가하여, MA[18:2]/제어 버스 상의 어드레스/제어 신호를 SRAM 메모리 장치에 배치한 이후, 시뮬레이션 시스템은 FD 버스 상에 배치될 SRAM 메모리 장치로부터 나온 대응 데이터를 기다려야 한다. 일 예는 트레이스(1384)와 트레이스(1381) 사이의 시간 오프셋(offset)이고, 여기서, RD1_1은 AC_1가 MA[18:2]/제어 버스 상에 배치된 이후 FD 버스 상에 배치된다.
높은 뱅크(bank) 상에서, 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 : 메모리 맵
설정 파일(configuration file)에 대한 데이터 포맷은 본 발명의 일 실시예에 따라 이하의 표 J에 나타난다. CPU는 모든 온-보드 FPGA에 대하여 1 비트를 병렬로 설정하도록 매번 PCI 버스를 통하여 1 워드를 보낸다.
표 J : 설정 데이터 포맷
이하의 표 K는 XSFR_EVAL 레지스터를 리스트한다. 그것은 모든 보드에 상주한다. XSFR_EVAL 레지스터는 EVAL 기간(period)을 프로그래밍하고 DMA 판독/기록을 제어하며 EVAL_DONE 및 XSFR_DONE 필드의 상태를 판독하기 위하여 호스트 컴퓨팅 시스템에 의해 사용된다. 호스트 컴퓨팅 시스템은 또한 메모리가 액세싱할 수 있도록 이러한 레지스터를 사용한다. 이러한 레지스터와 관련된 시뮬레이션 시스템의 동작은 도 62 및 도 63과 관련하여 이하에서 설명된다.
표 K : 모든 6개의 보드에 대한 XSFR_EVAL REGISTER(로컬 어드레스: 0h)
이하의 표 L은 CONFIG_JTAG[6:1] 레지스터의 콘텐트를 리스트한다. CPU는 FPGA 로직 장치를 설정하고 이러한 레지스터를 통하여 FPGA 로직 장치에 대한 경계 스캔 테스트(boundary scan test)를 실행한다. 각각의 보드는 하나의 전용 레지스터를 갖는다.
표 L : CONFIG_JTAG[6:1] REGISTER
도 62 및 도 63은 본 발명의 다른 실시예에 대한 타이밍 다이어그램을 보여준다. 상기 2 도면은 XSFR_EVAL 레지스터와 관련한 시뮬레이션 시스템의 동작을 보여준다. XSFR_EVAL 레지스터는 EVAL 기간을 프로그래밍하고 DMA 판독/기록을 제어하며 EVAL_DONE 및 XSFR_DONE 필드의 상태를 판독하기 위하여 호스트 컴퓨팅 시스템에 의하여 사용된다. 호스트 컴퓨팅 시스템은 또한 메모리가 액세싱할 수 있도록 이러한 레지스터를 사용한다. 상기 2 도면 사이의 주된 차이점 중 하나는 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 로직 장치가 이러한 신호를 가정한다면 평가(evaluation) 사이클을 시작하기 위해 사용된다. 데이터 전송의 종료에서, 평가 사이클은 평가 프로세스를 촉진하기 위하여 어드레스 포인터 초기화(address pointer initialization) 및 소프트웨어 클럭의 동작을 포함하여 시작된다.
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))와 관련된 소정의 오버헤드(overhead)를 포함한다. 그 후에, 호스트 컴퓨팅 시스템은 로컬 버스 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 신호가 게이팅된(gated) 클럭에 대한 FPGA 로직 장치에 의해 더 이상 생성되지 않는 최대 시간은 대략 23 클럭 사이클이다. 이러한 기간보다 더 긴 EVAL_REQ_N 신호는 무시될 것이다.
시간(1413)에서, 즉 시간(1412)(DMA 기록 동작의 종료시) 이후의 대략 2 클럭 사이클 정도 지난 시간에서, CTRL_FPGA 유닛은 DMA 판독 전송을 시작하기 위하여 기록 어드레스 스트로브(strobe) 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 로직 장치들 사이의 경쟁은 또한 그들이 EVAL_REQ_N 신호를 생성할 때 시작된다.
시간(1417)에서, 시간(1416)에서의 DMA 판독 기간의 완료 바로 이전에, 호스트 컴퓨터 시스템은 DMA 사이클의 종료가 가까운지를 결정하기 위하여 PLX 인터럽트 레지스터를 폴링(poll)한다. 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)
본 발명의 커버리피케이션 시스템(coverification system)은 설계자에게 소프트웨어 시뮬레이션의 유연성 및 하드웨어 모델을 사용함에 의해 얻어지는 더 빠른 속도를 제공함으로써 설계/개발를 가속시킬 수 있다. 하드웨어 부분 설계 및 소프트웨어 설계 둘 다 ASIC 제조에 앞서 확인될 수 있고 에뮬레이터 기반 커버리피케이션 툴의 제한이 없다. 디버깅 특성이 향상되고 전체 디버깅 시간이 현저히 감소될 수 있다.
테스트받는 장치(device-under-test)로서 ASIC을 구비한 종래의 커버리피케이션 툴
도 64는 비디오, 멀티미디어, 에더넷(Ethernet), 또는 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)는 타겟 시스템(target system)(2020)에 배치되는데, 타겟 시스템은 마더보드(motherboard) 상의 중앙 컴퓨팅 시스템(2021) 및 여러 주변 장치들의 결합물이다. 타겟시스템(2020)은 CPU 및 메모리를 포함하는 중앙 컴퓨팅 시스템(2021)을 포함하고, 많은 어플리케이션을 실행하기 위하여 마이크로소프트 윈도우즈 또는 썬 마이크로시스템의 솔라리스(Solaris)와 같은 소정의 운영 시스템 하에서 동작한다. 당업계에 공지된 것처럼, 썬 마이크로시스템의 솔라리스는 운영 환경이고 인터넷, 인트라넷 및 엔터프라이즈-와이드(enterprise-wide) 컴퓨팅을 지원하는 소프트웨어 제품들의 세트이다. 솔라리스 운영 환경은 산업 표준 UNIX 시스템 배포 버전 4에 기초하고, 분산된 네트워킹 환경의 클라이언트-서버 어플리케이션을 위하여 설계되었으며, 더 작은 웍그룹(workgroup)에 대하여 적절한 자원을 제공하며, 전자 상업에 요구되는 WebTone을 제공한다.
테스트받는 장치(2024)용 장치 드라이버(device driver)(2022)는 운영 시스템(및 임의의 어플리케이션)과 테스트받는 장치(2024) 사이의 통신을 가능하게 하도록 중앙 컴퓨팅 시스템(2021)에 포함된다. 당업계에 공지된 것처럼, 장치 드라이버는 하드웨어 컴포넌트 또는 컴퓨터 시스템의 주변 장치를 제어하는 특정 소프트웨어이다. 장치 드라이버는 장치의 하드웨어 레지스터를 액세싱하고 종종 장치에 의해 발생한 인터럽트를 다루기 위하여 인터럽트 핸들러(interrupt handler)를 포한한다. 장치 드라이버는 종종 운영 시스템 커널(kernel)의 최하위 레벨의 일부를 형성하고, 커널이 구성된 경우 장치 드라이버는 커널과 링크된다. 최근의 보다 많은 시스템은 운영 시스템이 실행된 이후 파일들로부터 설치될 수 있는 로딩가능(loadable) 장치 드라이버를 구비한다.
테스트받는 장치(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 기반 커버리피케이션 툴은 디버깅 특징이 존재하지 않기 때문에 불만족스럽다(설계자는 정교한 기술없이는 "실패된" 테스트의 원인을 가려낼 수 없고, 검출된 모든 버그에 대한 "교정"의 수도 프로젝트의 시초에 예측될 수 없으며, 그리하여 스케쥴 및 예산을 예측할 수 없게 된다).
테스트받는 장치로서 에뮬레이터(emulator)를 구비한 종래의 커버리피케이션 툴
도 66은 에뮬레이터를 구비한 종래의 커버리피케이션 툴을 도시한다. 도 64에 도시되고 앞서 설명된 셋업(set-up)과는 달리, 테스트받는 장치는 타겟 시스템(2040)과 소정의 주변 장치 및 테스트 워크스테이션(2052)과 결합된 에뮬레이터(2048)로 프로그래밍된다. 에뮬레이터(2048)는 에뮬레이션 클럭(2066) 및 에뮬레이터로 프로그래핑된 테스트받는 장치를 포함한다.
에뮬레이터(2048)는 PCI 버스 브리지(bridge)(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)를 사용하는 것에 대한 필요성은 디버그 셋업 부담 및 시간을 증가시킨다.
재배치가능 컴퓨팅 어레이를 이용한 시뮬레이션(Simulation with Reconfigurable Computing Array)
간단한 리뷰로서, 도 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 하드웨어 어레이의 하드웨어 모델을 빈틈없이 제어할 수 있도록 제공된다. 테스트 벤치(bench) 데이터(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)은 시뮬레이션 스케쥴러 및 상태 스와핑 메커니즘(state swapping mechanism)을 구비한 시뮬레이션 서버로서 기능한다. 서버는 워크스테이션에서 각각의 사용자가 높은 속도의 가속 및 하드웨어 상태 스와핑 목적으로 RCC 하드웨어 어레이(2084)에 액세싱할 수 있게 한다. 가속 및 상태 스와핑 이후에, 각각의 사용자는 다른 워크스테이션에서 다른 사용자들에게 RCC 하드웨어 어레이(2084)의 제어를 릴리싱(releasing)하는 동안 소프트웨어의 사용자 설계를 국부적으로 시뮬레이팅할 수 있다. 이러한 네트워크 모델은 또한 이하에서 설명되는 커버리피케니션 시스템에 사용될 것이다.
RCC 어레이 시스템(2080)은 설계자에게 전체 설계를 시뮬레이팅할 수 있고 재배치가능 컴퓨팅 어레이의 하드웨어 모델을 경유하여 선택된 사이클 동안 테스트 지점들의 부분을 가속시키며 어느 시점에서든지 가상으로 설계의 임의의 부분에 대한 내부 상태 정보를 얻을 수 있는 파워 및 유연성을 제공한다. 실제로, 싱글-엔진 재배치가능 컴퓨팅 어레이(RCC) 시스템은 하드웨어 가속 시뮬레이터(hardware-accelerated simulator)로서 대충 설명될 수 있는데, 싱글 디버그 세션에서 이하의 작업, (1) 시뮬레이션, (2) 사용자가 시작, 중지, 값 가정, 및 임의의 시점에서 설계의 내부 상태를 조사할 수 있는 하드웨어 가속으로 시뮬레이션, (3) 시뮬레이션 후 분석, 및 (4) 내부 회로 에뮬레이션(in-circuit emulation)을 수행하기 위하여 사용될 수 있다. 소프트웨어 모델 및 하드웨어 모델 둘 다가 소프트웨어 클럭을 경유하여 싱글 엔진의 엄격한 제어 하에 있기 때문에, 재배치가능 컴퓨팅 어레이의 하드웨어 모델은 소프트웨어 시뮬레이션 모델에 빈틈없이 결합된다. 이것은 설계자가 사이클마다(cycle-by-cycle) 디버깅할 수 있게 하고 가치있는 내부 상태 정보를 얻기 위하여 다수의 사이클을 통해 하드웨어 모델을 가속 및 감속시킬 수 있게 한다. 더욱이, 이러한 시뮬레이션 시스템은 신호 대신에 데이터를 다루기 때문에, 어떠한 복잡한 신호 대 데이터 변환/타이밍 회로도 필요하지 않다. 부가하여, 재배치가능 컴퓨팅 어레이의 하드웨어 모델은 설계자가 전형적인 에뮬레이션 시스템과 달리 상이한 노드(node) 세트를 조사하길 원한다면 재컴파일링될 필요가 없다. 보다 상세한 설명은 위의 설명을 다시 참조하라.
외부 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 확장기(expander) 형태의 외부 인터페이스(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로 라벨링된 소프트웨어의 테스트 벤티 데이터를 구비한 또다른 장치(예를 들어, 그래픽 가속기(graphic accelerator))의 모델을 포함할 수 있다. 사용자는 어떠한 장치(및 그와 관련된 드라이버 및 테스트 벤치 데이터)가 모델링되고 RCC 컴퓨팅 시스템(2141)에 통합될 수 있는지 그리고 어떠한 장치가 실제로 커버리피케이션 시스템과 결합될 것인지를 결정한다.
커버리피케이션 시스템은 (1) RCC 컴퓨팅 시스템(2141)과 RCC 하드웨어 어레이(2190) 사이에, (2) 외부 인터페이스(타겟 시스템과 외부 I/O 장치에 결합됨)와 RCC 하드웨어 어레이(2190) 사이에 트래픽(traffic) 제어를 제공하는 제어 로직을 포함한다. 소정의 데이터는 소정의 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 장치로부터 수신한 데이터를 저장하기 위해 커버(coverification) 시스템에 의해 이용될 수 있다. 칩 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 - 6846 콘트롤러를 리세트하기 위한 저레벨 신호
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 하드웨어 어레이로부터 CC 연산 시스템과 외부 인터페이스로 전달된 데이터를 처리할 책임이 있다. 자극(외부 또는 그외)에 응답하여 데이터를 처리하는 과정동안, 하드웨어 모델은 타겟 응용 또는 몇몇 I/O 장치가 사용되는 특정 출력 데이터를 발생시킨다. 이러한 출력 데이터는 독립 데이터, 어드레스, 제어 정보 또는 다른 응용이나 장치가 자신의 처리에 필요한 다른 관련 정보일 수 있다. RCC 연산 시스템에 대한 이러한 출력 데이터(소프트웨어내 다른 외부 I/O 장치의 모델을 가진), 타겟, 시스템 또는 외부 I/O 장치가 여러 내부 노드에 제공된다. 데이터-인 논리에 대해 상술된 바와 같이, 이러한 내부 노드의 일부가 사용자 디자인의 출력 핀-아웃에 해당한다. 사용자 디자인은 핀-아웃을 통해 일반적으로 액세스되지 않는 다른 내부 노드를 가지지만, 이러한논-핀-아웃 내부 노드는 이들이 출력 핀-아웃인지 아닌지에 관계없이 사용자 디자인내 여러 내부 노드에서 자극 응답을 판독하고 분석하길 원하는 설계자에게 융통성을 제공할 다른 디버깅 목적을 위한 것이다. 사용자 디자인의 고도한 하드웨어 모델로부터 (소프트웨어내 다른 I/O 장치의 모델을 가진) RCC 연산 시스템 도는 외부 인터페이스로 제공된 자극에 대해, 데이터-아웃 논리와 출력 핀-아웃에 해당하는 이러한 내부 노드가 수행된다.
예를 들면, 만일 사용자 디자인이 CRTC 6845 비디오 콘트롤러라면, 몇몇 출력 핀-아웃은 다음과 같다:
MA0-MA13 - 메모리 어드레스
D0-D7 - 데이터 버스
DE - 디스플레이 인에이블
CURSOR - 커서 위치
VS - 수직 동기화
HS - 수평 동기화
다른 출력 핀-아웃은 이러한 비디오 콘트롤러에서 사용될 수 있다. 외부 세계와 인터페이스하는 출력 핀-아웃의 수에 기초하여, 노드 수와 이에 따른 게이팅 논리와 포인터의 수는 빠르게 결정될 수 있다. 따라서, 비디오 콘트롤러상의 출력 핀-아웃 MA0-MA13은 비디오 RAM용 메모리 어드레스를 제공한다. VS 출력 핀-아웃은 수직 동기화용 신호를 제공하고, 따라서 모니터상의 수직 리트레이스를 야기한다. 출력 핀-아웃 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_RF 신호를 발생시킨다. 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의 내부 노드에 있는 데이터를 트라이-상태 버퍼(23010과 국부 버스(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으로싸우스(south) 상호연결로 연결되어 있다.
본 발명의 한 실시예의 작동을 설명하기 위해, 가정적인 사용자 회로 설계가 사용될 것이다. 구조화된 레지스터 송신 레벨(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 reg1(clk, reset, d2,q2);
register reg1(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 = 1;
#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)는 상기 소프트웨어 케르넬을 포함하고 있으며, 그것에 의해 제어된다. 일반적으로, 상기 케르넬은 상기 SE뮬레이션 시스템의 전체 동작을 제어하는 메인 제어 루프이다. 일정한 테스트 벤치 프로세스가 활성화되어 있는 동안에, 상기 케르넬은 상기 활성화된 테스트-벤치 구성요소를 이뮬레이트하고 클록 구성요소를 이뮬레이트하며, 결합 논리 데이터를 전파할 뿐만 아니라 레지스터와 메모리를 업데이트하기 위해 클록 에지를 탐색하여, 상기 시뮬레이션 시간을 진행한다. 상기 케르넬이 상기 소프트웨어 사이드에 존재하더라도, 그것의 작동 중 일부분과 명령은 하드웨어 모델이 그러한 명령과 작동을 위해 존재하기 때문에 하드웨어에서 작동할 수 있다. 따라서, 상기 소프트웨어는 소프트웨어와 하드웨어 모델을 모두 제어한다.
상기 소프트웨어 사이드(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)로의 인에이블 입력에 신호들을 제공한다. 상기 설명한 것과 같이, 본 발명에 상응하는 소프트웨어 클록은 레이스 조건과 유지 시간 방해(hold-time violation issues)를 제거한다. 상기 주요 클록에 의해 클록 에지가 소프트웨어에서 탐색될 때, 상기 탐색 논리는 하드웨어에서 상응하는 탐색 논리를 트리거한다. 시간적으로, 상기 클록 에지 레지스터(916)는 레지스터 인에이블 입력이 상기 레지스터로의 입력에 남아있는 데이터로 게이트하기 위해 인에이블 신호를 발생한다.
주소 포인터(194)는 또한 예시적이고 개념적인 설명을 위해 도시되어 있다. 주소 포인터들은 실제적으로 각 FPGA 칩에서 구현되며, 상기 데이터가 선택적으로 그리고 연속해서 그것의 목적지로 전송되도록 한다.
상기 결합 구성요소들(S4-S7)은 또한 레지스터 구성요소(S1-S3), sign, sigout)에 연결되어 있다. 이러한 신호들은 상기 I/O 버스(915)상에서 상기 PCI 버스로 및 으로부터 이동한다.
맵핑, 정착 및 단계의 라우팅 이전에, 완벽한 하드웨어 모델이 주소 포인터를 제외하고 도31에 도시되어 있다. 상기 시스템은 상기 모델을 특정 칩에 맵하지는 않는다. 레지스터(s1-S3)는 상기 I/O 버스와 상기 결합 구성요소(S4-S6)에 연결되지 위해 제공된다. 결합 구성요소(S7)는 상기 레지스터(S3)의 출력(q3)이다. 상기 sigin, sigout 및 소프트웨어 클록(920)은 또한 모델화된다.
일단 상기 하드웨어 모델이 결정되면, 상기 시스템은 맵되고, 정착하며, 상기 모델을 하나 이상의 칩으로 라우트한다. 이러한 특정 예는 실제적으로 단일 Altera FLEX 10K에서 구현될 수 있지만, 교육적인 목적에서 이러한 에는 상기 하드웨어 모델을 구현하기 위해 두 개의 칩이 요구된다는 것을 생각할 수 있다. 도32는 상기 예를 이한 한 특정 하드웨어 모델에 대한 칩 부분 결과를 도시하고 있다.
도32에서, 점선으로 표현된 칩 경계에 의해 완벽한 모델이 도시되어 있다(다만, 사기 I/O와 클록 에지 레지스터는 제외된다). 상기 결과는 최종 구조 파일이 발생하기 전에 상기 SE뮬레이션 시스템의 컴파일러에 의해 생산된다. 따라서, 상기 하드웨어 모델은 유선 라인(921, 922 및 923)을 위한 상기 두 개의 칩들 사이에서 적어도 3개의 유선을 요구한다. 상기 2개의 칩들(칩1, 칩2)사이에서 요구되는 핀/유선들의 수를 최소화하기 위해, 또 다른 모델-칩 부분은 발생되어야 하거나 또는 멀티플렉싱 구조가 사용되어야 한다.
도32에 도시되어 있는 상기 특정 부분 결과를 분석할 때, 상기 2개의 칩들 사이에서 유선의 수는 칩2로부터 칩1로의 상기 sigin 유선 라인(923)을 제거함으로써 줄어들 수 있다. 도33은 상기 부분을 도시하고 있다. 비록 도33의 상기 특정 부분은 유선의 수만에 근거하여 도32의 부분보다는 더 좋은 부분으로 보이지만, 상기 예는 상기 SE뮬레이션 시스템이 상기 맵핑, 정착 및 작동 라우팅의 수행 후에 도 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)은 사기 하드웨어 모델을 함께 연결하는 상호연결 유선(944, 945)을 가지고 있다. 이러한 두 개의 상호연결 유선들은 도8에 도시되어 있는 상호연결 부분이다. 도8을 참고로, 상기 상호연결은 칩F32와 칩F33에 위치하고 있는 상호연결(611)이다. 한 실시예에서, 상기 각 상호연결을 위한 유선/핀들의 최대 수는 44이다. 도34에서, 상기 모델된 회로는 칩들930과 940 사이에서 단지 2개의 유선/핀들을 요구한다.
상기 칩들(930, 940)은 상기 뱅크 버스(90)에 연결되어 있다. 단지 2개의 칩들이 구현되기 때문에, 2개의 칩들은 동일한 뱅크에 있거나 또는 각각은 서로 다른 뱅크에 존재할 수 있다. 궁극적으로, 한 칩은 하나의 뱅크 버스와 연결되며, 또 다른 칩은 서로 다른 뱅크에 연결되어, 상기 FPGA 인터페이스에서의 출력은 상기 PCI 인터페이스의 출력과 동일하다.
전술한 본 발명의 바람직한 실시예는 예와 설명을 목적으로 제시된 것이며 개시된 정확한 형태로 상기 발명을 제한하려는 것은 아니다. 명확히, 당업자는 많은 수정과 변화를 가할 수 있다. 당업자는 본 발명의 범위와 정신을 벗어나지 않고 본 발명의 여러 수정을 가할 수 있다. 따라서, 본 발명은 이하 첨부된 청구항에 의해서만 제한된다.

Claims (16)

  1. 제1 입력, 제2 입력, 제1 출력 및 제어 입력을 갖는 제1 논리부; 및
    제1 트리거 입력, 상기 제1 출력과 연결된 제3 입력, 및 상기 제1 논리부의 제2 입력에 연결된 제2 출력을 가지며, 현재 값을 저장하기 위한 제2 논리부를 포함하며, 상기 제2 논리부는 트리거 신호가 상기 트리거 입력에서 수신되는 경우 제1 출력에서의 값과 관련된 값으로 갱신되는 논리 장치.
  2. 제1항에 있어서,
    제4 입력, 제2 트리거 입력, 및 제3 출력을 가지며, 새로운 값을 저장하는 제3 논리부로서, 상기 제3 출력은 상기 제1 논리부의 제1 입력에 결합되는 제3 논리부; 및
    클록 입력, 제3 트리거 입력, 및 제4 출력을 갖는 에지 검출기를 포함하며, 상기 제4 출력은 상기 제어 입력과 연결되고, 상기 트리거 신호가 상기 논리장치를 갱신하기 위해 선택된 시간에서 상기 제2 및 제3 트리거 입력들에 인가되는 논리 장치.
  3. 논리 장치들 및 회로 경로들을 포함하는 사용자 디자인 회로의 적절한 작동을 검증하는 디버그 시스템으로서,
    상기 사용자 디자인 회로의 소프트웨어 모델을 발생시키는 계산 시스템;
    사용자 디자인 회로의 적어도 일부의 하드웨어 모델을 발생시키는 재구성 하드웨어 시스템; 및
    상기 계산 시스템 및 재구성 하드웨어 시스템에 결합되고 상기 계산 시스템에 대한 슬레이브로서 작용하며 상기 재구성 하드웨어 시스템에서 상기 하드웨어 모델의 작동을 제어하는 제어 수단을 포함하는 디버그 시스템.
  4. 제3항에 있어서,
    상기 재구성 하드웨어 시스템의 하드웨어 모델은 상기 사용자 디자인 회로내의 논리 장치들을 대신하는 에뮬레이션(emulation) 논리 장치들을 포함하는 디버그 시스템.
  5. 제4항에 있어서,
    상기 제어 수단은 평가 주기 및 트리거 주기를 포함하고, 상기 평가 주기는 다양한 데이터 및 제어 신호들이 하드웨어 모델을 통해 전달될 수 있도록 충분한 시간을 가지며, 상기 트리거 주기는 상기 에뮬레이션 논리 장치들을 업데이트하는데 사용되는 디버그 시스템.
  6. 제5항에 있어서,
    상기 제어 수단은 상기 에뮬레이션 논리 장치를 갱신하기 위해 상기 트리거 주기동안 트리거 신호를 발생시키고, 각각의 에뮬레이션 논리 장치는 상기 트리거신호를 수신하기 위한 트리거 입력을 포함하는 디버그 시스템.
  7. 제4항에 있어서,
    상기 에뮬레이션 논리 장치는
    제1 입력, 제2 입력, 제1 출력, 및 제어 입력을 갖는 제1 논리부; 및
    제1 트리거 입력, 상기 제1 출력에 결합된 제3 입력, 및 상기 제1 논리부의 제2 입력에 결합된 제2 출력을 가지며, 현재 값을 저장하는 제2 논리부를 포함하며, 상기 제2 논리부는 트리거 신호가 트리거 입력에서 수신되는 경우 상기 제1 출력의 값과 관련된 값으로 갱신되는 디버그 시스템.
  8. 제7항에 있어서,
    제4 입력, 제2 트리거 입력, 및 제3 출력을 가지며, 새로운 값을 저장하는 제3 논리부; 및
    클록 입력, 제3 트리거 입력, 및 제4 출력을 갖는 에지 검출기를 추가로 포함하며, 상기 제4 출력은 상기 제어 입력과 결합되고, 상기 트리거 신호는 상기 논리 장치를 갱신하기 위해 선택된 시간에서 상기 제2 및 제3 트리거 입력들에 인가되는 디버그 시스템.
  9. 제3항에 있어서,
    사용자 디자인 회로의 논리 장치들은 주요(primary) 클록들에 의해 제어되는제1 논리 장치들 및 게이트된(gated) 클록들에 의해 제어되는 제2 논리 장치들을 포함하며, 재구성 하드웨어 시스템의 하드웨어 모델은 상기 제2 논리 장치들을 대신하는 에뮬레이션 논리 장치들을 포함하는 재구성 하드웨어 시스템.
  10. 표준 논리 장치들을 포함하는 사용자 디자인의 적절한 작동을 검증하는 방법에 있어서,
    소프트웨어 내에 사용자 디자인의 제1 모델을 발생시키는 단계;
    하드웨어 내에 사용자 디자인의 적어도 일부에 대한 제2 모델을 발생시키는 단계로서, 에뮬레이션 논리 장치들이 표준 논리 장치들을 대신하는 제2 모델 발생 단계; 및
    소트트웨어의 상기 제1 모델을 통해 하드웨어의 상기 제2 모델을 제어하는 단계를 포함하는 사용자 디자인 검증 방법.
  11. 제10항에 있어서,
    상기 제어 단계는
    신호가 정상-상태에 이르기에 충분한 시간동안 하드웨어 내에 상기 제2 모델을 통해 신호들을 전달시키는 단계; 및
    이전에 저장된 값들을 새로운 값을 갱신하기 위해 하드웨어 내에 상기 제2 모델내에서 논리 장치들에 대한 트리거 신호를 발생시키는 단계를 포함하는 사용자 디자인 검증 방법.
  12. 제10항에 있어서,
    소프트웨어 내의 상기 제1모델 및 하드웨어 내의 상기 제2 모델의 데이터 평가를 소프트웨어-발생 클록과 동기시키는 단계를 포함하는 사용자 디자인 검증 방법.
  13. 제10항에 있어서,
    소프트웨어에서 선택된 디버그 테스트 포인트들을 시뮬레이션하는 단계;
    하드웨어에서 선택된 디버그 테스트 포인트들을 가속하는 단계; 및
    소프트웨어의 제1 모델이 모든 전달 데이터에 대한 접속을 가지도록 소프트웨어의 제1 모델, 하드웨어의 제2 모델, 및 외부I/O 장치들 사이에서 데이터의 전달을 제어하는 단계를 포함하는 사용자 디자인 검증 방법.
  14. 제10항에 있어서,
    상기 데이터가 안정화될 때까지,데이터를 하드웨어로 전달하는 단계를 포함하는 사용자 디자인 검증 방법.
  15. 제14항에 있어서,
    상기 소프트웨어 모델의 클록 에지를 검출하는 단계; 및
    상기 소프트웨어 모델의 클록 에지 검출에 응답하고 하드웨어-발생 클록 신호와 동기시켜 하드웨어 모델을 통해 데이터를 평가하는 단계를 포함하는 사용자 디자인 검증 방법.
  16. 제15항에 있어서, 에뮬레이션 논리 장치들을 갱신하기 위해 에뮬레이션 논리 장치에 대한 트리거 신호를 발생시키는 단계를 포함하는 사용자 디자인 검증 방법.
KR10-2003-7002219A 2001-08-14 2001-08-14 타이밍-비민감성 글리치 없는 로직 시스템 및 방법 KR20040028599A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2001/025546 WO2003017148A1 (en) 1997-05-02 2001-08-14 Timing-insensitive glitch-free logic system and method

Publications (1)

Publication Number Publication Date
KR20040028599A true KR20040028599A (ko) 2004-04-03

Family

ID=21742774

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2003-7002219A KR20040028599A (ko) 2001-08-14 2001-08-14 타이밍-비민감성 글리치 없는 로직 시스템 및 방법

Country Status (6)

Country Link
EP (1) EP1417605A4 (ko)
JP (1) JP4125675B2 (ko)
KR (1) KR20040028599A (ko)
CN (1) CN100578510C (ko)
CA (1) CA2420022A1 (ko)
IL (2) IL154480A0 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101282963B1 (ko) * 2006-05-12 2013-07-08 삼성전자주식회사 에뮬레이션 시스템 및 그 방법
KR101354007B1 (ko) * 2012-12-12 2014-01-21 국방과학연구소 시뮬레이션 시간을 기반으로 시뮬레이션 시스템과 테스트 시스템의 시간 진행을 동기화하는 시스템 간 연동 구성 및 시뮬레이션 모델 테스트 방법
KR101538040B1 (ko) * 2011-11-28 2015-07-20 퀄컴 인코포레이티드 근거리 통신 시스템들에서의 연결 설정을 위한 전력 소비의 감소
KR20160050772A (ko) 2014-10-31 2016-05-11 한국전기연구원 홀센서 글리치 제거 장치

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4561459B2 (ja) 2004-04-30 2010-10-13 ヤマハ株式会社 D級増幅器
CN102057360B (zh) * 2008-11-19 2014-01-22 Lsi股份有限公司 使用自定时的时分复用总线的互连
US8742791B1 (en) * 2009-01-31 2014-06-03 Xilinx, Inc. Method and apparatus for preamble detection for a control signal
US10423740B2 (en) * 2009-04-29 2019-09-24 Synopsys, Inc. Logic simulation and/or emulation which follows hardware semantics
CN102422263B (zh) * 2009-05-07 2016-03-30 赛普拉斯半导体公司 开发、编程和除错环境
CN102799709B (zh) * 2012-06-19 2015-04-01 中国电子科技集团公司第二十八研究所 基于xml的系统仿真试验环境构建与配置系统及方法
US10289579B2 (en) * 2015-12-10 2019-05-14 Qualcomm Incorporated Digital aggregation of interrupts from peripheral devices
EP3399425B1 (de) * 2017-05-05 2020-07-29 dSPACE digital signal processing and control engineering GmbH Verfahren zur erkennung einer verdrahtungstopologie
CN109960593B (zh) * 2017-12-26 2023-02-17 中国船舶重工集团公司七五〇试验场 一种互锁式时序控制仿真方法
CN108537000B (zh) * 2018-03-27 2021-07-27 东南大学 基于分子计算的米利型状态机设计方法
EP3579126A1 (en) * 2018-06-07 2019-12-11 Kompetenzzentrum - Das virtuelle Fahrzeug Forschungsgesellschaft mbH Co-simulation method and device
KR20210065964A (ko) * 2018-09-25 2021-06-04 시놉시스, 인크. 에뮬레이션 및 프로토타이핑에서 오버레이된 클록 및 데이터 전파의 코히어런트 관찰가능성 및 제어가능성
CN109683512B (zh) * 2018-12-07 2022-04-12 四川航天烽火伺服控制技术有限公司 一种应用于舵系统的转接卡
US10454459B1 (en) 2019-01-14 2019-10-22 Quantum Machines Quantum controller with multiple pulse modes
US11164100B2 (en) 2019-05-02 2021-11-02 Quantum Machines Modular and dynamic digital control in a quantum controller
US10931267B1 (en) 2019-07-31 2021-02-23 Quantum Machines Frequency generation in a quantum controller
US11245390B2 (en) 2019-09-02 2022-02-08 Quantum Machines Software-defined pulse orchestration platform
US10862465B1 (en) 2019-09-02 2020-12-08 Quantum Machines Quantum controller architecture
CN112445743B (zh) * 2019-09-04 2024-03-22 珠海格力电器股份有限公司 一种去除毛刺的方法、装置及状态机
CN111479334B (zh) * 2020-03-20 2023-08-11 深圳赛安特技术服务有限公司 一种网络请求重试方法、装置及终端设备
CN111581149B (zh) * 2020-04-24 2022-08-26 希翼微电子(嘉兴)有限公司 可重构地址重映射低功耗多功能定时器
US11132486B1 (en) * 2020-05-21 2021-09-28 Taiwan Semiconductor Manufacturing Company, Ltd. Systems and methods for multi-bit memory with embedded logic
US11043939B1 (en) 2020-08-05 2021-06-22 Quantum Machines Frequency management for quantum control
CN112269728B (zh) * 2020-11-03 2023-08-04 北京百度网讯科技有限公司 一种系统性能评估方法、装置、设备以及存储介质
CN112328701B (zh) * 2020-11-27 2023-11-10 广东睿住智能科技有限公司 数据同步方法、终端设备及计算机可读存储介质
CN113158260B (zh) * 2021-03-30 2023-03-31 西南电子技术研究所(中国电子科技集团公司第十研究所) SoC芯片内部数据分级防护电路
CN112733478B (zh) * 2021-04-01 2021-08-03 芯华章科技股份有限公司 用于对设计进行形式验证的装置
CN113297819B (zh) * 2021-06-22 2023-07-07 海光信息技术股份有限公司 异步时钟的时序检查方法、装置、电子设备、存储介质
JPWO2023281652A1 (ko) * 2021-07-07 2023-01-12
US20230153678A1 (en) * 2021-07-21 2023-05-18 Quantum Machines System and method for clock synchronization and time transfer between quantum orchestration platform elements
CN114841103B (zh) * 2022-07-01 2022-09-27 南昌大学 门级电路的并行仿真方法、系统、存储介质及设备
CN116882336B (zh) * 2023-09-07 2023-12-01 芯动微电子科技(珠海)有限公司 一种基于高级语言模拟rtl的建模方法与装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5801955A (en) * 1996-05-31 1998-09-01 Mentor Graphics Corporation Method and apparatus for removing timing hazards in a circuit design
US5748911A (en) * 1996-07-19 1998-05-05 Compaq Computer Corporation Serial bus system for shadowing registers
US6134516A (en) * 1997-05-02 2000-10-17 Axis Systems, Inc. Simulation server system and method
US6009256A (en) * 1997-05-02 1999-12-28 Axis Systems, Inc. Simulation/emulation system and method

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101282963B1 (ko) * 2006-05-12 2013-07-08 삼성전자주식회사 에뮬레이션 시스템 및 그 방법
KR101538040B1 (ko) * 2011-11-28 2015-07-20 퀄컴 인코포레이티드 근거리 통신 시스템들에서의 연결 설정을 위한 전력 소비의 감소
KR101354007B1 (ko) * 2012-12-12 2014-01-21 국방과학연구소 시뮬레이션 시간을 기반으로 시뮬레이션 시스템과 테스트 시스템의 시간 진행을 동기화하는 시스템 간 연동 구성 및 시뮬레이션 모델 테스트 방법
KR20160050772A (ko) 2014-10-31 2016-05-11 한국전기연구원 홀센서 글리치 제거 장치

Also Published As

Publication number Publication date
CA2420022A1 (en) 2003-02-27
CN1491394A (zh) 2004-04-21
JP4125675B2 (ja) 2008-07-30
IL154480A0 (en) 2003-09-17
IL154480A (en) 2008-11-26
EP1417605A4 (en) 2009-07-15
CN100578510C (zh) 2010-01-06
JP2005500625A (ja) 2005-01-06
EP1417605A1 (en) 2004-05-12

Similar Documents

Publication Publication Date Title
JP4125675B2 (ja) タイミングに鈍感なグリッチのない論理システムおよび方法
US6321366B1 (en) Timing-insensitive glitch-free logic system and method
US9195784B2 (en) Common shared memory in a verification system
US7512728B2 (en) Inter-chip communication system
US6785873B1 (en) Emulation system with multiple asynchronous clocks
US6389379B1 (en) Converification system and method
US7480606B2 (en) VCD-on-demand system and method
US6810442B1 (en) Memory mapping 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
US7366652B2 (en) Method of programming a co-verification system
KR100483636B1 (ko) 에뮬레이션및시뮬레이션을이용한설계검증방법및장치
KR100928134B1 (ko) 주문형 vcd 시스템 및 방법

Legal Events

Date Code Title Description
N231 Notification of change of applicant
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid