KR100921542B1 - 컴퓨터 시스템의 i/o 노드를 위한 주변 인터페이스 회로 - Google Patents

컴퓨터 시스템의 i/o 노드를 위한 주변 인터페이스 회로 Download PDF

Info

Publication number
KR100921542B1
KR100921542B1 KR1020047005566A KR20047005566A KR100921542B1 KR 100921542 B1 KR100921542 B1 KR 100921542B1 KR 1020047005566 A KR1020047005566 A KR 1020047005566A KR 20047005566 A KR20047005566 A KR 20047005566A KR 100921542 B1 KR100921542 B1 KR 100921542B1
Authority
KR
South Korea
Prior art keywords
packet
bus
command
post
buffer circuit
Prior art date
Application number
KR1020047005566A
Other languages
English (en)
Other versions
KR20050021351A (ko
Inventor
아스카타신
휴위트랄리디.
챔버스에릭쥐.
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority to KR1020047005566A priority Critical patent/KR100921542B1/ko
Publication of KR20050021351A publication Critical patent/KR20050021351A/ko
Application granted granted Critical
Publication of KR100921542B1 publication Critical patent/KR100921542B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Bus Control (AREA)

Abstract

컴퓨터 시스템의 I/O 노드를 위한 주변 인터페이스 회로(350). 컴퓨터 시스템의 입력/출력 노드를 위한 주변 인터페이스 회로(350)는 제 1 버퍼 회로(390), 제 2 버퍼 회로(530) 및 버스 인터페이스 회로(490)를 포함한다. 제 1 버퍼 회로는 패킷 명령들을 수신하고 다수의 가상 채널들의 각각의 가상 채널에 각기 대응하는 제 1 다수의 버퍼들을 포함할 것이다. 제 2 버퍼 회로는 버스 인터페이스 회로로부터 패킷 명령들을 수신하기 위해 연결되고 상기 다수의 가상 채널들의 각각의 가상 채널에 각기 대응하는 제 2 다수의 버퍼들을 포함할 것이다. 상기 버스 인터페이스 회로는 선택된 상기 제 1 버퍼 회로 내에 저장된 상기 선택된 패킷 명령들을 주변 버스(560) 상의 송신에 적당한 명령들로 변환하기 위해 구성된다.

Description

컴퓨터 시스템의 I/O 노드를 위한 주변 인터페이스 회로{A PERIPHERAL INTERFACE CIRCUIT FOR AN I/O NODE OF A COMPUTER SYSTEM}
본 발명은 컴퓨터 시스템 입력/출력과 관한 것으로, 특히, 입력/출력 노드에서의 주변 트랜잭션 처리(handling)에 관한 것이다.
전형적인 컴퓨터 시스템에서, 하나 이상의 프로세서들이 하나 이상의 버스들을 통해 입력/출력(I/O) 장치들과 통신한다. I/O 장치들은 I/O 브리지를 통해 프로세서들과 연결되는데, 이 브리지는 I/O 디바이스들에 연결된 주변 버스와 프로세서들에 연결된 공유 버스(shared bus) 사이의 정보 전달을 처리한다.
안타깝게도, 많은 버스 시스템들이 몇 가지의 단점들을 가진다. 예를 들어, 버스와 결합된 다양한 디바이스들은 그 버스 상의 신호들을 구동하는 디바이스들에 비교적 큰 전기 용량(electrical capacitance)을 제공한다. 또한, 공유 버스 상의 다양한 결합 포인트들은 높은 신호 주파수들에서 신호 반사(signal reflection)를 생성하여 신호 무결성(integrity)을 저하시킨다. 결과적으로, 버스 상의 신호 주파수들은 일반적으로, 허용할 수 있는 수준의 신호 무결성을 유지하도록 비교적 낮은 상태로 유지된다. 그러한 비교적 낮은 주파수는 신호 대역폭을 감소시켜 그 버스와 결합된 디바이스들의 성능을 제한한다.
많은 수의 디바이스들에 대한 스케일화능력(scalability)의 결여는 공유 버스 시스템의 또 다른 단점이다. 공유 버스의 유효 대역폭은 실질적으로 고정적이며, 부가적인 디바이스들의 추가가 버스 상의 신호 주파수들의 감소를 야기하는 경우 감소될 수도 있다. 일단, 버스에 직접적으로나 또는 간접적으로 결합된 디바이스의 대역폭 요건들이 그 버스의 유효 대역폭을 초과한다면, 그 버스에 접근을 시도할 때 디바이스들은 자주 정체(stall)될 것이고, 공유 버스를 구비하고 있는 컴퓨터 시스템의 전체 기능은 대부분 저하될 것이다. I/O 디바이스들에 의해 사용되는 공유 버스의 한 예는 PCI(peripheral component interconnect) 버스 또는 확장형 PCI(PCI-X) 버스이다.
많은 I/O 브리징 디바이스들은, PCI 버스로부터 최종 목적지 버스까지 다수의 미결 트랜잭션(pending transaction)을 버퍼링하기 위해 버퍼링 메커니즘을 이용한다. 그러나 버퍼링은 PCI 버스 에서 정체들을 유발할 수 있다. 일련의 트랜잭션이 큐(queue)에서 버퍼링되어 목적지 버스로의 송신을 대기할 때 정체가 야기될 수 있는바, 목적지 버스 상에서 정체가 일어나면 순차 진행이 중단되게 된다. 그러면, 이들 대기중인 트랜잭션들이 완료될 수 있게 하는 트랜잭션이 큐에 도착하여 다른 트랜잭션들 뒤에 저장된다. 정체를 해제하기 위해, 큐 내의 트랜잭션들은 새로이 도착한 트랜잭션이 미결 트랜잭션들에 앞서 전송되게 하기 위해 어느정도 재배열(reorder) 되어야만 한다. 그래서, 이러한 시나리오를 막기 위해, PCI 버스 사양서는 PCI 버스 트랜잭션들의 처리와 배열을 제어하는 일련의 재배열 법칙들을 규정한다.
공유 버스의 일부 단점을 극복하기 위해서, 어떤 컴퓨터 시스템들은 디바이스들 사이 또는 노드들 사이의 패킷 기반 통신을 사용할 수 있다. 이러한 시스템에서, 노드들은 정보 패킷들을 교환함으로써 서로 통신할 수 있다. 일반적으로, "노드"는 상호 연결하에서 트랜잭션들에 참여할 수 있는 장치이다. 예를 들어, 상호 연결은 패킷 기반으로 될 수 있고, 노드는 패킷들을 송수신하도록 구성된다. 일반적으로 말해, "패킷"은 두 개의 노드들, 즉 패킷을 전송하는 개시 노드 즉, "소스" 노드와 패킷을 수신하는 목적지 노드 즉, "타겟" 노드와의 사이의 통신이다. 패킷이 타겟 노드에 도달하면, 타겟 노드는 그 패킷에 의해 운반된 정보를 받아 그 정보를 내부적으로 처리한다. 소스 노드와 타겟 노드 사이의 통신 경로에 위치한 노드는 그 패킷을 그 소스 노드로부터 그 타겟 노드로 중계(relay)하거나 전송한다.
또한, 패킷 기반의 통신들과 버스 기반의 통신들의 조합을 사용하는 시스템들이 있다. 예를 들어, 시스템은 PCI버스와 AGP와 같은 그래픽 버스와 연결될 수 있다. PCI버스는 패킷 버스를 통한 송신을 위해 PCI 버스 트랜잭션을 패킷 트랜잭션으로 변환(translate)시킬 수 있는 패킷 버스 인터페이스와 연결될 수 있다. 유사하게, 그래픽 버스는 AGP 버스 트랜잭션들을 패킷 트랜잭션으로 변환시킬 수 있는 AGP 인터페이스와 연결될 수 있다. 각 인터페이스는 프로세서들 중 하나와 연결된 호스트 브리지와, 또는 어떤 경우에는 다른 주변 디바이스와 통신할 수 있다.
PCI 디바이스가 트랜잭션을 시작할 때, 패킷 기반의 트랜잭션은 PCI 로컬 버스 사양서에 설명된 것과 같은 배열 법칙들에 의해 구속될 수 있다. PCI 버스에 대한 패킷 트랜잭션들에 대해서도 마찬가지이다. 이러한 배열 법칙들은, 패킷 버스 인터페이스에서 발생할 수 있는 트랜잭션 정체들이 패킷 버스 인터페이스에서의 정 체를 야기할 수 있기 때문에, 패킷 기반의 트랜잭션에서도 여전히 지켜진다. 이러한 정체는 패킷 버스 구성내로의 또다른 정체들을 야기한다. 또한, AGP 트랜잭션들은 데이터의 정확한 전송이 이루어질 수 있도록 일련의 트랜잭션 배열 법칙들을 따를 것이다.
I/O 노드들의 구성에 따라, 트랜잭션은 그 호스트 브리지의 방향으로 또는 그 호스트 브리지로부터 멀어지는 방향으로 한 노드를 통하여 다른 노드로 전송될 수 있다. 대안적으로, 트랜잭션은 특정 노드에서 그 노드와 국부적으로 연결될 수 있는 주변 버스에 의해 패킷 트래픽 안으로 유입될 수 있다. 어떤 시나리오에서도, 주변 트랜잭션들이 통신 경로내로 유입되거나 또는 그 통신 경로로부터 받아드려질 때 상기 주변 트랜잭션들을 버퍼 및 제어할 수 있는 주변 인터페이스 회로가 필요로 되게된다.
컴퓨터 시스템의 I/O 노드를 위한 주변 인터페이스 회로에 관한 다양한 실시예들이 개시된다. 일 실시예에서, 컴퓨터 시스템의 I/O 노드를 위한 주변 인터페이스 회로는 제1 버퍼 회로와, 제2 버퍼 회로 및 버스 인터페이스 회로를 포함한다. 제 1 버퍼 회로는 수신기와 같은 소스로부터 패킷 명령을 수신하도록 연결된다. 제 1 버퍼 회로는 복수의 가상 채널들 각각의 가상 채널에 각기 대응하는 복수의 제 1 버퍼들을 포함한다. 제 2 버퍼 회로는 버스 인터페이스 회로로부터의 패킷 명령들을 수신하기 위해 연결되고, 복수의 가상 채널들 각각의 가상 채널에 대응하는 복수의 제 2 버퍼들을 포함한다. 복수의 제 1 및 제 2 버퍼들 각각은 각각의 가상 채널에 속한 선택된 패킷 명령들을 저장하기 위한 것이다. 복수의 버퍼들 각각은 예를 들어 FIFO 버스로 될 수 있다. 버스 인터페이스 회로는 제 1 버퍼 회로와 연결되어, 제 1 버퍼 회로에 저장된 선택된 패킷 명령들을 주변 버스를 통한 송신에 적당한 명령들로 변환하도록 구성될 수 있다. 버스 인터페이스 회로는 주변 버스를 통한 송신에 적합한 명령들을 패킷 명령들로 변환하도록 또한 구성될 수 있다.
특별한 일 실시예에서, 주변 인터페이스 회로는 제 1 버퍼 회로 및 제 2 버퍼 회로에 연결된 제어 로직 유닛을 포함할 수 있다. 이 제어 로직 유닛은 버스 인터페이스로부터의 패킷 명령들의 운반을 제어하도록 구성된다. 또한, 주변 인터페이스 회로는 태그 로직 유닛을 포함할 수 있는데, 이 태그 로직 유닛은 또한 제1 버퍼 회로와 연결된다. 그 태그 로직 회로 유닛은 그 패킷 명령들을 수신하여 이 명령들 각각에 대한 태그 값을 발생시키도록 구성된다. 그 태그 값은 다른 패킷 명령들에 대한 상기 패킷 명령들 각각의 수신 순서에 대응한다. 주변 인터페이스 회로는 중재(arbitration) 로직 유닛을 더 포함하는데, 이는 제 1 버퍼 회로와 연결되고 각각의 제어 명령들에 대한 태그 값에 따라, 제 1의 다수의 버퍼들에 저장된 패킷 명령들 사이에서 중재를 행하도록 구성된다.
다른 실시예에서, 컴퓨터 시스템은 X86형 프로세서와 같은 하나 이상의 프로세서들을 포함하는데, 예를 들어, 포인트 대 포인트 패킷 버스를 거쳐 하나 이상의 I/O 노드들과 결합된다. 예를 들어, 그 패킷 버스는 하이퍼트랜스포트(HyperTransportTM) 버스일 수 있다. 상기 컴퓨터 시스템은 또한 하나 이상의 주변 버스들을 포함하는데, 이 버스들은 하나 이상의 I/O 노드들과 하나 이상의 주변 디바이스들 각각의 사이에 어드레스, 데이터 및 제어 신호들을 운반하도록 연결된다. 이 주변 버스는 예를 들어, PCI 또는 PCI-X 버스일 수 있다. 각각의 I/O노드는 제 1 통신 경로를 통해 제 1 패킷 명령을 수신하도록 구성된 제 1 트랜스시버 회로와 제 2 통신 경로를 통해 제 2 패킷 명령을 수신하도록 구성된 제 2 트랜스시버 회로를 포함한다. 또한, I/O 노드는 상기 실시예에서 설명된 주변 인터페이스 회로와 같은 하나 이상의 주변 인터페이스 회로들을 포함한다.
도 1은 컴퓨터 시스템의 일 실시예의 블록도이다.
도 2는 입력/출력 노드의 일 실시예의 블록도이다.
도 3은 주변 인터페이스 회로의 일 실시예의 블록도이다.
도 4는 비-포스트 재시행 버퍼 회로(non-posted retry buffer circuit)의 일 실시예의 블록도이다.
도 5는 주변 인터페이스 회로의 일 실시예에서 스플릿 응답 지시 처리를 설명한 흐름도이다.
도 6은 버퍼 유효성(availability) FIFO 구조를 포함하는 버퍼 회로의 일 실시예의 블럭도이다.
도 7은 제어 로직과 저장 유닛의 일 실시예의 전형도이다.
도 8은 주변 인터페이스 회로의 일 실시예의 하향 응답 트랜잭션 재배열 동작을 설명한 흐름도이다.
도 9는 주변 인터페이스 회로의 일 실시예의 스플릿 응답 동작을 설명한 흐름도이다.
도 10은 그래픽 버스에 연결을 위한 주변 인터페이스 회로의 일 실시예의 블럭도이다.
도 11은 그래픽 응답들의 처리를 위한 주변 인터페이스 회로의 일 실시예의 블럭도이다.
도 12는 그래픽 응답들의 재배열을 위한 장치의 일 실시예의 블럭도이다.
도 13은 그래픽 응답을 위한 트랜잭션 재배열 장치의 일 실시예의 동작을 설명한 흐름도이다.
본 발명은 비록 다양한 수정과 대안적인 형태들이 가능하지만, 본 명세서에서는 발명의 특정한 실시예를 예로써 도면에 도시하였으며, 이에 대해 자세히 설명될 것이다. 그러나 도면 및 이에 대한 상세한 설명은 본 발명을 개시된 특정 예로만 제한하도록 의도된 것은 아니며, 오히려 첨부된 청구항에 의해 정의되는 것처럼 본 발명의 정신 및 범위내에 드는 모든 변형, 균등물 및 대안들을 포괄하도록 의도된 것이다.
도 1을 보면, 컴퓨터 시스템의 일 실시예의 블럭도가 나타나 있다. 상기 컴퓨터 시스템은 각각 코히어런트 패킷 버스(15)에 의해 서로 연결된 프로세서 10A-10D를 포함한다. 코히어런트 패킷 버스(15)의 각 부분은 각각의 프로세서 (10A-D) 사이에 포인트 대 포인트 링크를 형성할 수 있다. 포인트 대 포인트 링크를 사용하여 네 개의 프로세서들을 보였지만 다른 수의 프로세서들이 사용될 수 있고 그리고 다른 타입의 버스들이 이들 프로세서들을 서로 연결할 수도 있음이 주목된다. 컴퓨터 시스템은 또한 각각 도면 부호 20, 30 및 40으로 표기된 세 개의 I/O 노드들을 포함하고 있는데, 이 노드들은 I/O 패킷 버스들(50B와 50C)에 의해 각기 체인형으로(in a chain) 연결되어 있다. I/O 패킷 버스 50A는 호스트 노드/프로세서(10A) 와 I/O 노드(20) 사이에 연결된다. 프로세서(10A)는 호스트 노드로 표시되어 있는데, 이는 I/O 패킷 버스(50A)와의 통신을 위한 호스트 브리지를 포함할 수도 있다. 프로세서들(10B-D)은 다른 I/O 패킷 버스들(도시되지 않은)과의 통신을 위한 호스트 브리지들을 또한 포함할 수도 있다. I/O 패킷 버스(50A-C)에 의해 형성된 통신 링크들은 포인트 대 포인트 링크들로써 언급될 수 있다. I/O 노드(20)는 한 쌍의 주변 버스들(25A-B)과 연결되어 있다. I/O 노드(30)는 그래픽 버스(35)와 연결되어 있고, I/O 노드(40)는 추가의 주변 버스(45)에 연결되어 있다.
프로세서들(10A-10D)은, 예를 들어, AthlonTM 마이크로프로세서와 같은 x86 마이크로프로세서로 될 수 있다. 또한, I/O 패킷 버스(50A-50C)와 같은 패킷 버스의 한 예는 비-코히어런트 HyperTransportTM으로 될 수 있다. 주변 버스들(25A-B)과 주변 버스(45)는 PCI 버스나 확장형 PCI 버스와 같은 일반적인 주변 버스들로 될 수 있다. 그래픽 버스(35)는 예를 들어, AGP(가속 그래픽 포트:accelerated graphics port)로 될 수 있다. 그러나 다른 타입의 마이크로 프로세서들과 다른 타입의 주변 버스들도 사용될 수 있음이 이해된다.
세 개의 I/O 노드들이 호스트 프로세서(10A)와 연결되어 보여지는데, 다른 실시예는 다른 많은 노드들과 그 노들들이 다른 형상들 내에서 연결될 수 있다. 도 1에서 예시된 체인 형상은 쉬운 이해를 위해 보여진 것이다.
예시된 실시예에서, 프로세서(10A)의 호스트 브리지는 I/O노드(20,30,40)와 같은 하향 노드들로부터 상향의 패킷 트랜잭션들을 수신할 것이다. 대안적으로, 프로세서(10A)의 호스트 브리지는 패킷들을, 예를 들어, 주변 버스(25A)와 연결된 주변 디바이스들(도시되지 않음)과 같은 디바이스들로 하향 송신한다.
동작 동안, I/O노드(20과 40)는 PCI 버스 트랜잭션들을 I/O 스트림에서 이동하는 상향 패킷 트랜잭션들로 변환시키고 또한 하향 패킷 트랜잭션들을 PCI 버스 트랜잭션으로 변환시킬 수 있다. 프로세서(10A)의 호스트 브리지 이외의 노드들을 발신원으로 하는(originating at) 모든 패킷들은 어떤 다른 노드들로 전달되기 전에 프로세서(10A)의 호스트 브리지를 향해 상향으로 이동될 것이다. 프로세서(10A)의 호스트 브리지를 발신원으로 하는 모든 패킷들은 I/O 노드(20,30, 또는 40)와 같은 다른 노드들을 향해 하향 이동할 것이다. 본원에서 사용되는 것처럼, "상향"은 프로세서(10A)의 호스트 브리지의 방향으로의 패킷 트래픽 흐름을 말하고, "하향"은 프로세서(10A)의 호스트 브리지로부터 멀어지는 방향으로의 패킷 트래픽 흐름을 말한다. 각 I/O 스트림은 유닛 ID로 불리는 식별자에 의해 식별된다. 유닛 ID는 패킷 헤더의 일부이거나, 패킷이나 패킷들 내의 비트들의 어떤 다른 지정된 수일 수 있다는 점이 고려된다. 본원에서 사용되는 것처럼, "I/O 스트림"은 같은 유닛 ID를 포함하며 따라서 같은 노드로부터 시작된 모든 패킷 트랜잭션들을 말한다.
예시와 같이, 주변 버스(45)상의 주변 디바이스는 주변 버스(25)상의 주변 디바이스를 향한 트랜잭션을 초기화한다. 트랜잭션은, 먼저 유일한 유닛 ID를 가진 하나 이상의 패킷들로 변환되고, 그 후 상향으로 송신된다. 주목할 점은 각 패킷은 그 패킷을 식별하는 특정 정보로 앤코드된다는 점이다. 예를 들어, 유닛 ID는 패킷 헤더 안으로 앤코드될 수 있다. 부가적으로, 트랜잭션의 형태 또한 패킷 헤더 안으로 앤코드될 것이다. 각 패킷에는 발신원 노드를 특정하는 유닛 ID가 할당된다. I/O노드(20)는 패킷들을 주변 버스(25)상의 주변 디바이스를 향해 하향으로 전송하지 않기 때문에, 패킷들은 프로세서(10A)의 호스트 브리지를 향해 상향으로 송신된다. 다음으로, 프로세서(10A)의 호스트 브리지는 패킷들을, I/O 노드(20)가 주변 버스(25) 상의 주변 디바이스에 대한 패킷을 인지하고 요청할 때까지, 프로세서(10A)의 호스트 브리지의 유닛 ID와 함께 하향으로 되돌려 송신한다. 다음으로, I/O노드(20)는 그 패킷들을 주변 버스 트랜잭션들로 변환하고 그 트랜잭션들을 주변 버스(25) 상의 주변 디바이스로 송신한다.
패킷 트랜잭션이 상향이나 하향으로 이동하기 때문에, 패킷들은 하나 이상의 I/O 노드들을 통하여 지나갈 것이다. 상기 통하여 지나간다는 것은 때때로 터널처럼 언급되고 I/O 노드는 때때로 터널 디바이스로 언급된다. 상향으로부터 하향으로 또는 하향으로부터 상향으로 보내지는 패킷들은 "전송된" 트래픽으로 언급된다. 또한, 특정한 I/O 노드를 발신원으로 하고, 상향의 트래픽 안으로 유입된 패킷 트래픽은 "유입된" 트래픽으로 언급된다.
하기에서 더 자세히 설명될 것과 같이, I/O 노드에 연결될 다양한 버스들의 배열 법칙을 지키기 위해, I/O노드는 패킷 버퍼링뿐만 아니라 트랜잭션 재배열도 제공할 것이다. I/O 노드는 또한, 패킷들의 주변 디바이스로부터 터널까지의 그리고 터널로부터 주변 디바이스까지의 흐름을 제어하는, 제어 로직을 포함할 것이다.
도 2와 관련하여, 입력/출력 노드의 일 실시예의 블럭도가 보여진다. 입력/출력 노드(100)는 트랜스시버 회로(110)와 트랜스시버 회로(120)를 포함한다. 트랜스시버 회로들(110과 120)은 I/O 터널(140)을 통하여 서로 연결된다. 트랜스시버 회로들(110과 120)은 각기 송신기와 수신기(도시되지 않음)를 포함할 것이다. 송신기들과 수신기들은 I/O 터널(140)을 통하여 연결되어 있어 트랜스시버(110)의 수신기는 트랜스시버(120)의 송신기와 연결되고 트랜스시버(120)의 수신기는 트랜스시버(110)의 송신기와 연결된다. I/O 터널(140)은 패킷 트래픽을 I/O 노드(100)를 통하여 전송하는데 사용되는 명령과 데이터를 포함할 것이다. 또한, I/O 노드(100)는 주변 인터페이스 회로(150)를 포함하는데, 이는 또한 I/O 터널(140)을 통하여 트랜스시버들(110과 120)과 연결된다. 그러나, 상기에서 설명된 것처럼, 주변 인터페이스 회로(150)로부터 시작되어 I/O 터널(140)로 들어가는 트랜잭션은 유입된 트랜잭션들로 언급될 것이다. I/O 노드(100)는 또한 트랜스시버들(110과 120)과 주변 인터페이스(150) 사이의 트랜잭션들을 제어하기 위해 연결된 터널 제어 유닛(130)을 포함한다. I/O 노드(100)는 또한 주변 인터페이스 회로(150)를 통하여 주변 버스(220)와 연결된다.
예시된 실시예에서, 트랜스시버들(110 과 120)은 I/O 터널(140)을 통한 두개의 단방향(uni-directional) 통신 경로들의 일부이다. 통신 경로들 각각은 단방향이기 때문에, 어느 한 경로는 상향 또는 하향 경로로 연결될 것이다. 그래서, 주변 인터페이스 회로(150)로부터 유입된 트래픽은 어느 한 트랜스시버들(110 과 120)에 제공된다. 트랜스시버들(110 과 120)은 각기 패킷 트랜잭션들을 수신 버퍼(도시되지 않음) 안으로 수신한다. 각 트랜잭션이 수신될 때, 제어 명령은 수신된 명령 안에 포함된 정보의 서브 셋을 포함하도록 발생될 것이다. 제어 명령은 예를 들어, 발신원 노드의 유닛 ID, 목적지 정보, 데이터 카운트 및 트랜잭션 타입을 포함할 것이다. 제어 명령은 다른 정보를 포함할 수 있고 또는 여기에 열거된 정보의 일부는 포함하지 않을 수 있음이 주목된다. 제어 명령은 트랜스시버들(110 과 120)로부터 터널 제어 유닛(130)으로 보내질 것이다. 터널 제어 유닛(130)은 수신된 트랜잭션들 중 어떤 것이 각각의 트랜스시버로부터 보내진 것인지와 트랜잭션을 트랜잭션의 목적지에 보내기 위한 트랜스시버를 지시하는 것을 더 결정할 것이다.
예시된 실시예에서, 주변 인터페이스 회로(150)는 하향부와 상향부를 가질 것이라고 생각될 것이다. 하향부는 하향 트랜잭션들을 처리할 것인데, 그 트랜잭션들의 그 목적지는 주변 버스(220)에 연결된 디바이스일 것이다. 상향부는 주변 버스(220)와 연결된 디바이스로부터 시작된 트랜잭션들을 처리할 것이다. 그래서, 주변 인터페이스 회로(150)는 하향 명령 버퍼(160)와 하향 데이터 버퍼(170)를 포함하는데, 각각은 터널 인터페이스 로직(155)을 통해 I/O 터널(140)에 연결된다. 하향 명령 버퍼(160)와 하향 데이터 버퍼(170)는 버스 인터페이스 회로(210)를 통하여 주변 버스(220)에 각각 연결된다. 주변 인터페이스 회로(150)는 또한 상향 명령 버퍼(180)와 상향 데이터 버퍼(190)를 포함하는데, 각각은 터널 인터페이스 로직(155)을 통해 I/O 터널(140)과 연결된다. 상향 명령 버퍼(180)와 상향 데이터 버퍼(190)는 또한 버스 인터페이스 회로(210)를 통하여 주변 버스(220)와 각각 연결된다. 주변 인터페이스 회로(150)는 상향 명령 버퍼(180)와 하향 명령 버퍼(160) 모두와 연결되어 있는 제어 로직 유닛(200)을 더 포함한다.
예시된 실시예에서, 주변 버스(220)는 예를 들어, PCI 버스, PCI-X 버스 및 AGP 버스와 같은 다양한 일반적인 주변 버스들임이 언급된다. 또한, 버스 인터페이스 회로(210)는 그러한 버스들로부터 주변 버스 명령들을 변환하기 위한 회로를 포함할 것이다. 또한, 특정한 일 실시예에서, 버스 인터페이스 회로(210)는 CREX(CompaqTM Rapid Enabler for PCI-X) 인터페이스와 같은 버스 인터페이스일 수 있다는 것이 고려된다. 마지막으로, 특정한 실시예에서, I/O 노드(100)는 하나 보다 많은 주변 인터페이스 회로(도시되지 않음)를 포함하고, 그 I/O 노드는 주변 인터페이스 회로들 각각으로부터 보내진 명령들 사이를 중재하는 중재 로직(도시되지 않음)을 포함하고 있다는 점이 고려된다.
트랜잭션들은 어떤 트랜스시버가 하향 수신기로써 연결되었는지에 따라 트랜스시버 회로(110 또는 120)로부터 보내질 것이다. 트랜잭션의 명령 부분은 하향 명령 버퍼(160)에 저장되고, 트랜잭션의 데이터 부분은 하향 데이터 버퍼(170)에 저장될 것이다. 마찬가지로, 트랜잭션이 버스 인터페이스 회로(210)로부터 보내질 때, 트랜잭션의 명령 부분은 상향 명령 버퍼(180)에 저장되고, 트랜잭션의 데이터 부분은 상향 데이터 버퍼(190)에 저장될 것이다. 제어 로직 유닛(200)은 트랜잭션 들의 버스 인터페이스(210)와 I/O 터널(140)로 그리고 그로부터의 전달을 제어하도록 구성될 것이다.
하기에서 더 자세히 설명될 것처럼, 주변 버스(220)로부터 상향 트랜잭션들을 수신하는 주변 인터페이스 회로(150)에 응답하여, 제어 로직 유닛(200)은 트랜스시버들(110 과 120)에 의해 발생된 제어 명령들에 유사한 제어 명령들을 발생할 것이다. 제어 로직 유닛(200)은 또한 그러한 제어 명령들을 터널 제어 유닛(130)으로 보낼 것이고, 그래서 상향 명령들이 I/O 터널(140)로 스케줄 되도록 허용한다. 또한, 제어 로직 유닛(200)은, 하향 회로로 하여금 하향 응답 트랜잭션들의 상대적 배열을 유지하도록 허용하는 상향 명령들에 대응하는 신호들을 하향 회로에 제공할 것이다.
도 3에서, 주변 인터페이스 회로의 일 실시예에 대한 블럭도가 보여진다. 주변 인터페이스 회로(350)는 하향부(360)와 상향부(450)를 포함한다. 주변 인터페이스 회로(350)는 또한 도 2의 I/O 터널(140)과 같은 I/O 터널에 연결된 터널 인터페이스 로직 유닛(355)을 포함한다. 도 3의 하향부(360)에서, 터널 인터페이스 로직(355)은 또한 명령 버퍼(370)에 연결된다. 명령 버퍼(370)는 태깅(tagging) 로직 유닛(380)에 연결된다. 태깅 로직 유닛(380)은 가상 채널 명령 버퍼(390)에 연결된다. 가상 채널 명령 버퍼(390)는 중재 로직 유닛(410)에 연결되는데, 이는 버스 인터페이스 회로(470)에 연결된다. 가상 채널 명령 버퍼(390)는 또한 NP(non-posted) 재시행(retry) 큐(420)와 스플릿 응답 큐(430)에 연결된다. 터널 인터페이스 로직(355)은 또한 데이터 버퍼(400)에 연결되는데 이는 차례로 버스 인터페이스 회로(470)에 연결된다. 버스 인터페이스 회로(470)는 주변 버스(560)와 연결되는데, 이는 주변 디바이스(565)에 연결된다.
상향부(450)에서, 버스 인터페이스 회로(470)는 NP 명령 버퍼(480), 파싱(parsing) 로직 유닛(500) 및 지연(delay) 트랜잭션 로직 회로(510)에 연결된다. 또한, 버스 인터페이스 회로(470)는 데이터 버퍼(550)에 연결된다. NP 명령 버퍼(480)는 제어 명령 발생기(520)와 NP 소스 태깅 로직 유닛(490)에 연결된다. 제어 명령 발생기(520)는 가상 채널 명령 버퍼(530)와 터널 인터페이스 로직(355)에 연결된다. 가상 채널 명령 버퍼(530)는 터널 인터페이스 로직(355)에 연결된다. 주변 인터페이스 회로(350)는 또한 하향부(360)의 스플릿 응답 큐(430)와 데이터 버퍼(400)에 연결된 제어 로직과 저장 유닛(460)을 포함한다. 제어 로직과 저장 유닛(460)은 또한 상향부(450)의 NP 소스 태깅 로직(490)과 NP 명령 버퍼(480)에 연결된다. 또한, 주변 인터페이스 회로(350)는 상기에서 설명된 것처럼 주변 버스(580)와 같은 추가된 주변 버스들과의 접속을 위해 동작할 중복 로직(duplicate logic)(570)을 포함할 수 있다는 것이 고려된다.
일반적으로 말해, "가상 채널"은 다양한 프로세스 노드들 사이에 패킷들을 전달하기 위한 통신 경로이다. 각 가상 채널은 나머지 다른 가상 채널들과 리소스(resource) 독립적이다(즉, 하나의 가상 채널 내에서 흐르는 패킷들은, 물리적 송신의 측면에서, 다른 가상 채널 내 패킷의 존재 또는 부존재에 영향을 받지 않는다). 패킷들은 패킷 형태를 근거로 가상 채널에 할당된다. 같은 가상 채널 내의 패킷들은 서로의 전송에 있어 물리적으로 충돌할 수 있으나(즉, 같은 가상 채널 내의 패킷들은 리소스 충돌들을 겪을 수 있다), 다른 가상 채널 내의 패킷들의 전송과는 물리적으로 충돌하지 않을 것이다.
특정 패킷들은 다른 패킷들과 논리적으로 충돌할 수 있다(즉, 프로토콜 원인들, 코히런시(coherency) 원인들, 다른 그러한 원인들 때문에 한 패킷은 다른 패킷과 논리적으로 충돌할 수 있다). 만일, 논리적/프로토콜 원인에 의해, 두 번째 패킷이 그 지정 노드에 도착하기 전에 첫 패킷이 그 지정 노드에 도착해야만 하는 경우, 그 두 번째 패킷이 그 첫 번째 패킷의 송신을 물리적으로 막는다면(충돌하는 리소스들을 차지함으로써) 컴퓨터 시스템이 교착(deadlock)될 수 있다. 분리된 가상 채널들 내의 패킷들이 서로의 전송을 막을 수 없도록, 첫 번째 패킷과 두 번째 패킷을 분리된 가상 채널에 할당함으로써 그리고 전송 매체(transmission medium)를 컴퓨터 시스템에 유입함으로써 교착 없는 작동이 이루어질 것이다. 다른 가상 채널들로부터의 패킷들은 같은 물리적 링크들을 통해 전송된다는 점이 주의된다. 그러나, 버퍼의 수신이 전송에 앞서 유효하기 때문에, 이러한 공유 리소스를 사용하더라도 가상 채널들은 서로를 막지 않는다.
한 관점에서, 각각 다른 패킷 형태(예를 들어, 각각 다른 명령 엔코딩)가 그들 자신의 가상 채널에 할당될 수 있고 그래서 일 실시예에서, 분리된 버퍼들이 각각의 가상 채널에 할당된다. 분리된 버퍼들은 각각의 가상 채널에 이용될 수 있기 때문에, 한 가상 채널의 패킷들은 다른 가상 채널의 패킷들과 물리적으로 충돌하지 않는다(그러한 패킷들은 다른 버퍼들 내에 배치될 것이기 때문이다.).
따라서, 예시된 실시예에서, 가상 채널 명령 버퍼(390)와 가상 채널 명령 버퍼(530)는 각기 세 개 형태의 트랜잭션들-포스트, 비-포스트 및 응답-에 대응하는 세 개의 분리된 FIFO부들을 포함한다. 명령들은 그들이 수신된 순서로 각각의 FIFO 안으로 배치된다. 그러나, 본래의 명령을 발생할 수 있었던 디바이스의 버스나 형태와 관련된 배열 법칙들을 유지하기 위해, 트랜잭션들은 다른 형태들의 트랜잭션들 사이의 배열에서 벗어나 처리되어야 할 것이다.
일 실시예에서, 명령 버퍼(370)는 도 2의 I/O 터널(140)로부터 도 3의 가상 채널 명령 버퍼(390)로 보내진 명령들에 대한 버퍼링 메커니즘 역할을 하는 2-딥(deep) FIFO일 수 있다. 트랜잭션이 주변 인터페이스 회로(350)로 하향으로 보내질 때, 그 트랜잭션의 데이터 부분은 데이터 버퍼(400)에 저장될 것이고, 트랜잭션의 명령 부분은 가상 채널 명령 버퍼(390)에 저장될 것이다. 그러나 먼저, 태깅 로직(380)은 명령의 태그 값을 발생하고 추가하도록 구성될 것이다. 태그 값은 다른 수신된 명령들에 관련된 명령의 수취 순서에 대응하고, 이어지는 중재 사이클들 내에서 사용될 것이다. 데이터와 명령은 그 패킷들에 포함될 헤더 정보에 의해 같은 패킷에 속하게 됨으로써 특정될 수 있다. 또한, 어떤 주변 버스들은 I/O 노드의 내부 클록 속도보다 느린 클록 속도로 작동하기 때문에, 데이터는 I/O 노드의 클록 속도를 사용하여 데이터 버퍼(400)에 로드될 수 있고, 다른 클록 속도에서, 바람직하게는 버스 인터페이스 회로(470)에 연결된 주변 버스의 클록 속도로 언로드될 수 있다. 또한, 데이터 버퍼(400)와 가상 채널 명령 버퍼(390) 모두는 어떤 상향 로직에 공간이 유효하지 않을 때를 통지하도록 구성될 수 있다.
명령의 형태에 따라(즉, 포스트, 비-포스트 또는 응답), 명령은 가상 채널 명령 버퍼(390)의 각각의 가상 채널 FIFO 내에 저장된다. 중재 로직(410)은, 가상 채널 명령 버퍼(390) 내의 트랜잭션들 사이에서, 어떤 트랜잭션이 첫번째, 두번째 등등으로 처리되는지를 중재하도록 구성될 것이다. 가상 채널 명령 버퍼(390)와 중재 로직 유닛(410)은, 그들이 함께 명령들이 진행될 순서를 정하고 저장하기 때문에, 명령 스케줄러로써 고려된다. 예를 들어, 비-포스트 명령 전에 가상 채널 명령 버퍼(390)에 도착하는 포스트 명령은, 중재 로직(410)에 의해 정해진 배열 법칙에 의해 상기 비-포스트 명령 후에 진행되어야만 한다. 중재 로직(410)은 중재 사이클들 동안 태깅 로직 유닛(380)에 의해 할당된 태그 값을 더 사용할 것이다.
또한, 다중 응답 패킷들은, 만일 그들이 데이터 스트림에 대한 요구와 같은 일반 요구 트랜잭션으로부터 시작된다면, 같은 데이터 스트림이나 순서(sequence)에 속할 것이다. 비록 패킷들이 순서에서 벗어나 하향 로직에 의해 수신된다고 하여도, 데이터 스트림 내에서, 응답 패킷들을 주변 버스에 따라 정확한 순서로 전달하는 것이 필요할 것이다. 또한, 데이터 스트림에 대한 요구에 대한 응답으로 주변 버스로의 부분적 이송이 수행될 필요가 있을 것이다. 데이터 버퍼(400)는 요구된 데이터 스트림의 일부를 형성하는 데이터를 포함할 것이다. 일부를 구성하는 데이터의 세그먼트(segment)들이 정확한 순서에 있는 한, 그들은 주변 버스로 전달될 것이다.
제어 로직과 저장 유닛(460)은 레지스터나 랜덤 액서스 메모리와 같은 저장 유닛들과 데이터를 전달하는데 사용하기 위한 로직을 포함할 것인데, 도 7에 대한 설명에 관련하여 아래에서 더 자세히 설명될 것이다.
도 8과 도 9와 관련하여 하기에서 더 자세히 설명될 것처럼, 중재 동안, 만일 위닝(winning) 트랜잭션이 응답 명령이라면, 데이터 버퍼(400) 내에서 응답 명령과 관련된 어떤 데이터가 유효한지에 대해 결정이 이루어질 것이다. 만일 데이터가 유효하다면, 버스 사이클이 주변 버스(560)에서 시작될 것이다. 이는 명령과 데이터 패킷들을 수신하고, 그것들을 주변 버스(560) 상의 전송에 적당한 어드레스, 데이터 및 제어 신호들로 변환하는, 버스 인터페이스 회로(470)에 의해 달성된다.
만일 위닝 명령이 판독이나 기입과 같은 비-포스트 명령이라면, 버스 인터페이스 회로(470)에 연결된 주변 버스의 형태에 따라서, 주변 디바이스(565)는 예를 들면, 다음과 같이 수행한다: 명령을 수락하여 처리하고 모든 요구된 데이터를 타겟 완료 사이클(target done cycle) 또는 응답 사이클로 송신하고, 재시행 지시(retry indication)를 표명(assert)하고, 명령을 수락하고 스플릿 응답 지시(split response indication)를 표명한다. 도 4에 대한 설명과 관련하여 하기에서 더 자세히 설명될 것처럼, 만일 재시행 지시가 주변 디바이스(565)에 의해 표명되면, 비-포스트 명령은 가상 채널 명령 버퍼(390)로부터 회수(retirement)되어 NP 재시행 큐(420)에 저장될 것이다. 도 5에 대한 설명과 관련하여 하기에서 더 자세히 설명될 것처럼, 만일 주변 버스(560)가 PCI-X 버스이고 스플릿 응답이 수신된다면, 비-포스트 명령은 가상 채널 명령 버퍼(390)나 NP 재시행 큐(420)로부터 회수되어 스플릿 응답 큐(430)에 저장될 것이다.
상향부(450)에서, 주변 디바이스(565)가 주변 버스(560)에서 버스 사이클을 시작할 때, 버스 인터페이스 회로(470)는 그 사이클을, 상기에서 언급된 것과 같이 명령과 데이터 패킷들을 포함할 수 있는, 패킷 트랜잭션들로 변환한다. 데이터 패킷들은 데이터 버퍼(550)에 저장되고, 명령들은 각각의 가상 채널내의 가상 채널 명령 버퍼(530)에 저장된다. 가상 채널 명령 버퍼(530)에 저장하기에 앞서, 명령의 형태에 따라, 파싱(parsing) 로직(500)은 명령을 다수의 더 작은 명령들로 분해한다. 예를 들어, 만일 주변 디바이스(565)가 시스템 메모리에 큰 블럭 데이터의 비-포스트 기입을 요구한다면, 파싱 로직(500)은 같은 메모리 블럭이나 더 작은 블럭들인 다수의 비-포스트 기입 명령들을 만들 것이다. 일 실시예에서, 블럭들은 캐시 라인 바운더리들을 따라 생성될 것임이 고려된다. 이어서, 비-포스트 명령들 각각은 가상 채널 명령 버퍼(530)에 저장될 것이다. 비-포스트 판독 명령들 역시, 상기 요구들의 바운더리들과 트랜잭션들이 PCI인지 PCI-X 인지에 따라 분해될 것이다. 일 실시예에서, NP 소스 태깅 로직(490)은 특정한 응답 명령이 관련된 데이터 스트림을 결정하기 위해 하향 로직에 의해 사용될 수 있는 태그 값을 생성한다. 또한, 도 6에서 도 9까지와 관련하여 하기에서 더 자세히 설명될 것처럼, 본래의 비-포스트 명령(예를 들어, 분해하기 전의)은 또한 하향부(360)내에서 로직에 정보를 제공하기 위해서 NP 명령 버퍼(480) 내에 유지된다. NP 소스 태깅 로직(490)은 상향 비-포스트 명령들 각각에 관련된 태그 값을 발생할 것이다. 일 실시예에서, 0에서 29까지의 태그 값이 발생된다. 그러나, 다른 실시예들은 태그 값들의 다른 적당한 수들을 발생한다는 것이 고려된다.
상향 명령들이 가상 채널 명령 버퍼(530)에 저장될 때, 제어 명령 발생기(520)는 도 2의 트랜스시버들(110과 120)에 의해 발생되는 제어 명령들과 유 사한 제어 명령들을 발생할 것이다. 도 3에서, 제어 명령 발생기(520)는 또한 그러한 제어 명령들을 터널 인터페이스 로직(355)을 통해 도 2의 터널 제어 유닛(130)으로 보내는데, 그래서 상향 명령들이 I/O 터널(140)로 스케줄 되도록 허용한다. 도 3의 터널 인터페이스 로직(355)은 I/O 터널(140)과 주변 인터페이스 회로(350)내의 로직 사이의 인터페이스를 위해 필요한 일반적 목적의 버퍼링 회로를 포함할 것이다.
지연 트랜잭션 로직(510)은, 요구가 즉시 제공되지 않는 주변 디바이스(565)에 재시행 지시를 제공하기 위해, 버스 인터페이스 회로(470), 하향부(360) 내의 로직 및 도 2의 I/O 터널 로직과 공동으로 작동하는 회로를 포함할 것이다. 예를 들어, 주변 디바이스(565)는 비-포스트 판독 요구를 상향으로 보내고 비-포스트 채널은 방해되거나 데이터가 준비되지 않는다. 지연 트랜잭션 로직(510)은 그 요구가 현재 제공되지 않고 있으며 이후 시간에 요구가 재시행될 것임을 주변 디바이스(565)에 나타낼 수 있다.
도 4에 있어서, 비-포스트 재시행 버퍼 회로의 일 실시예의 블럭도가 나타난다. 비-포스트(NP) 재시행 버퍼 회로(650)는 비-포스트 명령 갱신 회로(670)에 연결된 비-포스트 재시행 FIFO(660)를 포함한다.
예시적인 실시예에 있어서, 비-포스트 재시행 FIFO(660)는 도 3의 가상 채널 명령 버퍼 회로(390)의 비-포스트 명령 FIFO와 같은 비-포스트 명령 버퍼로부터 수신된 비-포스트 명령들을 저장할 것이다. 도 3과 관련하여 상기에서 설명된 것처럼, 주변 디바이스(565)에 의해 표명된 재시행 지시에 응하여, 비-포스트 명령은 가상 채널 명령 버퍼 회로(390)로부터 제거되고 도 4의 비-포스트 재시행 FIFO(660) 내에 저장될 것이다.
비-포스트 재시행 FIFO(660)은 어떤 저장 위치들도 유효하지 않을 때, FIFO 만원(full) 신호를 표명한다. 그 만원 신호는 도 3의 중재 로직 회로(410)와 같은 중재 로직에 대한 지시를 제공한다. 만원 신호가 표명되는 한, 가상 채널 명령 버퍼 회로(390)의 비-포스트 명령 FIFO는, 중재 사이클에 관여할 수 없어 추가적인 재시행 지시의 경우에 비-포스트 재시행 FIFO(660)의 오버플로우(overflow)을 막는다.
일단 비-포스트 명령이 비-포스트 재시행 FIFO(660)내에 저장되면, 비-포스트 재시행 FIFO(660) 헤드의 명령들은 도 3의 가상 채널 명령 버퍼 회로(390)의 가상 채널 내에 저장된 임의의 명령들과 함께 중재 사이클들에 참여할 것이다. 만일, 도 4의 비-포스트 재시행 FIFO(660)의 헤드에 저장된 비-포스트 명령이, 버스 사이클이 개시되도록 하는 중재 사이클 동안 선택되고, 다시 재시행 신호가 도 3의 주변 버스(560)에 의해 표명되면, 도 4의 비-포스트 명령 갱신 회로(670)는 선택된 비-포스트 명령이 비-포스트 재시행 FIFO(660)의 헤드로부터 제거되고 테일에 저장되게 하는데, 이는 그것이 또다시 FIFO의 헤드에 이를 때, 또 다른 중재 사이클을 기다리게 하기 위함이다. 다른 말로 하면, 선택된 비-포스트 명령이 FIFO 안으로 되돌려 기입될 것이다. 이는 비-포스트 명첨 갱신 회로(670)내에 점선으로된 화살표로 표시되어 있다. 이러한 사이클의 재시행은 여러번 일어나고 명령은 매번 비-포스트 재시행 FIFO(660)의 테일에 다시 기입될 것이다.
도 3의 주변 인터페이스 회로(350)가 PCI 모드에서 작동될 때, 도 3의 주변 버스(560)는 비-포스트 사이클의 부분적인 완결이 있었다는 것을 나타내는 것이 가능하다. 예를 들어, 비-포스트 판독 명령은 10 데이터 세그먼트를 요구할 것이다. 주변 디바이스(565)는 재시행 지시를 표명할 것이나 10 데이터 세그먼트 중 5개와 응답하게 되어 부분적으로 완결된 응답을 나타낸다. 부분적으로 완결된 지시를 수신할 때, 도 4의 비-포스트 명령 갱신 회로(670)는 그 선택된 비-포스트 명령을 수정하여 잔여 데이터 세그먼트에 대응하는 새로운 데이터 카운트와 어드레스가 보전될 것이다. 마찬가지로, 비-포스트 기입 명령들은 부분적으로 완결될 것이다. 비-포스트 명령 갱신 회로(670)는 수정된 비-포스트 명령을 비-포스트 재시행 FIFO(660)의 테일에 저장되게 하는데, 여기서 그 비-포스트 명령은 그것이 FIFO의 헤드에 이르렀을 때 다음의 중재 사이클을 기다릴 것이다. 본 장에서 사용된 것과 예시적인 목적에서처럼, 그 FIFO의 헤드는 그로부터 명령들이 언로드되거나 판독되는 FIFO내의 위치를 의미하고, FIFO의 테일은 그 명령들이 저장되거나 기입되는 위치를 의미한다. 명령들이 비-포스트 재시행 FIFO(660)로부터 언로드되듯이, 비-포스트 재시행 FIFO(660)내에 저장된 어떤 명령들은 그들이 언로드될 순서로 이동할 것이란 점이 또한 주의된다. 다른 실시예에서, 명령들이 FIFO의 헤드에 기입되고 FIFO의 테일로부터 판독될 수 있다는 점을 고려해야 하는데, 이 경우, 비-포스트 명령 갱신 회로(670)는 FIFO의 헤드에 명령들을 기입할 것이다.
도 5에서는, 주변 인터페이스 회로의 일 실시예에서의 스플릿 응답 지시의 처리를 묘사하는 흐름도가 보여진다. 도 3과 도 5를 함께 고려하면, 동작(operation)은 도 5의 단계(431)에서 시작하여 단계(432)로 진행되며 여기서 비-포스트 명령은 도 3의 하향부(450)에 의해 수신되고 가상 채널 명령 버퍼(390)의 비-포스트 FIFO내에 저장된다. 도 5의 단계(433)로 진행하여 중재 사이클이 실행되고, 만일 비-포스트 명령이 위너(winner) 동작이라면 단계(434)로 진행하며, 그렇지 않으면 그 비-포스트 명령이 위너일 때까지 중재 사이클들이 수행된다. 그래서, 예를 들어, 단계(434)로 진행시, 그 비-포스트 명령들이 선택되어 도 3의 버스 인터페이스 회로(470)에 포함된 변환 로직으로 보내진다. 그 비-포스트 명령은 주변 버스(560)로의 송달에 적당한 대응하는 버스 사이클로 변환된다. 도 5의 단계(435)로 진행시, 그 버스 사이클은 도 3의 버스 인터페이스 회로(470)에 의해 개시된다. 변환과 버스 사이클 개시화 단계는, 도 2의 설명와 관련하여 상기에서 언급된 CREX 인터페이스(도시되지 않음)와 같은 주변 버스에 대한 하나 이상의 인터페이스들에 의해 수행되는, 하나 이상의 중간 단계들을 포함할 것이란 점이 주목된다. 동작은 이제 도 5의 단계(436)로 진행한다. 단계(435)에서, 도 3의 상향부(450)와 버스 인터페이스 회로(470)는 주변 버스(560)상의 주변 디바이스(565)와 같은 타겟 디바이스로부터의 완료 지시를 기다린다. 만일 비-포스트 명령이 판독 요청이었다면, 완료 지시는, '사이클 완료(cycle done)'신호와 같은 제어 신호들을 포함하는 요청된 모든 데이터일 것이다. 만일, 비-포스트 명령이 기입 요청이었다면, 완료 지시는 데이터가 없는 완료 메세지일 것이다. 만일, 완료 지시가 수신되면, 동작은 도 5의 단계(437)로 진행한다. 단계(437)에서, 만일 비-포스트 명령이 기입 명령이었다면, 도 3의 상향부(450)는 요청 노드에 '타겟 완료(target done)' 응답과 같은 응답 명령을 보낼 것이다. 만일 비-포스트 명령이 판독 명령이었다면, 상향부(450)는 모든 요구된 데이터를 포함하는 응답 명령을 요청 노드로 전송할 것이다. 동작의 묘사는 도 5의 단계(438)에서 완료된다.
단계(436)로 다시 참조하면, 만일 도 3의 주변 버스(560)로부터 수신된 응답이 완료 메세지가 아니라면, 그것은 도 4와 관련하여 자세히 논의될 재시행 지시일 것이다. 응답은 또한 스플릿 응답 지시일 것인데, 도 5의 단계(439)에서, 스플릿 응답 지시가 수신된다. 단계(440)로 진행시, 비-포스트 명령은 스플릿 응답 지시에 대한 응답으로, 도 3의 스플릿 응답 큐(430)에 저장된다. 비-포스트 명령은 버스 넘버, 디바이스 넘버, 함수 넘버, 카운트 그리고 아이디 넘버와 같은 버스 사이클 정보를 포함한다. 이 정보는 타겟 디바이스로부터 수신된 임의의 응답 사이클들을 지정하는데 사용된다. 단계(442)로 진행시, 만일 스플릿 완료가 수신된다면, 그것은 비-포스트 기입 명령에 응답하는 스플릿 완료 메세지이거나, 모든 요구된 데이터를 포함하는 스플릿 완료일 수 있다. 단계(443)로 진행시, 스플릿 완료 사이클 정보는 도 3의 스플릿 응답 큐(430)내에 저장된 임의의 비-포스트 명령과 비교된다. 일단 대응되는 비-포스트 명령이 결정되면, 동작은 도 5의 단계(444)로 진행한다. 단계(444)에서, 스플릿 완료가 스플릿 완료 메세지이면, '타겟 완료' 응답과 같은 응답 명령이 요청 노드로 보내질 것이다. 만일, 비-포스트 명령이 판독 명령이었다면, 도 3의 상향부(450)는 모든 요구된 데이터를 포함하는 응답 명령을 상기 요청 노드로 보낼 것이다. 도 5의 단계(445)로 진행시, 일단 모든 데이터 또는 스플릿 완료 메세지가 수신되면, 대응하는 비-포스트 명령은 도 3의 스플릿 응답 큐(430)로부터 회수될 것이다. 단계(422)를 다시 참조하여, 만약 스플릿 완료가 수신되지 않으면, 동작은 스플릿 완료가 수신될때까지 단계(442)에서 계속된다.
삭제
도 6에서는 버퍼 유효성 FIFO 구조를 포함한 버퍼 회로의 일 실시예에 대한 블럭도가 보여진다. 버퍼 회로(680)는 비-포스트 명령 버퍼(690)에 연결된 버퍼 유효성 FIFO(685)를 포함한다. 버퍼 유효성 FIFO(685)는 또한 기입 로직(685)및 회수 로직(687)에 연결된다.
비-포스트 명령 버퍼(690)는 도 3의 주변 버스(560)와 같은 주변 버스로부터 수신된 명령에 대응하는 비-포스트 명령들을 저장한다. 도 3의 설명과 관련하여 상기에서 언급된 것처럼, 상향 비-포스트 명령들은 상향 비-포스트 명령에 포함된 정보를 필요로 하는 하향 회로에 의해 사용되기 위해 유지된다. 명령들을 비-포스트 명령 버퍼(690)에 신속하게 저장하기 위해, 버퍼 유효성 FIFO는 비-포스트 명령 버퍼(690)내의 다음 유효한 위치를 지정할 것이다.
비-포스트 명령 버퍼(690)가 비었을 때, 명령들은 비-포스트 명령 버퍼(690)가 채워질 때까지 차례로 저장될 것이다. 비-포스트 명령들과 관련된 응답들의 수신 순서에 따라, 비-포스트 명령들은 제거되거나 순서에서 벗어나 회수될 수 있어서, 임의의 패턴 내에 "홀(hole)들"이나 빈 위치들을 남긴다. 그래서 어떤 새로운 명령들을 비-포스트 명령 버퍼(690)내에 저장하기 위해, 유효 위치들이 버퍼 유효성 FIFO(685)를 사용하여 트래킹될 것이다.
예시된 실시예에서, 비-포스트 명령 버퍼(690)는 8개의 위치들을 포함한다. 버퍼 유효성 FIFO(685)는 또한 8 개의 위치들을 포함하고, 버퍼 유효성 FIFO(685)내의 8 개의 위치들 각각은 3 개의 비트 값들을 저장할 수 있다. 버퍼 유효성 FIFO(685)내에 저장된 값들은 비-포스트 명령 버퍼(690)내의 위치들의 어드레스들에 대응한다. 그래서, 각 3 개의 비트 값들은 비-포스트 명령 버퍼(690)내로의 색인으로 사용될 수 있다. 다른 실시예들은 다른 적당한 수의 위치들과 다른 수의 비트들을 가질 수 있다는 점이 고려된다. 버퍼 유효성 FIFO(685)가 FIFO 구조이기 때문에, 값들은 그들이 기입된 순서에 따라 판독될 것이다. 그래서 본 실시예에서는, 값들이 버퍼 유효성 FIFO(685)의 최하부(bottom)안으로 기입되고 최상부(top)로부터 판독된다고 한다. 그러나 다른 실시예에서는, 최하부와 최상부는 용어가 상반되게 사용될 수 있는 것이 고려된다. 다른 실시예들은 버퍼 유효성 FIFO(685)내의 각각의 위치들을 지정하기 위해 판독과 기입 포인터들을 사용할 수 있는 점이 고려된 다.
초기화될 때, 비-포스트 명령 버퍼(690)는 비어 있을 것이고, 그래서 모든 위치들이 유용할 것이다. 버퍼 유효성 FIFO(685)는 초기화되어 버퍼 유효성 FIFO(685)의 최상부는, 비-포스트 명령 버퍼(690)의 위치 0(zero)의 어드레스에 대응하는 색인 값을 포함하게 된다. 버퍼 유효성 FIFO(685)내의 다음 위치는 위치 1 등의 어드레스에 대응하는 색인 값을 포함할 것이다. 그래서 비-포스트 명령이 도달할 때, 기입 로직(686)은 버퍼 유효성 FIFO(685)의 최상부에 포함된 색인 값을 판독하고, 이어서 명령이 위치 0의 어드레스에 기입되게 한다. 일단 명령이 저장되면, 버퍼 유효성 FIFO(685)에 저장된 모든 색인 값들은 하나의 위치로 상승시프트하여 위치 1의 어드레스가 이제 버퍼 유효성 FIFO(685)의 최상부 위치가 된다.
특정한 하향 명령이 완료되고 비-포스트 명령 버퍼(690)내에 저장된 대응하는 비-포스트 명령이 더이상 필요하지 않게 될 때, 그것은 비-포스트 명령 버퍼(690)로부터 회수될 것이다. 그래서 비-포스트 명령 버퍼(690)는 비-포스트 명령이 유효하게 저장되고 회수 로직(687)에 대한 대응 지시를 제공하는 위치들을 만든다. 회수 로직(687)은 언제 위치가 유효하게 될지를 결정하고, 응답에서, 버퍼 유효성 FIFO(685)에 대한 유효한 위치의 어드레스에 대응하는 색인 값을 버퍼 유효성 FIFO(685)의 최하부 안에 기입되도록 야기할 것이다. 그래서, 버퍼 유효성 FIFO(685)의 최상부 위치는, 유효한 위치들이 있을 때, 유효한 위치의 어드레스에 대응하는 색인 값을 포함할 것이다. 비-포스트 명령 버퍼(690)내에 유효한 위치들이 없는 경우에, 기입 로직(686)은 어떤 명령들이 비-포스트 명령 버퍼(690)내로 저장되도록 야기하지 못하게 될 것이다.
도 7에 관하여, 도 3의 제어 로직과 저장 유닛의 일 실시예에 대한 예시적인 다이어그램이 보여진다. 제어 로직과 저장 유닛(460)은 버퍼 유효성 레지스터(600), 헤드 레지스터(610), 넥스트 포인터 레지스터(620), 테일 레지스터(630) 및 스플릿 응답 포인터 레지스터(640)를 포함한다.
예시적인 실시예에서, 헤드 레지스터(610)는 29 비트들을 포함하는데, 이는 도 3의 NP 소스 테깅 로직 유닛(490)에 의해 발생하는 29 개의 가능한 태그 값들에 대응하는 것이다. 헤드 레지스터(610)는 어떤 명령 패킷들이 각각의 데이터 스트림들에서 제 1 명령 패킷들인지를 지시하는데 사용된다. 예시를 위해, 비트들 0과 3은 태그 값들 0과 3을 가진 명령 패킷들이 헤드 패킷들인 것을 지시하도록 정해진다. 본원에서 사용되는 것처럼, 데이터 스트림은, 데이터 요구에 관련된 패킷들의 하나 이상의 순서에서, 어떠한 수의 패킷들을 나타낸다. 예를 들어, 비-포스트 판독 요구 명령은 몇 개의 판독 명령들로 분해되는바, 이들은 모두 같은 데이터 스트림에 속한다. 하나 이상의 패킷을 포함하는 데이터 스트림들에 대해, 넥스트 포인터(620)와 테일 레지스터(630)는 데이터 스트림 내의 잔여 패킷들의 순서를 트래킹하는데 사용될 수 있다.
넥스트 포인터(620)는 29개 위치들을 또한 포함하는데, 이들은 각각 적어도 29개 태그 값들을 묘사하기 위한 5개 비트들을 저장할 수 있다. 그러므로 각각의 위치는 29 개의 태그 값들 중 하나를 나타낸다. 그래서 넥스트 포인터(620)의 각각의 위치에 저장된 값은 넥스트 포인터(620)내의 다음 위치를 지정하는데 사용될 것 이다. 또한, 각각의 위치에 저장된 값은 특정한 데이터 스트림내의 다음 패킷의 태그 값을 나타낸다. 그래서 넥스트 포인터(620)내에 저장된 값들의 순서는 보내진 순서에 따라 수신되지는 않을 수 있는 데이터 스트림의 다수의 패킷들의 순서를 재구성하거나 또는 검증하는데 사용될 것이다.
테일 레지스터(630)는 또한 각각 29개의 태그 값들에 대응하는 29개 비트들을 포함할 것이다. 테일 레지스터(630)는 특정한 데이터 스트림내의 마지막 패킷에 대응하는 태그 값을 지시하는데 사용될 것이다. 예시된 실시예에서, 비트 2와 비트 5가 설정되어 태그 값 0과 3을 가진 명령 패킷들이 테일 패킷들임을 지시한다.
주목할 사항으로서, 상기에서 언급된 실시예에서는 테일 레지스터가 특정한 데이터 스트림내의 마지막 패킷을 식별하는데 이용되지만, 다른 실시예에서는 특별한 값이 넥스트 포인터(620) 위치 내에 저장될 수 있음이 고려된다. 이 특별한 값은 그것이 저장된 위치에 대응하는 태그 값이 특정한 데이터 스트림내의 마지막 패킷에 대응한다는 것을 표시할 것이다.
예시적인 실시예에서, 버퍼 유효성 레지스터(600)는 또한 각각 29 개의 태그 값들에 대응하는 29개의 비트들을 포함한다. 버퍼 유효성 레지스터(600)는 수신되어온 특정한 데이터 스트림과 관련된 응답들 중 어느것이 수신되었는지를 표시하는데 사용될 것이다. 예를 들어, 태그 값들 3과 4를 포함하는 데이터 패킷들은 수신되어 도 3의 데이터 버퍼(400)와 같은 데이터 버퍼 내에 저장될 것이다. 따라서, 도 7의 버퍼 유효성 레지스터(600)의 비트 수들 3과 4는 데이터가 세트됨으로써 유효해 짐을 나타낼 것이다.
스플릿 응답 포인터(640)는 또한 29개의 위치들을 포함하는데, 이들 각각은 도 3의 NP 명령 버퍼(480)와 같은 버퍼 내의 8개 위치들까지 표시하기 위한 3개의 비트들을 저장 가능하다. 각각의 3-비트 값은 도 3의 NP 명령 버퍼(480)내의 위치의 어드레스에 대응하는 색인 값으로 사용될 것이다. 따라서, 스플릿 응답 포인터(640)는 어떤 응답 명령들이 도 3의 NP 명령 버퍼(480)내에 저장된 최초 비-포스트 명령과 관련되는지를 나타내는데 이용될 수 있다. 그래서, 스플릿 응답 포인터(640)는 주변 버스로의 부분적인 데이터 전송이 필요한 경우에 사용될 것이다.
상기에서는 29개 태그 값들이 있는 경우를 설명하였지만, 다른 실시예들은 더 많거나 적은 태그 값들을 사용할 수 있다는 점을 고려해야 한다. 따라서, 헤드 레지스터(610), 넥스트 포인터(620), 테일 레지스터(630), 버퍼 유효성 레지스터(600) 및 스플릿 응답 포인터 레지스터(640)는 각각 많거나 적은 수의 비트들을 포함할 수 있음이 또한 고려되어야 한다. 이러한 레지스터들과 연관된 로직은 전환(reverse)되어, 비트들이 대응하는 태그 값을 표시하도록 세트되는 대신에 삭제될 수 있음이 더욱 고려되어야 한다.
도 3의 설명과 관련하여 언급되었듯이, 버스 사이클이 버스 인터페이스 회로(470)로 인해 비-포스트 패킷 명령으로 변환될 때, 그 비-포스트 패킷 명령과 연관된 몇몇의 응답 패킷들이 있을 것이다. 응답 패킷들은 하향부(360)에 의해 순서에서 벗어나 수신될 수 있고, 데이터 스트림내의 패킷들의 순서는 주변 버스의 형태에 따라 유지될 수 있음이 또한 언급되었다. 도 8과 도 9의 설명과 관련하여 하기에서 더 자세히 설명되는 바와 같이, 비-포스트 명령들은 상향부(450)에 의해 수신되고 소스 태그 값들은 그러한 비-포스트 명령들에 대해 NP 소스 태깅 로직 유닛(490)에 의해 발생할 것이다. 이어서, 제어 로직과 저장 유닛(460)내의 헤드 레지스터(610), 넥스트 포인터(620), 테일 레지스터(630), 버퍼 유효성 레지스터(600) 및 스플릿 응답 포인터 레지스터(640)는 비-포스트 소스 태그 값들을 사용하여, 하나 이상의 데이터 스트림들 내의 응답들의 정확한 순서를 유지하는데 사용될 것이다. 또한, 응답들이 수신될 때, 제어 로직과 저장 유닛(460)은 데이터 스트림의 일부를 형성하는 데이터의 순서를 전달할 때 사용될 것이다.
예시된 실시예는 저장을 위해 레지스터들을 사용하지만, 다른 실시예들은 예를 들어, 랜덤 액서스 메모리나 어떤 형태의 지울 수 있는 프로그램가능한 읽기 전용 메모리(erasable programmable read only memory)와 같은 다른 적당한 형태의 저장 수단을 사용할 수 있다는 점이 고려되어야 함을 명심해야 한다.
도 8은, 도 3의 주변 인터페이스 회로(350)의 일 실시예의 트랜잭션 재 배열 동작을 설명하는 흐름도를 도시한다. 도 3, 도 7 및 도 8을 함께 고려하면, 동작은 도 8의 단계(800)로 시작되고 비-포스트 명령이 도 3의 상향부(450)에서 수신되는 단계(810)로 진행한다. 도 8의 단계(820)로 진행하여, 도 3의 파싱 로직(500)은 비-포스트 명령이 상향 I/O 터널 요구들을 만족시키기 위해 복수의 비-포스트 명령들로 분리될 것인지 여부를 결정한다. 만일, 트랜잭션들이 PCI 트랜잭션들이거나, 만일 트랜잭션이 PCI-X 트랜잭션들이고 비-포스트 명령들이 분해될 필요가 없다면, 동작은 도 8의 단계(830)로 진행하는데, 여기서 비-포스트 명령은 도 3의 NP 명령 버퍼(480)에 저장된다. 일반적으로, PCI 트랜잭션들은 분해되지 않는다. 예를 들어, 도 3의 주변 인터페이스 회로에 의한 비-포스트 판독 요구는 캐쉬 라인 바운더리로 올라간다. 그러나, PCI 트랜잭션들은 어떠한 경우에는 분해되는 것으로부터 제외되지 않는다.
동작은 이제 도 8의 단계(840)로 진행하는데, 여기서는 비-포스트 소스 태그 값이 발생되어 비-포스트 명령에 추가된다. 동작은 이제 도 8의 단계(842)로 진행하는데, 여기서 도 7의 헤드 레지스터(610)는 비-포스트 명령에 대해 막 발생된 소스 태그 값에 대응하는 비트를 세팅함으로써 갱신된다. 동작은 이제 도 8의 단계(850)로 진행하는데, 여기서 제어 명령이 도 3의 제어 명령 발생기(520)에 의해 비-포스트 명령에 대해 발생되고 중재를 위해 I/O 터널 제어 로직으로 보내진다. 도 8의 단계(860)로 진행되어, 비-포스트 명령은 전송을 기다리기 위해 도 3의 가상 채널 명령 버퍼(530)내에 또한 저장되고, 도 8의 단계(870)에서는 만일 대응하는 제어 명령이 I/O 터널 제어 로직내의 중재 회로에 의해 선택된다면 비-포스트 명령이 전송될 것이다.
도 8의 단계(820)로 되돌아가, 만일 비-포스트 명령의 파싱(parsing)이 필요하다면, 동작은 단계(825)로 진행하는데 여기서 비-포스트 명령은 같은 순서나 데이터 스트림에 속하는 다수의 비-포스트 명령들로 분해될 것이다. 단계(835)로 진행하여, 본래의 비-포스트 명령은 도 3의 NP 명령 버퍼(480)에 저장될 것이다. 도 8의 단계(845)에서, NP 소스 태그들은 본래의 것으로부터 막 생성된 복수의 비-포스트 명령들 각각에 대해 발생한다. 동작은 이제 단계(842)로 진행하는데 여기서 도 7의 헤드 레지스터(610), 넥스트 포인터(620), 테일 레지스터(630) 및 스플릿 응답 포인터(640)들이 갱신된다. 헤드 레지스터(610)는 순서 내에서 첫 번째의 비-포스트 명령에 대해 막 발생한 태그 값에 대응하는 비트를 세팅함으로써 갱신된다. 테일 레지스터(630)는 데이터 스트림 내에서 마지막의 비-포스트 명령에 대해 막 발생한 태그 값에 대응하는 비트를 세팅함으로써 갱신된다.
넥스트 포인터(620)는 순서 내의 잔여 비-포스트 명령들의 태그 값들을 로딩함으로써 갱신된다. 태그 값들은 순서의 각각의 패킷을 순서의 다음의 패킷에 연결하는 것과 같은 방법으로 로드된다. 예시를 위해, 소정의 데이터 스트림은 세 개의 패킷들로 구성된 것으로 한다. 패킷들은 0, 1 및 2로서 정렬되고 따라서 0, 1 및 2로서 태그된다. 그래서 헤드 레지스터(610)의 비트 0은 세트되고 비트들 1과 2는 단지 하나의 패킷만이 헤드가 될 수 있기 때문에 삭제된다. 데이터 스트림에서 다음 패킷들의 트랙을 유지하기 위해서, 넥스트 포인터(620)의 위치들 0과 1은 다음 두 개의 패킷들의, 각각 1과 2인, 태그 값들로 로드된다. 헤드 레지스터(610)의 비트 0이 세트되기 때문에, 넥스트 포인터(620)의 위치 0은, 태그 값 1을 가진 패킷이 데이터 스트림에서 "다음의" 패킷임을 표시하는 태그 값 '1'로 로드된다. 또한, 넥스트 포인터(620)의 위치 1은, 태그 값 2를 가진 패킷이 데이터 스트림내의 "다음의" 패킷임을 나타내는 태그 값 '2'로 로드된다. 패킷 2는 데이터 스트림의 마지막 패킷이기 때문에, 이는 테일로서 표시된다. 따라서, 테일 레지스터(630)의 비트 2가 세트된다. 상기 실시예에서는, 태그 값들이 수적인 순서(예를 들어, 0, 1 및 2)에 따라 할당되었지만, 다른 실시예들에서는, 태그 값들이 다른 순서로 할당될 수 있으며 태그 값들은 어떤 태그 값들이 현재 유효한지에 따라 할당될 수도 있음이 고려되어야 함을 주의하여야 한다. 또한 다른 실시예들은 데이터 스트림 내에 보다 많거나 적은 패킷들을 포함할 수 있고 따라서 보다 많거나 적은 태그 값들이 사용될 수 있음이 고려되어야 한다.
데이터 스트림을 구성하는 복수의 비-포스트 명령들은 순서에서 벗어나서 하향 로직에 의해 수신됨으로써 그들을 요구된 디바이스로 전달하는데 지연을 야기한다. 이러한 지연은 도 3의 주변 인터페이스 회로(350)로 하여금 PCI-X 트랜잭션들에 대한 스플릿 응답을 지시하도록 야기할 것이다. 이러한 경우에 있어서, 하향 로직은 다수의 스플릿 응답 사이클들과 스플릿 완료 사이클들의 발신원이 되고, 다수의 비-포스트 명령들에 대응하는 본래의 비-포스트 명령에 포함된 정보는 스플릿 응답과 완료 버스 사이클들을 시작하는데 필요하다. 도 9와 관련하여 하기에서 더 자세히 설명할 것처럼, 도 7의 스플릿 응답 포인터 레지스터(640)는 특정한 데이터 스트림의 각각의 다양한 응답들을, 도 3의 NP 명령 버퍼(480)에 저장된 본래의 비-포스트 명령에 연결하는데 사용될 것이다. 따라서, 도 7의 스플릿 응답 포인터 레지스터(640)내의 각 위치는 대응하는 응답 명령의 NP 소스 태그 값을 나타낼 것이다. 각 위치는, 그 응답에 대한 본래의 비-포스트 명령이 저장되는, 도 3의 NP 명령 버퍼(480)내의 위치의 어드레스에 대응하는 색인 값으로 로드될 것이다. 상기의 예에서, 도 7의 스플릿 응답 포인터 레지스터(640)내의 위치들 0, 1 및 2는 본래의 비-포스트 명령이 저장되는 도 3의 NP 명령 버퍼(480)내의 위치의 어드레스에 대응하는 색인 값으로 로드된다.
그 다음 동작은 도 8의 단계(850)로 진행하는데, 여기서 각각의 다양한 비-포스트 명령들에 대한 제어 명령들이 발생되어 I/O터널 제어 로직으로 보내진다. 또한, 단계(860)에서, 각각의 다양한 비-포스트 명령들은 송신을 기다리기 위해 도 3의 가상 채널 명령 버퍼(530)내에 저장될 것이다. 도 8의 단계(870)로 진행되어, 복수의 비-포스트 명령들은 각각은 대응하는 제어 명령이 I/O 터널 제어 로직내의 중재 회로에 의해 선택될 때 송신될 것이다. 동작에 대한 설명은 단계(880)에서 끝난다.
도 9와 관련하여, 도 3의 주변 인터페이스 회로(350)의 스플릿 응답 동작을 설명하는 흐름도가 보여진다. 도3, 도7 및 도 9를 함께 고려하면, 동작은 도 9의 단계(900)에서 시작되어 단계(905)로 진행하는데, 여기서 상향 비-포스트 명령에 대응하는 응답 명령이 도 3의 하향부(360)에 의해 수신된다. 단계(910)로 진행하여, 응답 명령과 관련된 데이터 세그먼트는 도 3의 데이터 버퍼(400)안에 저장된다. 데이터 세그먼트의 수신에 응답하여, 도 7의 버퍼 유효성 레지스터(600)는 응답 명령에 의해 수신된 NP 소스 태그 값에 대응하는 비트를 세팅함으로써 갱신된다. 동작은 이제 도 9의 단계(915)로 진행하는데 여기서 응답 명령의 태그 값에 대응하는 도 7의 헤드 레지스터(610)내의 비트의 상태가 데이터 스트림의 헤드 패킷인지를 확인하기 위해 체크된다. 만일 수신된 응답 명령이 헤드 패킷이 아니라면, 동작은 도 9의 단계(920)로 진행하는데 여기서 명령은 폐기되고 동작은 또다른 응답 명령을 기다리기 위해 다시 단계(905)로 되돌아간다. 만일 명령부가 헤드가 아니라면, 이 데이터 흐름과 관련된 곧 다가올 헤드 패킷이 있고 단지 데이터 세그먼트가 유지될 것이라고 가정되기 때문에, 그것은 폐기될 것이다. 단계(915)로 되돌아보면, 만일 응답 명령이 헤드 패킷이라면, 동작은 단계(925)로 진행하는데 여기서 응답 명령은 도 3의 태깅 로직(380)에 의해 중재 태그 값으로 할당되어 가상 채널 명령 버퍼(390)의 응답 채널 내에 저장된다.
도 9의 단계(930)로 진행하여, 도 3의 중재 로직(410)은 가상 채널 명령 버퍼(390)로부터 위닝 명령을 중재한다. 만일 응답 명령이 위닝 명령이 아니라면, 동작은 중재가 계속되는 단계(930)내에 머무르게 된다. 반면에, 만일 응답 명령이 위닝 명령이라면 동작은 단계(935)로 진행한다. 단계(935)에서, 만일 트랜잭션들이 PCI 트랜잭션들이고 모든 데이터 패킷들이 유효하다고 가정되면, 동작은 단계(940)로 진행하는데, 여기서 도 7의 헤드 레지스터(610), 넥스트 포인터(620), 테일 레지스터(630) 및 버퍼 유효성 레지스터(600)는 갱신되어 I/O 스트림과 관련된 태그 값들이 도 3의 NP 소스 태깅 로직(490)에 의해 재사용될 것이다. 또한, 본래의 비-포스트 명령은 도 3의 NP 명령 버퍼(430)로부터 회수될 것이다. 도 9의 단계(945)로 진행시, 모든 요구된 데이터를 포함하는 완료 버스 사이클이 도 3의 주변 버스(560)에서 시작될 것이다.
단계(935)로 되돌아가, 만일 트랜잭션들이 PCI-X 트랜잭션들이라면, 동작은 단계(960)로 진행하는데, 여기서 이 데이터 스트림과 연관된 어떤 데이터 패킷들이 유효한지를 결정할 필요가 있을 것이다. 이것은 도 7의 넥스트 포인터(620), 테일 레지스터(630) 및 버퍼 유효성 레지스터(600)의 조합을 체크하는 것으로 수행된다. 만일 모든 데이터 패킷이 도착했다면, 동작은 도 9의 단계(965)로 진행한다. 단계(965)에서, 도 7의 헤드 레지스터(610), 넥스트 포인터(620), 테일 레지스터(630) 및 버퍼 유효성 레지스터(600) 및 스플릿 응답 포인터(640)는 갱신되어 데이터 스트림과 연관된 태그 값들이 도 3의 NP 소스 태깅 로직(490)에 의해 재사용될 것이다. 도 9의 단계(970)로 진행하여, 모든 응답 데이터가 요구 디바이스에 보내졌음을 나타내는 완료 사이클이 시작된다. 완료 사이클을 시작하기 위해, 도 3의 주변 인터페이스 회로(350)가 이제 소스 디바이스가 되어 스플릿 완료 사이클을 시작한다. 스플릿 완료 사이클을 시작하기 위해서는, 도 3의 NP 명령 버퍼(480)내에 저장된 현재의 응답 패킷에 대응하는 본래의 비-포스트 사이클에 포함된 정보가 필요할 것이다. 따라서, 스플릿 응답의 소스 태그 값에 대응하는 위치는 도 7의 스플릿 응답 포인터 레지스터(640)로부터 판독된다. 본래의 비-포스트 사이클 내에 포함된 정보가 검색되고 스플릿 완료 사이클이 시작된다. 또한 본래의 비-포스트 명령은 도 3의 NP 명령 버퍼로부터 회수될 것이다.
다시 단계(960)와 관련하여, 만일 데이터 스트림에 연관된 데이터 패킷들 중 단지 일부만 도달하고, 유효한 데이터 패킷들이 식별되었다면, 동작은 단계(975)로 진행하는데, 여기서 도 7의 헤드 레지스터(610), 넥스트 포인터(620), 버퍼 유효성 레지스터(600) 및 스플릿 응답 포인터(640)가 갱신된다. 그러나, 데이터 패킷들 중 단지 일부만 유효하기 때문에, 스플릿 응답 사이클이 발생될 것이다. 스플릿 응답 트랜잭션은 명령 패킷과 데이터 스트림의 일부를 형성하는 데이터의 순서를 함께 구성하는 도 7의 데이터 버퍼(400)내에 저장된 데이터 세그먼트들을 포함할 것이다. 따라서, 도 7의 헤드 레지스터(610)와 넥스트 포인터(620)가 갱신되어 데이터 스트림의 새로운 헤드와 다음의 패킷들을 반영할 것이다. 단계(985)로 진행하여, 스플릿 응답 버스 사이클은 도 3의 주변 버스(560)에서 시작된다. 상기의 경우와 유사하게, 도 3의 NP 명령 버퍼(480)내에 저장된 현재의 응답 패킷에 대응하는 본래의 비-포스트 사이클에 포함된 정보는 스플릿 응답 사이클을 시작하는데 필요할 것이다. 그래서, 스플릿 응답의 소스 태그 값에 대응하는 위치는 도 7의 스플릿 응답 포인터 레지스터(640)로부터 판독된다. 본래의 비-포스트 사이클 내에 포함된 정보가 검색되고 스플릿 응답 사이클이 시작된다. 그러나 상기의 경우와는 반대로, 스플릿 응답 버스 사이클을 정확하게 시작하기 위해서, 도 3의 버스 인터페이스 회로(470)는 패킷의 데이터 카운트 필드내의 대응하는 카운트를 포함함으로써 스플릿 응답 명령으로 보내어진 데이터의 양이 통지될 것이다. 이 카운트는 보내진 데이터 블럭들의 수를 나타낸다. 도 9의 단계(960)로 다시 진행하여, 잔여 데이터 패킷들을 포함하는 이후의 응답 명령들이 수신될 때, 데이터 스트림의 잔여부를 형성하는 잔여 데이터 패킷들은 추가적인 스플릿 응답 사이클을 사용하여 요구하는 디바이스로 보내질 것이다. 데이터의 나머지가 보내질 때, 스플릿 완료 사이클은 시작될 것이고 본래의 비-포스트 명령은 도 3의 NP 명령 버퍼(430)로부터 회수될 것이다. 상기 동작의 설명은 도 9의 단계(950)에서 끝난다.
도 10을 보면, 그래픽 버스와 연결하기 위한 주변 인터페이스 회로의 일 실시예에 대한 블럭도가 보여진다. 주변 인터페이스 회로(1000)는 하향부(1010)와 상향부(1020)를 포함한다. 주변 인터페이스 회로(1000)는 또한 도 2의 I/O 터널(140)과 같은 I/O 터널에 연결된 터널 인터페이스(1030)를 포함한다. 도 10의 하향부(1010)에서, 터널 인터페이스(1030)는 또한 명령 버퍼(1040)에 연결된다. 명 령 버퍼(1040)는 태깅 로직 유닛(1050)에 연결된다. 태깅 로직 유닛(1050)은 가상 채널 명령 버퍼(1060)에 연결된다. 가상 채널 명령 버퍼(1060)는 중재 로직 유닛(1070)에 연결되고, 이 중재 로직 유닛(1070)은 버스 인터페이스 회로(1080)와 연결된다. 터널 인터페이스(1030)는 또한 데이터 버퍼(1100)에 연결되고, 이 데이터 버퍼(1100)는 버스 인터페이스 회로(1080)와 연결된다. 버스 인터페이스 회로(1080)는 그래픽 버스(1090)와 연결되고, 이 그래픽 버스(1090)는 그래픽 어뎁터(1095)에 연결된다. 최적의 실시예에서, 그래픽 버스(1090)는 가속 그래픽 포트(AGP: Accelerated Graphics Port) 버스이지만, 다른 실시예에서는 다른 형태의 그래픽 버스들을 사용할 수 있는 점이 고려되어야 한다.
상향부(1020)에서, 버스 인터페이스 회로(1080)는 NP 명령 버퍼(1110)및 파싱 로직(1170)과 연결된다. 또한, 버스 인터페이스 회로(1080)는 데이터 버퍼(1150)에 연결된다. NP 명령 버퍼(1110)는 제어 명령 발생기(1140)와 NP 소스 태깅 로직 유닛(1120)과 연결된다. 제어 명령 발생기(1140)는 가상 채널 명령 버퍼(1160)와 터널 인터페이스(1030)에 연결된다. 가상 채널 명령 버퍼(1160)도 또한 터널 인터페이스(1030)와 연결된다. 주변 인터페이스 회로(1000)는 또한 하향부(1010)의 데이터 버퍼(1100)와 연결된 제어 로직과 저장 유닛(1130)을 포함한다. 제어 로직과 저장 유닛(1130)은 또한 상향부(1020)의 NP 소스 태깅 로직 유닛(1120)과 NP 명령 버퍼(1110)에 연결된다.
예시적인 실시예에서, 가상 채널 명령 버퍼(1060)와 가상 채널 명령 버퍼(1160)는 각각 세 개의 형태의 트랜잭션들 즉, 포스트, 비-포스트 및 응답에 대응하는 세 개의 분리된 FIFO부들을 포함한다. 명령들은 이들이 수신되는 순서로 각각의 FIFO 안에 배치된다. 그러나, 본래의 명령을 발생하는 버스나 디바이스 형태와 관련된 구성 법칙을 유지하기 위해서, 트랜잭션들은 다른 형태의 트랜잭션들 사이에서 순서에 관계없이 처리되어야만 할 것이다. 이것은 가상 채널 명령 버퍼(1060)와 중재 로직(1070)의 결합을 포함하는 명령 스케줄러에 의해 수행된다.
일 실시예에서, 명령 버퍼(1040)는 도2의 I/O 터널(140)로부터 도 10의 가상 채널 명령 버퍼(1090)로 보내어진 명령들에 대한 버퍼링 메커니즘으로 작동하는 2-딥(deep) FIFO일 것이다. 트랜잭션이 하향부의 주변 인터페이스 회로(1000)로 보내질 때, 트랜잭션의 데이터 부는 데이터 버퍼(1100)안에 저장될 것이고, 트랜잭션의 명령부는 가상 채널 명령 버퍼(1060)에 저장될 것이다. 그러나 우선, 태깅 로직(1050)은 태그 값을 발생하고 명령에 추가시키도록 구성될 것이다. 태그 값은 다른 수신된 명령들과 연관된 명령의 상대적인 수신 순서에 대응할 것이고 이어지는 중재 사이클들에서 사용될 것이다. 데이터와 명령은 패킷들에 포함될 수 있는 헤더 정보에 의해서, 같은 패킷에 속하는 것으로 식별될 수 있다. 또한, 그래픽 버스들은 I/O노드의 내부 클록 속도보다 느린 클록 속도로 작동하기 때문에, 데이터는 I/O노드의 클록 속도를 사용하여 데이터 버퍼(1100)안으로 로드될 수 있고, 다른 클록 속도, 바람직하게는 버스 인터페이스 회로(1080)에 연결된 그래픽 버스의 클록 속도로 언로드될 수 있다. 또한, 데이터 버퍼(1100)와 가상 채널 명령 버퍼(1060) 모두는 어떤 상향 로직에 두 버퍼내의 공간이 유효하지 않을 때를 통지하도록 구성될 수 있다.
어느 그래픽 어뎁터들은 본래 시스템 메모리와의 통신을 위해 PCI 버스를 사용하여 구현되었기 때문에, 그래픽 어뎁터(1095)와 같은 그래픽 어뎁터들은 여전히 그래픽 버스(1090) 상에서 PCI 버스 트랜잭션들을 시작할 수 있는 PCI 로직을 포함할 것이다. 또한, 시스템 프로세서와 같은 다른 디바이스들에 의해 시작된 구성 명령들은 그래픽 버스(1090)를 거쳐 PCI 명령을 사용하여 그래픽 어뎁터(1095)로 보내질 것이다. 그래서, AGP 버스 사이클을 패킷 명령들로, 패킷 명령들을 AGP 버스 사이클들로 변환하는 것에 더하여, 버스 인터페이스 회로(1080)는 또한 패킷 명령들을 그래픽 버스(1090)상에서의 전송에 적절한 PCI 버스 사이클들로 변환한다.
명령의 형태(예를 들어, 포스트, 비-포스트 및 응답)에 따라서, 명령이 가상 채널 명령 버퍼(1060)의 각 가상 채널 FIFO 안에 저장되는데, 이는 도 3의 하향부(360)의 동작과 유사하다. 도 10에서, 중재 로직(1070)은 가상 채널 명령 버퍼(1060)내의 트랜잭션들 사이에서 어떤 트랜잭션이 첫째로, 둘째로, 등으로 처리되는지를 중재하도록 구성된다. 중재 로직(1070)은 또한 중재 사이클들 동안 태깅 로직 유닛(1050)에 의해 할당된 태그 값들을 사용한다. 또한, PCI 응답들에 대해, 다양한 응답 패킷들은 만일 그들이 공통 요구 트랜잭션으로 부터 발생하였다면 같은 데이터 스트림이나 순서에 속할 것이다. 비록 패킷들이 순서에서 벗어나 하향 로직에 의해 수신되었다 하더라도, 소정의 데이터 스트림에 속하는 응답 패킷들을 올바른 순서로 전달할 필요가 있다. 이 동작은 PCI 응답들에 대한 도 9와 관련하여 주어진 설명과 유사할 것이다.
도 11의 설명과 관련하여 하기에서 더 자세히 설명될 것처럼, 하향부(1010) 에 의해 수신된 AGP 응답은 가상 채널 명령 버퍼(1060)내에 저장되지 않을 것이며, 중재 사이클에 참여하지 않을 것이다. AGP 응답은 가상 채널 명령 버퍼(1060)내의 버퍼들을 대신 통과시킬 것이며 응답 명령과 관련된 데이터를 버스 인터페이스(1080)로 보낼 것이다. 그러나, AGP 응답들은 순서화 법칙들에 구속될 것이므로, 제어 로직과 저장 유닛(1130)은, 패킷들을 올바른 순서로 전달하는데 사용하는 레지스터와 같은 로직과 저장 유닛들을 포함할 것인데, 이는 도 12의 설명과 관련하여 하기에서 더 자세히 설명될 것이다.
그래픽 어뎁터(1095)가 그래픽 버스(1090)상에서 AGP 트랜잭션을 시작할 때, 버스 인터페이스 회로(1080)는 그 트랜잭션을, 상기에서 언급된 명령과 데이터 패킷들을 포함하는 패킷 트랜잭션들로 변환한다. 데이터 패킷들은 데이터 버퍼(1150)안에 저장되고 명령들은 각 가상 채널내의 가상 채널 명령 버퍼(1160)안에 저장될 것이다. 가상 채널 명령 버퍼(1160)안에 저장하기에 앞서 그리고 명령의 형태에 따라서, 파싱 로직(1170)은 명령을 다수의 작은 명령들로 분해할 것이다. 예를 들어, 만일 그래픽 어뎁터(1095)가 시스템 메모리로부터 큰 블록의 데이터를 판독하도록 요구된다면, 파싱 로직(1170)은 같은 메모리 블록이나 더 작은 블록들인 다수의 비-포스트 판독 명령들을 생성한다. 일 실시예에서, 블럭들은 캐시 라인 바운더리들을 따라 생성됨이 고려되어야 한다. 이어서, 각각의 새로이 생성된 비-포스트 명령들은 가상 채널 명령 버퍼(1160)내에 저장되고, 본래의 비-포스트 명령은 NP 명령 버퍼(1110)내에 저장될 것이다.
예시적인 실시예에서, NP 소스 태깅 로직(1120)은 특정한 응답 명령이 어떤 데이터 스트림에 관련되는지를 결정하기 위해 하향 로직에 의해 사용될 태그 값을 발생할 것이다. NP 소스 태깅 로직(1120)은 각각의 상향 비-포스트 명령들과 관련된 태그 값을 발생할 것이다. 일 실시예에서, 0에서 29까지의 태그 값들이 생성될 것이다. 그러나, 다른 실시예는 다른 적당한 수의 태그 값들을 생성할 것임이 고려되어야 한다.
상향 명령들이 가상 채널 명령 버퍼(1160)내에 저장되기 때문에, 제어 명령 발생기(1140)는 도 2의 트랜스시버들(110과 120)에 의해 발생되는 제어 명령들과 유사한 제어 명령들을 발생할 것이다. 도 10에서, 제어 명령 발생기(1140)는 또한 그러한 제어 명령들을 터널 인터페이스(1030)를 통하여 예를 들어, 도 2의 터널 제어 유닛(130)과 같은 제어 유닛으로 전달하여, 상향 명령들이 I/O 터널(140)안으로 스케줄 되는 것을 허용하게 된다. 도 10의 터널 인터페이스(1030)는 I/O터널(140)과 주변 인터페이스 회로(1000)내의 로직 사이를 인터페이스하는데 필요한 범용 버퍼링 회로를 포함할 것이다.
도 11에 관련하여, 그래픽 응답의 처리를 위한 주변 인터페이스 회로의 일실시예에 대한 실시도가 보여진다. 도 10에서 보여진 것들에 대응하는 회로 요소들은 단순화와 명료화를 위해 동일하게 번호가 매겨졌다. 주변 인터페이스 회로는 버스 인터페이스 회로(1080)와 연결된 데이터 버퍼(1100)를 포함하는 바이패스 메커니즘(1200)을 포함한다. 버스 인터페이스 회로(1080)는 타겟 버스(1185)와 소스 버스(1182)와 연결된 FIFO 버퍼(1105)를 포함한다. 소스 버스(1182)와 타겟 버스(1185)는 그래픽 버스(1090)와 연결된다. 바이패스 메커니즘(1200)은 또한 중재 로직(1070)에 연결된 가상 채널 명령 버퍼 회로(1060)를 포함한다. 중재 로직(1070)은 또한 버스 인터페이스 회로(1080)와 연결된다. 또한, 바이패스 메커니즘(1200)은 가상 채널 명령 버퍼 회로(1060)의 응답 채널을 버스 인터페이스 회로(1080)와 연결시키는 AGP 바이패스 코넥션을 포함한다.
도 10과 관련하여 상기에서 언급된 것처럼, 하향 응답들과 명령들은 수신되면, 이들은 가상 채널 명령 버퍼 회로(1060)의 각 가상 채널 FIFO내에 저장될 것이다. 도 11에서, 중재 사이클들은 위닝 명령들을 결정할 때, 위닝 명령과 관련된 데이터는 FIFO 버퍼(1105)로 전달될 것이다. 데이터가 FIFO(1105)내에 존재하는 한, 버스 인터페이스(1080)는 그래픽 버스(1090) 상에서의 전송에 적당한 버스 사이클들을 시작할 것이다. 버스 사이클들이 완료되고, 각 위닝 명령이 가상 채널 명령 버퍼 회로(1060)로부터 회수됨에 따라, 소정의 가상 채널 FIFO내의 잔여 명령들은 그 FIFO의 헤드를 향해 이동할 것이다. 결국, 각 명령은 판독되어, 상기 명령이 AGP 응답 명령이 아니라면, 중재 사이클들에 참여할 것이다.
예시적인 실시예에서, 버스 인터페이스 회로(1080)는 두 개의 분리된 버스들 즉, 소스 버스(1182)와 타겟 버스(1185)를 포함한다. 소스 버스(1182)와 타겟 버스(1185)는 패킷 트랜잭션들을 그래픽 버스(1090)와 상향 노드 사이로 전달하기 위해 버스 인터페이스(1080)에 의해 이용될 것이다. 소스 버스(1182)는 그래픽 버스(1090)에 연결된 그래픽 디바이스에 의해 시작된 명령들을 전달하는데 이용된다. 타겟 버스(1185)는 그래픽 버스(1090) 상에서가 아닌, 예를 들어 시스템 프로세서와 같이 다른 디바이스들에 의해 시작된 명령들을 전달하는데 이용된다. 도 11에 서, 소스 버스(1182)와 타겟 버스(1185)는 각기 명령 채널과 응답 채널(도시되지 않음)을 포함한다. 소스 버스의 명령 채널은 그래픽 버스 상의 디바이스에 의해 시작된 포스트, 비-포스트 명령들과 같은 명령들을 전달하는데 이용될 것이다. 소스 버스의 응답 채널은, 그래픽 버스 상에 없는 디바이스에 의해 발생되었지만, 그래픽 버스 상의 디바이스에 의해 시작된 포스트, 비-포스트 명령들에 대응하는 응답 명령들을 전달하는데에 이용될 수 있다. 또한, 타겟 버스의 명령 채널은 그래픽 버스 위가 없는 디바이스들에 의해 시작된 포스트, 비-포스트 명령들과 같은 명령들을 전달하는데 이용될 것이다. 타겟 버스의 응답 채널은 그래픽 버스 상의 디바이스에 의해 발생되었지만, 그래픽 버스 위에 없는 디바이스에 의해 시작된 포스트, 비-포스트 명령들에 대응하는 응답 명령들을 전달하는데 이용될 것이다.
트랜잭션들을 전달하는데 사용되는 두 개의 개별적인 버스들이 있기 때문에, 하향 AGP와 PCI 응답 명령들은 소스 버스(1182)의 응답 채널 상으로 전달될 것이고, 어떤 하향 포스트, 비-포스트 명령들은 타겟 버스(1185) 상으로 전달될 것이다. 예를 들어 설명하기 위해, 비-포스트 판독 명령과 같은 AGP 트랜잭션은 그래픽 버스(1090)에 연결된 그래픽 디바이스에 의해 시작된다. 트랜잭션은 버스 인터페이스 회로(1080)에 의해 패킷들로 변화되고 소스 버스(1182)의 명령 채널을 통해 도 10의 상향부(1020)로 전달될 것인데, 여기서 상기 명령은 처리를 위하여 호스트 노드(도시되지 않음)로 보내진다. 얼마의 시간 후에, 이전 AGP 명령에 대응하는 AGP 응답이 가상 채널 명령 버퍼 회로(1060)에 의해 수신된다. 소스 버스(1182)의 응답 채널과 타겟 버스(1187)의 분리된 명령 채널의 유효성 때문에, AGP 응답은 가상 채널 명령 버퍼 회로(1060)의 응답 채널 내에 저장되지 않고 그러므로 어떤 중재 사이클에도 참여하지 않는다. AGP응답은 가상 채널 명령 버퍼 회로(1060)의 응답 채널을 바이패스하고 버스 인터페이스 회로(1080)로 전달되도록 허락된다. 가상 채널 명령 버퍼 회로(1060)내에 저장된 다른 모든 형태들의 명령들은 중재 사이클에 참여할 것이다. 이는 그래픽 버스(1090)에 연결된 그래픽 디바이스에 의해 시작된 비-포스트 판독 명령과 같은 PCI 트랜잭션과 대조적이다. 얼마 시간 후에 도달한 하향 PCI 응답은 가상 채널 명령 버퍼 회로(1060)의 응답 채널 버퍼 내에 저장될 것이고 중재 사이클들에 참여한다. PCI 순서화 법칙들은 데이터 스트림들 사이의 트랜잭션 재배열을 허용하나 AGP 순서화 법칙들은 그렇지 않기 때문에 PCI 응답들은 스케줄되어야할 필요가 있을 것이다.
이제 도 12로 돌아가면, 그래픽 응답을 재배열하는 장치의 일 실시예의 실시도가 보여진다. 도 10과 도 11에서 보여진 것들에 대응하는 회로 요소들은 단순화와 명료화를 위해 동일하게 번호 매겨졌다. 트랜잭션 재배열 장치는 포인터(1101), 제어 로직과 저장 유닛(1130)을 포함하는 데이터 버퍼(1100)를 포함한다. 데이터 버퍼(1100)는 제어 로직과 저장 유닛(1130)에 연결되고 버스 인터페이스 회로(1080)에 연결된다. 제어 로직과 저장 유닛(1130)은 데이터 유효성 저장 유닛(1135)을 포함한다. 예시적인 실시예에서, 데이터 유효성 저장 유닛(1135)은 레지스터이다. 그러나, 다른 실시예는 예를 들어, 랜덤 액서스 메모리와 같은 어떤 적당한 저장 디바이스를 사용할 수 있음이 고려되어야 한다.
상기에서 언급되었듯이, PCI 및 PCI-X 응답들과 달리 AGP 응답들과 같은 그 래픽 응답들은 그들이 어떤 데이터 스트림에 속하는지에 관계없이 그들이 요구되는 순서에 따라 시작하는 디바이스들로 되돌려 보내진다. 그래서 하향 AGP 응답들은 그들이 데이터 버퍼(1100)에 의해 수신된 것과 다른 순서로 시작하는 디바이스들로 되돌려 보내질 것이다. 예를 들어, 제 1 요구는 상향으로 보내지고 제 1 데이터 스트림과 연관된다. 그 뒤에는 제 2 데이터 스트림과 연관된 제 2 요구가 뒤따른다. 얼마의 시간 후에, 제 1 데이터 스트림에 대응하는 응답 데이터 패킷들 중 단지 일부가 수신되고 데이터 버퍼(1100)내에 저장된다. 그러나, 제 2 데이터 스트림의 모든 응답 데이터 패킷들은 수신되어 데이터 버퍼(1100)내에 저장된다. 제 2 데이터 스트림으로부터의 데이터 패킷들은, 제 1 데이터 스트림으로부터의 잔여 데이터 패킷들이 수신된 후 버스 사이클들로의 변화을 위해 버스 인터페이스(1080)로 전달될 때까지 전송되지 않는다.
예시적인 실시예에서, 데이터 버퍼(1100)는 도 10의 NP 태깅 로직(1120)에 의해 명령들에게 할당되는 각기 29 태그 값들에 대응하는 적어도 29개의 저장 위치들을 포함하는 랜덤 액서스 메모리 유닛일 수 있다. 각기 데이터 패킷이 도달할 때, 이는 수신된 데이터 패킷의 태그 값에 대응하는 위치에 저장될 것이다. 도 12에서, 포인터(1101)는, 버스 인터페이스(1080)로 보내질 다음의 순차 AGP 데이터 세크먼트의 데이터를 포함할 것이라고 예상되는 위치를 가르킬 것이다. 또한, 데이터 유효성 레지스터(1135)는 각기 도 10의 NP 태깅 로직(1120)에 의해 명령들에 대해 할당된 29개의 태그 값들에 대응하는 적어도 29개 비트들을 포함한다. 도 12의 데이터 유효성 레지스터(1135)는 어떤 데이터 패킷들이 수신되었는지를 지시하는데 사용되고, 포인터(1101)는 데이터 버퍼(1100)내의 다음의 AGP 응답 위치를 지정한다. 예시하기 위해, 태그 값 0, 1 및 27을 포함하는 데이터 패킷들이 수신된다. 데이터 패킷들은 데이터 버퍼(1100)내에 각기 위치 번호 0, 1 및 27내에 저장된다. 따라서, 데이터 유효성 레지스터(1135)의 비트 번호 0, 1 및 27이 세트되어, 어떤 데이터가 유효한지를 지시할 것이고, 포인터(1101)는 다음의 AGP 데이터가 보내질 태그 값 0에 대응하는 위치를 가르킨다. 다른 실시예에서 데이터 유효성 레지스터(1135)는 소거됨으로써 데이터가 유효함을 지시할 수 있다는 점이 고려되어야 한다. 따라서, 하향 AGP 응답이 수신될 때마다, 대응하는 데이터가 데이터 버퍼(1100)내에 저장되고 데이터 유효성 레지스터(1135)는 어떤 데이터 패킷들이 데이터 버퍼(1100)내에 저장되었는지를 반영하기 위해 갱신될 것이다. 도 12의 메커니즘의 동작은 도 13과 관련하여 하기에서 더 자세히 설명될 것이다.
도 13에 관련하여, 그래픽 응답에 대한 트랜잭션 재배열 메커니즘의 일 실시예의 동작을 묘사하는 흐름도가 보여진다. 도 10, 도 12 및 도 13을 함께 고려하면, 동작은 도 13의 단계(1300)로 부터 시작된다. 단계(1300)에서, 시스템 초기화시, 도 12의 포인터(1101)는 예를 들어, 0과 같은 소정의 값으로 초기화될 것이다. 포인터(1101)의 초기화와 관련하여, 도 10의 NP 태깅 로직(1120)은 역시 같은 소정의 값에서 시작되어 그것에 의해 태깅 로직과 포인터를 일치시킨다. 그래서, 도 12의 포인터(1101)는 이제, 어떤 데이터가 판독되는 데이터 버퍼(1100)내의 다음의 위치를 가르킨다. 따라서, 초기화된 후에, 버스 인터페이스 회로(1080)로 보내질 제 1 AGP 응답은 0의 태그 값을 가질 것이다. 본 실시예에서 사용된 초기 값이 0이지만, 다른 실시예에서는 다른 적당한 초기 값이 사용될 수 있음을 고려해야 함이 주의되어야 한다.
도 13의 단계(1310)로 진행하여, AGP 응답 명령들은 도 10의 하향부(1010)에 의해 수신되어 응답과 관련된 명령 헤더내의 하나 이상의 식별하는 비트들에 의해 AGP 응답들로 식별될 것이다. 도 13의 단계(1320)로 진행하여, 응답의 데이터 부분은 상기 응답의 태그 값에 대응하는 도 12의 데이터 버퍼(1100)의 위치 내에 저장될 것이다. 또한, 데이터 유효성 레지스터(1135)내의 대응하는 비트는 데이터 버퍼(1100)내의 그 위치내의 데이터의 존재를 나타내도록 세트될 것이다. 다른 실시예들은 데이터의 존재를 나타내기 위해 데이터 유효성 레지스터(1135)내의 대응하는 비트들을 소거할 수 있음이 고려되어야 한다. 도 13의 단계(1330)로 진행시, 도 12의 포인터(1101)는 다음 AGP 응답 데이터가 판독되는 데이터 버퍼(1100)내의 위치를 가르키기 때문에, 새롭게 수신된 데이터 세그먼트의 태그 값의 표시는 포인터(1101)에 의해 제공되고 그 태그 값을 가진 데이터가 유효한지 여부에 대해 데이터 유효성 레지스터(1135)로부터 표시와 비교될 것이다. 만일 일치되지 않는다면, 응답의 명령 부분은 폐기될 것이고 동작은 도 13의 단계(1310)로 뒤로 진행한다. 단계(1330)와 관련하여, 만일 일치된다면, 그 후 동작은 단계(1340)로 진행하는데, 여기서 도 12의 포인터(1101)에 의해 가리켜진 위치에 저장된 데이터는 데이터 버퍼(1100)로부터 판독되고 포인터(1101)는 증분(increment)될 것이다. 도 13의 단계(1350)로 진행하여, 버스 사이클은 도 12의 버스 인터페이스 회로(1080)에 의해 시작됨으로써, 따라서 응답 데이터를 요구하는 디바이스로 보낸다.
도 13의 단계(1360)로 진행시, 도 12의 포인터(1101)가 인크리먼트되고 어떤 다음 AGP 응답 데이터가 판독되는 데이터 버퍼(1100)내의 위치를 가르키게 될 것이기 때문에, 대응하는 태그 값 표시가 제공되고 그 태그 값을 가진 데이터가 유효한지 여부에 대해 데이터 유효성 레지스터(1135)로부터의 표시와 비교될 것이다. 만일 일치한다면, 동작은 도 13의 단계(1340)로 다시 진행하는데, 여기서 데이터가 도 12의 데이터 버퍼(1100)로부터 판독될 것이며 포인터(1101)는 인크리먼트될 것이다. 또한, 도 13의 단계(1350)에서, 버스 사이클은 도 12의 버스 인터페이스 회로(1080)에 의해 시작될 것이고, 따라서 다음의 응답 데이터를 요구하는 디바이스로 보낸다. 도 13의 단계(1360)와 관련하여, 어떠한 일치도 없어, 다음 데이터가 유효하지 않음을 나타내면, 동작은 다른 AGP 응답들을 기다리기 위해 단계(1310)를 향해 뒤로 진행한다.
이 과정은 각기 수신된 AGP 응답에 대해 계속된다. 그러므로 AGP 응답들이 수신될 때, 만일 그들이 본래 요구된 것과 다른 순서에 따라 수신된다면, 각각의 순서에서 벗어난 응답 명령들은 무시될 것이고, 데이터는 정확한 순서의 AGP 응답을 기다리기 위해 저장될 것이다.
상기의 명세서를 충분히 이해하게되면, 많은 변화와 수정이 기술 분야의 당업자에게 자명할 것이다. 하기의 청구항은 이러한 모든 변화들과 수정들을 포함하는 것으로 해석되도록 의도되었다.
본 발명은 일반적으로 컴퓨터 시스템 입력/출력에 적용 가능할 것이다.

Claims (27)

  1. 컴퓨터 시스템의 입/출력 노드를 위한 주변 인터페이스 회로로서,
    소스로부터 패킷 명령을 수신하도록 결합된 제 1 버퍼 회로와, 여기서 상기 제 1 버퍼 회로는 복수의 제 1 버퍼들을 포함하고, 상기 복수의 제 1 버퍼들 각각은 각각의 가상 채널에 속하는 선택된 패킷 명령들을 저장하기 위하여 복수의 가상 채널들의 상기 각각의 가상 채널에 대응하며;
    상기 제 1 버퍼 회로에 결합되어, 상기 제 1 버퍼 회로에 저장된 상기 선택된 패킷 명령들을 주변 버스 상에서의 전송에 적절한 명령들로 변환함과 아울러, 상기 주변 버스 상에서의 전송에 적절한 상기 명령들을 패킷 명령들로 변환하도록 구성되는 버스 인터페이스 회로와; 그리고
    상기 버스 인터페이스 회로로부터 상기 패킷 명령들을 수신하도록 결합된 제 2 버퍼 회로를 포함하고,
    여기서, 상기 제 2 버퍼 회로는 복수의 제 2 버퍼들을 포함하고, 상기 복수의 제 2 버퍼들 각각은 각각의 가상 채널에 속하는 선택된 패킷 명령들을 저장하기 위하여 상기 복수의 가상 채널들의 상기 각각의 가상 채널에 대응하는 것을 특징으로 하는 주변 인터페이스 회로.
  2. 제 1 항에 있어서,
    상기 제 1 버퍼 회로와 상기 제 2 버퍼 회로에 결합되어, 상기 버스 인터페이스 회로로의 그리고 상기 버스 인터페이스 회로로부터의 상기 패킷 명령들의 전송을 제어하도록 구성되는 제어 로직 유닛을 더 포함하는 것을 특징으로 하는 주변 인터페이스 회로.
  3. 제 2 항에 있어서,
    상기 제 1 버퍼 회로에 결합되어, 상기 패킷 명령들을 수신하고, 상기 패킷 명령들 각각에 대한 태그 값들을 발생시키도록 구성되는 태그 로직 유닛을 더 포함하고, 상기 태그 값은 다른 패킷 명령들과 비교하여 상기 패킷 명령들 각각이 수신되는 순서에 대응하는 것을 특징으로 하는 주변 인터페이스 회로.
  4. 제 3 항에 있어서,
    상기 태그 로직 유닛은 또한, 상기 제 1 버퍼 회로에 상기 패킷 명령들 각각을 저장하기 전에, 상기 패킷 명령들 각각에 상기 태그 값을 첨부(append)하도록 구성되는 것을 특징으로 하는 주변 인터페이스 회로.
  5. 제 4 항에 있어서,
    상기 제 1 버퍼 회로에 결합되어, 상기 제어 명령들 각각에 대한 상기 태그 값에 따라, 상기 복수의 제 1 버퍼들에 저장된 상기 패킷 명령들 간에 중재를 행하도록 구성되는 중재 로직 유닛을 더 포함하는 것을 특징으로 하는 주변 인터페이스 회로.
  6. 제 5 항에 있어서,
    상기 소스로부터 패킷 데이터를 수신하도록 결합된 제 1 데이터 버퍼 회로를 더 포함하고, 상기 제 1 데이터 버퍼 회로는 상기 입/출력 노드의 클록 속도로 데이터를 수신하도록 구성되고, 상기 제 1 데이터 버퍼 회로로부터의 데이터의 검색은 상기 주변 버스의 클록 속도로 이루어지는 것을 특징으로 하는 주변 인터페이스 회로.
  7. 제 6 항에 있어서,
    상기 버스 인터페이스 회로로부터 패킷 데이터를 수신하도록 결합된 제 2 데이터 버퍼 회로를 더 포함하고, 상기 제 2 데이터 버퍼 회로는 상기 주변 버스의 클록 속도로 데이터를 수신하도록 구성되고, 상기 제 2 데이터 버퍼 회로로부터의 데이터의 검색은 상기 입/출력 노드의 클록 속도로 이루어지는 것을 특징으로 하는 주변 인터페이스 회로.
  8. 제 7 항에 있어서,
    상기 제 2 버퍼 회로에 결합되어, 상기 버스 인터페이스 회로로부터 수신되는 상기 패킷 명령들 각각에 대한 제어 명령을 발생시키도록 구성되는 제어 명령 발생 유닛을 더 포함하고, 상기 제어 명령들 각각은 각각의 대응하는 패킷 명령의 서브셋을 포함하는 것을 특징으로 하는 주변 인터페이스 회로.
  9. 제 8 항에 있어서,
    상기 복수의 가상 채널들은, 각기 포스트(posted) 패킷 명령, 비-포스트(non-posted) 패킷 명령 및 응답 패킷 명령에 대응하는 포스트 채널, 비-포스트 채널 및 응답 채널을 포함하는 것을 특징으로 하는 주변 인터페이스 회로.
  10. 제 9 항에 있어서,
    상기 주변 버스는 주변기기 접속(PCI) 버스인 것을 특징으로 하는 주변 인터페이스 회로.
  11. 제 10 항에 있어서,
    상기 제 1 버퍼 회로에 결합되어, 비-포스트 패킷 명령을 저장하도록 되어있는 비-포스트 재시행 큐를 더 포함하고,
    여기서 상기 비-포스트 패킷 명령은, 상기 중재 로직 유닛에 의해 선택되었고, 상기 PCI 버스상에서 개시된 비-포스트 사이클에 응답하여 상기 PCI 버스에 연결된 주변 디바이스가 재시행 지시(indication)를 표명한 명령임을 특징으로 하는 주변 인터페이스 회로.
  12. 제 11 항에 있어서,
    상기 주변 버스는 PCI-X 버스인 것을 특징으로 하는 주변 인터페이스 회로.
  13. 제 12 항에 있어서,
    상기 비-포스트 재시행 큐에 결합되어, 비-포스트 패킷 명령에 대응하는 상기 주변 버스 상의 비-포스트 사이클 개시의 지시를 저장하도록 되어 있는 스플릿 응답 큐를 더 포함하고,
    여기서 상기 비-포스트 패킷 명령은, 상기 PCI-X 버스에 연결된 주변 디바이스가 스플릿 응답 지시를 표명한 명령임을 특징으로 하는 주변 인터페이스 회로.
  14. 제 1 통신 경로 상에서 제 1 패킷 명령을 수신하도록 구성되는 제 1 트랜스시버 회로와;
    제 2 통신 경로 상에서 제 2 패킷 명령을 수신하도록 구성되는 제 2 트랜스시버 회로와; 그리고
    하나 이상의 주변 인터페이스 회로들을 포함하며;
    상기 각 주변 인터페이스 회로는,
    상기 제 1 트랜스시버 회로 및 상기 제 2 트랜스시버 회로로부터 패킷 명령을 수신하도록 결합된 제 1 버퍼 회로와, 여기서 상기 제 1 버퍼 회로는 복수의 제 1 버퍼들을 포함하고, 상기 복수의 제 1 버퍼들 각각은 각각의 가상 채널에 속하는 선택된 패킷 명령들을 저장하기 위한 복수의 가상 채널들의 상기 각각의 가상 채널에 대응하며;
    상기 제 1 버퍼 회로에 결합되어, 상기 제 1 버퍼 회로에 저장된 상기 선택된 패킷 명령들을 주변 버스 상에서의 전송에 적절한 명령들로 변환함과 아울러, 상기 주변 버스 상에서의 전송에 적절한 상기 명령들을 패킷 명령들로 변환하도록 구성되는 버스 인터페이스 회로와; 그리고
    상기 버스 인터페이스 회로로부터 상기 패킷 명령들을 수신하도록 결합된 제 2 버퍼 회로를 포함하고,
    여기서, 상기 제 2 버퍼 회로는 복수의 제 2 버퍼들을 포함하고, 상기 복수의 제 2 버퍼들 각각은 각각의 가상 채널에 속하는 선택된 패킷 명령들을 저장하기 위한 상기 복수의 가상 채널들의 상기 각각의 가상 채널에 대응하는 것을 특징으로 하는 컴퓨터 시스템의 입/출력 노드.
  15. 제 14 항에 있어서,
    상기 복수의 가상 채널들은, 각기 포스트 패킷 명령, 비-포스트 패킷 명령 및 응답 패킷 명령에 대응하는 포스트 채널, 비-포스트 채널 및 응답 채널을 포함하는 것을 특징으로 하는 컴퓨터 시스템의 입/출력 노드.
  16. 제 15 항에 있어서,
    상기 하나 이상의 주변 인터페이스 회로들 각각은, 상기 제 1 버퍼 회로와 상기 제 2 버퍼 회로에 결합되어, 상기 버스 인터페이스 회로로의 그리고 상기 버스 인터페이스 회로로부터의 상기 패킷 명령들의 전송을 제어하도록 구성되는 제어 로직 유닛을 더 포함하는 것을 특징으로 하는 컴퓨터 시스템의 입/출력 노드.
  17. 제 16 항에 있어서,
    상기 하나 이상의 주변 인터페이스 회로들 각각은 상기 제 1 소스로부터 패킷 데이터를 수신하도록 결합된 제 1 데이터 버퍼 회로를 더 포함하고, 상기 제 1 데이터 버퍼 회로는 상기 입/출력 노드의 클록 속도로 데이터를 수신하도록 구성되고, 상기 제 1 데이터 버퍼 회로로부터의 데이터의 검색은 상기 주변 버스의 클록 속도로 이루어지는 것을 특징으로 하는 컴퓨터 시스템의 입/출력 노드.
  18. 제 17 항에 있어서,
    상기 하나 이상의 주변 인터페이스 회로들 각각은, 상기 버스 인터페이스 회로로부터 패킷 데이터를 수신하도록 결합된 제 2 데이터 버퍼 회로를 더 포함하고, 상기 제 2 데이터 버퍼 회로는 상기 주변 버스의 클록 속도로 데이터를 수신하도록 구성되고, 상기 제 2 데이터 버퍼 회로로부터의 데이터의 검색은 상기 입/출력 노드의 클록 속도로 이루어지는 것을 특징으로 하는 컴퓨터 시스템의 입/출력 노드.
  19. 제 18 항에 있어서,
    상기 하나 이상의 주변 인터페이스 회로들 각각은, 상기 제 2 버퍼 회로에 결합되어, 상기 버스 인터페이스 회로로부터 수신되는 상기 패킷 명령들 각각에 대한 제어 명령을 발생시키도록 구성되는 제어 명령 발생 유닛을 더 포함하고, 상기 제어 명령들 각각은 각각의 대응하는 패킷 명령의 서브셋을 포함하는 것을 특징으로 하는 컴퓨터 시스템의 입/출력 노드.
  20. 하나 이상의 프로세서들과; 그리고
    서로 연결됨과 아울러, 포인트 투 포인트 패킷 버스(point-to-point packet bus)를 통해 상기 하나 이상의 프로세서들에 연결되는 하나 이상의 입/출력 노드들과; 그리고
    상기 하나 이상의 입/출력 노드들과 하나 이상의 주변 디바이스들 각각 간에 어드레스, 데이터 및 제어 신호들을 전송하도록 결합된 하나 이상의 주변 버스들을 포함하며;
    여기서, 상기 입/출력 노드들 각각은,
    제 1 통신 경로 상에서 제 1 패킷 명령을 수신하도록 구성되는 제 1 트랜스시버 회로와;
    제 2 통신 경로 상에서 제 2 패킷 명령을 수신하도록 구성되는 제 2 트랜스시버 회로와; 그리고
    하나 이상의 주변 인터페이스 회로들을 포함하며;
    상기 각 주변 인터페이스 회로는,
    상기 제 1 트랜스시버 회로 및 상기 제 2 트랜스시버 회로로부터 패킷 명령을 수신하도록 결합된 제 1 버퍼 회로와, 여기서 상기 제 1 버퍼 회로는 복수의 제 1 버퍼들을 포함하고, 상기 복수의 제 1 버퍼들 각각은 각각의 가상 채널에 속하는 선택된 패킷 명령들을 저장하기 위한 복수의 가상 채널들의 상기 각각의 가상 채널에 대응하며;
    상기 제 1 버퍼 회로에 결합되어, 상기 제 1 버퍼 회로에 저장된 상기 선택된 패킷 명령들을 주변 버스 상에서의 전송에 적절한 명령들로 변환함과 아울러, 상기 주변 버스 상에서의 전송에 적절한 상기 명령들을 패킷 명령들로 변환하도록 구성되는 버스 인터페이스 회로와; 그리고
    상기 버스 인터페이스 회로로부터 상기 패킷 명령들을 수신하도록 결합된 제 2 버퍼 회로를 포함하고,
    여기서, 상기 제 2 버퍼 회로는 복수의 제 2 버퍼들을 포함하고, 상기 복수의 제 2 버퍼들 각각은 각각의 가상 채널에 속하는 선택된 패킷 명령들을 저장하기 위한 상기 복수의 가상 채널들의 상기 각각의 가상 채널에 대응하는 것을 특징으로 하는 컴퓨터 시스템.
  21. 제 20 항에 있어서,
    상기 복수의 가상 채널들은, 각기 포스트 패킷 명령, 비-포스트 패킷 명령 및 응답 패킷 명령에 대응하는 포스트 채널, 비-포스트 채널 및 응답 채널을 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  22. 제 21 항에 있어서,
    상기 하나 이상의 주변 인터페이스 회로들 각각은, 상기 제 1 버퍼 회로와 상기 제 2 버퍼 회로에 결합되어, 상기 버스 인터페이스 회로로의 그리고 상기 버스 인터페이스 회로로부터의 상기 패킷 명령들의 전송을 제어하도록 구성되는 제어 로직 유닛을 더 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  23. 제 22 항에 있어서,
    상기 하나 이상의 주변 인터페이스 회로들 각각은, 상기 제 2 버퍼 회로에 결합되어, 상기 버스 인터페이스 회로로부터 수신되는 상기 패킷 명령들 각각에 대한 제어 명령을 발생시키도록 구성되는 제어 명령 발생 유닛을 더 포함하고, 상기 제어 명령들 각각은 각각의 대응하는 패킷 명령의 서브셋을 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  24. 제 23 항에 있어서,
    상기 주변 버스는 주변기기 접속(PCI) 버스인 것을 특징으로 하는 컴퓨터 시스템.
  25. 제 24 항에 있어서,
    상기 하나 이상의 주변 인터페이스 회로들 각각은, 상기 제 1 버퍼 회로에 결합되어, 비-포스트 패킷 명령을 저장하도록 구성된 비-포스트 재시행 큐를 더 포함하고,
    여기서 상기 비-포스트 패킷 명령은, 중재 로직 유닛에 의해 선택되었고, 상기 PCI 버스상에서 개시된 비-포스트 사이클에 응답하여 상기 PCI 버스에 연결된 주변 디바이스가 재시행 지시를 표명한 명령이며,
    상기 중재 로직 유닛은 상기 제 1 버퍼 회로에 연결되어 상기 복수의 제 1 버퍼들에 저장된 상기 패킷 명령들 간에 중재를 행하도록 되어있는 것을 특징으로 하는 컴퓨터 시스템.
  26. 제 25 항에 있어서,
    상기 주변 버스는 PCI-X 버스인 것을 특징으로 하는 컴퓨터 시스템.
  27. 제 26 항에 있어서,
    상기 하나 이상의 주변 인터페이스 회로들 각각은, 상기 비-포스트 패킷 명령에 대응하는 상기 주변 버스 상의 비-포스트 사이클 개시의 지시를 저장하도록 되어 있는 스플릿 응답 큐를 더 포함하고,
    여기서 상기 비-포스트 패킷 명령은, 상기 PCI-X 버스에 연결된 주변 디바이스가 스플릿 응답 지시를 표명한 명령임을 특징으로 하는 컴퓨터 시스템.
KR1020047005566A 2001-10-15 2002-08-22 컴퓨터 시스템의 i/o 노드를 위한 주변 인터페이스 회로 KR100921542B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020047005566A KR100921542B1 (ko) 2001-10-15 2002-08-22 컴퓨터 시스템의 i/o 노드를 위한 주변 인터페이스 회로

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/978,534 2001-10-15
US10/093,146 2002-03-07
KR1020047005566A KR100921542B1 (ko) 2001-10-15 2002-08-22 컴퓨터 시스템의 i/o 노드를 위한 주변 인터페이스 회로

Publications (2)

Publication Number Publication Date
KR20050021351A KR20050021351A (ko) 2005-03-07
KR100921542B1 true KR100921542B1 (ko) 2009-10-12

Family

ID=41648522

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020047005566A KR100921542B1 (ko) 2001-10-15 2002-08-22 컴퓨터 시스템의 i/o 노드를 위한 주변 인터페이스 회로

Country Status (1)

Country Link
KR (1) KR100921542B1 (ko)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US518778A (en) * 1894-04-24 Albert b
WO1998014015A2 (en) * 1996-09-24 1998-04-02 Cirrus Logic, Inc. A method and apparatus for having multiple virtual paths in one serial i/o controller channel

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US518778A (en) * 1894-04-24 Albert b
WO1998014015A2 (en) * 1996-09-24 1998-04-02 Cirrus Logic, Inc. A method and apparatus for having multiple virtual paths in one serial i/o controller channel

Also Published As

Publication number Publication date
KR20050021351A (ko) 2005-03-07

Similar Documents

Publication Publication Date Title
US6834314B1 (en) Method and apparatus for reordering packet transactions within a peripheral interface circuit
US6862608B2 (en) System and method for a distributed shared memory
US7865652B2 (en) Power control by a multi-port bridge device
CN1703025B (zh) 双向环路互连上单分组到达的流量控制方法和设备
US7069361B2 (en) System and method of maintaining coherency in a distributed communication system
US6950438B1 (en) System and method for implementing a separate virtual channel for posted requests in a multiprocessor computer system
US6557048B1 (en) Computer system implementing a system and method for ordering input/output (IO) memory operations within a coherent portion thereof
US7320056B2 (en) Multi-processor system
US6922749B1 (en) Apparatus and methodology for an input port of a switch that supports cut-through operation within the switch
US6938094B1 (en) Virtual channels and corresponding buffer allocations for deadlock-free computer system operation
WO2004012091A2 (en) On chip network
EP1370939A1 (en) Communications system and method with non-blocking shared interface
US9755997B2 (en) Efficient peer-to-peer communication support in SoC fabrics
US20040172493A1 (en) Method and apparatus for handling split response transactions within a peripheral interface of an I/O node of a computer system
US6757755B2 (en) Peripheral interface circuit for handling graphics responses in an I/O node of a computer system
JP2005518578A (ja) コンピュータ・システムの入出力ノードにおけるタグ付けおよび調停メカニズム
JP4391819B2 (ja) コンピュータ・システムの入出力ノード
JP4391820B2 (ja) コンピュータシステムのi/oノードのための周辺インターフェイス回路
KR100921542B1 (ko) 컴퓨터 시스템의 i/o 노드를 위한 주변 인터페이스 회로
US20200356497A1 (en) Device supporting ordered and unordered transaction classes

Legal Events

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

Payment date: 20120924

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee