KR20160075312A - 트랜잭션 버퍼링된 메모리에서의 초기 식별 - Google Patents

트랜잭션 버퍼링된 메모리에서의 초기 식별 Download PDF

Info

Publication number
KR20160075312A
KR20160075312A KR1020150162258A KR20150162258A KR20160075312A KR 20160075312 A KR20160075312 A KR 20160075312A KR 1020150162258 A KR1020150162258 A KR 1020150162258A KR 20150162258 A KR20150162258 A KR 20150162258A KR 20160075312 A KR20160075312 A KR 20160075312A
Authority
KR
South Korea
Prior art keywords
read
link
return
read return
data
Prior art date
Application number
KR1020150162258A
Other languages
English (en)
Other versions
KR101842568B1 (ko
Inventor
브라이언 에스. 모리스
빌 나일
로버트 지. 블랑켄쉽
제프리 씨. 스완슨
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20160075312A publication Critical patent/KR20160075312A/ko
Application granted granted Critical
Publication of KR101842568B1 publication Critical patent/KR101842568B1/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/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • 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/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1642Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
    • 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/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1678Details of memory controller using bus width
    • 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/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • 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/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • 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/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4265Bus transfer protocol, e.g. handshake; Synchronisation on a point to point bus
    • 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/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Systems (AREA)
  • Communication Control (AREA)
  • Computer And Data Communications (AREA)

Abstract

판독 리턴들의 시퀀스는 트랜잭션 버퍼링된 메모리 인터페이스를 통해 호스트 디바이스로 송신될 것이고, 여기서, 시퀀스는 적어도 제1 판독 요청에 대한 제1 판독 리턴 및 제2 판독 요청에 대한 제2 판독 리턴을 포함한다. 제2 판독 리턴의 추적기 식별자는 제1 판독 리턴에 인코딩되고 제1 판독 리턴은 제2 판독 리턴의 추적기 식별자와 함께 호스트 디바이스로 송신된다. 제1 판독 리턴이 송신된 후에 제2 판독 리턴이 호스트 디바이스로 송신된다.

Description

트랜잭션 버퍼링된 메모리에서의 초기 식별{EARLY IDENTIFICATION IN TRANSACTIONAL BUFFERED MEMORY}
본 개시 내용은 전반적으로 컴퓨팅 아키텍처들의 분야에 관한 것으로, 보다 구체적으로는, 버퍼링된 메모리 프로토콜들(buffered memory protocols)에 관한 것이다.
반도체 처리 및 논리 설계의 진보는 집적 회로 디바이스들에 존재할 수 있는 논리의 양의 증가를 허용하였다. 그 결과, 컴퓨터 시스템 구성들이 시스템에 있는 단일 또는 다수의 집적 회로들로부터 개개의 집적 회로들에 존재하는 다수의 코어들, 다수의 하드웨어 스레드들, 및 다수의 논리 프로세서들은 물론, 이러한 프로세서들 내에 통합되어 있는 다른 인터페이스들로 진화하였다. 프로세서 또는 집적 회로는 전형적으로 단일의 물리 프로세서 다이를 포함하고 있으며, 이 경우 프로세서 다이는 임의의 수의 코어들, 하드웨어 스레드들, 논리 프로세서들, 인터페이스들, 메모리, 제어기 허브들 등을 포함할 수 있다.
더 많은 처리 능력을 더 작은 패키지들에 넣는 능력이 더 커진 결과로서, 더 작은 컴퓨팅 디바이스들의 인기가 증가하였다. 스마트폰, 태블릿, 초박형 노트북, 및 다른 사용자 장비가 기하급수적으로 늘어났다. 그러나, 이러한 더 작은 디바이스들은 폼 팩터(form factor)를 초과하는 복잡한 처리 및 데이터 스토리지 양쪽을 위해 서버들에 의존한다. 그 결과, 고성능 컴퓨팅 마켓(즉, 서버 공간)에서의 요구 또한 증가했다. 예를 들어, 현대의 서버들에서, 컴퓨팅 능력을 증가시키기 위해, 전형적으로 다수의 코어를 갖는 단일의 프로세서뿐만 아니라, 다수의 물리 프로세서들(다수의 소켓이라고도 함)도 존재한다. 그러나, 컴퓨팅 시스템 내의 디바이스들의 수와 함께 처리 능력이 향상함에 따라, 소켓들과 다른 디바이스들 사이의 통신이 더 중요하게 된다.
실제로, 상호접속들은 전기 통신을 주로 다루었던 더욱 종래의 다중-드롭 버스들(multi-drop buses)에서 고속 통신을 용이하게 하는 완전히 발전된 상호접속 아키텍처들로 성장해 왔다. 불행하게도, 훨씬 더 높은 레이트로 사용하고자 하는 미래의 프로세서들에 대한 요구에 따라, 기존의 상호접속 아키텍처들의 능력에도 상응하는 요구가 부과된다.
도 1은 일 실시예에 따른, 컴퓨터 시스템에서 I/O 디바이스들을 접속하는 직렬 점대점 상호접속(serial point-to-point interconnect)을 포함하는 시스템의 간략화된 블록도를 도시한다.
도 2는 일 실시예에 따른, 계층화된 프로토콜 스택의 간략화된 블록도를 도시한다.
도 3은 트랜잭션 기술자(transaction descriptor)의 일 실시예를 도시한다.
도 4는 직렬 점대점 링크(serial point-to-point link)의 일 실시예를 도시한다.
도 5는 잠재적인 HPI(High Performance Interconnect) 시스템 구성들의 실시예들을 도시한다.
도 6은 HPI와 연관된 계층화된 프로토콜 스택의 일 실시예를 도시한다.
도 7은 예시적인 상태 기계에 대한 표현을 도시한다.
도 8은 예시적인 20-레인 데이터 링크를 통해 송신된 예시적인 플리트(flit)에 대한 표현을 도시한다.
도 9는 예시적인 8-레인 데이터 링크를 통해 송신된 예시적인 플리트에 대한 표현을 도시한다.
도 10은 예시적인 다중-슬롯 플리트에 대한 표현을 도시한다.
도 11은 예시적인 8-레인 데이터 링크를 통해 송신된 예시적인 플리트에 대한 표현을 도시한다.
도 12는 디버그 메시지를 포함하는 예시적인 다중-계층 플리트에 대한 표현을 도시한다.
도 13은 버퍼링된 메모리 프로토콜을 이용하는 시스템에 대한 표현을 도시한다.
도 14는 버퍼링된 메모리 프로토콜을 지원하는 버퍼 디바이스에 대한 표현을 도시한다.
도 15a-15c는 버퍼링된 메모리 프로토콜에서 예시적인 플리트들에 대한 표현들을 도시한다.
도 16은 적어도 일 실시예에 따른, 예시적인 버퍼 디바이스와 호스트 디바이스 사이의 통신을 도시하는 다이어그램이다.
도 17은 적어도 일 실시예에 따른, 버퍼 디바이스로부터 호스트 디바이스로의 판독 응답 추적기 식별자의 초기의 통신을 도시하는 다이어그램이다.
도 18은 다수의 프로세서 소켓들을 포함하는 컴퓨팅 시스템에 대한 블록의 일 실시예를 도시한다.
다양한 도면들에서 비슷한 참조 번호들 및 명칭들은 비슷한 요소들을 나타낸다.
이하의 설명에서, 본 발명의 완전한 이해를 제공하기 위해, 특정 타입들의 프로세서들 및 시스템 구성들, 특정 하드웨어 구조들, 특정 구조적 및 미세 구조적 상세들, 특정 레지스터 구성들, 특정 명령어 타입들, 특정 시스템 구성요소들, 특정 프로세서 파이프라인 스테이지들, 특정 상호접속 계층들, 특정 패킷/트랜잭션 구성들, 특정 트랜잭션 명칭들, 특정 프로토콜 교환들, 특정 링크 폭들, 특정 구현들, 및 동작 등의 예들과 같은 수많은 특정 상세들이 기술되어 있다. 그러나, 이러한 특정 상세들이 본 개시 내용의 발명 요지를 실시하는 데 반드시 이용될 필요는 없다는 것이 통상의 기술자에게 명백할 수 있다. 다른 경우에, 본 개시 내용이 불필요하게 모호해 지지 않도록 하기 위해, 특정 및 대안 프로세서 아키텍처들, 기술된 알고리즘들에 대한 특정 논리 회로들/코드, 특정 펌웨어 코드, 저레벨 상호접속 동작, 특정 논리 구성들, 특정 제조 기법들 및 물질들, 특정 컴파일러 구현들, 코드로 된 알고리즘들의 특정 표현, 특정 절전 및 게이팅 기법들/논리 및 컴퓨터 시스템의 다른 특정 동작 상세들과 같은 공지된 구성요소들 또는 방법들에 대한 아주 상세한 설명은 하지 않았다.
비록 이하의 실시예들이 컴퓨팅 플랫폼들 또는 마이크로프로세서들에서와 같은 특정 집적 회로들에서의 에너지 절감, 에너지 효율, 처리 효율 등과 관련하여 기술될 수 있지만, 다른 실시예들은 다른 타입들의 집적 회로들 및 논리 디바이스들에 적용가능하다. 본 명세서에 기술된 실시예들의 유사한 기법들 및 교시들은 그러한 특징들로부터 또한 이익을 얻을 수 있는 다른 타입의 회로들 또는 반도체 디바이스들에 적용될 수 있다. 예를 들어, 개시된 실시예들은 서버 컴퓨터 시스템, 데스크톱 컴퓨터 시스템들, 랩톱들, Ultrabooks™로 제한되지 않고, 핸드헬드 디바이스들, 스마트폰들, 태블릿들, 다른 씬 노트북들, SOC(systems on a chip) 디바이스들, 및 내장형 애플리케이션들과 같은 다른 디바이스들에서도 사용될 수 있다. 핸드헬드 디바이스들의 일부 예들은 셀룰러 전화기, 인터넷 프로토콜 디바이스, 디지털 카메라, PDA(personal digital assistant) 및 핸드헬드 PC를 포함한다. 여기서, 저전력 상호접속에서 성능을 향상시키기 위해(또는 심지어 전력을 절감하기 위해) 고성능 상호접속을 위한 유사한 기법들이 적용될 수 있다. 내장형 애플리케이션들은 전형적으로 마이크로컨트롤러, DSP(digital signal processor), 시스템 온 칩, NetPC(network computers), 셋톱 박스, 네트워크 허브, WAN(wide area network) 스위치, 또는 후술하는 기능들 및 동작들을 수행할 수 있는 임의의 다른 시스템을 포함한다. 더욱이, 본 명세서에 기술되는 장치들, 방법들 및 시스템들은 물리적 컴퓨팅 디바이스들에 제한되지 않고, 에너지 보존 및 효율을 위한 소프트웨어 최적화에들도 관련될 수 있다. 이하의 설명에서 손쉽게 명백하게 될 수 있는 바와 같이, 본 명세서에서 (하드웨어, 펌웨어, 소프트웨어 또는 이들의 조합과 관련하여) 기술되는 방법들, 장치들, 및 시스템들의 실시예들은 성능 고려사항들과 균형을 이루는 "녹색 기술" 미래에 아주 중요한 것으로 생각될 수 있다.
컴퓨팅 시스템들이 진보함에 따라, 그 안의 구성요소들은 더욱 복잡해지고 있다. 최적의 구성요소 동작을 위한 대역폭 요구가 충족되는 것을 보장하기 위해, 구성요소들을 결합시키고 그들 사이에서 통신을 하는 상호접속 아키텍처도 복잡도가 증가하였다. 게다가, 상이한 마켓 세그먼트 요구는 각자의 마켓에 적합하도록 하기 위해 상이한 측면들의 상호접속 아키텍처들을 요구한다. 예를 들어, 서버들은 더 높은 성능을 필요로 하는 반면, 모바일 생태계는 때때로 전력 절감을 위해 전체 성능을 희생시킬 수 있다. 그렇지만, 최대의 전력 절감으로 가능한 최고의 성능을 제공하는 것이 대부분의 패브릭들(fabrics)의 유일한 목적이다. 또한, 각종의 상이한 상호접속들은 잠재적으로 본 명세서에 기술된 발명의 요지로부터 이익을 얻을 수 있다.
예들 중에서도, PCIe(PCI(Peripheral Component Interconnect) Express) 상호접속 패브릭 아키텍처 및 QPI(QuickPath Interconnect) 패브릭 아키텍처는 잠재적으로 본 명세서에 기술된 하나 이상의 원리들에 따라 개선될 수 있다. 예를 들어, PCIe의 주된 목표는 상이한 벤더들로부터의 구성요소들 및 디바이스들이 다수의 마켓 세그먼트; 클라이언트들(데스크톱들 및 모바일), 서버들(표준 및 엔터프라이즈), 및 내장형 및 통신 디바이스들에 걸쳐 있는 개방형 아키텍처에서 연동(inter-operate)할 수 있게 하는 것이다. PCI Express는 아주 다양한 미래의 컴퓨팅 및 통신 플랫폼들에 대해 정의된 고성능의 범용 I/O 상호접속이다. 그의 사용 모델, 로드-스토어(load-store) 아키텍처, 및 소프트웨어 인터페이스들과 같은, 일부 PCI 속성들은 그의 개정들(revisions)에 걸쳐 유지된 반면, 이전의 병렬 버스 구현들은 고 확장성의 전체 직렬 인터페이스(fully serial interface)로 교체되었다. PCI Express의 더 최신의 버전들은, 새로운 성능 레벨들 및 특징들을 제공하기 위해, 점대점 상호접속, 스위치 기반 기술, 및 패킷화된 프로토콜에서의 진보들을 이용한다. 전력 관리, QoS(Quality Of Service), 핫 플러그(Hot-Plug)/핫 스왑(Hot-Swap) 지원, 데이터 무결성, 및 오류 처리는 PCI Express에 의해 지원되는 진보된 특징들 중 일부이다. 비록 본 명세서에서의 주된 논의가 새로운 HPI(high-performance interconnect) 아키텍처와 관련되어 있지만, 본 명세서에 기술된 본 발명의 측면들은 PCIe 호환 아키텍처, QPI 호환 아키텍처, MIPI 호환 아키텍처, 고성능 아키텍처, 또는 다른 공지된 상호접속 아키텍처와 같은 다른 상호접속 아키텍처들에 적용될 수 있다.
도 1을 참조하면, 구성요소들의 세트를 상호접속시키는 점대점 링크들로 구성된 패브릭의 일 실시예가 예시되어 있다. 시스템(100)은 제어기 허브(115)에 결합된 프로세서(105)와 시스템 메모리(110)를 포함한다. 프로세서(105)는 마이크로프로세서, 호스트 프로세서, 내장형 프로세서, 코프로세서, 또는 다른 프로세서와 같은 임의의 처리 요소를 포함할 수 있다. 프로세서(105)는 FSB(front-side bus)(106)를 통해 제어기 허브(115)에 결합되어 있다. 일 실시예에서, FSB(106)는 이하에서 기술되는 바와 같이 직렬 점대점 상호접속이다. 다른 실시예에서, 링크(106)는 상이한 상호접속 표준과 호환되는 직렬 차동 상호접속 아키텍처(serial, differential interconnect architecture)를 포함한다.
시스템 메모리(110)는 RAM(random access memory), 비휘발성(non-volatile, NV) 메모리, 또는 시스템(100) 내의 디바이스들에 의해 액세스가능한 다른 메모리와 같은 임의의 메모리 디바이스를 포함한다. 시스템 메모리(110)는 메모리 인터페이스(116)를 통해 제어기 허브(115)에 결합되어 있다. 메모리 인터페이스의 예들은 DDR(double-data rate) 메모리 인터페이스, 듀얼 채널 DDR 메모리 인터페이스, 및 DRAM(dynamic RAM) 메모리 인터페이스를 포함한다.
일 실시예에서, 제어기 허브(115)는 PCIe 상호접속 계층구조에서와 같은 루트 허브(root hub), 루트 컴플렉스(root complex), 또는 루트 제어기(root controller)를 포함할 수 있다. 제어기 허브(115)의 예들은 칩셋, MCH(memory controller hub), 노스브리지(northbridge), ICH(interconnect controller hub), 사우스브리지(southbridge), 및 루트 제어기/허브를 포함한다. 종종, 칩셋이라는 용어는 2개의 물리적으로 분리된 제어기 허브들, 예컨대, ICH(interconnect controller hub)에 결합되어 있는 MCH(memory controller hub)를 지칭한다. 유의할 점은, 이하에 기술되는 것과 유사한 방식으로, 현재의 시스템들이 프로세서(105)와 통합된 MCH를 종종 포함하는 반면, 제어기(115)는 I/O 디바이스들과 통신한다는 것이다. 일부 실시예들에서, 피어 대 피어 라우팅(peer-to-peer routing)이 루트 컴플렉스(115)를 통해 선택적으로 지원된다.
여기서, 제어기 허브(115)는 직렬 링크(119)를 통해 스위치/브리지(120)에 결합되어 있다. 인터페이스들/포트들(117 및 121)이라고도 지칭될 수 있는 입/출력 모듈들(117 및 121)은, 제어기 허브(115)와 스위치(120) 사이에 통신을 제공하기 위해, 계층화된 프로토콜 스택을 포함/구현할 수 있다. 일 실시예에서, 다수의 디바이스가 스위치(120)에 결합되어 있을 수 있다.
스위치/브리지(120)는 디바이스(125)로부터의 패킷들/메시지들을 상류로, 즉, 루트 컴플렉스를 향해 계층 구조 위로 - 제어기 허브(115)로 - 라우팅하고, 하류로, 즉, 루트 제어기를 떠나 계층 구조 아래로 - 프로세서(105) 또는 시스템 메모리(110)로부터 디바이스(125)로 - 라우팅한다. 일 실시예에서, 스위치(120)는 다수의 가상 PCI 대 PCI 브리지 디바이스들(virtual PCI-to-PCI bridge devices)의 논리 조립체(logical assembly)로 지칭된다. 디바이스(125)는 I/O 디바이스, NIC(Network Interface Controller), 애드인 카드(add-in card), 오디오 프로세서, 네트워크 프로세서, 하드 드라이브, 스토리지 디바이스, CD/DVD ROM, 모니터, 프린터, 마우스, 키보드, 라우터, 휴대용 스토리지 디바이스, Firewire 디바이스, USB(Universal Serial Bus) 디바이스, 스캐너, 및 다른 입/출력 디바이스들과 같은, 전자 시스템에 결합될 임의의 내부 또는 외부 디바이스 또는 구성요소를 포함한다. 종종, PCIe에서, 디바이스와 같은 용어는 종단점을 지칭한다. 비록 구체적으로 도시되어 있지는 않지만, 디바이스(125)는 레거시 또는 다른 버전들의 디바이스들 또는 이러한 디바이스들에 의해 지원되는 상호접속 패브릭들을 지원하기 위해 브리지(예컨대, PCIe 대 PCI/PCI-X 브리지)를 포함할 수 있다.
그래픽 가속기(130)가 또한 직렬 링크(132)를 통해 제어기 허브(115)에 결합될 수 있다. 일 실시예에서, 그래픽 가속기(130)는 ICH에 결합되어 있는 MCH에 결합되어 있다. 스위치(120), 및 그에 따른 I/O 디바이스(125)는 그 다음에 ICH에 결합된다. I/O 모듈들(131 및 118)은 또한 그래픽 가속기(130)와 제어기 허브(115) 사이에서 통신하기 위해 계층화된 프로토콜 스택을 구현하는 것이다. 이상의 MCH 논의와 유사하게, 그래픽 제어기 또는 그래픽 가속기(130) 자체가 프로세서(105)에 통합될 수 있다.
도 2를 참조하면, 계층화된 프로토콜 스택의 일 실시예가 도시되어 있다. 계층화된 프로토콜 스택(200)은 QPI 스택, PCIe 스택, 차세대 고성능 컴퓨팅 상호접속(HPI) 스택, 또는 다른 계층화된 스택과 같은 임의의 형태의 계층화된 통신 스택을 포함할 수 있다. 일 실시예에서, 프로토콜 스택(200)은 트랜잭션 계층(205), 링크 계층(210), 및 물리 계층(220)을 포함할 수 있다. 도 1에서의 인터페이스들(117, 118, 121, 122, 126, 및 131)과 같은 인터페이스가 통신 프로토콜 스택(200)으로서 표현될 수 있다. 통신 프로토콜 스택으로서의 표현은 또한 프로토콜 스택을 구현/포함하는 모듈 또는 인터페이스로 지칭될 수도 있다.
패킷들은 구성요소들 사이의 정보 통신을 위해 이용될 수 있다. 전송측 구성요소로부터 수신측 구성요소로 정보를 전달하기 위해, 패킷들이 트랜잭션 계층(205) 및 데이터 링크 계층(210)에서 형성될 수 있다. 전송된 패킷들이 다른 계층들을 통해 흘러감에 따라, 그들은 그 계층들에서 패킷들을 처리하는 데 사용되는 부가 정보로 확장된다. 수신측에서, 정반대의 프로세스가 일어나고, 패킷들이 그들의 물리 계층(220) 표현으로부터 데이터 링크 계층(210) 표현으로 그리고 마지막으로 (트랜잭션 계층 패킷들에 대해) 수신측 디바이스의 트랜잭션 계층(205)에 의해 처리될 수 있는 형태로 변환된다.
일 실시예에서, 트랜잭션 계층(205)은, 데이터 링크 계층(210)과 물리 계층(220)과 같은, 디바이스의 처리 코어 및 상호접속 아키텍처 사이에 인터페이스를 제공할 수 있다. 이러한 점에서, 트랜잭션 계층(205)의 일차적 책임은 패킷들(즉, 트랜잭션 계층 패킷들 또는 TLP들)의 조립과 분해를 포함할 수 있다. 트랜잭션 계층(205)은 또한 TLP들에 대한 크레디트 기반 흐름 제어(credit-based flow control)를 관리할 수 있다. 일부 구현들에서, 분할 트랜잭션들, 즉, 시간으로 분리된 요청 및 응답을 갖는 트랜잭션들이 이용될 수 있어, 예들 중에서도, 타겟 디바이스가 응답에 대한 데이터를 수집하는 동안 링크가 다른 트래픽을 전달하는 것을 허용한다.
상호접속 패브릭을 이용하여 가상 채널들 및 네트워크들을 실현하기 위해, 크레디트 기반 흐름 제어가 사용될 수 있다. 하나의 예에서, 디바이스가 트랜잭션 계층(205)에서 수신 버퍼들 각각에 대해 초기 크레디트 양(initial amount of credits)을 광고할 수 있다. 도 1에서 제어기 허브(115)와 같이, 링크의 반대쪽 끝에 있는 외부 디바이스는 각각의 TLP에 의해 소비되는 크레디트들의 수를 카운팅할 수 있다. 트랜잭션이 크레디트 한계(credit limit)를 초과하지 않으면, 트랜잭션이 전송될 수 있다. 응답을 수신할 시에, 일정량의 크레디트가 복원된다. 이러한 크레디트 방식의 장점의 하나의 예는, 잠재적인 장점들 중에서도, 크레디트 한계에 봉착하지 않으면, 크레디트 리턴(credit return)의 레이턴시가 성능에 영향을 미치지 않는다는 것이다.
일 실시예에서, 4개의 트랜잭션 주소 공간들은 구성 주소 공간, 메모리 주소 공간, 입/출력 주소 공간, 및 메시지 주소 공간을 포함할 수 있다. 메모리 공간 트랜잭션들은 메모리 매핑된 장소(memory-mapped location)로/로부터 데이터를 이송하기 위해 판독 요청들 및 기입 요청들 중 하나 이상을 포함한다. 일 실시예에서, 메모리 공간 트랜잭션들은 2개의 상이한 주소 포맷들, 예컨대, 32-비트 주소와 같은 짧은 주소 포맷 또는 64-비트 주소와 같은 긴 주소 포맷을 사용할 수 있다. 구성 공간 트랜잭션들은 상호접속에 접속된 다양한 디바이스들의 구성 공간에 액세스하는데 사용될 수 있다. 구성 공간에 대한 트랜잭션들은 판독 요청들 및 기입 요청들을 포함할 수 있다. 메시지 공간 트랜잭션들(또는 단순히 메시지들)이 또한 상호접속 에이전트들 사이의 대역내 통신을 지원하기 위해 정의될 수 있다. 따라서, 하나의 예시적인 실시예에서, 트랜잭션 계층(205)은 패킷 헤더/페이로드(206)를 조립할 수 있다.
이어서 도 3을 참조하면, 트랜잭션 계층 패킷 기술자(transaction layer packet descriptor)의 일 예시적인 실시예가 도시되어 있다. 일 실시예에서, 트랜잭션 기술자(300)는 트랜잭션 정보를 전달하기 위한 한 메커니즘일 수 있다. 이와 관련하여, 트랜잭션 기술자(300)는 시스템에서의 트랜잭션들의 식별을 지원한다. 다른 잠재적인 사용들은 기본 트랜잭션 정렬(default transaction ordering) 및 트랜잭션과 채널들 간의 연관성의 수정들을 추적하는 것을 포함한다. 예를 들어, 트랜잭션 기술자(300)는 글로벌 식별자 필드(302), 속성들 필드(304) 및 채널 식별자 필드(306)를 포함할 수 있다. 도시된 예에서, 글로벌 식별자 필드(302)는 로컬 트랜잭션 식별자 필드(308)와 소스 식별자 필드(310)를 포함하는 것으로 묘사된다. 일 실시예에서, 글로벌 트랜잭션 식별자(302)는 모든 미결 요청들(outstanding requests)에 대해 고유하다.
일 구현에 따르면, 로컬 트랜잭션 식별자 필드(308)는 요청측 에이전트에 의해 발생된 필드이고, 해당 요청측 에이전트에 대해 완료를 필요로 하는 모든 미결 요청들에 대해 고유할 수 있다. 게다가, 이 예에서, 소스 식별자(310)는 상호접속 계층구조 내에서 요청자 에이전트(requestor agent)를 고유하게 식별한다. 그에 따라, 소스 ID(310)와 함께, 로컬 트랜잭션 식별자(308) 필드는 계층구조 도메인(hierarchy domain) 내에서 트랜잭션의 글로벌 식별을 제공한다.
속성들 필드(304)는 트랜잭션의 특성들 및 관계들을 명시한다. 이와 관련하여, 속성들 필드(304)는 잠재적으로 트랜잭션들의 기본 처리(default handling)의 수정을 허용하는 부가 정보를 제공하기 위해 사용된다. 일 실시예에서, 속성들 필드(304)는 우선순위 필드(312), 예비 필드(314), 정렬(ordering) 필드(316), 및 스누프 없음(no-snoop) 필드(318)를 포함한다. 여기서, 우선순위 서브필드(312)는 트랜잭션에 우선순위를 할당하기 위해 개시자(initiator)에 의해 수정될 수 있다. 예비 속성 필드(314)는 미래의 또는 벤더 정의 사용을 위해 예비된 채로 있다. 우선순위 또는 보안 속성들을 사용하는 가능한 사용 모델들이 예비 속성 필드를 사용하여 구현될 수 있다.
이 예에서, 정렬 속성 필드(316)는 기본 정렬 규칙들을 수정할 수 있는 정렬의 타입을 전달하는 선택적인 정보를 제공하기 위해 사용된다. 하나의 예시적인 구현에 따르면, "0"의 정렬 속성은 기본 정렬 규칙들이 적용된다는 것을 나타내고, "1"의 정렬 속성은 완화된 정렬(relaxed ordering)을 나타내며, 기입들은 기입들을 동일한 방향으로 전달할 수 있고, 판독 완료들(read completions)은 기입들을 동일한 방향으로 전달할 수 있다. 스누프 속성 필드(318)는 트랜잭션들이 스누핑되는지를 결정하는 데 이용된다. 도시된 바와 같이, 채널 ID 필드(306)는 트랜잭션이 관련되는 채널을 식별한다.
도 2의 논의로 돌아가서, 데이터 링크 계층(210)이라고도 지칭되는 링크 계층(210)은 트랜잭션 계층(205)과 물리 계층(220) 사이의 중간 스테이지로서 기능할 수 있다. 일 실시예에서, 데이터 링크 계층(210)의 책임은 링크를 통해 2개의 구성요소들 사이에서 트랜잭션 계층 패킷들(TLP들)을 교환하기 위한 신뢰할 수 있는 메커니즘을 제공하는 것이다. 데이터 링크 계층(210)의 일 측은 트랜잭션 계층(205)에 의해 조립된 TLP들을 수락하고, 패킷 시퀀스 식별자(211), 즉, 식별 번호 또는 패킷 번호를 적용하고, 오류 검출 코드, 즉, CRC(212)를 계산 및 적용하고, 물리 계층을 건너 외부 디바이스로의 전송을 위해 물리 계층(220)에 수정된 TLP들을 제출한다.
하나의 예에서, 물리 계층(220)은 패킷을 외부 디바이스로 물리적으로 전송하기 위해 논리 서브블록(221) 및 전기 서브블록(222)을 포함한다. 여기서, 논리 서브블록(221)은 물리 계층(221)의 "디지털" 기능들을 책임지고 있다. 이와 관련하여, 논리 서브블록은 물리 서브블록(222)에 의해 전송하기 위한 발신 정보(outgoing information)를 준비하는 전송 섹션, 및 수신된 정보를 링크 계층(210)으로 전달하기 전에 그를 식별하고 준비하는 수신기 섹션을 포함할 수 있다.
물리 블록(222)은 송신기 및 수신기를 포함한다. 송신기는 논리 서브블록(221)에 의해 심볼들을 공급받고, 송신기는 이들을 직렬화하여 외부 디바이스로 전송한다. 수신기는 외부 디바이스로부터 직렬화된 심볼들을 공급받고, 수신된 신호들을 비트 스트림으로 변환시킨다. 비트 스트림은 역직렬화되어 논리 서브블록(221)에 공급된다. 하나의 예시적인 실시예에서, 8b/10b 전송 코드가 이용되고, 10-비트 심볼들이 전송/수신된다. 여기서, 프레임들(223)로 패킷을 프레이밍(framing)하기 위해 특정 심볼들이 사용된다. 그에 부가하여, 하나의 예에서, 수신기는 또한 착신 직렬 스트림으로부터 복원된 심볼 클록을 제공한다.
상술한 바와 같이, 트랜잭션 계층(205), 링크 계층(210) 및 물리 계층(220)이 (PCIe 프로토콜 스택과 같은) 프로토콜 스택의 특정 실시예에 관하여 논의될지라도, 계층화된 프로토콜 스택은 그렇게 제한되지 않는다. 실제로, 임의의 계층화된 프로토콜이 포함/구현되어 본 명세서에서 논의된 특징들을 채택할 수 있다. 하나의 예로서, 계층화된 프로토콜로 표현되는 포트/인터페이스는: (1) 패킷들을 조립하기 위한 제1 계층, 즉, 트랜잭션 계층; 패킷들을 시퀀싱하기 위한 제2 계층, 즉, 링크 계층; 및 패킷들을 전송하기 위한 제3 계층, 즉, 물리 계층을 포함할 수 있다. 특정 예로서, 본 명세서에서 기술된 바와 같은, 고성능 상호접속 계층화된 프로토콜이 이용된다.
다음에 도 4를 참조하면, 직렬 점대점 패브릭의 한 예시적인 실시예가 도시되어 있다. 직렬 점대점 링크는 직렬 데이터를 전송하기 위한 임의의 전송 경로를 포함할 수 있다. 도시된 실시예에서, 링크는 2개의, 저-전압, 차동 구동된 신호 쌍들: 전송 쌍(406/411) 및 수신 쌍(412/407)을 포함할 수 있다. 그에 따라, 디바이스(405)는 데이터를 디바이스(410)로 전송하는 전송 논리(406) 및 디바이스(410)로부터 데이터를 수신하는 수신 논리(407)를 포함한다. 다시 말하면, 2개의 전송 경로들, 즉, 경로들(416 및 417), 및 2개의 수신 경로들, 즉, 경로들(418 및 419)가 링크의 일부 구현들에 포함된다.
전송 경로는 전송 선로, 구리 선로, 광 선로, 무선 통신 채널, 적외선 통신 링크, 또는 다른 통신 경로와 같은 데이터를 전송하기 위한 임의의 경로를 지칭한다. 디바이스(405) 및 디바이스(410)와 같은 2개의 디바이스들 사이의 접속은 링크(415)와 같은 링크로 지칭된다. 한 링크는 하나의 레인(lane)을 지원할 수 있다 - 각각의 레인은 한 세트의 차동 신호 쌍들(전송을 위한 하나의 쌍, 수신을 위한 하나의 쌍)을 나타냄 - . 대역폭을 확장시키기 위해, 한 링크가 xN으로 표기된 다수의 레인을 집성할 수 있고, 여기서 N은 1, 2, 4, 8, 12, 16, 32, 64, 또는 그 이상과 같은 임의의 지원된 링크 폭이다.
차동 쌍은 차동 신호들을 전송하는 선로들(416 및 417)과 같은 2개의 전송 경로들을 지칭할 수 있다. 하나의 예로서, 선로(416)가 저 전압 레벨에서 고 전압 레벨로 토글할 때 - 즉, 상승 에지 - , 선로(417)는 고 논리 레벨에서 저 논리 레벨로 구동 - 즉, 하강 에지 - 한다. 차동 신호들은 잠재적으로 더 나은 신호 무결성, 즉, 예시적인 장점들 중에서도, 교차-결합, 전압 오버슈트/언더슈트, 링잉과 같은 더 나은 전기적 특성들은 입증한다. 이것은 더 나은 타이밍 윈도우를 고려한 것으로, 이는 더 빠른 전송 주파수들을 가능하게 한다.
일 실시예에서, 새로운 HPI(High Performance Interconnect)가 제공된다. HPI는 차세대 캐시-일관성(cache-coherent), 링크-기반 상호접속을 포함할 수 있다. 하나의 예로서, HPI는 PCIe 또는 다른 상호접속 프로토콜이 전형적으로 프로세서들, 가속기들, I/O 디바이스들 등을 접속하는 데 사용되는 시스템들을 비롯한 워크스테이션들 또는 서버들과 같은 고성능 컴퓨팅 플랫폼들에서 이용될 수 있다. 그러나, HPI는 그렇게 제한되지 않는다. 그 대신에, HPI는 본 명세서에서 기술된 시스템들 또는 플랫폼들 중 임의의 것에서 이용될 수 있다. 또한, 개발된 개개의 아이디어들이 PCIe, MIPI, QPI 등과 같은 다른 상호접속들 및 플랫폼들에 적용될 수 있다.
하나의 예시적인 구현에서, 다수의 디바이스를 지원하기 위해, HPI는 ISA(Instruction Set Architecture) 무관성(agnostic)을 포함할 수 있다(즉, HPI는 다수의 상이한 디바이스에서 구현될 수 있다). 다른 시나리오에서, HPI는 또한, 프로세서들 또는 가속기들뿐만 아니라, 고성능 I/O 디바이스들을 접속하는 데도 이용될 수 있다. 예를 들어, 고성능 PCIe 디바이스가 적절한 변환 브리지(translation bridge)(즉, HPI에서 PCIe로)를 통해 HPI에 결합될 수 있다. 게다가, HPI 링크들이 프로세서들과 같은 많은 HPI 기반 디바이스들에 의해 다양한 방식들(예컨대, 스타, 링, 메쉬 등)로 이용될 수 있다. 도 5는 다수의 잠재적인 다중-소켓 구성들의 예시적인 구현들을 도시한 것이다. 2-소켓 구성(505)은, 도시되어 있는 바와 같이, 2개의 HPI 링크들을 포함할 수 있지만; 다른 구현들에서, 하나의 HPI 링크가 이용될 수 있다. 보다 대규모의 토폴로지들에 대해, 부가의 또는 대체 특징들 중에서도, 식별자(ID)가 할당가능하고 일부 형태의 가상 경로가 있는 한, 임의의 구성이 이용될 수 있다. 도시된 바와 같이, 하나의 예에서, 4-소켓 구성(510)은 각각의 프로세서로부터 다른 프로세서로의 HPI 링크를 가진다. 그러나, 구성(515)에 도시되어 있는 8-소켓 구현에서는, 모든 소켓들이 HPI 링크를 통해 서로 직접 접속되어 있는 것은 아니다. 그러나, 프로세서들 사이에 가상 경로 또는 채널이 존재하는 경우, 이 구성이 지원된다. 지원되는 프로세서들의 범위는 네이티브 도메인(native domain)에서 2 내지 32개를 포함한다. 다른 예들 중에서, 노드 제어기들 사이에서의 다수의 도메인 또는 다른 상호접속들의 사용을 통해 더 많은 수의 프로세서들에 도달될 수 있다.
HPI 아키텍처는, 일부 예들에서, 프로토콜 계층들(일관성(coherent), 비일관성(non-coherent), 및 선택적으로 다른 메모리 기판 프로토콜들), 라우팅 계층, 링크 계층, 및 물리 계층을 포함하는 계층화된 프로토콜 아키텍처의 정의를 포함한다. 게다가, HPI는 예들 중에서도 특히 (PCU들(power control units)과 같은) 전력 관리자들, DFT(design for test and debug), 장애 관리, 레지스터들, 보안에 관계된 강화들을 추가로 포함할 수 있다. 도 5는 한 예시적인 HPI 계층화된 프로토콜 스택의 일 실시예를 도시한 것이다. 일부 구현에서, 도 5에 도시된 계층들의 적어도 일부는 선택적일 수 있다. 각각의 계층은 그 자신의 세밀도(granularity)의 레벨 또는 정보의 양자(quantum)를 처리한다(프로토콜 계층(620a, 620b)은 패킷들(630)을 처리하고, 링크 계층(610a, 610b)은 플리트들(flits)(635)을 처리하며, 물리 계층(605a, 605b)은 피트들(phits)(640)을 처리함). 유의할 점은, 일부 실시예들에서, 패킷이 구현에 기초하여 부분 플리트들, 단일의 플리트, 또는 다수의 플리트들을 포함할 수 있다는 것이다.
제1 예로서, 피트(640)의 폭은 링크 폭 대 비트들 간의 일대일 매핑을 포함한다(예컨대, 20 비트 링크 폭은 20 비트의 피트를 포함하는 등임). 플리트들은 184, 192, 또는 200 비트와 같은 더 큰 크기를 가질 수 있다. 유의할 점은, 피트(640)가 20 비트 폭이고 플리트(635)의 크기가 184 비트인 경우, 하나의 플리트(635)를 전송하는 데 피트들(640)의 분수가 필요하다는 것이다(예컨대, 예들 중에서도, 184 비트 플리트(635)를 전송하는 데 20 비트에서 9.2 피트 또는 192 비트 플리트를 전송하는 데 20 비트에서 9.6 피트). 유의할 점은, 물리 계층에서 기본 링크(fundamental link)의 폭들이 변할 수 있다는 것이다. 예를 들어, 방향 당 레인들의 수는 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 등을 포함할 수 있다. 일 실시예에서, 링크 계층(610a, 610b)은 단일 플리트에 상이한 트랜잭션들의 다수의 피스를 내장할 수 있고, 하나 또는 다수의 헤더(예컨대, 1, 2, 3, 4)가 플리트 내에 내장될 수 있다. 하나의 예에서, HPI는, 플리트 내의 다수의 메시지들이 상이한 노드들로 보내지는 것을 가능하게 하기 위해, 헤더들을 대응하는 슬롯들로 분할한다.
일 실시예에서, 물리 계층(605a, 605b)은 물리 매체(전기 또는 광 등)를 통한 정보의 고속 이송을 책임지고 있을 수 있다. 물리 링크는, 계층(605a, 605b)과 같은, 2개의 링크 계층 엔티티들 사이에서 점대점일 수 있다. 링크 계층(610a, 610b)은 상위 계층들에서 물리 계층(605a, 605b)을 추출할 수 있고, 데이터(는 물론 요청들)를 신뢰성 있게 이송할 수 있는 능력을 제공할 수 있며, 2개의 직접 접속된 엔티티들 간의 흐름 제어를 관리할 수 있다. 링크 계층은 또한 물리 채널을 다수의 가상 채널들 및 메시지 클래스들(message classes)로 가상화하는 것을 책임지고 있을 수 있다. 프로토콜 계층(620a, 620b)은 프로토콜 메시지들을 물리 링크들을 가로질러 이송하기 위해 물리 계층(605a, 605b)으로 넘겨 주기 전에 그들을 적절한 메시지 클래스들 및 가상 채널들에 매핑하기 위해 링크 계층(610a, 610b)에 의존한다. 링크 계층(610a, 610b)은, 예들 중에서도, 요청, 스누프, 응답, 후기입(writeback), 비일관성 데이터(non-coherent data)와 같은 다수의 메시지들을 지원할 수 있다.
HPI의 물리 계층(605a, 605b)(또는 PHY)은 전기 계층(즉, 2개의 구성요소들을 접속하는 전기 전도체들) 위에 구현될 수 있고, 도 6에 도시된 바와 같이, 링크 계층(610a, 610b) 아래에 구현될 수 있다. 물리 계층 및 대응하는 논리는 각각의 에이전트에 존재하고 (예컨대, 링크의 양측에 있는 디바이스들 상의) 서로 분리되어 있는 2개의 에이전트들(A 및 B) 상의 링크 계층들을 접속할 수 있다. 로컬 및 원격 전기 계층들은 물리 매체(예컨대, 전선, 도체, 광 등)에 의해 접속된다. 일 실시예에서, 물리 계층(605a, 605b)은 2개의 주된 단계들 - 초기화 및 동작 - 을 가진다. 초기화 동안, 접속이 링크 계층에 불투명(opaque)하고, 시그널링은 시간 설정된 상태들(timed states)과 핸드쉐이크 이벤트들(handshake events)의 조합을 수반할 수 있다. 동작 동안, 접속이 링크 계층에 투명(transparent)하고, 시그널링은 모든 레인들이 단일의 링크로서 함께 동작하는 속도로 이루어진다. 동작 단계 동안, 물리 계층은 에이전트 A로부터 에이전트 B로 그리고 에이전트 B로부터 에이전트 A로 플리트들을 전송한다. 접속은 또한 링크로도 지칭되고, 플리트들 및 현재 구성(예컨대, 폭)의 제어/상태를 링크 계층과 교환하면서 링크 계층들로부터 매체, 폭 및 속도를 비롯한 일부 물리적 측면들을 추출한다. 초기화 단계는 마이너 단계들(minor phase)(예컨대, 폴링(Polling), 구성(Configuration))을 포함한다. 동작 단계는 또한 마이너 단계들(예컨대, 링크 전력 관리 상태들)을 포함한다.
일 실시예에서, 링크 계층(610a, 610b)은 2개의 프로토콜 또는 라우팅 엔티티들 사이에서 신뢰할 수 있는 데이터 이송을 제공하도록 구현될 수 있다. 링크 계층은 프로토콜 계층(620a, 620b)으로부터 물리 계층(605a, 605b)을 추출할 수 있고, 2개의 프로토콜 에이전트들(A, B) 사이의 흐름 제어를 책임지고 있을 수 있으며, 가상 채널 서비스들을 프로토콜 계층(메시지 클래스들) 및 라우팅 계층(가상 네트워크들)에 제공할 수 있다. 프로토콜 계층(620a, 620b)과 링크 계층(610a, 610b) 사이의 인터페이스는 전형적으로 패킷 레벨에 있을 수 있다. 일 실시예에서, 링크 계층에서의 가장 작은 이송 단위는 192 비트와 같은 명시된 수의 비트들을 갖는 플리트(flit) 또는 일부 다른 명칭으로 지칭된다. 링크 계층(610a, 610b)은 물리 계층(605a, 605b)의 전송 단위(피트(phit))를 링크 계층(610a, 610b)의 이송 단위(플리트(flit))로 프레이밍하기 위해 물리 계층(605a, 605b)에 의존한다. 그에 부가하여, 링크 계층(610a, 610b)은 논리적으로 2개의 부분들 - 송신기 및 수신기 - 로 분해될 수 있다. 하나의 엔티티 상의 송신기/수신기 쌍은 또 다른 엔티티 상의 수신기/송신기 쌍에 접속될 수 있다. 흐름 제어는 종종 플리트 및 패킷 양쪽에 기초하여 수행된다. 오류 검출 및 정정은 또한 잠재적으로 플리트 레벨에 기초하여 수행된다.
일 실시예에서, 라우팅 계층(615a, 615b)은 HPI 트랜잭션들을 소스로부터 목적지로 라우팅하는 유연한 분산형 방법을 제공할 수 있다. 이 방식은 유연한데, 그 이유는 다수의 토폴로지들에 대한 라우팅 알고리즘들이 각각의 라우터에서 프로그램가능 라우팅 테이블들을 통해 명시될 수 있기 때문이다(일 실시예에서, 프로그래밍은 펌웨어, 소프트웨어, 또는 이들의 조합에 의해 수행된다). 라우팅 기능이 분산되어 있을 수 있고; 라우팅이 일련의 라우팅 단계들을 통해 행해질 수 있으며, 각각의 라우팅 단계는 소스, 중간, 또는 목적지 라우터들에서 테이블의 탐색(lookup)을 통해 정의된다. 소스에서의 탐색은 HPI 패킷을 HPI 패브릭 내로 주입(inject)하는 데 사용될 수 있다. 중간 라우터에서의 탐색은 HPI 패킷을 입력 포트로부터 출력 포트로 라우팅하는 데 사용될 수 있다. 목적지 포트에서의 탐색은 목적지 HPI 프로토콜 에이전트를 목표로 정하기 위해 사용될 수 있다. 유의할 점은, 일부 구현들에서, 라우팅 테이블들, 그리고 따라서 라우팅 알고리즘들이 규격에 의해 구체적으로 정의되어 있지 않기 때문에, 라우팅 계층이 씬(thin)일 수 있다는 것이다. 이것은, 시스템 구현에 의해 정의될 유연한 플랫폼 아키텍처 토폴로지들을 비롯하여, 유연성 및 각종의 사용 모델들을 고려한다. 라우팅 계층(615a, 615b)은 최대 3개(또는 그 이상)의 가상 네트워크들(VN들)의 사용을 제공하기 위해 링크 계층(610a, 610b)에 의존한다 - 하나의 예에서, 몇 개의 메시지 클래스들을 갖는 2개의 무교착(deadlock-free) VN들(VN0 및 VN1)이 각각의 가상 네트워크에서 정의된다 -. 공유 적응적 가상 네트워크(shared adaptive virtual network)(VNA)는 링크 계층에서 정의될 수 있지만, 이 적응적 네트워크는 라우팅 개념들에 직접 노출되지 않을 수 있는데, 그 이유는, 특징들 및 예들 중에서도, 각각의 메시지 클래스 및 가상 네트워크가 전용 자원들 및 보장된 포워드 진행(guaranteed forward progress)을 가질 수 있기 때문이다.
일 실시예에서, HPI는 메모리로부터의 데이터의 라인들을 캐싱하는 에이전트들을 지원하기 위해 일관성 프로토콜 계층(Coherence Protocol layer; 620a, 620b)을 포함할 수 있다. 메모리 데이터를 캐싱하기를 바라는 에이전트는 데이터의 라인을 판독하여 그의 캐시에 로딩하기 위해 일관성 프로토콜을 사용할 수 있다. 그의 캐시에서 데이터의 라인을 수정하기를 바라는 에이전트는 데이터를 수정하기 전에 라인의 소유권을 획득하기 위해 일관성 프로토콜을 사용할 수 있다. 라인을 수정한 후에, 에이전트는 외부 요청에 응답하여 라인을 포함하거나 라인을 메모리에 후기입할 때까지 그의 캐시에 그것을 유지하는 프로토콜 요건들을 따를 수 있다. 마지막으로, 에이전트는 그의 캐시에서 라인을 무효화하기 위해 외부 요청들을 이행할 수 있다. 프로토콜은 모든 캐싱 에이전트들이 따를 수 있는 규칙을 지시함으로써 데이터의 일관성을 보장한다. 그것은 또한 캐시들 없이 메모리 데이터를 일관성 있게 판독 및 기입하는 에이전트들을 위한 수단을 제공한다.
HPI 일관성 프로토콜을 이용하는 트랜잭션들을 지원하기 위해 2가지 조건들이 실시될 수 있다. 첫째로, 프로토콜은 에이전트들의 캐시들 내의 데이터 사이에서 및 이러한 데이터와 메모리 내의 데이터 사이에서, 주소에 기초하여, 하나의 예로서, 데이터 일관성을 유지할 수 있다. 비공식으로, 데이터 일관성은, 그것이 송신되었을 때 일관성 프로토콜 패킷에서 전송된 데이터와 데이터의 가장 최근 값이 데이터의 가장 최근 값을 나타낼 수 있다는 것을 표현하는 에이전트의 캐시 내의 데이터의 각각의 유효 라인을 지칭할 수 있다. 데이터의 유효 복사가 캐시들 내에 또는 전송시에 존재하지 않을 때, 프로토콜은 데이터의 가장 최근 값이 메모리에 존재한다는 것을 포장할 수 있다. 두번째로, 프로토콜은 요청들에 대해 잘 정의된 책임 정도들을 제공할 수 있다. 판독들에 대한 책임 정도들은 데이터가 언제 사용가능한지를 표시할 수 있고; 기입들의 경우, 기입된 데이터가 언제 글로벌하게 관찰가능하고 후속 판독들에 의해 로딩될 것인지를 표시할 수 있다. 프로토콜은 일관성 있는 메모리 공간에서 캐시가능한 및 캐시가능하지 않은(UC) 요청들 양측을 위한 이러한 책임 정도들을 지원할 수 있다.
일부 구현들에서, HPI는 내장형 클록(embedded clock)을 이용할 수 있다. 클록 신호는 상호접속을 이용하여 전송된 데이터 내장될 수 있다. 클록 신호가 데이터에 내장되는 경우, 별개의 및 전용 클록 레인들이 생략될 수 있다. 이것은 유용할 수 있는데, 예를 들어, 특히 핀들을 위한 공간을 찾기 힘든 시스템들에서, 디바이스의 더 많은 핀들이 데이터 이송에 전용이 되도록 할 수 있기 때문이다.
상호접속의 양측에 있는 2개의 에이전트들 사이에 링크가 설정될 수 있다. 데이터를 송신하는 에이전트는 로컬 에이전트일 수 있고, 데이터를 수신하는 에이전트는 원격 에이전트일 수 있다. 링크의 다양한 측면들을 관리하기 위해 양측 에이전트들에 의해 상태 기계들이 이용될 수 있다. 일 실시예에서, 물리 계층 데이터 경로는 플리트들을 링크 계층으로부터 전기 프론트 엔드(electrical front-end)로 전송할 수 있다. 일 구현에서, 제어 경로는 상태 기계(링크 훈련 상태 기계 또는 유사한 것으로 지칭됨)를 포함한다. 상태 기계의 액션들 및 상태들로부터의 탈출들(exits)은 내부 신호들, 타이머들, 외부 신호들 또는 다른 정보에 의존할 수 있다. 실제로, 몇몇 초기화 상태들과 같은 상태들 중 일부는, 상태를 탈출할 타임아웃 값을 제공하기 위해, 타이머들을 가질 수 있다. 유의할 점은, 일부 실시예들에서, 검출(detect)이 레인의 양쪽 레그들(legs)에서 이벤트를 검출하는 것을 지칭하지만, 반드시 동시에 검출하는 것은 아니라는 것이다. 그러나, 다른 실시예들에서, 검출은 참조의 에이전트에 의한 이벤트의 검출을 지칭한다. 디바운스(debounce)는, 하나의 예로서, 신호의 지속된 어써션(sustained assertion)을 지칭한다. 일 실시예에서, HPI는 비기능 레인들(non-function lanes)의 경우에 동작을 지원한다. 여기서, 레인들이 특정 상태들에서 드롭(drop)될 수 있다.
상태 기계에서 정의된 상태들은, 다른 카테고리들 및 서브카테고리들 중에서도, 리셋 상태들, 초기화 상태들, 및 동작 상태들을 포함할 수 있다. 하나의 예에서, 일부 초기화 상태들은 타임아웃(본질적으로 상태에서 진행하지 못하는 것으로 인한 강제 종료(abort)) 시에 상태를 탈출하기 위해 사용되는 보조 타이머를 가질 수 있다. 강제 종료는 상태 레지스터(status register)와 같은 레지스터들을 갱신(updating)시키는 것을 포함할 수 있다. 일부 상태들은 또한 상태에서 주요 기능들을 타이밍하는데 사용되는 주요 타이머(들)를 가지고 있을 수 있다. 예들 중에서도, (핸드쉐이크 프로토콜들과 같은) 내부 또는 외부 신호들이 상태로부터 또 다른 상태로의 전이를 구동하도록 다른 상태들이 정의될 수 있다.
상태 기계는 또한 단일의 단계를 통한 디버그(debug), 초기화 강제 종료 시의 동결(freeze), 및 테스터들의 사용을 지원할 수 있다. 여기서, 상태 탈출들이 디버그 소프트웨어가 준비될 때까지 지연/보류될 수 있다. 일부 경우에, 탈출이 보조 타임아웃 때까지 지연/보류될 수 있다. 일 실시예에서, 액션들 및 탈출들은 훈련 시퀀스의 교환에 기초한 것일 수 있다. 일 실시예에서, 링크 상태 기계는 로컬 에이전트 클록 도메인(clock domain)에서 실행될 것이고, 하나의 상태에서 그 다음 상태로의 전이는 송신기 훈련 시퀀스 경계와 일치할 것이다. 현재 상태를 반영하기 위해 상태 레지스터들이 이용될 수 있다.
도 7은 HPI의 하나의 예시적인 구현에서 에이전트들에 의해 사용되는 상태 기계의 적어도 일부분의 한 표현을 나타낸 것이다. 도 7의 상태 테이블에 포함된 상태들이 가능한 상태들의 완전하지 않은 목록을 포함한다는 것을 인정해야 한다. 예를 들어, 다이어그램을 간단화하기 위해 일부 전이들이 생략되어 있다. 또한, 일부 상태들이 조합, 분할 또는 생략될 수 있는 반면, 다른 상태들이 추가될 수 있다. 그러한 상태들은 다음을 포함할 수 있다:
이벤트 리셋 상태(Event reset state): 웜(warm) 또는 콜드(cold) 리셋 이벤트에 진입한다. 디폴트 값들을 복원한다. 카운터들(예컨대, 동기 카운터들)을 초기화한다. 또 다른 리셋 상태와 같은, 또 다른 상태로 탈출할 수 있다.
시간 설정된 리셋 상태(Timed reset state): 대역내 리셋을 위한 시간 설정된 상태. 사전 정의된 EOS(electrical ordered set)를 구동할 수 있고, 따라서 원격 수신기들이 EOS를 검출하고 시간 설정된 리셋에도 진입할 수 있다. 수신기는 전기 설정들(electrical settings)을 보유하는 레인들을 가진다. 리셋 상태를 교정하기 위해 에이전트로 탈출할 수 있다.
교정 리셋 상태(Calibrate reset state): 레인을 통한 시그널링(예컨대, 수신기 교정 상태) 또는 구동기들을 턴오프시키는 일이 없는 교정. 타이머에 기초한 상태에서의 사전 결정된 시간량일 수 있다. 동작 속도를 설정할 수 있다. 포트가 인에이블되어 있지 않을 때 대기 상태(wait state)로서 기능할 수 있다. 최소 체류 시간을 포함할 수 있다. 수신기 컨디셔닝(conditioning) 또는 스태거링 오프(staggering off)가 설계에 기초하여 발생할 수 있다. 타임아웃 및/또는 교정의 완료 후에 수신기 검출 상태(receiver detect state)로 탈출할 수 있다.
수신기 검출 상태(Receiver detect state): 레인(들) 상에서 수신기의 존재를 검출한다. 수신기 종단(예컨대, 수신기 풀다운 삽입)을 탐색할 수 있다. 명시된 값이 세팅되어 있을 때 또는 다른 명시된 값이 세팅되어 있지 않을 때, 교정 리셋 상태로 탈출할 수 있다. 수신기가 검출되거나 타임아웃에 도달되는 경우, 송신기 교정 상태로 탈출할 수 있다.
송신기 교정 상태(Transmitter calibrate state): 송신기 교정들을 위해. 송신기 교정을 위해 할당된 시간 설정된 상태일 수 있다. 레인을 통한 시그널링을 포함할 수 있다. EIEOS(electric idle exit ordered set)와 같은 EOS를 연속적으로 구동할 수 있다. 교정을 행했을 때 또는 타이머의 만료 시에 규정 준수 상태(compliance state)로 탈출할 수 있다. 카운터가 만료되거나 보조 타임아웃이 발생한 경우, 송신기 검출 상태로 탈출할 수 있다.
송신기 검출 상태(Transmitter detect state): 유효한 시그널링에게 자격 부여. 에이전트가 액션들을 완료하고 원격 에이전트 시그널링에 기초하여 그 다음 상태로 탈출하는 핸드쉐이크 상태일 수 있다. 수신기는 송신기로부터의 유효한 시그널링에 자격을 부여할 수 있다. 일 실시예에서, 수신기는 웨이크 검출(wake detect)을 탐색하고, 하나 이상의 레인들에서 디바운스된 경우, 다른 레인들에서 그것을 탐색한다. 송신기는 검출 신호를 구동한다. 모든 레인들에 대해 디바운스가 완료된 것 및/또는 타임아웃에 응답하여 또는 모든 레인들에서의 디바운스가 완료되지 않고 타임아웃이 있는 경우 폴링 상태로 탈출할 수 있다. 여기서, 하나 이상의 모니터 레인들은 웨이크 신호(wake signal)를 디바운스하기 위해 깨어 있는 채로 있을 수 있다. 디바운스된 경우, 다른 레인들은 잠재적으로 디바운스된다. 이것은 저전력 상태들에서의 전력 절약을 가능하게 할 수 있다.
폴링 상태(Polling state): 수신기는 적응하고, (예컨대, 드리프트 버퍼를 초기화함으로써) 비트들에 조준되고, (예컨대, 심볼 경계들을 식별함으로써) 바이트들에 조준되고, (예컨대, EOS(electrical ordered set) 및/또는 훈련 시퀀스 헤더에 조준됨으로써) 훈련 시퀀스 경계들에 조준된다. 레인들은 그 다음에 디스큐(deskew)될 수 있다. 핸드쉐이크들은 또한 여러 전위 상태들 중 하나로 폴링을 탈출하도록 완료될 수 있다. 예를 들어, 탈출은 링크 폭 상태, 컴플라이언스 상태, 루프백 마커 상태 또는 리셋 상태 중 임의의 하나로 (에이전트에 의해) 야기될 수 있다. 핸드 쉐이킹은 액션들과 ACK의 완료 세트에 대응하는 상태로의 탈출을 트리거하기 위해 ACK(acknowledge message)의 전송 및 다양하게 정의된 수신기 액션들 또는 조건들의 완료를 포함할 수 있다. 디스큐를 폴링하는 경우, 원격 송신기에서의 레인 대 레인 스큐(lane to lane skew)가 최상위 속도에 대한 제1 길이 및 저속 속도에 대한 제2 길이에서 캡핑(capping)될 수 있다. 디스큐가 저속 모드는 물론 동작 모드에서도 수행될 수 있다. 수신기는 8, 16 또는 32 스큐 간격들과 같은 레인 대 레인 스큐를 디스큐하기 위한 특정 최대값을 가질 수 있다. 수신기 액션들은 또한 일부 구현들에서 레이턴시 고정을 포함할 수 있다. 일 실시예에서, 수신기 액션들은 유효한 레인 맵의 성공적인 디스큐 시에 완료될 수 있다. 하나의 예에서, 다수의 연속적인 훈련 시퀀스 헤더들이 확인 응답들과 함께 수신되고 수신기가 그의 액션들을 완료한 후에 확인 응답을 갖는 다수의 훈련 시퀀스들이 전송될 때, 성공적인 핸드쉐이크가 달성될 수 있다.
컴플라이언스 상태(Compliance state): 폴링 상태로부터 진입된다. 에이전트는 확인 목적들을 위해 컴플라이언스 마스터 또는 슬레이브로 만들어질 수 있다. (마스터의 역할을 하는) 디바이스는 컴플라이언스 패턴을 또 다른 디바이스(슬레이브)로 송신할 수 있고, 슬레이브는 그것을 그것의 로컬 클록으로 다시 시간 설정한 후에 패턴을 루프백할 수 있다(예컨대, 임의의 극성 반전(polarity inversion) 또는 레인 반전(lane reversal)의 언두(undo) 없이). 컴플라이언스 패턴은 루프백이 기능적이지 않거나 바람직하지 않을 때 레인들의 일부 서브셋에 대해 아날로그 전단부의 동작을 특징지우는데 사용될 수 있다. 예를 들어, 루프백을 입력하는 것은 성공적인 바이트 잠금, TS 잠금, 디스큐, 레이턴시 테스팅, 및 디지털 논리의 여러 피스의 적절한 기능에 의지하는 다른 테스팅을 전제로 할 수 있다. 비트 잠금이 달성되면, 컴플라이언스에 진입하여, 다른 컨디셔닝 중에, 지터 또는 잡음 조사, 디버그, 링크 탐색에 이용될 수 있다. 다시 말하면, 컴플라이언스는 폴링의 결과들이 루프백으로의 직접 진입을 허용하지 않는 경우에 폴링을 위한 대안의 탈출의 역할을 할 수 있다. 컴플라이언스 상태는 마스터로부터 송신기에 의해 슈퍼시퀀스를 구동할 수 있다. 수신기는 모니터 레인의 웨이크를 찾고, 웨이크를 디바운스하고, 나쁜 레인들을 드롭시키고, 적응되고, 비트 잠금들 등이다. 슬레이브 송신기는 그것의 수신기 액션들이 완료될 때까지 컴플라이언스 패턴을 구동할 수 있다. 그 다음, 루프-백은 다시 시간 설정되고(re-timed) 논-디스큐된다(non-deskewed). 슬레이브 수신기는 유사한 모니터를 하고, 디바운스 등의 액션을 한다. 탈출은 시간 설정된 리셋과 같은 리셋 상태로의 탈출일 수 있거나, 다른 예들 중에, 테스트를 시작하기 위한 루프백 패턴 상태로의 탈출일 수 있다. 루프백 패턴 상태로의 탈출의 경우에, 마스터는 더 전문화된 패턴들을 시용하기 위한 루프백 패턴 상태로 (예컨대, 소프트웨어 제어기에 의해) 전송될 수 있다.
에이전트 루프백 마커 상태(Agent Loopback Marker State): 루프백 마커는 에이전트 상태이지만 다른 에이전트 상태들과는 달리 마스터 및 슬레이브 액션들 및 탈출들이 상이할 수 있다. 루프백 슬레이브는 임의의 극성 반전을 언두할 수 있고 및/또는 레인 반전은 루프백된 비트들을 디스크램블(descramble) 또는 리스크램블(rescramble)하지 않을 수도 있다. 확인응답 교환은 그것이 루프백중이므로 슬레이브에 적용할 수 없을 수도 있다. 슬레이브는 심볼 경계에서 루프백하기 전에 디스큐할 수도 있기 때문에, 마스터는 다시 바이트 잠금(re-bytelock)으로 또는 다시 디스큐(re-deskew)로 강제되지 않을 수도 있지만 마스터는 일부 에일리어스로의 잠금을 회피하기 위해 훈련 시퀀스를 다시 잠글 수 있다. 이것을 하기 위한 수단들은, TS 및/또는 EIEOS 또는 이들의 조합을 비교하는, LFSR의 리-시딩(re-seeding)을 포함할 수 있다. SDS의 종료는 루프백 셋업의 종료와 패턴 생성의 시작, 체킹 및 카운팅을 마크한다.
에이전트 루프백 패턴 상태 (또는 블록 링크 상태)(Agent Loopback Pattern State (or Block Link state)): 루프백 마커 상태 또는 컴플라이언스 상태로부터의 진입. 루프백 패턴 상태에서, 제어 패턴들 대신에, 마스터 송신기는 컴플라이언스 또는 루프백 패턴 상태에서 루프백된 것들을 보충하기 위해 부가적인 전문화된 패턴들을 송신할 수 있다. 수신기는 루프백 패턴에서 전문화된 패턴들을 수신하고 수신된 패턴에서 오류들에 대해 체크할 수 있다. 송신기 적응을 위해 양쪽 에이전트들은 마스터들일 수 있다. 미리 결정된 기간동안, 송신기는 패턴을 송신할 수 있고 원격 수신기는 이 패턴을 비교하고, 레지스터와 같은, 스토리지 요소에 기록되는 수신된 패턴에 대한 성능 지수 또는 메트릭을 결정할 수 있다. 비교 방법과 메트릭은 설계에 종속적일 수 있다(예컨대, 지터 주입을 가진 BER). 기간의 끝에, 에이전트들의 양쪽은 메트릭을 검사하고 송신기 적응의 다음 반복을 셋업하기 위해 백채널(backchannel)을 위한 리셋으로 탈출할 수 있다.
링크 폭 상태(Link width state): 에이전트는 원격 송신기에 대한 최종적인 레인 맵(lane map)을 사용하여 통신한다. 수신기는 정보를 수신하고 디코딩한다. 수신기는 구성된 레인 맵을 구조체에서 제2 구조체에서의 이전의 레인 맵 값의 체크포인트 후에 기록할 수 있다. 수신기는 또한 확인 응답("ACK")으로 응답할 수 있다. 대역내 리셋을 개시할 수 있다. 하나의 예로서, 대역내 리셋을 개시하기 위한 제1 상태. 일 실시예에서, 플리트 구성 상태와 같은, 다음 상태로의 탈출은 ACK에 응답하여 수행된다. 게다가, 저전력 상태에 진입하기 전에, 웨이크 검출 신호 발생의 주파수가 명시된 값(예컨대, 매 단위 구간(unit interval, UI) 수마다 1(4K UI 등)) 미만으로 드롭되는 경우, 리셋 신호가 또한 발생될 수 있다. 수신기는 현재의 레인 맵 및 이전의 레인 맵을 유지할 수 있다. 송신기는 훈련 시퀀스들이 상이한 값들을 가지는 것에 기초하여 상이한 레인 그룹들을 사용할 수 있다. 일부 실시예들에서, 레인 맵이 일부 상태 레지스터들을 수정하지 않을 수 있다.
플리트잠금 구성 상태( Flitlock configuration state): 송신기에 의해 진입되지만, 송신기와 수신기 양쪽이 블록킹 링크 상태 또는 다른 링크 상태로 탈출한 경우에는, 탈출한 것으로 간주된다(즉, 2차 타임아웃 무트). 링크 상태로의 송신기 탈출은, 일 실시예에서, 행성 정렬 신호(planetary alignment signal)를 수신한 후의 SDS(start of a data sequence) 및 훈련 시퀀스(TS) 경계를 포함한다. 여기서, 수신기 탈출은 원격 송신기로부터 SDS를 수신한 것에 기초할 수 있다. 이 상태는 에이전트로부터 링크 상태로의 브리지일 수 있다. 수신기는 SDS를 식별한다. 디스크램블러(descrambler)가 초기화된 후에 SDS가 수신되면, 수신기는 BLS(blocking link state)(또는 제어 윈도우)로 탈출할 수 있다. 타임아웃이 일어나면, 리셋 상태로의 탈출이 있을 수 있다. 송신기는 구성 신호로 레인들을 구동한다. 조건들 또는 타임아웃들에 기초하여, 리셋, BLS 또는 다른 상태들로의 송신기 탈출이 있을 수 있다.
전송 링크 상태(Transmitting Link State): 링크 상태. 플리트들이 원격 에이전트로 송신된다. 블록킹 링크 상태로부터 진입될 수 있고 타임아웃과 같은 이벤트 시에 블록킹 링크 상태로 복귀할 수 있다. 송신기는 플리트들을 전송한다. 수신기는 플리트들을 수신한다. 또한 저전력 링크 상태로 탈출할 수 있다. 일부 구현들에서, 전송 링크 상태(TLS)는 L0 상태라고 지칭될 수 있다.
블록킹 링크 상태(Blocking Link State): 링크 상태. 송신기 및 수신기는 통일된 방식으로 동작하고 있다. 물리 계층 정보가 원격 에이전트로 통신되는 동안 링크 계층 플리트들이 보류되는 시간 설정된 상태일 수 있다. 저전력 링크 상태(또는 설계에 기초하여 다른 링크 상태)로 탈출할 수 있다. 일 실시예에서, 블록킹 링크 상태(BLS)가 주기적으로 일어난다. 그 기간은 BLS 구간이라고 하며, 시간 설정될 수 있음은 물론 저속 속도와 동작 속도 간에 상이할 수 있다. 유의할 점은, 전송 링크 상태 또는 부분 폭 전송 링크 상태 동안과 같이, 어떤 길이의 물리 계층 제어 시퀀스가 송신될 수 있도록, 링크 계층이 플리트들을 송신하지 못하게 주기적으로 블록킹될 수 있다는 것이다. 일부 구현들에서, 블록킹 링크 상태(BLS)는 L0 제어 또는 L0c 상태라고 지칭될 수 있다.
부분 폭 전송 링크 상태(Partial Width Transmitting Link State): 링크 상태. 부분 폭 상태에 진입함으로써 전력을 절감할 수 있다. 일 실시예에서, 비대칭 부분 폭은 2 방향 링크의 각각의 방향이 상이한 폭을 가지는 것을 지칭하며, 이는 몇몇 설계들에서 지원될 수 있다. 송신기와 같은 개시자가 부분 폭 전송 링크 상태에 진입하기 위해 부분 폭 표시를 송신하는 것의 한 예가 도 9의 예에 도시되어 있다. 여기서, 제2의 새로운 폭에서 전송하기 위해 링크를 전이하기 위해 제1 폭을 갖는 링크를 통해 전송하는 동안 부분 폭 표시가 송신된다. 불일치는 리셋을 야기할 수 있다. 유의할 점은, 속도들은 변경되지 않을 수 있지만 폭은 변경될 수 있다는 것이다. 따라서, 플리트들은 잠재적으로 상이한 폭들로 송신된다. 논리적으로 전송 링크 상태와 유사할 수 있지만, 더 작은 폭이 있기 때문에, 플리트들을 전송하는 데 더 오래 걸릴 수 있다. 특정의 수신된 및 송신된 메시지들에 기초한 저전력 링크 상태, 또는 다른 이벤트들에 기초한 부분 폭 전송 링크 상태 또는 링크 블록킹 상태의 탈출과 같은 다른 링크 상태들로 탈출할 수 있다. 일 실시예에서, 타이밍도에 도시된 바와 같이, 송신기 포트는 더 나은 신호 무결성을 제공하기 위해 스태커링된 방식으로 유휴 레인들을 턴오프할 수 있다(즉, 잡음 완화). 여기서, 링크 폭이 변하고 있는 기간들 동안 널 플리트들(Null flits)과 같은 비재시도가능 플리트들(non-retry-able flit)이 이용될 수 있다. 대응하는 수신기는 스태거된 방식으로 이 널 플리트들을 드롭시키고 유휴 레인들을 턴오프시킬 수 있는 것은 물론 현재의 레인 맵 및 이전의 레인 맵을 하나 이상의 구조체들에 기록할 수 있다. 유의할 점은, 상태 및 연관된 상태 레지스터가 변경되지 않은 채로 있을 수 있다는 것이다. 일부 구현들에서, 부분 폭 전송 링크 상태는 부분 L0, 또는 L0p 상태라고 지칭될 수 있다.
부분 폭 전송 링크 상태 탈출(Exit Partial Width Transmitting Link State): 부분적 폭 상태를 탈출. 일부 구현들에서, 블록킹 링크 상태를 사용할 수 있거나 그렇지 않을 수 있다. 일 실시예에서, 송신기는 유휴 레인들을 훈련 및 디스큐시키기 위해 그들을 통해 부분 폭 탈출 패턴들을 송신함으로써 탈출을 개시한다. 하나의 예로서, 탈출 패턴은 레인이 전체 전송 링크 상태로의 진입을 시작할 준비가 되어 있다는 것을 시그널링하기 위해 검출되고 디바운스되는 EIEOS로 시작하고, 유휴 레인들 상의 SDS 또는 FTS(Fast Training Sequence)로 종료할 수 있다. 탈출 시퀀스 동안의 임의의 실패(디스큐와 같은 수신기 액션들이 타임아웃 이전에 완료되지 않음)도 링크 계층으로의 플리트 이송을 중단시키고, 그 다음 블록킹 링크 상태 발생 시에 링크를 리셋시킴으로써 리셋을 어써트(assert)한다. SDS는 또한 레인들 상의 스크램블러/디스크램블러를 적절한 값들로 초기화시킬 수 있다.
저 전력 링크 상태(Low Power Link State): 더 낮은 전원 상태가 있음. 일 실시예에서, 이는 부분 폭 링크 상태보다 더 낮은 전력인데, 그 이유는 이 실시예에서의 시그널링이 모든 레인들 상에서 그리고 양쪽 방향으로 중단되기 때문이다. 송신기들은 저전력 링크 상태를 요청하기 위해 블록킹 링크 상태를 사용할 수 있다. 여기서, 수신기는 요청을 디코딩하고 ACK 또는 NAK로 응답할 수 있고; 그렇지 않은 경우, 리셋이 트리거될 수 있다. 일부 구현들에서, 저 전력 링크 상태는 L1 상태로서 지칭될 수 있다.
일부 구현들에서, 예를 들어, 특정의 교정들 및 구성들과 같은 상태들의 상태 액션들이 이미 완료되었을 때 상태들이 바이패스될 수 있게 하기 위해, 상태 전이들이 용이하게 될 수 있다. 링크의 이전의 상태 결과들 및 구성들이 저장되고 링크의 후속 초기화들 및 구성들에서 저장 및 재사용될 수 있다. 이러한 구성들 및 상태 액션들을 반복하기 보다는, 대응하는 상태들이 바이패스될 수 있다. 그러나, 상태 바이패스들을 구현하는 종래의 시스템들은 종종 복잡한 설계들 및 고비용의 유효성 확인 회피들(validation escapes)을 구현한다. 종래의 바이패스를 사용하기 보다는, 하나의 예에서, HPI는 상태 액션들이 반복될 필요가 없는 경우와 같은 특정의 상태들에서 단기 타이머들(short timers)을 이용할 수 있다. 이것은, 잠재적인 장점들 중에서도, 잠재적으로 더 균일하고 동기화된 상태 기계 전이들을 허용할 수 있다.
하나의 예에서, 소프트웨어 기반 제어기(예컨대, 물리 계층을 위한 외부 제어 포인트를 통하여)는 하나 이상의 특정한 상태들을 위한 단기 타이머를 인에이블할 수 있다. 예를 들어, 액션들이 이미 수행되고 저장된 상태에 대해, 그 상태는 그 상태로부터 다음 상태로의 신속한 탈출을 용이하게 하기 위해 단기 시간 설정될(short-timed) 수 있다. 그러나, 이전의 상태 액션이 실패하거나 단기 타이머 지속기간 내에 적용될 수 없는 경우, 상태 탈출이 수행될 수 있다. 게다가, 제어기는, 예를 들어, 상태 액션들이 새로 수행될 때, 단기 타이머를 디스에이블시킬 수 있다. 각자의 상태 각각에 대해 장기 또는 기본 타이머(long or default timer)가 설정될 수 있다. 상태에서의 구성 액션들이 장기 타이머 내에 완료될 수 없는 경우, 상태 탈출이 일어날 수 있다. 상태 액션들의 완료를 허용하기 위해 장기 타이머가 적당한 지속기간으로 설정될 수 있다. 이와 달리, 단기 타이머는 상당히 더 짧을 수 있고, 이는 일부 경우에, 예들 중에서도, 이전에 수행된 상태 액션들을 다시 참조하는 일 없이 상태 액션들을 수행하는 것을 불가능하게 만든다.
일부 경우에, 링크의 초기화(또는 재초기화) 동안, 에이전트들이 상태 기계를 통해 동작 링크 상태 쪽으로 진행할 때, 상태를 (예컨대, 리셋 또는 다른 상태로) 리셋시키는 하나 이상의 실패들 또는 상태 탈출들이 일어날 수 있다. 사실상, 링크의 초기화는, 초기화를 완료하고 링크 상태에 진입하는 일 없이, 하나 이상의 상태들을 루프 스루(loop through)할 수 있다. 하나의 예에서, 링크의 초기화 내에서의 상태 전이들에서의 비생산적인 루프의 수에 대한 카운트가 유지될 수 있다. 예를 들어, 초기화가 링크 상태에 도달함이 없이 리셋 상태로 복귀할 때마다, 카운터가 증분될 수 있다. 링크가 성공적으로 링크 상태에 진입하면 링크에 대해 카운터가 리셋될 수 있다. 이러한 카운터들이 링크의 양측에 있는 에이전트들에 의해 유지될 수 있다. 또한, 임계값은, 예를 들어, 하나 이상의 외부 제어 포인트들을 이용하는 소프트웨어 기반 제어기에 의해 설정될 수 있다. 비생산적인 루프들의 카운트가 정의된 임계값을 충족시킬(또는 초과할) 때, 링크의 초기화가 일시 중지될 수 있다(예컨대, 리셋 상태에 또는 그 이전으로 설정 및 유지됨). 일부 구현들에서, 초기화를 재시작하고 초기화를 일시 중지된 상태로부터 해제시키기 위해, 소프트웨어 기반 제어기는 링크의 재시작 또는 재초기화를 트리거할 수 있다. 일부 경우에, 소프트웨어 기반 도구들은, 초기화의 추가적인 루프를 막기 위해, 일시 중지된 초기화의 특성을 분석하고 진단을 수행하며, 레지스터 값들을 설정하고, 다른 동작들을 수행할 수 있다. 실제로, 일부 구현들에서, 제어기는, 일시 중지된 링크 초기화를 재시작하는 것과 관련하여, 예들 중에서도, 더 높은 카운터 임계값을 설정할 수 있거나, 심지어 카운터를 무시할 수 있다.
HPI의 일부 구현들에서, 수퍼시퀀스들이 정의될 수 있고, 각각의 수퍼시퀀스는 각자의 상태 또는 각자의 상태로/로부터의 진입/탈출에 대응한다. 수퍼시퀀스는 데이터 세트들 및 심볼들의 반복 시퀀스를 포함할 수 있다. 일부 경우에, 예들 중에서도, 상태 또는 상태 전이의 완료, 또는 대응하는 이벤트의 통신까지 시퀀스들이 반복할 수 있다. 일부 경우에, 수퍼시퀀스의 반복 시퀀스는 단위 구간들(UI들)의 정의된 수와 같은 정의된 주파수에 따라 반복할 수 있다. 단위 구간(UI)은 링크 또는 시스템의 레인을 통해 단일의 비트를 전송하기 위한 시간 구간에 대응할 수 있다. 일부 구현들에서, 반복 시퀀스는 EOS(electrically ordered set)로 시작할 수 있다. 그에 따라, EOS의 한 인스턴스가 사전 정의된 주파수에 따라 반복할 것으로 예상될 수 있다. 이러한 순서 집합들(ordered sets)은, 예들 중에서도, 16진수 포맷으로 표현될 수 있는 정의된 16 바이트 코드들로서 구현될 수 있다. 하나의 예에서, 수퍼시퀀스의 EOS는 EIEOS일 수 있다. 하나의 예에서, EIEOS는 저주파수 클록 신호(예컨대, 사전 정의된 수의 반복하는 FF00 또는 FFF000 16진수 심볼들 등)와 비슷할 수 있다. 사전 정의된 수의 훈련 시퀀스들 또는 다른 데이터와 같은 사전 정의된 데이터 세트는 EOS 다음에 올 수 있다. 이러한 수퍼시퀀스들은, 예들 중에서도, 링크 상태 전이들을 비롯한 상태 전이들은 물론 초기화에서도 이용될 수 있다.
QPI에서와 같은 상호접속의 일부 구현들에서, 링크가 리셋되거나 초기화될 때와 같이, 직렬 데이터 링크의 종단들이 온 및 오프될 수 있다. 이 접근법은 링크의 초기화에 복잡성 및 시간을 도입시킬 수 있다. HPI의 일부 구현들에서, 링크의 리셋 또는 재초기화 동안을 비롯하여 링크의 종단들이 유지될 수 있다. 게다가, HPI는 디바이스들의 핫 플러깅(hot-plugging)을 허용할 수 있다. 다른 디바이스가 핫 플러깅 또는 다른 방식을 통해 도입될 때, 새로운 원격 에이전트가 추가되는 레인의 전압 특성들이 변할 것이다. 로컬 에이전트는 원격 에이전트의 존재를 검출하고 링크의 초기화를 프롬프트하기 위해 레인 전압의 이 변화들을 감지할 수 있다. 종단들을 갖지 않는 링크의 검출, 구성, 및 초기화를 조정하기 위해, 상태 기계 상태들 및 타이머들이 상태 기계에서 정의될 수 있다.
일 구현예에서, HPI는 착신 시그널링에 대한 수신측 에이전트에 의한 레인의 스크리닝(screening)을 통해 종단 값들을 변경시키는 일 없이 대역내 리셋 시의 재초기화를 지원할 수 있다. 시그널링은 양호한 레인들을 식별하는 데 사용될 수 있다. 한 예로서, 링크의 발견 및 구성을 용이하게 하기 위해 송신기 디바이스에 의해 송신될 한 세트의 사전 정의된 신호들 중 임의의 하나에 대해 레인이 스크리닝될 수 있다. 하나의 예에서, 하나 이상의 초기화 또는 재초기화 작업들에 대응하는 수퍼시퀀스가 정의될 수 있다. 사전 정의된 시퀀스는 부가적인 시퀀스 데이터가 후속하는 EIEOS(electric idle exit ordered set)를 포함할 수 있다. 일부 경우에, 레인의 양측에 있는 각각의 디바이스로서, 디바이스들은 특정한 초기화 상태 등에 대응하는 슈퍼시퀀스를 송신하기 시작할 수 있다. 일 실시예에서, 2가지 타입의 핀 리셋: 파워-온(또는 "콜드") 리셋 및 웜 리셋이 지원될 수 있다. 소프트웨어에 의해 개시되거나 하나의 에이전트 상에서 (물리 또는 다른 계층에서) 발신되는 리셋은 다른 에이전트로 대역 내에서 통신될 수 있다. 그러나, 내장형 클록의 사용으로 인해, 대역내 리셋은 특정 전기 순서 집합 또는 EIOS와 같은 순서 집합을 사용하여 다른 에이전트로의 통신에 의해 처리될 수 있다.
순서 집합은 초기화 동안 송신될 수 있고, PHY 제어 시퀀스(또는 "블록킹 링크 상태")가 초기화 후에 송신될 수 있다. 블록 링크 상태는 플리트들을 송신하지 못하게 링크 계층을 블록킹할 수 있다. 또 다른 예로서, 수신기에서 폐기될 수 있는 몇 개의 널(NULL) 플리트들을 송신하기 위해 링크 계층 트래픽이 블록킹될 수 있다.
앞서 소개된 바와 같이, 일 실시예에서, 초기화는 처음에 저속 속도로 행해지고 고속 속도에서의 초기화가 후속할 수 있다. 저속 속도에서의 초기화는 레지스터들 및 타이머들에 대해 기본 값들을 사용한다. 소프트웨어는 이어서 레지스터들, 타이머들 및 전기 파라미터들을 셋업하기 위해 저속 속도 링크를 사용하고, 고속 속도 초기화를 위한 길을 닦기 위해 교정 세마포어들(calibration semaphores)을 클리어한다. 하나의 예로서, 초기화는, 잠재적으로, 그 중에서도, 리셋, 검출, 폴링, 컴플라이언스, 및 구성과 같은 상태들 또는 작업들로 구성될 수 있다.
하나의 예에서, 링크 계층 블록킹 제어 시퀀스(즉, 블록킹 링크 상태(BLS) 또는 L0c 상태)는 PHY 정보가 원격 에이전트로 통신되는 동안 링크 계층 플리트들이 보류되는 시간 설정된 상태를 포함할 수 있다. 여기서, 송신기 및 수신기는 블록 제어 시퀀스 타이머(block control sequence timer)를 시작할 수 있다. 그리고 타이머들의 만료 시에, 송신기 및 수신기는 블록킹 상태를 탈출할 수 있고, 리셋으로의 탈출, 링크를 거쳐 플리트들을 송신하는 것을 고려하는 상태들을 비롯한 상이한 링크 상태(또는 다른 상태)로의 탈출과 같은 다른 액션들을 취할 수 있다.
일 실시예에서, 링크 훈련이 제공되고, 이를테면, 정의된 수퍼시퀀스와 관련하여, 스크램블된 훈련 시퀀스들, 순서 집합들, 및 제어 시퀀스들 중 하나 이상을 송신하는 것을 포함할 수 있다. 훈련 시퀀스 심볼은 헤더, 예비된 부분들, 타겟 레이턴시, 쌍 번호(pair number), 물리 레인 맵 코드 참조 레인들 또는 일군의 레인들, 및 초기화 상태 중 하나 이상을 포함할 수 있다. 일 실시예에서, 예들 중에서도, ACK 또는 NAK를 갖는 헤더가 송신될 수 있다. 한 예로서, 훈련 시퀀스들이 수퍼시퀀스들의 일부로서 송신될 수 있고, 스크램블될 수 있다.
일 실시예에서, 순서 집합들 및 제어 시퀀스들은 스크램블 또는 스태거되지 않고, 모든 레인들에서 똑같이, 동시에 그리고 완전히 전송된다. 순서 집합의 유효한 수신은 순서 집합의 적어도 일부분(또는 부분 순서 집합들에 대한 전체 순서 집합)을 체크하는 것을 포함할 수 있다. 순서 집합들은 EIOS(Electrical Idle Ordered Set) 또는 EIEOS와 같은 EOS(electrically ordered set)를 포함할 수 있다. 수퍼시퀀스는 SDS(start of a data sequence) 또는 FTS(Fast Training Sequence)를 포함할 수 있다. 이러한 집합들 및 제어 수퍼시퀀스들은 사전 정의될 수 있고, 임의의 패턴 또는 16진수 표현은 물론, 임의의 길이를 가질 수 있다. 예를 들어, 순서 집합들과 슈퍼시퀀스들은 8 바이트들, 16 바이트들 또는 32 바이트들 등의 길이일 수 있다. FTS는, 일례로서, 추가적으로 링크 상태를 전송하는 부분 폭의 탈출 동안 빠른 비트 잠금에 이용될 수 있다. 유의할 점은, FTS 정의가 레인별(per lane)일 수 있고, FTS의 회전된 버전을 이용할 수 있다는 것이다.
일 실시예에서, 수퍼시퀀스들은 훈련 시퀀스 스트림에의 EIEOS와 같은 EOS의 삽입을 포함할 수 있다. 시그널링이 시작될 때, 일 구현에서, 레인들은 스태거된 방식으로 전원이 켜진다. 그러나, 이 결과, 초기의 수퍼시퀀스들이 일부 레인들 상에서는 수신기에서 절단(truncated)되어 보일 수 있다. 그러나, 수퍼시퀀스들이 짧은 구간들(예컨대, 약 1000 단위 구간들(또는 ~1K UI))에 걸쳐 반복될 수 있다. 훈련 슈퍼시퀀스들은 추가적으로 디스큐, 초기화 타겟을 통신하기 위한 구성, 레인 맵 등 중 하나 이상에 사용될 수 있다. EIEOS는 다른 예들 중에서도 비활성 상태로부터 활성 상태로 레인을 전이하는 것, 양호한 레인들에 대한 스크리닝, 심볼 및 TS 경계들을 식별하는 것 중 하나 이상에 사용될 수 있다.
일 실시예에서, 클록이 데이터에 내장될 수 있고, 따라서 별도의 클록 레인들이 존재하지 않는다. 클록 복원을 용이하게 하기 위해, 레인들을 통해 송신되는 플리트들이 스크램블될 수 있다. 하나의 예로서의, 수신기 클록 복원 유닛은 샘플링 클록들을 수신기로 전달할 수 있다(즉, 수신기는 데이터로부터의 클록을 복원하고, 그것을 사용하여 착신 데이터를 샘플링한다). 일부 구현들에서, 수신기들은 착신 비트 스트림에 계속하여 적응한다. 클록을 내장시킴으로써, 핀아웃(pinout)은 잠재적으로 감소될 수 있다. 그러나, 클록을 대역내 데이터에 내장시키는 것은 대역내 리셋에 도달되는 방식을 변경할 수 있다. 일 실시예에서, 초기화 이후에 BLS(blocking link state)가 이용될 수 있다. 또한, 고려사항들 중에서도, (예컨대, 앞서 기술한 바와 같이) 리셋을 용이하게 하기 위해 초기화 동안 전기 순서 집합 수퍼시퀀스들이 이용될 수 있다. 내장된 클록이 링크 상의 디바이스들 간에 공통일 수 있고, 링크의 교정 및 구성 동안 공통의 동작 클록이 설정될 수 있다. 예를 들어, HPI 링크들은 드리프트 버퍼들과 함께 공통의 클록을 참조할 수 있다. 이러한 구현은, 잠재적인 장점들 중에서도, 비공통의 참조 클록들에서 사용되는 탄성 버퍼들(elastic buffers)보다 더 낮은 레이턴시를 실현할 수 있다. 게다가, 참조 클록 분산 세그먼트들이 명시된 한계들 내에서 정합될 수 있다.
일부 구현들에서, HPI는, 일부 경우에, (예컨대, 수순하게 예시적인 예로서, 192 비트 및 20 레인의 플리트 폭을 사용하는) 공칭 레인 폭의 배수가 아닌 폭을 갖는 플리트들을 지원할 수 있다. 사실상, 부분 폭 전송 상태들을 허용하는 구현들에서, 플리트들이 전송되는 레인들의 수는, 링크의 라이프 동안에도, 변동할 수 있다. 예를 들어, 일부 경우에, 플리트 폭은 하나 순간에 활성 레인들의 수의 배수일 수 있지만 또 다른 순간에는 활성 레인들의 수의 배수가 아닐 수도 있다(예컨대, 링크가 상태 및 레인 폭을 변경함에 따라). 레인의 수가 현재 레인 폭의 배수가 아닌 경우에(예컨대, 20 레인에서 192 비트들의 플리트 폭의 예), 일부 실시예에서, 연속적인 플리트들은 레인들에서 중첩되게 전송되도록 구성될 수 있고 이로써 대역폭을 보존할 수 있다(예컨대, 20 레인들에서 중첩된 5번의 연속적인 192 비트 플리트들을 전송).
도 8은 다수의 레인들에 중첩된 연속적인 플리트(flit)들의 전송의 표현을 예시한다. 예를 들어, 도 8은 20 레인 링크를 통해 송신된 5개의 중첩된 192 비트 플리트들의 표현을 도시한다(레인들은 컬럼 0-19으로 표현됨). 도 8의 각각 셀은 4 UI 스팬(span)에 걸쳐서 송신된 플리트 내에 포함된 4 비트(예컨대, 비트 4n+3:4n)의 그룹화 또는 각각의 "니블(nibble)"을 나타낸다. 예를 들어, 192 비트 플리트는 48개의 4 비트 니블들로 분할될 수 있다. 하나의 예에서, 니블 0은 비트 0-3을 포함하고, 니블 1은 비트 4-7을 포함하며, 기타 등등이다. 니블들 내의 비트들은, 다른 고려사항들 중에서, 플리트의 최우선 순위 필드들이 먼저 제시되고, 오류 검출 속성(예컨대, CRC)이 보유되도록, 중첩 또는 인터리브(interleave)(예컨대, "스위즐(swizzled)")되도록 송신될 수 있다. 사실상, 스위즐 방식(swizzling scheme)은 또한 일부 니블들(그리고 이들 각각의 비트)이 비순차적으로 송신되는 것을 제공할 수 있다(예컨대, 도 8 및 도 9의 예들에서와 같이). 일부 구현들에서, 스위즐 방식은 링크 계층의 아키텍처와 링크 계층에 사용된 플리트의 포맷에 좌우될 수 있다.
활성 레인들의 배수가 아닌 길이를 갖는 플리트의 비트들(또는 니블들)은 이를테면, 도 8의 예에 따라 스위즐될 수 있다. 예를 들어, 제1 4 UI동안, 니블들 1, 3, 5, 7, 9, 12, 14, 17, 19, 22, 24, 27, 29, 32, 34, 37, 39, 42, 44 및 47이 송신될 수 있다. 니블들 0, 2, 4, 6, 8, 11, 13, 16, 18, 21, 23, 26, 28, 31, 33, 36, 38, 41, 43 및 46은 다음 4 UI 동안 송신될 수 있다. UI들 8-11에서, 단지 8개의 니블들만이 제1 플리트에 남아 있다. 제1 플리트의 이러한 최종 니블들(즉, 10, 15, 20, 25, 30, 40, 45)은, 제1 및 제2 플리트들이 중첩되거나 스위즐되도록, 제2 플리트의 제1 니블들(즉, 니블들 2, 4, 7, 9, 12, 16, 20, 25, 30, 35, 40, 45)과 동시에 송신될 수 있다. 이러한 기술을 이용하여, 본 예에서, 5개의 완료 플리트들은 48 UI에서 송신될 수 있으며, 각 플리트는 분수 9.6 UI 기간에 걸쳐서 송신된다.
일부 예들에서, 스위즐은 주기적인 "클린(clean)" 플리트 경계들을 야기할 수 있다. 예를 들어, 도 8의 예에서, 시작하는 5-플리트 경계(제1 플리트의 상위 라인)은 또한 모든 레인들이 동일한 플리트로부터 시작하는 니블을 전송하기 때문에 클린 플리트 경계로서 지칭될 수 있다. 에이전트 링크 계층 논리는 레인들의 스위즐을 식별하도록 구성될 수 있고 스위즐된 비트들로부터 플리트를 재구성할 수 있다. 또한, 물리 계층 논리는 지금 이용되고 있는 레인들의 수에 기초하여 플리트 데이터의 스트림을 언제 및 어떻게 스위즐할지를 식별하기 위한 기능을 포함할 수 있다. 사실상, 하나의 링크 폭 상태로부터 또 다른 것으로의 전이시, 에이전트들은 어떻게 데이터 스트림의 스위즐이 사용될 것인지를 식별하도록 그들 자신들을 구성할 수 있다.
상술한 바와 같이, 링크들은 오리지널, 또는 전체(full), 폭에서 동작하며 더 적은 레인들을 이용하는 부분 폭으로(및 이로부터) 나중에 전이하는 일부 예들에서 레인 폭들 간에 전이할 수 있다. 일부 예들에서, 플리트의 정의된 폭은 레인들의 수에 의해 분할가능할 수 있다. 예를 들어, 도 9의 예는 그러한 예를 예시하며, 여기서 이전 예들의 192 비트 플리트는 8-레인 링크를 통해 전송된다. 도 9에 나타낸 것과 같이, 192 비트 플리트의 4 비트 니블들은 균일하게 분산되고 8 레인들에 걸쳐서 전송될 수 있다(즉, 192가 8의 배수임에 따라). 사실상, 단일 플리트는 8-레인 부분 폭에서 동작할 때 24 UI에 걸쳐서 송신될 수 있다. 또한, 각각의 플리트 경계는 도 9의 예에서 클린될 수 있다. 클린 플리트 경계들은 상태 전이들, 결정론, 및 다른 특징들을 단순화할 수 있는 한편, 스위즐 및 가끔 재깅된(jagged) 플리트 경계들을 고려함으로써 링크에 대한 낭비되는 대역폭의 최소화를 고려할 수 있다.
추가적으로, 도 9의 예가 부분 폭 상태에서 활성을 유지하는 레인들로서 레인들 0-7을 도시하고 있지만, 8 레인들의 임의의 세트가 잠재적으로 이용될 수 있다. 유의할 점은, 상기 예들은 단지 예시를 목적으로 한 것이라는 점이다. 플리트들은 잠재적으로 임의의 폭을 갖도록 정의될 수 있다. 링크들은 또한 잠재적으로 임의의 링크 폭을 가질 수 있다. 또한, 시스템의 스위즐 방식은 다른 고려사항들 및 예들 중에서, 플리트의 포맷들 및 필드, 시스템에서의 바람직한 레인 폭들에 따라 유연하게 구성될 수 있다.
HPI PHY 논리 계층의 동작은, 다른 고려사항들 중에서, 레이턴시(latency)가 링크 계층에서 레이턴시 고정 오류 또는 타임아웃을 야기하지 않는다면 기본 전송 매체에 독립적일 수 있다.
링크 계층
링크 계층은 프로토콜 계층으로부터 물리 계층을 추상화할 수 있고, 2개의 프로토콜 에이전트들 간의 흐름 제어를 다룰 수 있고, 가상 채널 서비스들을 프로토콜 계층(메시지 클래스들) 및 라우팅 계층(가상 네트워크들)에 제공할 수 있다. 일부 구현들에서, 링크 계층은, 플리트라고 칭하는, 정보의 고정된 양자를 다룰 수 있다. 하나의 예에서, 플리트는 길이가 192 비트인 것으로 정의될 수 있다. 그러나, 상이한 변동들에서 81-256(또는 그 이상)과 같은, 임의의 범위의 비트들이 이용될 수 있다. 192 비트와 같은, 큰 플리트 사이즈는 포맷, 순환 중복 검사(CRC), 오류 정정 코드(ECC), 및 다른 특징들을 포함할 수 있다. 예를 들어, 더 큰 플리트 길이는 또한 CRC 필드가 더 큰 플리트 페이로드를 다룰 수 있도록 (예컨대, 16 비트로) 확장되도록 허용할 수 있다. 단일 플리트를 이송하기 위한 피트(phit)들 또는 UI(unit interval)들(예컨대, 단일 비트 또는 피트 등을 이송하는데 이용되는 시간)의 수는 링크 폭에 따라 변화될 수 있다. 예를 들어, 다른 잠재적인 예들 중에서, 20 레인 또는 비트 링크 폭은 9.6 UI에서 단일 192 비트 플리트를 이송할 수 있는 한편, 8 레인 링크 폭은 24 UI에서 동일한 플리트를 이송한다. 링크 계층 크레디팅(crediting)과 프로토콜 패킷화는 또한 플리트에 기초한 것일 수 있다.
도 10은 8 레인 링크 폭에 대한 일반화된 플리트의 표현(1000)을 예시한다. 표현(1000)의 각각 컬럼은 링크 레인을 심볼화하고 각각의 로우는 각각의 UI를 심볼화할 수 있다. 일부 구현들에서, 단일 플리트는 2 이상의 슬롯들로 분할될 수 있다. 별개의 메시지들 또는 링크 계층 헤더들이 각각의 슬롯에 포함되어, 다수의 별개의, 그리고 일부 경우에는, 잠재적으로 상이한 트랜잭션들에 대응하는 독립적인 메시지들이 단일 플리트에서 송신되는 것을 허용할 수 있다. 또한, 단일 플리트의 슬롯들에 포함된 다수의 메시지들은 다른 예들 중에서, 상이한 목적지 노드들로 예정될 수 있다. 예를 들어, 도 10의 예는 3개의 슬롯을 갖는 플리트 포맷을 예시한다. 음영부들은 각각의 슬롯에 포함된 플리트의 일부를 나타낼 수 있다.
도 10의 예에서, 3개 슬롯, 슬롯 0, 1, 2가 제공된다. 슬롯 0에는 플리트 공간의 72 비트가 제공될 수 있으며, 이들 중 22 비트는 메시지 헤더 필드 전용이고 50 비트는 메시지 페이로드 공간 전용이다. 슬롯 1에는 플리트 공간의 70 비트가 제공될 수 있으며, 이들 중 20 비트는 메시지 헤더 필드 전용이고 50 비트는 메시지 페이로드 공간 전용이다. 이들 간의 메시지 헤더 필드 공간에서의 차이는 슬롯 0에 포함하기 위한 것으로 지정될 소정 메시지 타입들을 제공하도록 최적화될 수 있다(예컨대, 추가적인 메시지 헤더 인코딩이 이용될 경우). 플리트 공간의 18 비트를 이용하는 경우에, 슬롯 0 및 슬롯 1보다 실질적으로 적은 공간을 차지하는, 세 번째 슬롯, 슬롯 2가 제공될 수 있다. 슬롯 2는, 확인 응답, 크레디트 리턴, 및 더 큰 메시지 페이로드를 이용하지 않는 유사한 것과 같은, 메시지들을 다루도록 최적화될 수 있다. 추가적으로, 부가적인 11 비트가 슬롯 0 또는 슬롯 1의 페이로드 필드를 보충하기 위해 대안적으로 적용되도록 허용하는 플로팅 페이로드 필드가 제공될 수 있다.
계속해서 도 10의 특정 예를 참조하면, 다른 필드들은 플리트에 글로벌일 수 있다(즉, 특정 슬롯이 아니라 플리트 전반에 걸쳐서 적용). 예를 들어, 헤더 비트는 다른 예들 중에서, 플리트의 가상 네트워크와 같은 정보를 지정하고 어떻게 플리트가 인코딩될 것인지를 식별하는데 사용될 수 있는 4 비트 플리트 제어 필드와 함께 제공될 수 있다. 추가적으로, 오류 제어 기능은 다른 잠재적인 예들 중에서, 이를테면 16 비트 순환형 CRC 필드를 통하여, 제공될 수 있다.
플리트 포맷은 링크 계층 상의 메시지들의 처리량을 최적화하도록 정의될 수 있다. 일부 종래의 프로토콜들은 슬롯화되지 않은, 더 작은 플리트들을 이용했다. 예를 들어, QPI에서, 80 비트 플리트가 이용되었다. 더 큰 것(예컨대, 192 비트 플리트)의 플리트 처리량이 더 낮아질 수 있는 반면, 메시지 또는 패킷 처리량은 플리트 데이터의 사용을 최적화함으로써 증가될 수 있다. 예를 들어, QPI의 일부 구현들에서, 전체 80 비트 플리트 공간은 메시지 사이즈 또는 타입에 상관없이 이용되었다. 더 큰 플리트를 사전 결정된 길이들 및 필드들의 슬롯들로 세분함으로써, 192 플리트 길이가 최적화되어, 사용가능한 슬롯들 중 하나 이상이 가끔 사용되지 않는 경우들에도 더 높은 효율을 실현할 수 있다. 사실상, 링크 계층 트래픽은 헤더 길이 및 필드가 변화하는 메시지들 및 패킷들을 포함하는, 많은 상이한 타입의 메시지 및 트래픽을 포함하는 것으로 가정될 수 있다. 플리트에서 정의된 슬롯들의 각각 길이들 및 조직은 다양한 메시지들의 통계적 또는 예상되는 빈도와 이러한 메시지들의 필요성과 부합되도록 정의될 수 있다. 예를 들어, 2개의 더 큰 슬롯들은 다른 예 중에서, 이들 더 큰 메시지 타입들과 헤더 길이들을 이용하는 메시징의 예상된 통계적인 빈도를 수용하도록, 모든 작은 슬롯에 대해 정의될 수 있다. 또한, 도 10의 예에서와 같이, 이를테면 플로팅 페이로드 필드를 통해, 다양한 트래픽을 추가로 수용하도록 유연성이 또한 제공될 수 있다. 일부 예들에서, 플리트에서의 특정한 슬롯들에 전용인 비트들을 포함하는 플리트 포맷이 고정될 수 있다.
도 10의 예에서, "Hdr" 필드는 일반적으로 플리트에 대하여 제공되고 플리트에 대한 헤더 표시를 나타낼 수 있다. 일부 예들에서, Hdr 필드는 플리트가 헤더 플리트 또는 데이터 플리트인지를 표시할 수 있다. 데이터 플리트들에서, 플리트는 슬롯된 채로 여전히 남아 있을 수 있지만, 소정 필드들의 사용을 생략하거나 페이로드 데이터로 대체할 수 있다. 일부 경우에, 데이터 필드들은 오피코드(opcode)와 페이로드 데이터를 포함할 수 있다. 헤더 플리트들의 경우에, 다양한 헤더 필드들이 제공될 수 있다. 도 10의 예에서, "Oc" 필드들은 각각의 슬롯마다 제공될 수 있고, Oc 필드는 오피코드를 나타낸다. 유사하게, 하나 이상의 슬롯들은 슬롯이 그러한 패킷 타입들, 등을 다루기 위해 설계된다면, 슬롯에 포함될 대응하는 패킷의 메시지 타입을 나타내는 대응하는 "msg" 필드를 가질 수 있다. 다른 잠재적인 필드들 중에서, "DNID" 필드들은 목적지 노드 ID를 나타낼 수 있고, "TID" 필드는 트랜잭션 또는 추적기(tracker) ID를 나타낼 수 있고, "RHTID" 필드는 요청자 노드 ID 또는 홈 추적기 ID를 나타낼 수 있다. 또한, 하나 이상의 슬롯들에는 페이로드 필드들이 제공될 수 있다. 추가적으로, CRC 필드는 다른 예들 중에서, 플리트에 대한 CRC값을 제공하기 위해 플리트 내에 포함될 수 있다.
일부 구현들에서, 링크 폭은 링크의 라이프(life) 동안 변할 수 있다. 예를 들어, 물리 계층은 이를테면, 전체(full) 또는 원래(original) 레인 폭과 상이한 또는 부분 레인 폭으로 및 그로부터, 링크 폭 상태들 사이에서 전이할 수 있다. 예를 들어, 일부 구현들에서, 링크는 20 레인들에 걸쳐서 데이터를 이송하기 위해 초기화될 수 있다. 나중에, 링크는 많은 다른 잠재적인 예들 중에서, 단지 8 레인들만이 활동적으로 사용되는 부분 폭 전송 상태로 전이할 수 있다. 그러한 레인 폭 전이는 예를 들어, 다른 예들 중에서 하나 이상의 전원 제어 유닛들(PCU)의 지배를 받은 전력 관리 작업들과 관련하여, 이용될 수 있다.
상술한 바와 같이, 링크 폭은 플리트 처리율에 영향을 미칠 수 있다. 도 11은 24 UI에서 플리트의 처리량의 결과인, 8 레인 링크를 통해 송신된 예시적인 192 비트 플리트의 표현이다. 또한, 도 11의 예에 도시된 바와 같이, 플리트의 비트들은, 다른 예들 중에서, 전송시에 더 시간에 민감한 필드들(예컨대, 플리트 타입 필드들(예컨대, 데이터 또는 헤더 플리트), 오피코드 등)을 더 일찍 이송하고, 특정한 오류 검출 또는 플리트에서 구체화된 다른 기능을 보존하거나 용이하게 하기 위한 일부 예들에서 비순차적으로 송신될 수 있다. 예를 들어, 도 11의 예에서, 비트들 191, 167, 143, 119, 95, 71, 47 및 23은, 이송의 제1 UI(즉, UI0) 동안 레인 L7 내지 L0에서 병렬로 송신되는 반면, 비트들 168, 144, 120, 96, 72, 48, 24 및 0은 플리트 이송의 24번째(또는 마지막) UI(즉, UI 23)동안 송신된다. 다른 정렬 방식들, 플리트 길이들, 레인 폭들, 기타 등등이 다른 구현들과 예들에서 이용될 수 있다는 것을 이해해야 한다.
일부 예들에서, 플리트의 길이는 활성 레인들의 수의 배수일 수 있다. 그와 같은 예들에서, 플리트는 모든 활성 레인들 상에서 고르게 송신될 수 있고 플리트의 이송은 클린(즉, 비중첩) 경계에서 실질적으로 동시에 종료될 수 있다. 예를 들어, 도 8의 표현에 도시된 바와 같이, 플리트의 비트들은 4 비트의 연속적인 그룹화 또는 "니블"로 송신되는 것으로 고려될 수 있다. 이 예에서, 192 비트 플리트는 8 레인 링크를 통해 이송될 것이다. 192가 8의 배수이기 때문에, 전체 플리트는 24 UI에서 8 레인 링크를 통해 클린하게 이송될 수 있다. 다른 예들에서, 플리트 폭은 활성 레인들의 수의 배수가 아닐 수 있다. 예를 들어, 도 9는 20 레인들에 걸쳐서 이송된 예시적인 192 비트의 또 다른 표현을 도시한다. 192가 20씩 고르게 분할될 수 없기 때문에, 전체 플리트의 이송은 비정수의 구간들(예컨대, 9.6 UI)을 필요로 할 것이다. 그와 같은 경우에, 이송의 10번째 UI 동안 이용되지 않는 "여분의(extra)" 레인들을 낭비하기 보다는, 제2 중첩 플리트가 선행 플리트의 최종 비트들로 이송될 수 있다. 그러한 플리트들의 중첩 또는 스위즐은 일부 구현들에서 재깅된(jagged) 플리트 경계들 및 비순차적으로 송신된 플리트 비트들을 야기할 수 있다. 이송에 이용된 패턴은 다른 고려사항들 중에서, 플리트의 더 시간에 민감한 필드들이 플리트에서 더 일찍 이송되는 것을 허용하여, 오류 검출 및 정정의 보존을 허용하도록 구성될 수 있다. 논리는, 그러한 패턴들에 따라 플리트 비트들을 이송하고 현재의 링크 폭에 기초하여 패턴들 사이에서 동적으로 변경하기 위해 물리 계층 및 링크 계층 중 하나 또는 양쪽에 제공될 수 있다. 또한, 논리는 다른 예들 중에서, 스위즐된 또는 정렬된 비트 스트림들로부터 플리트들을 재정렬 및 재구성하도록 제공될 수 있다.
일부 구현들에서, 플리트들은 헤더 플리트들(예컨대, 패킷 헤더 데이터를 베어링함) 또는 데이터 플리트들(예컨대, 패킷 페이로드 데이터를 베어링함)을 특징으로 할 수 있다. 도 10을 참조하면, 단일 플리트에서 3개의 헤더들까지 이송되는 것을 허용하는(예컨대, 각각의 슬롯에서 하나의 헤더), 세 개(3)의 별개의 슬롯들(예컨대, 0, 1 및 2)을 포함하는 플리트 포맷이 정의될 수 있다. 도 10의 예에서, 3개 슬롯들, 슬롯 0, 1 및 2가 제공된다. 슬롯 0에는 플리트 공간의 72 비트가 제공될 수 있으며, 이들 중 22 비트는 메시지 헤더 필드 전용이고 50 비트는 메시지 페이로드 공간 전용이다. 슬롯 1에는 플리트 공간의 70 비트가 제공될 수 있으며, 이들 중 20 비트는 메시지 헤더 필드 전용이고 50 비트는 메시지 페이로드 공간 전용이다. 이들 간의 메시지 헤더 필드 공간에서의 차이는 (예컨대, 더 많은 메시지 헤더 인코딩이 이용되는) 슬롯 0에 포함하는 것으로 지정될 소정 메시지 타입들을 제공하기 위해 최적화될 수 있다. 플리트 공간의 18비트를 이용하는 경우에, 슬롯 0 및 슬롯 1보다 실질적으로 적은 공간을 차지하는 세 번째 슬롯, 슬롯 2가 제공될 수 있다. 슬롯 2는 확인응답, 크레디트 리턴, 및 더 큰 메시지 페이로드를 이용하지 않는 유사한 것과 같은 메시지를 다루도록 최적화될 수 있다. 추가적으로, 부가적인 11 비트가 슬롯 0 또는 슬롯 1의 페이로드 필드를 보충하기 위해 대안적으로 적용되도록 허용하는 플로팅 페이로드 필드가 제공될 수 있다.
일부 구현들에서, 2개의 슬롯들 간에 필드가 플로팅하게 허용함으로써, 사전에 정의된 플리트 길이(예컨대, 192 비트)를 계속 유지하고 대역폭의 이용을 극대화하는 한편, 필요에 따라 소정 메시지를 위한 여분의 비트들이 제공될 수 있다. 도 19의 예들을 참조하면, 예시적인 192 비트 플리트의 2가지 예들(1905, 1910)은 8 레인 데이터 링크에 도시되어 있다. 하나의 예에서, 플리트(예컨대, 1905)는 3개 슬롯들, 슬롯 0, 1 및 2를 포함할 수 있다. 슬롯 0 및 슬롯 1 각각은 50 비트 페이로드 필드들을 포함할 수 있다. 플로팅 필드는 대안적으로 플로팅 필드의 필드 길이(예컨대, 11 비트)만큼 슬롯 0 또는 슬롯 1의 페이로드 필드를 확장하기 위해 제공될 수 있다. 플로팅 필드의 사용은 정의된 다중-슬롯 플리트 포맷을 통해 제공된 효율 개선으로 더 확장될 수 있다. 플리트 내의 슬롯들의 사이징 및 각각의 슬롯에 위치할 수 있는 메시지들의 타입들은 플리트 레이트가 감소되더라도 잠재적으로 증가된 대역폭을 제공할 수 있다.
도 10의 특정한 예에서, 슬롯 1 및 2를 사용할 수 있는 메시지들이 최적화되어, 이러한 슬롯들의 오피코드들을 인코딩하기 위해 확보될 비트들의 수를 감소시킬 수 있다. 슬롯 0이 제공할 수 있는 더 많은 비트를 갖는 헤더가 링크 계층으로 진입하는 경우, 슬로팅 알고리즘(slotting algorithm)이 제공되어 부가적인 공간에 대해 슬롯 1 페이로드 비트들을 인수하는 것(take over)을 허용한다. 그들의 필요에 따라 모든 3개의 슬롯에 상당하는 비트들을 소비하는 특별한 제어(예컨대, LLCTRL) 플리트들(flits)이 또한 제공될 수 있다. 링크가 부분적으로 바쁜 경우들에 대해, 다른 슬롯들이 어떤 정보도 운반하지 않는 동안 개별 슬롯들이 이용되는 것을 허용하는 슬로팅 알고리즘들이 또한 존재할 수 있다.
일 실시예에서, 링크 계층은, 예를 들어, 메시지들을 디버깅하고 및 다른 용도로 사용될 수 있는 특별한 제어 플리트들을 추가적으로 정의할 수 있다. 하나의 예에서, LLCTRL-DEBUG 플리트들은, 인에이블 디버그 제어 필드가 설정되는 경우, 링크 계층에 의해 송신될 수 있다. 이 비트가 설정되지 않는 경우, LLCTRL-DEBUG 플리트들은 링크 상에서 송신되지 않을 수 있다. 디버그 패킷들은 다른 방식으로는 액세스할 수 없는 HPI에 의해 접속된 디바이스들의 내부 상태를 노출시키기 위해 중요할 수 있다. 디버그 패킷들의 콘텐츠는 또한 구현 특정적일 수 있다. 콘텐츠는 브랜치 정보(소스 및 타겟 IP들), 타임-스탬프들, 내부 이벤트 트리거의 표시, 등과 같은 것들을 포함할 수 있다. 노출된 데이터는, 예를 들어, 후-처리(post-processing) 및 고장 분석(failure analysis)을 위한 논리 분석기(logic analyzer)와 같은 디바이스들을 모니터링하는 것에 의한 것일 수 있다. 디버그 메시지 타입의 예시적인 플리트 인코딩이 도 12에 예시된다.
일부 구현들에서, HPI와 같은 범용 I/O 상호접속(GPIO) 아키텍처의 원리들 및 프로토콜들이 이용되어 버퍼링된 메모리 인터페이스 및 대응하는 프로토콜을 구현할 수 있다. 예를 들어, 앞에서 요약된 물리 및 링크 계층 정의들이 또한 버퍼링된 메모리 프로토콜에서 구현될 수 있다. 사실, GPIO 프로토콜의 물리 및 링크 계층을 지원하는데 사용된 논리는 버퍼링된 메모리 프로토콜을 지원하는 인터페이스들에서 재사용될 수 있다. 버퍼링된 메모리 프로토콜은 또한, 다른 예들 중에서도, 요청, 응답, 및 후기입(writeback) 메시지 클래스와 같은 메시지 클래스들을 공유할 수 있다. 버퍼링된 메모리 프로토콜 메시지 내의 오피코드 값이 HPI(또는 다른 GPIO 프로토콜)에서와는 상이하게 해석될 수 있는 한편, 동일한 일반적인 패킷 포맷들이, 그것이 구축되는 버퍼링된 메모리 프로토콜 및 GPIO 상호접속 모두에 이용될 수 있다. 사실상, 부가적인 패킷 및 플리트 필드들은 버퍼링된 메모리 프로토콜 및 GPIO 상호접속 프로토콜 양쪽에 고유한 것일 수 있다.
일부 구현들에서, HPI의 물리 및 링크 계층들을 이용하는 버퍼링된 메모리 프로토콜은 트랜잭션 인터페이스(transactional interface) 및 프로토콜일 수 있다. 이것은 데이터가 일련의 수신된 요청들(예컨대, 판독 요청들)에 대해 비순차적으로 리턴되는 것을 허용할 수 있다. 일부 구현들에서 버퍼링된 메모리 인터페이스가 버퍼 칩을 CPU에 상호접속하는데 사용될 수 있다. 일 구현에서, 일부 프로토콜들은 버퍼링된 메모리 버스에 걸쳐서 활성화, 판독, 기입 및 리프레시와 같은 DRAM 명령들을 송신하는 한편, 본 명세서에서 논의된 버퍼링된 메모리 프로토콜의 일부 구현들에서, 판독 또는 기입 명령은 간단하게 주소와 함께 송신될 수 있다. 그 다음, 버퍼 칩은 특정 랭크 및 뱅크를 디코드하고, 요청을 DRAM 명령들로 브레이트다운할 수 있다. 추측 및 요구(speculative and demand) 판독이 또한 지원될 수 있다.
도 13을 참조하면, HPI 준수 링크에 의해 상호접속된 CPU 디바이스들(1305, 1310)을 포함하는 컴퓨팅 시스템의 예시적인 토폴로지를 예시하는 간략화된 블록도(1300)가 도시된다. 각각의 CPU(1305, 1310)는 대응하는 버퍼링된 메모리 프로토콜 링크들("MemLink")을 이용하여 하나 이상의 각자의 버퍼링된 디바이스들(1315a-l)에 마찬가지로 접속될 수 있다. 앞서 언급한 바와 같이, 일부 구현들에서, 버퍼링된 메모리 프로토콜 상호접속은, 버퍼링된 메모리 프로토콜들의 물리 및 링크 계층들이 GPIO 프로토콜(예컨대, HPI)의 동일한 물리 및 링크 계층 정의들에 기초한다는 점에서, GPIO 프로토콜에 기초할 수 있다. 도 13에는 예시되지 않았지만, CPU들(1305, 1310)은 GPIO 프로토콜을 이용하여 하나 이상의 다운스트림 디바이스들에 더 접속될 수 있다.
도 13의 예에서 더 도시되는 바와 같이, 버퍼 디바이스들(1315a-l)은 DIMM(dual in-line memory module) 디바이스들과 같은 메모리 디바이스들에 접속될 수 있다. 각각의 버퍼 디바이스에 대응하는 메모리는, 버퍼 디바이스가 접속되는 CPU(예컨대, 1305, 1301)에 대해 로컬인 것으로 간주될 수 있다. 그러나, (다른 CPU를 포함하여) 다른 디바이스들은 GPIO 프로토콜 준수 링크들을 이용하여 다른 소켓들에 의해 메모리에 액세스할 수 있다. 일부 구현들에서, 버퍼링된 메모리 프로토콜을 실행하는 포트는 단지 메모리와의 통신을 위한 명령들만을 지원하고 버퍼링된 메모리 프로토콜만을 지원할 수 있다(즉, GPIO 프로토콜 및 버퍼링된 메모리 프로토콜이 아님). 추가적으로, 일부 구현들에서, GPIO 상호접속 프로토콜은 요청 및 목적지 노드 식별자들과 같은 (예컨대, 그의 패킷들에서의) 그러한 정보를 라우팅하는 것을 지원하고 표시할 수 있다. 다른 한편으로, 버퍼링된 메모리 프로토콜은 라우팅을 이용하지 않는 점대점 인터페이스일 수 있다. 결과적으로, GPIO 프로토콜에서 사용되는 일부 필드들은 버퍼링된 메모리 인터페이스들을 이용하여 송신된 패킷들에서 생략될 수 있다. 대신에, 필드들은, 다른 예들 중에서도, 주소 디코드 정보 호스트를 버퍼에 운반하는데 있어서의 사용을 위해 지정될 수 있다.
추가의 구현들에서, 버퍼 디바이스들(1315a-l)은 더 크고, 더 느린 메모리(예컨대, 비휘발성 메모리)에 대한 캐시로서 기능하는 일정량의 고속 메모리(예컨대, DRAM)을 갖는 2 레벨 메모리 토폴로지를 지원할 수 있다. 하나의 그러한 구현에서, 버퍼 디바이스들(1315a-l) 중 하나 이상은, 다른 예들 중에서도, DDR을 가까운(near), 고속 메모리로서 사용할 수 있고, 트랜잭션 DDR DIMM을 더 큰 "먼(far)" 메모리로서 사용할 수 있다. 트랜잭션 DIMM들은 트랜잭션 명령들을 이용하여 휘발성 메모리 SIMM(single in-line memory module)에 통신하기 위한 프로토콜들(예컨대, DDR-T(DDR-Transactional))을 이용할 수 있다.
도 14를 참조하면, 간략화된 블록도(1400)가 제시되어 가까운 및 먼 메모리 모듈들(예컨대, 1405, 1410)에 접속된 버퍼 칩(1315)의 더 상세한 표현을 도시한다. 앞의 예에서 언급한 바와 같이, 버퍼 칩(1315)은 정의된 버퍼링된 메모리 프로토콜을 이용하여 버퍼링된 메모리 프로토콜 상호접속 링크(1415)를 통해 CPU 디바이스(1305)에 통신가능하게 결합될 수 있다. 버퍼 칩(1315)은 추가적인 기능들을 수행하는 논리를 포함할 수 있다. 예를 들어, 버퍼 칩(1315)의 구현은 메모리 제어기(1420), 스케줄러(1425), 흐름 제어 논리(1430), 및 오류 검출 논리(1435)를 포함할 수 있다. 논리는 하드웨어 회로, 펌웨어 및/또는 소프트웨어를 이용하여 구현될 수 있다.
일부 구현들에서, 메모리 제어기(1420)는 요청들을 그의 메모리 디바이스들의 메모리 특정적 프로토콜(예컨대, DDR4)로 변환하는 논리를 포함할 수 있다. 메모리 제어기(1420)는 링크(1415)를 이용하여 버퍼 칩(1315)과 통신하는 CPU(1305)(또는 또 다른 호스트)의 호스트 제어기 논리(1440)로부터 이러한 메모리 특정적 프로토콜들의 상세를 추출할 수 있다. 호스트 제어기 논리(1440)는, 다른 기능 중에서도, 채널들 및 소켓들에 걸친 치환을 포함하, CPU(또는 호스트) 주소들을 메모리 주소들로 변환할 수 있다. 스케줄러(1425)는 더 높은 성능을 달성하기 위해 요청들에 대한 응답들을 재순서화 및 중재하는(reorder and arbitrate) 논리를 포함할 수 있다. 버퍼 칩(1315)은 흐름 제어 및 오류 검출과 같은 특징들을 추가적으로 제공할 수 있다. 일부 구현들에서, 흐름 제어 논리(1430)는 스케줄러(1425) 내에서 구체화되거나 또는 다른 방식으로 스케줄러(1425)와 연동하여 버퍼 칩(1315)의 더 나은 효율성 및 더 높은 성능을 보장할 수 있다. 오류 검출 논리(1440)는 오류 정정 코드 검출 방식을 지원하는 논리뿐만 아니라 검출된 오류들의 정정 또는 처리를 개시하는 논리를 포함할 수 있다.
전술한 바와 같이, 버퍼링된 메모리 프로토콜의 링크 계층은 GPIO 프로토콜의 링크 계층에 기초할 수 있다. 예를 들어, 192-비트, 3-슬롯 플리트의 HPI 프로토콜(예컨대, 도 10에서 기술 및 도시된)이 버퍼링된 메모리 프로토콜에서 이용될 수 있다. 버퍼링된 메모리 프로토콜 내의 패킷은 전체 명령을 구체화할 수 있다. 패킷은 하나 이상의 플리트들로서 구현될 수 있다. 도 15a-15c는 버퍼링된 메모리 프로토콜에서의 플리트의 구현을 나타낼 수 있다. 일부 구현들에서, 판독 데이터는 헤더가 있는(headered) 및 헤더가 없는(headerless) 메모리 데이터(MemData) 패킷들의 조합을 통해 버퍼 디바이스로부터 호스트로 다시 송신될 수 있다. 전체 캐시 라인은 (헤더가 있는 플리트들의 경우 5개이지만) 3개의 헤더가 없는 플리트들에서 이송 수 있다. 그에 의해 헤더가 없는 패킷은 인터페이스의 가장 제약된 부분일 수 있는 것에 더 높은 처리율을 제공할 수 있다. 3개의 플리트에 맞추기 위해, 헤더가 없는 패킷은 다수의 필드들을 제거하고 그들의 값들에 관해 가정한다. 실시된 가정은 대부분 참일 것이나, 모든 판독 리턴이 참인 것은 아니다. 임의의 가정이 참이 아닌 경우, 모든 필드들을 포함하는, 헤더가 있는 패킷이 사용될 것이다. 일부 구현들에서, 헤더가 있는 패킷은, 판독 리턴을 트랜잭션 버퍼링된 메모리 프로토콜에서의 판독 요청에 맵핑하는데 사용하기 위한 추적기 식별자(예컨대, HTID, RTID 등)의 초기의 식별을 허용하기 위해 판독 리턴의 시퀀스를 시작할 수 있다.
일부 구현들에서, 헤더가 없는 패킷들은 표 1에 요약된 정보를 포함할 수 있다.
필드 Qty 기술
데이터 512 64 바이트 캐시 라인 데이터
디렉토리 2 일반적으로 ECC 비트들의 일부로서, 데이터와 함께 저장된 2개의 디렉토리 비트들
HTID 11 요청 트랜잭션 ID. 초기의 HTID로 인해, 패킷은 다음 판독 데이터 패킷에 대한 HTID를 포함한다.
CRC 48 플리트당 16비트의 CRC
HIB 3 헤더 표시 비트. 플리트당 하나. 이 비트는 헤더가 없는 패킷들의 각각의 플리트에 대해 항상 0이다.
표 1: 헤더가 없는 패킷 필드들
또한, 도 15a-15c는 판독 리턴에서 전체 캐시 라인을 전송하는데 사용될 수 있는 3개의 플리트들(예컨대, 플리트 0(도 15a에서), 플리트 1(도 15b에서), 및 플리트 2(도 15c에서))의 시퀀스를 예시한다. 표 2는 헤더가 없는 패킷에서 이용되는 3개의 플리트의 예에 대한 요약을 제공한다.
플리트 콘텐츠
데이터 플리트 0 캐시 라인의 처음 32 바이트로부터의 데이터
데이터 플리트 1 처음 32 바이트의 나머지 + 두 번째 32 바이트의 처음 부분
데이터 플리트 2 두 번째 32 바이트의 나머지
표 2: 헤더가 없는 패킷
HIB 비트는 패킷이 헤더가 있는 것인지 또는 헤더가 없는 것인지를 표시하도록 설정될 수 있다. HIB는 헤더 플리트에 이은 데이터 플리트들에 대해서만 헤더가 없는 패킷을 표시하도록 설정될 수 있다. 이것은 소정의 다른 패킷들이 패킷의 중간에 인터리브되는 것을 허용한다. 인터리브된 패킷이 완료되는 경우, 원래의 헤더가 있는 패킷의 데이터 부분들은 플리트들에서 HIB=0으로 송신될 수 있다. 이 기법은 또한 널(null) 플리트들을 삽입함으로써 데이터 패킷들을 지연시키는데 사용될 수 있다. 일부 구현들에서, 헤더가 없는 패킷의 시작은, 정상적으로 헤더가 요구되는 경우 0인 HIB 비트에 의해 시그널링된다. 널 플리트들을 포함하여 모든 다른 패킷들은 HIB 비트 세트를 갖는 헤더를 포함할 수 있다.
앞에서 소개한 바와 같이, 헤더가 있는 패킷들은 총 다섯 개의 플리트 길이일 수 있고, 1개의 헤더 플리트와 4개의 데이터 플리트들을 포함할 수 있다. 유휴 레이턴시(idle latency)를 감소시키기 위해, 헤더가 있는 플리트는 데이터 플리트 1을 두번 송신할 수 있다. 처음에는, 처음 32 바이트로부터의 데이터만으로 송신되며, 플리트 1a로서 지칭된다. 이것은 데이터의 두 번째 32 바이트가 메모리 디바이스들로부터 이용가능하기 이전에 플리트가 송신되는 것을 허용한다. 결과적으로, 유휴 경우에 대해, 데이터의 중요한 32 바이트 청크가 더 일찍 호스트에 도달한다. 그 다음, 플리트 1이 두 번째 송신될 수 있고, 이번은 완료된다. 이것은 처음 32 바이트 데이터 부분 +(plus) 두 번째 32 바이트 부분의 반복을 포함할 것이다. 표 3은 헤더가 있는 패킷의 5개의 플리트들을 설명한다.
플리트 콘텐츠
헤더 패킷 헤더
데이터 플리트 0 캐시 라인의 처음 32 바이트로부터의 데이터
데이터 플리트 1a 단지 처음 32 바이트의 나머지만. 두 번째 32 바이트 부분이 예비된다. 다른 플리트 페이로드 비트들(RTID[6:3])은 데이터 플리트 1과 동일하다.
데이터 플리트 1 플리트 1을 완료. 처음 32 바이트 부분이 재송신된다. 두 번째 32 바이트 부분이 또한 포함된다.
데이터 플리트 2 두 번째 32 바이트의 나머지.
표 3: 헤더가 있는 패킷
일부 구현들에서, 헤더가 있는 MemData 패킷들은 취소될 수 없고 데이터 플리트들이 후속될 것이다. 헤더는, 데이터가 또한 전송될 수 있다는 것이 알려질 때까지 송신되지 않을 것이다. 헤더가 송신되기 이전에 전체 캐시 라인은 버퍼에 축적되지 않을 수 있다.
시스템들은 레이턴시에 특히 민감할 수 있다. 메모리 레이턴시는 CPU 성능에 중요할 수 있다. 트랜잭션 버퍼링된 메모리 인터페이스들을 이용하는 구현들에서, 추가적인 CPU 레이턴시는 버퍼 디바이스의 트랜잭션 응답에서의 트랜잭션의 (HTID와 같은) 추적기 식별자(ID)를 식별하는 것 그리고 그 응답을 대응하는 트랜잭션 요청에 매칭하는 것에 전용일 수 있다. 일부 구현들에서, 레이턴시는 버퍼 디바이스가, 판독 리턴과 같은, 곧 있을(upcoming) 응답에 대한 추적기 식별자를 사전-송신하게 함으로써 감소되어 CPU가 추적기 식별자를 사전-처리하고 대응하는 응답의 도착을 예측하게 할 수 있다. 또한, 현재 응답 전송들을 중단하기보다는, 현재의 응답 내에 추적기 ID를 내장함으로써 곧 있을 응답에 대한 추적기 ID가 사전-송신될 수 있다. 사실상, 초기의 판독 식별자 패킷을 송신하기 위해 더 이른 판독에 대한 데이터 송신을 중단하는 것은 링크의 대역폭을 감소시킬 것이다. 이미 전송중인 판독을 위한 데이터에 곧 있을 판독에 대한 추적기 ID를 내장함으로써, 고 대역폭, 저 레이턴시 데이터 버스를 구현하는 것을 도울 수 있다.
도 16을 참조하면, 버퍼 디바이스(1315)와 CPU(1305) 사이의 예시적인 통신의 표현(1600)이 예시되어 있다. 버퍼 디바이스(1315)에 접속된 메모리 디바이스들로부터 데이터를 획득하기 위해서 CPU(1305)로부터 버퍼 디바이스(1315)로 다수의 판독 요청(예컨대, 요청 1, 2 및 3)이 송신될 수 있다. 버퍼 디바이스(1315) 및 CPU(1305)는 트랜잭션 인지형일 수 있어, 버퍼 디바이스(1315)가 잠재적으로 판독 응답들(예컨대, 응답 1, 2 및 3)을 비순차로 리턴하는 것을 허용하는데, 여기서 응답은 전적으로 결정론적 프로토콜보다는 버퍼링된 메모리 인터페이스의 성능을 개선하기 위한 알고리즘들에 기초하여 정렬된다. 각각의 판독 요청은 추적기 식별자를 포함할 수 있고, 버퍼는 어느 응답들이 어느 요청들에 대응하는지를 CPU가 결정할 수 있도록 응답들을 태깅할 수 있다. 예를 들어, 도 16의 예에서, 판독 요청 2는 판독 요청 1 직후에 버퍼 디바이스(1315)로 송신되지만, 버퍼 디바이스(1315)는 판독 요청 1에 대한 응답(즉, 판독 응답 1)을 리턴하기 이전에 판독 요청 2에 대한 응답(즉, 판독 응답 2)을 리턴한다. CPU는 응답들에 포함된 추적기 식별자에 기초하여 어느 응답들이 어느 요청들에 관련되는지를 식별할 수 있다. 일부 구현들에서, 추적기 식별자는 CPU에 데이터를 전송하는데 이용되는 플리트의 필드(예컨대, HTID, RHTID, RTID 필드 등)에 구현될 수 있다.
도 17을 참조하면, 초기의 트랜잭션 식별의 예가 도시되어 있다. 이 예에서, CPU(1305)는 다시 일련의 3개의 판독 요청(판독 요청 1, 2 및 3)을 송신한다. 일부 경우에, 3개의 판독 요청은 완전히 별개의 트랜잭션에 관련될 수 있다. 다른 경우에, 2개 이상의 판독 요청이 관련될(예컨대, CPU와 다른 호스트 사이의 공통 트랜잭션(common transaction) 등에 관련될) 수 있다. 도 17의 예에서, 버퍼 디바이스(1315)는 요청들에 대한 응답들을 비순차로 리턴하는 것이 최상이라고 다시 결정할 수 있는데, 여기서 요청 2에 대한 응답이 요청 1에 대한 응답보다 먼저 리턴된다. 이 경우, 버퍼 디바이스(1315)는 판독 응답 2에 대한 초기의 추적기 ID를 송신할 수 없는데, 그 이유는 판독 응답 2 직전에 버퍼링된 메모리 링크를 통한 버퍼 디바이스(1315)로부터 CPU(1305)로의 어떠한 통신도 없기 때문이다. 그러나, 이 경우, 버퍼 디바이스(1315)는 판독 응답 2를 송신하기 이전에 판독 응답 1이 판독 응답 2에 후속한다고 식별할 수 있다. 추가적으로, 버퍼 디바이스(1315)는 단지 판독 요청 2에 대한 추적기 ID를 판독 응답 2에 내장할 수 없지만, 버퍼 디바이스(1315)는 CPU가 판독 응답 1의 도착에 앞서 전처리 단계들을 수행하는 것을 허용하기 위해서 판독 요청 1에 대한 응답(즉, 판독 응답 1)을 위한 추적기 ID의 초기의 식별을 제공하도록 판독 응답 2의 (예컨대, 메모리 데이터 플리트의) 다른 필드를 추가로 인코딩할 수 있다. 또한, 이 예에서, 버퍼 디바이스(1315)는, 판독 응답 2를 송신하기 이전에, 판독 응답 3이 판독 응답 2 다음에 송신된다고 또한 식별할 수 있다. 따라서, 버퍼 디바이스(1315)는 판독 응답 2 내에 판독 응답 3에 대한 추적기 ID의 초기의 식별을 내장하여, CPU가 판독 응답 3의 도착에 앞서 전처리 단계들을 수행하는 것을 허용할 수 있다. 예를 들어, CPU는 판독 데이터의 도착에 앞서 요청자에게 데이터를 송신하는데 필요한 라우팅 정보를 검색하였을 수 있다.
초기의 추적기 ID를 송신하는 것은 수신 CPU(또는 다른 호스트)의 호스트 제어기가 어느 판독이 리턴되고 있는지의 고급 지식(advanced knowledge)을 얻는 것을 허용할 수 있다. 결정론적 인터페이스를 이용하는 종래의 메모리 시스템들에서, 언제 판독 데이터가 리턴될 것인지의 고급 지식이 존재한다. 따라서, 이러한 시스템에서, 호스트는 이러한 고급 지식을 이용하여 레이턴시를 감소시킬 수 있다. 트랜잭션 버퍼링된 메모리 인터페이스는 (예컨대, 버퍼 디바이스 내에 스케줄러를 제공함으로써) 판독 데이터가 비순차로 리턴되는 것을 허용하므로, 호스트 제어기가 이러한 고급 지식을 분실할 것이라는 위험이 존재한다.
도 17의 예를 계속하면, 버퍼 디바이스(1315)로부터 CPU(1305)로 판독 응답 3이 송신된 이후에, 버퍼 디바이스(1315)에서 CPU(1305)로부터 판독 요청 4가 수신된다. 또한, 버퍼 디바이스(1315)에 의한 스케줄링에 대해 경쟁하는 어떠한 다른 요청들도 CPU(1305)로부터 수신되지 않을 수 있고, 이는 버퍼 디바이스가 그것의 다음 응답으로서 판독 요청 4에 대한 응답(즉, 판독 응답 4)을 송신할 수 있다고 결정하는 것을 허용한다. 버퍼 디바이스(1315)는, 판독 응답 4에 대한 초기의 추적기 ID를 송신할 기회가 존재하지 않는다고 또한 결정할 수 있는데, 그 이유는 이 응답이 내장될 수 있는 어떠한 다른 응답들도 존재하지 않기 때문이다. 다른 구현들에서, 버퍼 디바이스(1315)는, 다른 구현들 중에서, 판독 응답 4의 송신에 앞서(그리고 일부 경우에는 버퍼 디바이스(1315)가 판독 응답 4를 준비하는 동안) 판독 응답 4의 추적기 ID를 사전 식별하도록 버퍼 디바이스가 제어 플리트 또는 다른 플리트를 CPU(1305)에 송신하는 것을 허용하기 위해 버퍼 디바이스(1315)를 CPU(1305)에 접속하는 버퍼링된 메모리 링크 상에 대역폭이 존재한다고 결정할 수 있다. 또한, 송신할 판독 응답 4를 준비할 때에 버퍼 디바이스(1315)에 의해 펜딩 중인 것으로서 어떠한 다른 응답들도 식별되지 않으므로, 어떠한 초기의 추적기 ID도 판독 응답 4와 함께 송신되지 않을 수 있다.
하나의 예시적인 구현에서, 헤더가 없는 MemData 패킷들 및 헤더가 있는 MemData 패킷들의 데이터 부분은 다음 헤더가 없는 패킷의 추적기 ID를 포함하도록 인코딩될 수 있다. 예를 들어, 판독들의 시퀀스는 헤더가 있는 패킷으로 시작될 수 있다. 이러한 제1 헤더가 있는 패킷은 그 자신의 추적기 ID를 포함할 수 있다. 일 구현에서, 제1 헤더가 있는 패킷의 추적기 ID는 그것의 대응하는 헤더 플리트에 인코딩될 수 있다. 다른 패킷들의 시퀀스가 이러한 제1 패킷에 후속할 수 있고, 이러한 제1 패킷의 데이터 플리트들은 시퀀스에서 제1 패킷에 후속하는 다음 패킷의 추적기 ID와 함께 인코딩될 수 있다. 일부 경우에, 다른 패킷들은 추적기 ID들의 체인을 깨뜨리지 않고 헤더가 없는 패킷들 사이에 삽입될 수 있는데, 여기서 또 다른 헤더가 있는 MemData 패킷만이 (예컨대, 새로운 제1 패킷 추적기 ID를 표시함으로써) 체인을 깨뜨릴 수 있다. 버퍼 디바이스가 다음 헤더가 없는 데이터 패킷에 대한 추적기 ID를 알지 못하는 경우(예컨대, 패킷이 버퍼 디바이스에 의해 아직 수신되거나 처리되지 않은 경우), 버퍼 디바이스는 다음 패킷의 추적기 ID로서 더미, 널 또는 다른 등가의 값을 삽입할 수 있다. 이것은 다음 시퀀스에서의 제1 헤더가 있는 패킷으로서 버퍼 디바이스에 의해 다음 메모리 판독 패킷이 송신되는 것을 트리거할 수 있다. 추가적으로, 헤더가 없는 패킷에서 추적기 ID를 송신한 이후에, 버퍼 디바이스가 그 특정 데이터를 송신할 수 없다고 결정하는 경우, 버퍼 디바이스는 단순히 다음 MemData 패킷으로서 헤더가 있는 패킷을 송신할 수 있다. 호스트 디바이스(예컨대, CPU(1305))에 의해 버퍼 디바이스(예컨대, 1315)로부터 추적기 ID를 수신하는 것은, 다른 예들 및 구현들 중에서, 이러한 데이터가 다음에 도착할 것임을 보증하지 않을 수 있다(예컨대, 헤더가 있는 MemData 패킷에 의해 선취될(pre-empted) 수 있기 때문임).
표 4는 적어도 5가지의 트랜잭션(즉, 트랜잭션 A, B, C, X, Y)에 대응하는 플리트들의 시퀀스를 예시하며, 곧 있을 판독 리턴의 추적기 ID의 초기의 식별을 호스트에 송신하기 위해 추적기 ID 필드가 이용될 수 있는 방법을 또한 예시한다.
플리트 명령 TID 주석
0 헤더 A A HTID를 갖는 MemData 헤더가 시퀀스를 시작한다.
1 데이터0 A B A에 대한 데이터. 이 데이터는 기술적으로 헤더 A 패킷과 동반하지만, 헤더가 없는 패킷과 정확히 동일한 포맷이다.
2 데이터1a A -- A에 대한 제2 데이터 플리트, 제1 절반 캐시 라인 부분만
3 데이터1 A -- A에 대한 제2 데이터 플리트, 완료
4 데이터2 A -- A에 대한 제3 데이터 플리트
5 데이터0 B C 헤더가 없는 패킷으로서 송신되는 B에 대한 데이터. HTID는 데이터 C에 대한 것이다.
6 데이터1 B -- B에 대한 제2 데이터 플리트
7 데이터2 B -- B에 대한 제3 데이터 플리트
8 기입 완료 -- 또는 임의의 다른 비판독 명령. 다른 명령들은 초기의 HTID 체인을 취소하지 않는다.
9 데이터0 C 더미 어떠한 추가 판독 데이터도 TMXB에서 이용가능하지 않으므로, 더미 HTID가 송신된다.
10 데이터1 C -- C에 대한 제2 데이터 플리트
11 데이터2 C -- C에 대한 제3 데이터 플리트
12-49 다수의 플리트(판독 데이터 없음) --
50 헤더 X X X의 HTID를 갖는 새로운 헤더가 있는 패킷
51 데이터0 X Y 헤더가 없는 패킷으로서 송신되는 X에 대한 데이터. HTID는 데이터 Y에 대한 것임.
52 데이터1a X -- X에 대한 제2 데이터 플리트, 제1 절반 캐시 라인 부분만
53 데이터1 X -- X에 대한 제2 데이터 플리트, 완료
54 데이터2 X -- X에 대한 제3 데이터 플릿
55 데이터0 Y 더미 어떠한 추가 판독 데이터도 TMXB에서 이용가능하지 않으므로, 더미 HTID가 송신됨.
56 데이터1 Y -- Y에 대한 제2 데이터 플리트
57 데이터2 Y -- Y에 대한 제3 데이터 플리트
58-on 다수의 플리트(판독 데이터 없음) --
표 4: 플리트들의 시퀀스에서의 초기의 추적기 ID들
표 4의 예에서, 데이터의 제1 플리트에서 추적기 ID(TID)가 제시된다(그러나, 이것은 실제로 동일한 패킷의 모든 3개 또는 4개의 플리트에 걸쳐 실제 확산될 수 있다). 예를 들어, 트랜잭션 A에 대한 판독 리턴의 헤더 플리트(헤더 A)는 트랜잭션 A에 대한 TID를 포함한다. 트랜잭션 A에 대한 판독 리턴 직후에 트랜잭션 B에 대한 판독 리턴이 후속함에 따라, 트랜잭션 B에 대한 초기의 TID를 송신할 기회가 식별될 수 있다. 따라서, 표 4의 예에 제시된 바와 같이, 트랜잭션 A의 데이터 플리트 Data0 A는 트랜잭션 B에 대한 TID와 함께 인코딩될 수 있다. 마찬가지로, 트랜잭션 C에 대한 곧 있을 판독 리턴을 위한 TID의 초기의 표시를 제공하도록 트랜잭션 B의 판독 리턴의 데이터 플리트(예컨대, 플리트 Data0 B)이 인코딩될 수 있다.
표 4의 예를 계속하면, 트랜잭션 C에 대한 판독 리턴을 송신하기 이전에, 버퍼 디바이스는, 트랜잭션 C의 판독 리턴과 함께 초기의 TID를 송신할 기회가 존재하지 않는다고 결정할 수 있다. 실제로, 플리트들 12 내지 49는 어떠한 판독 데이터도 포함하지 않는다. 따라서, 트랜잭션 C의 판독 리턴과 함께 초기의 TID를 송신하는 대신에, 초기의 TID들이 인코딩되는 필드가 무시되어야 함을 표시하기 위해서 데이터 플리트(예컨대, 플리트 Data0 C)의 필드에 더미 데이터가 인코딩될 수 있다.
위에서 언급된 바와 같이, 비판독 동작들은 후속 판독 리턴에 대한 초기의 TID 통지와 간섭하지 않으면서 일련의 판독 리턴들을 중단할 수 있다. 예를 들어, 표 4의 예에 제시된 바와 같이, 플리트 5(Data0 B)는 판독 리턴 C에 대한 초기의 TID와 함께 인코딩되지만, 트랜잭션 B에 대한 판독 리턴과 트랜잭션 C에 대한 판독 리턴 사이에 중간 기입 완료 플리트(플리트 8)이 송신된다. 그러나, 기입 완료 플리트는, 다른 특징들 중에서, (예컨대, 플리트 Data0 B에서) 최종 송신된 초기의 TID에 대응하는 다음 판독 리턴(예컨대, 판독 리턴 C)에 매핑하는 CPU의 능력과 간섭하지 않는다. 다른 예로서, 이미 송신된 TID에 대한 데이터가 송신될 수 없도록 오류 조건이 생기는 경우, 이송이 (예컨대, 암시적으로 또는 명시적으로) 취소될 수 있다. 헤더가 있는 MemData 패킷이 송신될 때, 이전의 TID는, 다른 예들 중에서, (예컨대, ECC 오류 등과 같은 오류를 처리하도록) 취소될 수 있다.
이전에 제시된 바와 같은 초기의 추적기 ID 식별 솔루션의 특징들을 증대시키거나 대체하기 위해 대안적인 메커니즘들이 이용될 수 있다. 예를 들어, 곧 있을 판독 응답들의 추적기 ID들이 송신될 수 있는 전용 와이어링(예컨대, 측파대 와이어링)이 버퍼 디바이스(예컨대, 1315)와 대응하는 호스트(예컨대, CPU(1305)) 사이에 제공될 수 있다. 그러나, 이러한 측파대 채널들은, 초기의 추적기 ID 식별이 또 다른 판독 요청의 판독 리턴이 내장되어 대역내 송신되는 구현들에서는 불필요할 수 있다.
트랜잭션 버퍼링된 메모리 인터페이스의 하나의 예에서, 버퍼 디바이스(예컨대, 1315)의 메모리 제어기는 정확히 대응하는 메모리로부터 데이터가 리턴될 때에 판독이 스케줄링되는 시점을 알 수 있다. 결과적으로, 버퍼 디바이스는, 판독 데이터에 대한 헤더의 초기의 조립을 허용하기 위해서 판독 데이터가 도착하기 전에 CPU의 시스템 에이전트에 표시를 송신하는 것을 포함하여, 판독 데이터의 도착에 대해 준비하는 것에 의해 판독 레이턴시를 최소화하려고 시도함으로써 성능을 최적화할 수 있다. 이것은 레이턴시를 최소화할 수 있는데, 그 이유는 판독 데이터가 도착하자마자 포워드될 수 있기 때문이다. 이것은, 버퍼 디바이스의 호스트에 응답들의 추적기 ID들의 초기의 식별을 송신하기 위한 기능과 결합하여, 다른 예시적인 이점들 중에서, 레이턴시를 감소시킴으로써 시스템의 성능 및 효율을 개선할 수 있다.
HPI 및 연관되는 버퍼링된 메모리 액세스 프로토콜은, 다른 예들 중에서, 메인프레임, 서버 시스템, 개인용 컴퓨터, 모바일 컴퓨터(이를테면, 태블릿, 스마트폰, 개인용 디지털 시스템 등), 스마트 어플라이언스, 게이밍 또는 엔터테인먼트 콘솔 및 셋톱 박스를 비롯한 임의의 다양한 컴퓨팅 디바이스 및 시스템에 통합될 수 있다. 예를 들어, 도 18을 참조하면, 본 발명의 실시예에 따른 제2 시스템(1800)의 블록도가 도시되어 있다. 도 18에 도시된 바와 같이, 멀티프로세서 시스템(1800)은 점대점 상호접속 시스템이며, 점대점 상호접속(1850)을 통해 결합되는 제1 프로세서(1870)와 제2 프로세서(1880)를 포함한다. 프로세서들(1870 및 1880) 각각은 프로세서의 일부 버전일 수 있다. 일 실시예에서, 1852 및 1854는 고성능 아키텍처와 같은 직렬 점대점 일관성 상호접속 패브릭의 일부이다. 결과적으로, 본 발명은 QPI 아키텍처 내에 구현될 수 있다.
단지 2개의 프로세서들(1870, 1880)을 갖는 것으로 도시되지만, 본 발명의 범위는 이에 한정되지 않는다는 것이 이해되어야 한다. 다른 실시예들에서는, 하나 이상의 추가적인 프로세서들이 주어진 프로세서에 존재할 수도 있다. 프로세서들(1870 및 1880)은 통합된 메모리 제어기 유닛(1872 및 1882)을 각각 포함하는 것으로 도시되어 있다. 프로세서(1870)는 또한 자신의 버스 컨트롤러 유닛들의 일부로서 P-P(Point-to-Point) 인터페이스들(1876, 1878)을 포함하고; 유사하게, 제2 프로세서(1880)는 P-P 인터페이스들(1886, 1888)을 포함한다. 프로세서들(1870, 1880)은 P-P 인터페이스 회로들(1878, 1888)을 사용하는 P-P(Point-to-Point) 인터페이스(1850)를 통해 정보를 교환할 수 있다. 도 18에 도시된 바와 같이, IMC들(1872 및 1882)은 프로세서들을 각각의 메모리, 즉 메모리(1832) 및 메모리(1834)에 결합하며, 이는 각 프로세서들에 로컬로 부속되는 메인 메모리의 일부들일 수 있다.
프로세서들(1870, 1880) 각각은 점대점 인터페이스 회로들(1876, 1894, 1886, 1898)을 사용하여 개별적 P-P 인터페이스들(1852, 1854)을 통해 칩셋(1890)과 정보를 교환한다. 칩셋(1890)은 또한 고성능 그래픽 상호접속(1839)를 따라 인터페이스 회로(1892) 통해 고성능 그래픽 회로(1838)와 정보를 교환한다.
공유 캐시(도시 생략)가 어느 한 프로세서 내에 또는 양쪽 프로세서들의 외부에 포함되어 있을 수 있지만, P-P 상호접속을 통해 프로세서들과 접속되어 있을 수 있으며, 따라서 프로세서가 저전력 모드에 있는 경우, 어느 한 프로세서 또는 양쪽 프로세서들의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(1890)은 인터페이스(1896)를 통해 제1 버스(1816)에 결합될 수 있다. 일 실시예에서, 제1 버스(1816)는 PCI(Peripheral Component Interconnect) 버스일 수 있거나, 또는 PCI Express 버스 또는 또 다른 제3세대 I/O 상호접속 버스와 같은 버스일 수 있지만, 본 발명의 범위는 이것들에만 제한되지는 않는다.
도 18에 도시된 바와 같이, 제1 버스(1816)를 제2 버스(1820)에 결합시키는 버스 브리지(1818)와 함께, 다양한 I/O 디바이스들(1814)이 제1 버스(1816)에 결합되어 있다. 일 실시예에서, 제2 버스(1820)는 LPC(low pin count) 버스일 수 있다. 예를 들어, 키보드 및/또는 마우스(1822), 통신 디바이스들(1827), 및 일 실시예에서 명령어들/코드 및 데이터(1830)를 종종 포함하는 디스크 드라이브 또는 기타 대용량 스토리지 디바이스와 같은 스토리지 유닛(1828)을 포함하는 다양한 디바이스들이 제2 버스(1820)에 결합될 수 있다. 또한, 오디오 I/O(1824)가 제2 버스(1820)에 결합되는 것으로 도시된다. 유의할 점은, 포함된 구성요소들 및 상호접속 아키텍처들이 달라지는 다른 아키텍처들이 가능하다는 것이다. 예를 들어, 도 18의 점대점 아키텍처 대신에, 시스템은 다중-드롭 버스(multi-drop bus) 또는 기타의 이러한 아키텍처를 구현할 수도 있다.
본 발명은 제한된 수의 실시예들에 대하여 설명되었지만, 관련 기술분야의 통상의 기술자라면 그것으로부터의 다수의 수정 및 변형들을 인식할 것이다. 첨부된 청구항들은 이러한 본 발명의 진정한 사상 및 범위 내에 있는 이러한 모든 수정들 및 변형들을 커버하는 것으로 의도된다.
설계는 생성으로부터 시뮬레이션 내지 제조에 이르는 다양한 단계들을 통해 진행될 수 있다. 설계를 표현하는 데이터는 설계를 다수의 방식으로 표현할 수 있다. 먼저, 시뮬레이션에 유용한 것으로서, 하드웨어는 하드웨어 기술 언어 또는 또 다른 기능 기술 언어를 이용하여 표현될 수 있다. 추가적으로, 논리 및/또는 트랜지스터 게이트들을 갖는 회로 레벨 모델이 설계 프로세스의 일부 단계들에서 생성될 수 있다. 게다가, 대부분의 설계들은 일부 단계에서 하드웨어 모델 내의 다양한 디바이스들의 물리적 배치를 표현하는 데이터의 레벨에 도달한다. 전통적인 반도체 제조 기술들이 사용되는 경우, 하드웨어 모델을 표현하는 데이터는 집적 회로를 생성하는 데 사용되는 마스크들을 위한 상이한 마스크 계층들 상의 다양한 특징들의 존재 또는 부재를 지정하는 데이터일 수 있다. 설계의 임의의 표현에서, 데이터는 임의의 형태의 기계 판독가능 매체 내에 저장될 수 있다. 메모리 또는 디스크와 같은 자기 또는 광학 스토리지는 정보를 전송하도록 변조되거나 다른 방식으로 생성된 광 또는 전기 파를 통해 전송된 그러한 정보를 저장하기 위한 기계 판독가능 매체일 수 있다. 코드 또는 설계를 지시하거나 운반하는 전기 캐리어가 전송될 때, 전기 신호의 복사, 버퍼링 또는 재전송이 수행되는 경우, 새로운 사본이 형성된다. 따라서, 통신 제공자 또는 네트워크 제공자는, 본 발명의 실시예들의 기법들을 구체화하는, 반송파 내에 인코딩된 정보와 같은 아티클(article)을 유형의(tangible) 기계 판독가능 매체에 적어도 일시적으로 저장할 수 있다.
본 명세서에 사용된 바와 같은 모듈은 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합을 지칭한다. 예로서, 모듈은 마이크로-컨트롤러에 의해 실행되도록 적응된 코드를 저장하는 비일시적인 매체와 연관되는 마이크로-컨트롤러와 같은 하드웨어를 포함한다. 따라서, 일 실시예에서, 모듈에 대한 참조는 비일시적인 매체에 유지되는 코드를 인식 및/또는 실행하도록 특별히 구성되는 하드웨어를 지칭한다. 게다가, 또 다른 실시예에서, 모듈의 사용은 미리 결정된 동작들을 수행하기 위해 마이크로컨트롤러에 의해 실행되도록 특별히 적응되는 코드를 포함하는 비일시적인 매체를 지칭한다. 그리고, 추정될 수 있는 바와 같이, 또 다른 실시예에서, (이 예에서) 모듈이라는 용어는 마이크로컨트롤러와 비일시적 매체의 조합을 지칭할 수 있다. 종종, 분리된 것으로서 설명되는 모듈 경계들은 보통 변하며, 잠재적으로 중첩된다. 예를 들어, 제1 및 제2 모듈이 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합을 공유할 수 있지만, 잠재적으로는 일부 독립적인 하드웨어, 소프트웨어 또는 펌웨어를 보유할 수 있다. 일 실시예에서, 논리라는 용어의 사용은 하드웨어, 이를테면, 트랜지스터, 레지스터 또는 다른 하드웨어, 이를테면, 프로그램가능 논리 디바이스를 포함한다.
일 실시예에서, '~하도록 구성된(configured to)'이라는 문구의 사용은 지정되거나 결정된 작업을 수행하기 위해 장치, 하드웨어, 논리, 또는 요소를 배열하는 것(arranging), 조립하는 것(putting together), 제조하는 것(manufacturing), 팔기 위해 제안하는 것(offering to sell), 들여 오는 것(importing), 및/또는 설계하는 것을 지칭한다. 이러한 예에서, 동작중이지 않은 장치 또는 그의 요소는, 상기 지정된 작업을 수행하도록 설계, 결합, 및/또는 상호접속되는 경우, 여전히 지정된 작업을 수행'하도록 구성'되어 있다. 전적으로 예시적인 예로서, 논리 게이트는 동작 동안 0 또는 1를 제공할 수 있다. 그러나 인에이블 신호를 클록에 제공'하도록 구성된' 논리 게이트는 1 또는 0를 제공할 수 있는 모든 잠재적 논리 게이트를 포함하지는 않다. 그 대신에, 논리 게이트는, 동작 동안 1 또는 0 출력이 클록을 인에이블하는 일부 방식으로 결합된 것이다. 다시 한번 유의할 것은, '~하도록 구성된'이라는 용어의 사용은 동작을 요구하는 것이 아니라 대신 장치, 하드웨어, 및/또는 요소의 잠재 상태에 초점을 두는 것으로, 잠재 상태에서, 장치, 하드웨어, 및/또는 요소는 장치, 하드웨어 및/또는 요소가 동작중일 때 특정한 작업을 수행하도록 설계된다.
일 실시예에서, '~로(to)', '~하도록/를 할 수 있는(capable of/to)' 및/또는 '~하도록 동작가능한(operable to)'이라는 문구의 사용은 특정한 방식으로 장치, 논리, 하드웨어, 및/또는 요소의 사용을 인에이블하는 그러한 방식으로 설계된 일부 장치, 논리, 하드웨어, 및/또는 요소를 지칭한다. 위와 같이 유의할 점은, 일 실시예에서, '~로', '~하도록 할 수 있는' 또는 '~로 동작가능한'의 사용은 장치, 논리, 하드웨어, 및/또는 요소의 잠재 상태를 지칭하며, 장치, 논리 하드웨어, 및/또는 요소는 동작중이지 않지만, 특정 방식으로 장치의 사용을 인에이블하는 그러한 방식으로 설계되어 있다는 것이다.
본 명세서에서 사용되는 바와 같은, 값은 숫자, 상태, 논리 상태 또는 이진 논리 상태의 임의의 공지된 표현을 포함한다. 종종, 논리 레벨, 논리 값들, 또는 논리적인 값들의 사용은 또한, 단순히 2진 논리 상태를 나타내는 1들 및 0들로 지칭된다. 예를 들어, 1은 하이 논리 레벨을 지칭하고, 0은 로우 논리 레벨을 지칭한다. 일 실시예에서, 트랜지스터 또는 플래시 셀과 같은 스토리지 셀은 단일 논리적인 값 또는 다수의 논리적인 값을 유지할 수 있다. 그러나, 컴퓨터 시스템들에서는 값들의 다른 표현들이 사용되어 왔다. 예를 들어, 십진수 10은 이진 값 1010 및 16진법 문자 A로도 표현될 수 있다. 따라서, 값은 컴퓨터 시스템 내에 유지될 수 있는 정보의 임의 표현을 포함한다.
더욱이, 상태들은 값들 또는 값들의 부분들에 의해 표현될 수 있다. 일례로서, 논리 1과 같은 제1 값은 디폴트 또는 초기 상태를 표현할 수 있는 반면, 논리 0과 같은 제2 값은 논-디폴트 상태를 표현할 수 있다. 추가로, 일 실시예에서, 리셋(reset) 및 설정(set)이라는 용어는 각각 디폴트 및 갱신 값 또는 상태를 지칭한다. 예를 들어, 디폴트 값은 하이 논리적인 값, 즉, 리셋을 잠재적으로 포함하는 한편, 갱신된 값은 로우 논리적인 값, 즉, 설정을 잠재적으로 포함한다. 유의할 점은, 값들의 임의 조합이 임의의 수의 상태들을 표현하는 데 이용될 수 있다는 것이다.
전술한 방법들, 하드웨어, 소프트웨어, 펌웨어 또는 코드의 실시예들은 처리 요소에 의해 실행 가능한 기계 액세스 가능, 기계 판독가능, 컴퓨터 액세스 가능 또는 컴퓨터 판독가능 매체 상에 저장된 명령어들 또는 코드를 통해 구현될 수 있다. 비일시적인 기계 액세스가능/판독가능 매체는 컴퓨터 또는 전자 시스템과 같은, 기계에 의해 판독가능한 형태로 정보를 제공(즉, 저장 및/또는 전송)하는 임의의 메커니즘을 포함한다. 예를 들어, 비일시적인 기계 액세스가능 매체는 랜덤 액세스 메모리(RAM), 이를테면, 정적 RAM(SRAM) 또는 동적 RAM(DRAM); ROM; 자기 또는 광학 스토리지 매체; 플래시 메모리 디바이스; 전기 스토리지 디바이스; 광학 스토리지 디바이스; 음향 스토리지 디바이스; 그들로부터 정보를 수신할 수 있는 비일시적인 매체들과 구별되는, 일시적 (전파) 신호들(예컨대, 반송파, 적외선 신호, 디지털 신호)로부터 수신된 정보를 유지하기 위한 다른 형태의 스토리지 디바이스 등을 포함한다.
본 발명의 실시예들을 수행하는 논리를 프로그래밍하는데 이용되는 명령어들은 DRAM, 캐시, 플래시 메모리, 또는 기타 스토리지와 같은 시스템 내의 메모리에 저장될 수 있다. 또한, 이들 명령어들은 네트워크를 통해 또는 다른 컴퓨터 판독가능 매체에 의해 분산될 수 있다. 따라서, 기계 판독가능 매체는 기계(예컨대, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장하거나 전송하기 위한 임의의 메커니즘을 포함할 수 있지만, 플로피 디스켓, 광학 디스크, CD-ROM(Compact Disc, Read-Only Memory), 및 광자기 디스크, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), EPROM(Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광학 카드, 플래시 메모리, 또는 전기, 광학, 음향 또는 다른 형태의 전파 신호들(예컨대, 반송파들, 적외선 신호들, 디지털 신호들 등)을 통해 인터넷을 경유하여 정보를 전송하는데 이용되는 유형의 기계 판독가능 스토리지에 제한되지는 않는다. 따라서, 컴퓨터 판독가능 매체는, 기계(예컨대, 컴퓨터)에 의해 판독가능한 형태로 전자 명령어들 또는 정보를 저장하거나 전송하기에 적합한 임의의 타입의 유형의 기계 판독가능 매체(tangible machine-readable medium)를 포함한다.
하기 예들은 본 명세서에 따른 실시예들과 관련된다. 하나 이상 실시예들은, 트랜잭션 버퍼링된 메모리 인터페이스를 통해 호스트 디바이스로 송신될 판독 리턴들의 시퀀스를 식별하는, 장치, 시스템, 기계 판독가능 스토리지, 기계 판독가능 매체, 하드웨어- 및/또는 소프트웨어 기반 논리, 및 방법을 제공할 수 있고, 여기서 시퀀스는 적어도 제1 판독 요청에 대한 제1 판독 리턴 및 제2 판독 요청에 대한 제2 판독 리턴을 포함한다. 제2 판독 리턴의 추적기 식별자는 제1 판독 리턴에 인코딩될 수 있고, 제1 판독 리턴은 제2 판독 리턴의 추적기 식별자와 함께 호스트 디바이스로 송신될 수 있다. 제2 판독 리턴은 제1 판독 리턴이 송신된 후에 호스트 디바이스로 송신될 수 있다.
적어도 하나의 예에서, 인터페이스는 버퍼링된 메모리 링크 프로토콜을 준수하는 링크를 포함하는 것이다.
적어도 하나의 예에서, 버퍼링된 메모리 링크 프로토콜은 범용 입/출력(GPIO) 상호접속 프로토콜의 물리 계층과 링크 계층을 통합한다.
적어도 하나의 예에서, 메모리 버퍼 디바이스는 호스트 디바이스로부터의 판독 요청들의 시퀀스를 수신하는 것이고, 판독 요청들의 시퀀스는 판독 리턴들의 시퀀스에 대응한다.
적어도 하나의 예에서, 시퀀스에서 판독 리턴들 중 최종 판독 리턴은 초기의 트랜잭션 식별자에 대한 더미 값을 표시하도록 인코딩되는 것이다.
적어도 하나의 예에서, 제1 판독 리턴은 제1 판독 리턴의 추적기 식별자를 더 포함하는 것이다.
적어도 하나의 예에서, 제1 판독 리턴은 헤더가 있는 패킷(headered packet)을 포함하는 것이고, 제2 판독 리턴은 헤더가 없는 패킷(headerless packet)을 포함하는 것이다.
적어도 하나의 예에서, 제1 판독 리턴은 시퀀스에서 처음 판독 리턴인 제1 판독 리턴에 기초하여 헤더가 있는 패킷을 포함하는 것이고, 시퀀스에서 후속 판독 리턴들은 헤더가 없는 패킷들을 포함하는 것이다.
적어도 하나의 예에서, 헤더가 있는 패킷들 각각은 1개의 헤더 플리트 및 4개의 데이터 플리트를 포함하는 플리트들의 세트를 포함하고, 헤더가 없는 패킷들 각각은 3개의 데이터 플리트들의 세트를 포함한다.
적어도 하나의 예에서, 제2 판독 리턴의 추적기 식별자는 제1 판독 리턴의 제1 데이터 플리트에 인코딩되는 것이고, 제1 판독 리턴의 추적기 식별자는 제1 판독 리턴의 헤더 플리트에 인코딩되는 것이다.
적어도 하나의 예에서, 제1 판독 요청과 제1 판독 리턴은 제1 트랜잭션에 대응하고, 제2 판독 요청과 제2 판독 리턴은 제2 트랜잭션에 대응한다.
적어도 하나의 예에서, 시퀀스는 제3 판독 요청에 대응하는 제3 판독 리턴을 더 포함하고, 제2 판독 리턴은 제3 판독 리턴의 추적기 식별자와 함께 인코딩된 것이다.
하나 이상 실시예들은, 제1 트랜잭션의 제1 판독 요청을 버퍼 디바이스로 송신하고, 제2 트랜잭션의 제2 판독 요청을 버퍼 디바이스로 송신하고, 버퍼 디바이스로부터 제1 판독 리턴을 수신하는 장치, 시스템, 기계 판독가능 스토리지, 기계 판독가능 매체, 하드웨어- 및/또는 소프트웨어 기반 논리, 및 방법을 제공할 수 있다. 제1 판독 리턴은 제1 판독 리턴이 제1 판독 요청에 대응한다는 것을 표시하는 제1 추적기 식별자를 포함하는 것이고, 다음 판독 리턴이 제2 판독 요청에 대응한다는 것을 표시하는 초기의 제2 추적기 식별자를 더 포함하는 것이다.
적어도 하나의 예에서, 수신기는 버퍼 디바이스로부터 다음 판독 리턴을 더 수신하는 것이다.
적어도 하나의 예에서, 호스트 디바이스는 제1 추적기 식별자에 기초하여 제1 판독 리턴을 제1 판독 요청에 매핑하고 제2 판독 리턴을 제2 판독 요청에 매핑하는 호스트 제어기를 더 포함하는 것이다.
적어도 하나의 예에서, 호스트 디바이스는 중앙 처리 유닛을 포함한다.
하나 이상 실시예들은 제1 호스트 디바이스, 메모리 액세스 링크 프로토콜을 준수하는 버퍼링된 메모리 링크를 사용하여 제1 호스트 디바이스에 접속된 버퍼 디바이스, 버퍼 디바이스에 접속된 하나 이상의 메모리 디바이스, 및 GPIO(general purpose input/output) 링크 프로토콜을 준수하는 특정한 링크를 사용하여 제2 호스트 디바이스에 접속된 제2 호스트 디바이스를 포함하는 시스템을 제공할 수 있다. 버퍼 디바이스는 버퍼링된 메모리 링크를 통해 제1 호스트 디바이스로 송신될 판독 리턴들의 시퀀스를 식별하고, 제1 판독 리턴에 제2 판독 리턴의 추적기 식별자를 인코딩하고, 제2 판독 리턴의 추적기 식별자를 갖는 제1 판독 리턴을 제1 호스트 디바이스로 송신하고, 제1 판독 리턴이 송신된 후에 제2 판독 리턴을 제1 호스트 디바이스로 송신할 수 있다.
적어도 하나의 예에서, 호스트 디바이스는 또한 제1 및 제2 판독 리턴의 적어도 하나의 데이터를 특정한 링크를 통해 제2 호스트 디바이스로 포워드하는 것이다.
적어도 하나의 예에서, 메모리 액세스 링크 프로토콜은 GPIO 링크 프로토콜과 상이하고, GPIO 링크 프로토콜은 물리 계층과 링크 계층을 포함하고, 메모리 액세스 링크 프로토콜의 물리 계층은 GPIO 링크 프로토콜의 물리 계층에 기초하고, 메모리 액세스 링크 프로토콜의 링크 계층은 GPIO 링크 프로토콜의 링크 계층에 기초한다.
적어도 하나의 예에서, 제1 호스트 디바이스는 컴퓨팅 디바이스의 제1 CPU를 포함하고 제2 호스트 디바이스는 컴퓨팅 디바이스의 제2 CPU를 포함한다.
본 명세서 전체에 걸쳐 "일 실시예" 또는 "실시예"라는 언급은, 실시예와 관련하여 기술된 특정한 특징, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서, 본 명세서 전체에 걸쳐 다양한 곳에서의 "일 실시예에서" 또는 "실시예에서"라는 문구들의 출현들은 반드시 모두가 동일 실시예를 지칭하는 것은 아니다. 더욱이, 특정의 특징, 구조, 또는 특성은 하나 이상의 실시예들에서 임의의 적합한 방식으로 조합될 수 있다.
전술한 명세서에서는 특정 예시적 실시예들을 참조하여 상세한 설명이 제공되었다. 그러나, 첨부된 청구항들에서 개시된 바와 같은 본 발명의 더 넓은 사상 및 범주로부터 벗어남이 없이 그에 대한 다양한 수정 및 변경들이 행해질 수 있다는 것은 명백할 것이다. 따라서, 명세서와 도면들은 한정적 의미가 아니라 예시적 의미로서 간주되어야 한다. 더구나, 실시예 및 다른 예시적인 언어의 전술한 사용은 반드시 동일 실시예 또는 동일 예를 지칭하는 것은 아니며, 잠재적으로 동일한 실시예는 물론, 상이한 그리고 별개의 실시예들을 지칭할 수 있다.

Claims (20)

  1. 장치로서,
    메모리 버퍼 디바이스
    를 포함하고,
    상기 메모리 버퍼 디바이스는,
    인터페이스를 통해 호스트 디바이스로 송신될 판독 리턴(read return)들의 시퀀스를 식별하고 - 상기 인터페이스는 트랜잭션 버퍼링된 메모리 인터페이스를 포함하고, 상기 시퀀스는 적어도 제1 판독 요청에 대한 제1 판독 리턴 및 제2 판독 요청에 대한 제2 판독 리턴을 포함함 - ;
    상기 제1 판독 리턴에 상기 제2 판독 리턴의 추적기 식별자를 인코딩하고;
    상기 제2 판독 리턴의 상기 추적기 식별자를 갖는 상기 제1 판독 리턴을 상기 호스트 디바이스로 송신하고;
    상기 제1 판독 리턴이 송신된 후에 상기 제2 판독 리턴을 상기 호스트 디바이스로 송신하는 장치.
  2. 제1항에 있어서, 상기 인터페이스는 버퍼링된 메모리 링크 프로토콜을 준수하는 링크를 포함하는 장치.
  3. 제2항에 있어서, 상기 버퍼링된 메모리 링크 프로토콜은 GPIO(general purpose input/output) 상호접속 프로토콜의 물리 계층과 링크 계층을 포함시키는 장치.
  4. 제1항에 있어서, 상기 메모리 버퍼 디바이스는 상기 호스트 디바이스로부터 판독 요청들의 시퀀스를 수신하고, 상기 판독 요청들의 시퀀스는 상기 판독 리턴들의 시퀀스에 대응하는 장치.
  5. 제4항에 있어서, 상기 시퀀스에서 상기 판독 리턴들 중 최종 판독 리턴은 초기의 트랜잭션 식별자에 대한 더미 값을 표시하도록 인코딩되는 장치.
  6. 제1항에 있어서, 상기 제1 판독 리턴은 상기 제1 판독 리턴의 추적기 식별자를 더 포함하는 장치.
  7. 제6항에 있어서, 상기 제1 판독 리턴은 헤더가 있는 패킷(headered packet)을 포함하고, 상기 제2 판독 리턴은 헤더가 없는 패킷(headerless packet)을 포함하는 장치.
  8. 제7항에 있어서, 상기 제1 판독 리턴은 상기 시퀀스에서 첫 번째 판독 리턴인 상기 제1 판독 리턴에 기초하는 상기 헤더가 있는 패킷을 포함하고, 상기 시퀀스에서 후속 판독 리턴들은 헤더가 없는 패킷들을 포함하는 장치.
  9. 제7항에 있어서, 헤더가 있는 패킷들 각각은 1개의 헤더 플리트(flit)와 4개의 데이터 플리트를 포함하는 플리트들의 세트를 포함하고, 헤더가 없는 패킷들 각각은 3개의 데이터 플리트의 세트를 포함하는 장치.
  10. 제7항에 있어서, 상기 제2 판독 리턴의 상기 추적기 식별자는 상기 제1 판독 리턴의 제1 데이터 플리트에 인코딩되고, 상기 제1 판독 리턴의 상기 추적기 식별자는 상기 제1 판독 리턴의 상기 헤더 플리트에 인코딩되는 장치.
  11. 제1항에 있어서, 상기 제1 판독 요청과 제1 판독 리턴은 제1 트랜잭션에 대응하고, 상기 제2 판독 요청과 제2 판독 리턴은 제2 트랜잭션에 대응하는 장치.
  12. 제1항에 있어서, 상기 시퀀스는 제3 판독 요청에 대응하는 제3 판독 리턴을 더 포함하고, 상기 제2 판독 리턴은 상기 제3 판독 리턴의 추적기 식별자와 함께 인코딩되는 장치.
  13. 장치로서,
    호스트 디바이스
    를 포함하고,
    상기 호스트 디바이스는,
    송신기 - 상기 송신기는 버퍼 디바이스에 제1 트랜잭션의 제1 판독 요청을 송신하고, 상기 버퍼 디바이스에 제2 트랜잭션의 제2 판독 요청을 송신함 - ; 및
    상기 버퍼 디바이스로부터 제1 판독 리턴을 수신하는 수신기 - 상기 제1 판독 리턴은, 상기 제1 판독 리턴이 상기 제1 판독 요청에 대응한다는 것을 표시하는 제1 추적기 식별자를 포함하고, 다음 판독 리턴이 상기 제2 판독 요청에 대응한다는 것을 표시하는 초기의 제2 추적기 식별자를 더 포함함 -
    를 포함하는 장치.
  14. 제13항에 있어서, 상기 수신기는 또한 상기 버퍼 디바이스로부터 상기 다음 판독 리턴을 수신하는 장치.
  15. 제14항에 있어서, 상기 호스트 디바이스는 상기 제1 추적기 식별자에 기초하여 상기 제1 판독 리턴을 상기 제1 판독 요청에 매핑하고, 상기 제2 판독 리턴을 상기 제2 판독 요청에 매핑하는 호스트 제어기를 더 포함하는 장치.
  16. 제13항에 있어서, 상기 호스트 디바이스는 중앙 처리 유닛을 포함하는 장치.
  17. 시스템으로서,
    제1 호스트 디바이스;
    메모리 액세스 링크 프로토콜을 준수하는 버퍼링된 메모리 링크를 이용하여 상기 제1 호스트 디바이스에 접속된 버퍼 디바이스;
    상기 버퍼 디바이스에 접속된 하나 이상의 메모리 디바이스; 및
    GPIO 링크 프로토콜을 준수하는 특정한 링크를 이용하여 제2 호스트 디바이스에 접속된 제2 호스트 디바이스
    를 포함하고,
    상기 버퍼 디바이스는,
    상기 버퍼링된 메모리 링크를 통해 상기 제1 호스트 디바이스로 송신될 판독 리턴들의 시퀀스를 식별하고 - 상기 시퀀스는 적어도 제1 판독 요청에 대한 제1 판독 리턴과 제2 판독 요청에 대한 제2 판독 리턴을 포함함 - ;
    상기 제1 판독 리턴에 상기 제2 판독 리턴의 추적기 식별자를 인코딩하고;
    상기 제2 판독 리턴의 상기 추적기 식별자를 갖는 상기 제1 판독 리턴을 상기 제1 호스트 디바이스로 송신하고;
    상기 제1 판독 리턴이 송신된 후에 상기 제2 판독 리턴을 상기 제1 호스트 디바이스로 송신하는 시스템.
  18. 제17항에 있어서, 상기 호스트 디바이스는 또한 상기 제1 판독 리턴 및 제2 판독 리턴 중 적어도 하나의 판독 리턴의 데이터를 상기 특정한 링크를 통해 상기 제2 호스트 디바이스로 포워드하는 시스템.
  19. 제18항에 있어서, 상기 메모리 액세스 링크 프로토콜은 GPIO 링크 프로토콜과 상이하고, 상기 GPIO 링크 프로토콜은 물리 계층 및 링크 계층을 포함하고, 상기 메모리 액세스 링크 프로토콜의 물리 계층은 상기 GPIO 링크 프로토콜의 상기 물리 계층에 기초하고, 상기 메모리 액세스 링크 프로토콜의 링크 계층은 상기 GPIO 링크 프로토콜의 상기 링크 계층에 기초하는 시스템.
  20. 제19항에 있어서, 상기 제1 호스트 디바이스는 컴퓨팅 디바이스의 제1 CPU를 포함하고, 상기 제2 호스트 디바이스는 상기 컴퓨팅 디바이스의 제2 CPU를 포함하는 시스템.
KR1020150162258A 2014-12-20 2015-11-19 트랜잭션 버퍼링된 메모리에서의 초기 식별 KR101842568B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/578,407 US9740646B2 (en) 2014-12-20 2014-12-20 Early identification in transactional buffered memory
US14/578,407 2014-12-20

Publications (2)

Publication Number Publication Date
KR20160075312A true KR20160075312A (ko) 2016-06-29
KR101842568B1 KR101842568B1 (ko) 2018-05-14

Family

ID=54703769

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150162258A KR101842568B1 (ko) 2014-12-20 2015-11-19 트랜잭션 버퍼링된 메모리에서의 초기 식별

Country Status (5)

Country Link
US (2) US9740646B2 (ko)
EP (2) EP3327578B1 (ko)
KR (1) KR101842568B1 (ko)
CN (2) CN108334463B (ko)
TW (1) TWI604312B (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220132333A (ko) * 2021-03-23 2022-09-30 에스케이하이닉스 주식회사 PCIe 인터페이스 장치 및 그 동작 방법
US11741039B2 (en) 2021-03-18 2023-08-29 SK Hynix Inc. Peripheral component interconnect express device and method of operating the same
US12007918B2 (en) 2021-03-23 2024-06-11 SK Hynix Inc. Peripheral component interconnect express interface device and method of operating the same

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9600191B2 (en) * 2014-06-02 2017-03-21 Micron Technology, Inc. Systems and methods for reordering packet transmissions in a scalable memory system protocol
CN116560563A (zh) * 2015-10-01 2023-08-08 拉姆伯斯公司 具有高速缓存的存储器模块操作的存储器系统
US10644958B2 (en) * 2016-01-30 2020-05-05 Western Digital Technologies, Inc. All-connected by virtual wires network of data processing nodes
EP3352086B1 (en) * 2016-12-05 2020-11-11 Huawei Technologies Co., Ltd. Control method, device and system for data reading-writing command in nvme over fabric architecture
WO2018102968A1 (zh) 2016-12-05 2018-06-14 华为技术有限公司 NVMe over Fabric架构中数据读写命令的控制方法、设备和系统
WO2018119778A1 (en) * 2016-12-28 2018-07-05 Intel Corporation System and method for vector communication
US10784986B2 (en) 2017-02-28 2020-09-22 Intel Corporation Forward error correction mechanism for peripheral component interconnect-express (PCI-e)
DE102018001574B4 (de) 2018-02-28 2019-09-05 WAGO Verwaltungsgesellschaft mit beschränkter Haftung Master-Slave Bussystem und Verfahren zum Betrieb eines Bussystems
US11474967B2 (en) * 2018-06-25 2022-10-18 Intel Corporation Systems, methods, and devices for dynamic high speed lane direction switching for asymmetrical interfaces
KR20200066774A (ko) 2018-12-03 2020-06-11 삼성전자주식회사 반도체 장치
US10771189B2 (en) * 2018-12-18 2020-09-08 Intel Corporation Forward error correction mechanism for data transmission across multi-lane links
US11637657B2 (en) 2019-02-15 2023-04-25 Intel Corporation Low-latency forward error correction for high-speed serial links
US11249837B2 (en) 2019-03-01 2022-02-15 Intel Corporation Flit-based parallel-forward error correction and parity
US11296994B2 (en) 2019-05-13 2022-04-05 Intel Corporation Ordered sets for high-speed interconnects
CN110362516B (zh) * 2019-07-23 2020-11-10 南京凯鼎电子科技有限公司 一种提高ddr存储总线利用率的方法和装置
US11740958B2 (en) 2019-11-27 2023-08-29 Intel Corporation Multi-protocol support on common physical layer
CN117222992A (zh) * 2021-06-01 2023-12-12 微芯片技术股份有限公司 用于旁路存储器读取请求检测的系统和方法
CN114020662A (zh) * 2021-11-02 2022-02-08 上海兆芯集成电路有限公司 桥接模块、数据传输系统和数据传输方法

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7113523B1 (en) 1997-06-11 2006-09-26 Sony Corporation Data multiplexing device, program distribution system, program transmission system, pay broadcast system, program transmission method, conditional access system, and data reception device
US6728816B1 (en) * 2001-02-09 2004-04-27 Lsi Logic Corporation Simple mechanism for guaranteeing in order read data return on a split transaction bus
US7149857B2 (en) * 2002-05-14 2006-12-12 Micron Technology, Inc. Out of order DRAM sequencer
KR100528861B1 (ko) * 2003-03-04 2005-11-16 삼성전자주식회사 제어 패킷의 적응적 대역 할당을 위한 패킷 포워딩시스템의 제어 패킷 관리 장치 및 그의 제어 패킷 관리 방법
JP2006113689A (ja) * 2004-10-12 2006-04-27 Fujitsu Ltd バスブリッジ装置およびデータ転送方法
US7620694B2 (en) 2005-09-27 2009-11-17 Intel Corporation Early issue of transaction ID
US7949794B2 (en) * 2006-11-02 2011-05-24 Intel Corporation PCI express enhancements and extensions
US8683126B2 (en) 2007-07-30 2014-03-25 Nvidia Corporation Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory
US8090967B2 (en) * 2008-05-23 2012-01-03 Intel Corporation Power state transition initiation control of memory interconnect based on early warning signal, memory response time, and wakeup delay
US8656117B1 (en) * 2008-10-30 2014-02-18 Nvidia Corporation Read completion data management
US8205111B2 (en) * 2009-01-02 2012-06-19 Intel Corporation Communicating via an in-die interconnect
US8713277B2 (en) * 2010-06-01 2014-04-29 Apple Inc. Critical word forwarding with adaptive prediction
WO2014065873A1 (en) 2012-10-22 2014-05-01 Jeff Willey Control messaging in multislot link layer flit

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11741039B2 (en) 2021-03-18 2023-08-29 SK Hynix Inc. Peripheral component interconnect express device and method of operating the same
KR20220132333A (ko) * 2021-03-23 2022-09-30 에스케이하이닉스 주식회사 PCIe 인터페이스 장치 및 그 동작 방법
US11841819B2 (en) 2021-03-23 2023-12-12 SK Hynix Inc. Peripheral component interconnect express interface device and method of operating the same
US12007918B2 (en) 2021-03-23 2024-06-11 SK Hynix Inc. Peripheral component interconnect express interface device and method of operating the same

Also Published As

Publication number Publication date
KR101842568B1 (ko) 2018-05-14
US20160179718A1 (en) 2016-06-23
US9740646B2 (en) 2017-08-22
TW201633165A (zh) 2016-09-16
CN105718391B (zh) 2018-12-11
CN105718391A (zh) 2016-06-29
EP3035199A1 (en) 2016-06-22
US20180060259A1 (en) 2018-03-01
TWI604312B (zh) 2017-11-01
EP3327578A1 (en) 2018-05-30
US10198379B2 (en) 2019-02-05
CN108334463A (zh) 2018-07-27
EP3035199B1 (en) 2018-06-27
CN108334463B (zh) 2021-07-13
EP3327578B1 (en) 2020-06-03

Similar Documents

Publication Publication Date Title
KR101842568B1 (ko) 트랜잭션 버퍼링된 메모리에서의 초기 식별
US20230367481A1 (en) Implied directory state updates
US10140213B2 (en) Two level memory full line writes
US10360096B2 (en) Error handling in transactional buffered memory
EP3238078B1 (en) Speculative reads in buffered memory
EP3238079B1 (en) Packed write completions

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