신호는 통하는데 칩렛의 기능이 맞지 않는 이유
패키지 안의 두 die가 서로 신호를 주고받고 링크 훈련까지 끝냈다. 그런데 호스트는 장치를 찾지 못하거나, 받은 데이터를 예상과 다르게 해석한다. UCIe interoperability를 읽을 때 이 상황을 하나의 성공·실패 표시로 줄이면 원인을 놓친다. 전기적으로 전달할 수 있는 것과 같은 기능을 수행하는 것은 서로 다른 계약을 확인해야 한다.
연결의 성공을 층별로 나눈다
UCIe는 물리층, die-to-die 어댑터, 상위 프로토콜을 나누어 설명한다. 물리층은 신호와 훈련을, 어댑터는 링크 상태와 파라미터 협상 등을 맡는다. PCIe와 CXL은 정의된 상위 프로토콜을 활용하고, Streaming은 다른 프로토콜을 매핑할 수 있게 한다. 컨소시엄 원 백서 4쪽의 계층 설명
따라서 물리층이 준비됐다는 상태만 읽고 상위 요청을 보내면 이르다. UCIe 초기화 설명에서도 물리 링크 훈련 이후 어댑터의 프로토콜·형식 교환이 이어지며, 그 단계가 끝나야 프로토콜 flit의 전송을 시작한다. 어떤 계층의 상태를 관측했는지 기록해야 디버깅 출발점이 맞는다. 공식 튜토리얼 PDF 21쪽, 슬라이드 45
또한 PCIe나 CXL에서 어느 쪽이 호스트 또는 downstream 역할인지, 어느 쪽이 endpoint 또는 upstream 역할인지도 중요하다. 공통 이름의 프로토콜을 구현했다는 사실만으로 서로 맞는 두 역할이 되지는 않는다. 공식 소프트웨어 튜토리얼의 호환성 표도 장치 역할의 조합을 구분하며, Streaming의 상위 소프트웨어 계약은 vendor-defined로 다룬다. PDF 13쪽, 슬라이드 94
같은 네 바이트가 다른 숫자가 되는 예
이제 자체 Streaming 메시지를 운반하는 두 die를 가정하자. 송신기는 주소 뒤에 32비트 값을 넣고, 값 0x01020304를 큰 바이트부터 01 02 03 04로 보냈다. 수신기는 같은 네 바이트를 little endian 정수로 읽는다. 전달 중 비트 오류가 없어도 수신 값은 0x04030201이다.
원래 값은 십진수 16,909,060이고 잘못 읽은 값은 67,305,985다. 링크의 오류 검사로 이 차이를 발견할 수 없다. 두 die가 동일한 바이트를 주고받았기 때문이다. 이 예는 PCIe나 CXL의 바이트 규칙이 정해져 있지 않다는 주장이 아니다. 자체 메시지의 바이트 순서를 통합 계약에 적지 않은 반례다.
주소의 단위도 같은 문제가 생긴다. 한쪽은 주소 8을 바이트 위치로, 다른 쪽은 32비트 워드 번호로 해석하면 후자는 바이트 위치 32를 선택한다. 연결이 깨진 것이 아니라 메시지의 의미가 달라졌다. 두 구현의 개별 테스트가 각각 일관돼도, 서로 같은 계약을 사용하지 않으면 통합 테스트에서 어긋난다.
수신 확인이 어떤 일을 끝냈는지 정한다
자체 가속기 명령을 보낸 뒤 응답을 받았다고 하자. A는 그 응답을 ‘명령 대기열에 저장했다’로 보내고, B의 드라이버는 ‘결과 메모리에 기록을 끝냈다’로 해석한다. 전송 자체는 성공했어도 B는 아직 완성되지 않은 결과를 읽을 수 있다.
이때 응답 이름을 ACK라고 통일하는 것으로는 해결되지 않는다. 접수와 실행 완료 중 무엇을 뜻하는지, 결과를 읽을 수 있는 시점은 언제인지, 실패하면 어떤 응답이 나오는지 정한다. 상위 프로토콜이 제공하는 정의를 따르는 경우와 자체 계약을 만드는 경우를 구별해야 한다.
운반 형식과 실행 의미를 분리하면 시험도 구체화된다. 알려진 바이트열을 보내 해석한 값과 주소를 확인하고, 실행을 일부러 지연시켜 접수 응답 직후 결과를 읽는 경로를 시험할 수 있다. 링크의 정상 전송과 기능의 정상 완료를 각각 관측한다.
호환성 시험은 무엇을 확인했는지 남긴다
UCIe 1.1 백서는 물리층, 어댑터, 프로토콜층의 compliance를 구별한다. 신호와 훈련을 보는 시험, flit 형성과 CRC·replay를 보는 시험, 해당 상위 프로토콜의 시험이 서로 다른 질문을 담당한다. 하나의 시험 결과를 나머지 층의 검증까지 끝났다는 의미로 확대하면 안 된다. 원 백서 5쪽
UCIe interoperability의 실무적인 기준은 ‘링크가 켜졌다’보다 구체적이다. 패키지와 훈련 조건, 협상한 프로토콜·형식, 양쪽의 역할, 바이트와 주소의 의미, 완료의 정의를 연결해서 확인한다. 이 계약을 만족한 두 die라면 전송 성공을 실제 기능 성공으로 이어 갈 근거가 생긴다.