이 글은 제가 PCIe를 공부하면서 겪은 시행착오를 바탕으로 정리한 글입니다. PCIe를 처음 접하는 분들에게 좋은 길라잡이가 되었으면 합니다.
이전 글)
PCIe LTSSM(Link Training and Status State Machine)은 hardware기반으로 수행되며, physical layer가 이를 제어합니다. 이 과정은 reset 후 hardware에 의해 자동으로 시작됩니다. LTSSM은 여러 상태를 통해 link를 설정하고 packet traffic이 정상적으로 진행될 수 있도록 합니다.
Link Traning
Link Traning은 PCIe와 같은 고속 직렬 인터페이스에서 링크를 설정하고 최적화하는 과정입니다. 이 과정은 장치 간에 신뢰성 있고 효율적인 데이터 통신을 보장하기 위해 수행됩니다. link training은 hardware기반의 프로세스로 다음과 같은 주요 단계를 포함합니다.
- Bit Lock 달성
- 목적: 수신기(Rx)의 클럭을 송신기(Tx)의 클럭과 동기화하여 들어오는 bit를 신뢰성 있게 샘플링할 수 있게 합니다.
- 방법: 수신기에서 CDR(Clock and Data Recovery) 로직을 사용하여 수신된 bit stream에서 클럭을 복구합니다. 이를 통해 수신기는 송신기와 같은 주파수로 동작하는 클럭을 생성합니다.
- Symbol Lock(Gen1/Gen2)
- 목적: 수신기가 비트를 개별적으로 인식하는 것에서 나아가 10bit symbol 경계를 찾습니다.
- 방법: traning 과정에서 TS1 및 TS2 ordered set을 사용해 symbol 경계를 찾습니다. COM sybmol은 고유한 인코딩을 가지고 있어 이를 인식하여 symbol의 시작과 끝을 알 수 있습니다. 수신기가 COM symbol을 감지하여 symbol lock을 달성하면 다음 단계로 넘어갑니다.
- Block Lock
- 목적: Gen3부터는 8b/10b 인코딩을 사용하지 않으므로, 수신기가 패킷 경계를 찾는 데 필요한 block 경계를 설정합니다.
- 방법: EIEOS(Electrical Idle Exit Ordered Set) 패턴을 사용합니다. EIEOS는 00h와 FFh 바이트가 번갈아 나타나는 패턴으로, 이 패턴의 끝이 블록 경계를 나타냅니다.
- Link Width
- 목적: Multi-Lane device가 사용할 수 있는 최대 링크 폭을 설정합니다.
- 방법: Training 과정에서 device 간에 최대 링크 폭을 테스트하고 설정합니다.
- Lane Reversal & Polarity Inversion
- 목적: 보드 레이아웃을 단순화하고, 디바이스 간의 연결을 용이하게 합니다.
- 방법: Lane 번호를 논리적으로 반전시키거나, D+와 D- 차동 페어를 반전시키는 작업을 통해 수신기가 이를 자동으로 감지하고 수정합니다.
- Link Data Rate
- 목적: 링크가 지원할 수 있는 최대 데이터 속도로 동작하도록 설정합니다.
- 기본 속도(2.5GT/s)로 시작하여 트레이닝 과정에서 더 높은 데이터 속도로 설정합니다.
- Lane-to-Lane De-skew
- 목적: Multi-lane 링크의 각 레인에서 데이터가 동시에 도착하도록 신호 스큐를 보정합니다.
- 방법: 수신기는 일찍 도착한 데이터를 지연시켜 모든 레인이 동기화되도록 합니다.
LTSSM State Overview
- Detect
- 원격 종단(반대편 디바이스)를 감지합니다.
- Polling
- Training ordered set을 전송하고 수신합니다. 이 과정에서 bit lock 및 symbol lock을 설정하고 레인 극성을 구성합니다.
- Configuration
- 송신기와 수신기는 협상된 데이터 속도로 데이터를 송수신합니다. 링크 폭 및 레인을 협상하고 디스큐를 수행합니다.
- Recovery
- 링크가 bit lock, symbol lock 또는 block lock을 다시 설정하고 필요헤 따라 데이터 속도를 변경합니다.
- L0
- 정상 작동 상태로, 데이터와 control packet이 송수신됩니다.
- L0s
- 전력 절약 상태로, L0로 빠르게 복구할 수 있습니다.
- L1
- 전력 절약 상태로, L0s보다 더 많은 전력을 절약할 수 있지만 재개 시간이 더 깁니다.
- L2
- 가장 높은 전력 절약 상태로, 대부분의 송신기와 수신기가 꺼질 수 있습니다.
- Disabled
- 구성된 링크를 비활성화합니다.
- Loopback
- 테스트 및 고장 격리를 위해 사용됩니다.
- Hot Reset
- 구성된 링크와 관련된 다운스트림을 장치를 리셋합니다.
Ordered Sets in Link Training
Ordered set은 link training, link status 관리, 데이터 전송을 포함한 다양한 목적으로 사용되는 symbol sequence입니다. 특히 link training과정에서 Training Sequence(TS1 및 TS2) ordered set은 장치 간의 올바른 통신을 보장하는 데 중요한 역할을 합니다.
TS1 및 TS2 Ordered set
이 ordered set은 LTSSM의 polling, configuration 및 recovery 상태 동안 장치 간에 교환됩니다. 이러한 시퀀스의 목적은 링크 매개변수를 구성하고 동기화를 달성하며 올바른 데이터 전송을 보장하는 것입니다.
TS1 및 TS2 Format
TS1 및 TS2 ordered set은 16개 symbol로 구성되는데, 이러한 symbol의 형식은 Gen1/2와 Gen3간에 약간 다릅니다.
Reference)
- PCI Express® Base Specification Revision 5.0
- PCI Express Technology 3.0 (minshare)
'Interface Standards > PCIe' 카테고리의 다른 글
[11] PHY Interface for the PCI Express 간단히 알아보기 (0) | 2024.08.12 |
---|---|
[10] PCIe - Physical Layer (LTSSM) - 2 (0) | 2024.06.24 |
[8] PCIe - Physical Layer (PCIe Gen3 ~) (0) | 2024.05.27 |
[7] PCIe - Physical Layer (PCIe Gen1 & Gen2) - Receive Logic (0) | 2024.05.26 |
[6] PCIe - Physical Layer (PCIe Gen1 & Gen2) - Transmit Logic (0) | 2024.05.26 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!