PCIe lane margining은 다운스트림 포트에서 업스트림 포트로, 그리고 다시 업스트림 포트에서 다운스트림 포트로의 각 수신기(Rx(A), Rx(B), Rx(C), Rx(D), Rx(E), Rx(F))에 대해 동작 여유(operating margin) 를 결정할 수 있게 해줍니다. 여유 정보에는 전압과 시간 모두가 포함되며, 이는 현재 수신기의 동작 위치에서 양방향으로 측정됩니다. 소프트웨어는 lane margin 및 제어 상태 레지스터를 통해 특정 수신기에 대한 제어 및 상태 정보를 얻습니다. 이 레지스터는 수신기와 관련된 포트에 해당합니다.
- command 를 이용하여, timming의 left/right 또는 voltage 의 up/down의 the sampling point a specified number of steps 을 조정 한다.
- 다음과 같은 값들을 포함한다.
- maximum voltage offset
- maximum timing offset
- number of voltage steps
- number of timing steps
- timing sampling rate
- voltage sampling rate
- maximum lanes (maximum number of lanes that can be margined at the same time)
- independent error sampler
- actural data sampler (indicates if margining will produce errors in the data stream or nt)
PCIe Gen4 기본 사양은 독립적인 데이터 샘플러(실제 데이터 샘플러 외에 추가된 샘플러)를 포함하는 수신기 또는 실제 데이터 샘플러만 포함하는 수신기에 대해 허용 사항을 명시하고 있습니다. 독립적인 데이터 샘플러가 있을 경우, 오류는 SerDes에 의해 탐지되고 보고됩니다. 독립적인 데이터 샘플러가 없는 경우, 오류는 링크에서 감지된 패리티 오류의 수와 LTSSM 복구(recovery) 상태에 들어간 항목 수를 세어 탐지됩니다. 사양은 데이터 샘플 위치를 이동하는 방식으로 여유(margining)를 허용하지만, 실제 여유 방법은 구현에 따라 다릅니다. 예를 들어, 타이밍/전압 여유는 데이터 샘플을 고정된 위치에 유지하면서 적절한 양의 스트레스/지터를 주입하거나 데이터 샘플러 또는 독립 샘플러의 위상과 전압 오프셋을 조정하는 방법으로 구현할 수 있습니다.
Software flow:
- Set the Margin Lane Control Register
- Margin Type : 011b (Step Margin to timing offset to right/left of default)
- Margin Payload = 88h
- move to right of the normal setting
- # of steps : 1000b = 8
- Receive Number = terget receiver
- Read the Margin Lane Status register
- if Margin Type = 001b and Receiver Number = target device then go to 3 else
4.2.13 Lane Margining at Receiver
수신기에서의 Lane Margining은 이 섹션에서 정의된 대로 16.0 GT/s 이상의 데이터 속도를 지원하는 모든 포트에 필수입니다(Pseudo Ports(재타이머 포함)). 수신기에서의 Lane Margining은 링크가 L0 상태일 때 시스템 소프트웨어가 특정 수신기의 마진 정보를 얻을 수 있도록 합니다. 마진 정보에는 현재 수신기 위치에서 양방향으로의 전압 및 시간 정보가 포함됩니다. 수신기에서의 Lane Margining을 구현하는 모든 포트에 대해, 타이밍을 위한 Lane Margining은 필수이며, 전압을 위한 Lane Margining은 16.0 GT/s에서 선택적이지만, 32.0 GT/s 이상의 데이터 속도에서는 필수입니다.
수신기에서의 Lane Margining은 Margin Command를 수신하고, 링크가 16.0 GT/s 이상의 데이터 속도로 작동하며 L0 상태일 때 시작됩니다. 수신기에서의 Lane Margining은 다음 중 하나가 발생하면 종료됩니다:
- "Go to Normal Settings" 명령이 수신됨.
- 링크 속도가 변경됨.
- 링크가 L0 상태 또는 Recovery 상태를 벗어남.
수신기에서의 Lane Margining은 또한 특정 오류 임계값을 초과하면 선택적으로 종료될 수 있습니다. 독립적인 샘플러에서 링크가 Recovery 상태인 동안에는 수신기에서의 Lane Margining이 일시 중단될 수 있습니다.
수신기에서의 Lane Margining은 2.5 GT/s, 5.0 GT/s, 또는 8.0 GT/s로 작동하는 PCIe 링크에서는 지원되지 않습니다.
소프트웨어는 Lane Margining Lane Control Register와 Margining Lane Status Register를 각 포트(다운스트림 또는 업스트림)에서 사용하여 Margin Command를 전송하고 포트와 관련된 수신기의 상태 및 마진 상태 정보를 얻습니다. Retimers의 경우, 해당 포트와 관련된 수신기의 기능 및 상태 정보를 얻고 마진 작업을 수행하는 명령은 Control SKP Ordered Sets를 통해 다운스트림 방향으로 전달됩니다. 목표 재타이머 수신기의 상태 및 오류 보고는 업스트림 방향의 Control SKP Ordered Sets에 의해 전달됩니다.
소프트웨어는 다운스트림 포트의 Margining Lane Control Register에 쓰기 작업을 수행하여 재타이머의 수신기에서 마진을 제어합니다. 다운스트림 포트는 Control SKP Ordered Set을 통해 링크 내 재타이머에 의해 전달되는 상태 정보를 업데이트하여 자신의 Margining Lane Status Register에 기록합니다.
4.2.13.1 Receiver Number, Margin Type, Usage Model, and Margin Payload Fields
다운스트림 포트의 Margining Lane Control Register에 있는 네 가지 명령 필드의 내용은 다운스트림 Control SKP Ordered Set의 동일한 필드에 항상 반영됩니다. 다운스트림 포트에서 수신된 업스트림 Control SKP Ordered Set의 내용은 다운스트림 포트의 Margining Lane Status Register에 있는 해당 상태 필드에 항상 반영됩니다. 아래 표는 Control SKP Ordered Set에서 이러한 필드의 비트 위치를 제공합니다.
- Usage Model:
- 0b로 인코딩된 경우, 사용 모델은 "수신기에서의 Lane Margining"임을 나타냅니다.
- 이 필드가 1b로 설정된 경우, 이는 미래 사용을 위해 예약된 값입니다.
- 만약 Usage Model 필드가 1b로 설정된 경우,
- Symbol 4N+2의 비트 [5:0] 및 Symbol 4N+3의 비트 [7:0] 는 예약된(Reserved) 상태입니다.
- 마진 명령(Margin Commands)에 대해 수신된 Control SKP Ordered Set을 평가할 때,
Usage Model = 1b와 연관된 사용을 이해하지 못하는 모든 수신기는 Symbol 4N+2의 비트 [5:0] 및 Symbol 4N+3의 비트 [7:0] 을 무시해야 합니다. - Receiver Number
- 수신기는 Figure 4-35에서 식별됩니다. 아래의 Receiver Number 인코딩은 다운스트림 포트 또는 해당 다운스트림 포트 아래에 있는 Retimer를 대상으로 하는 마진 명령(Margin Commands)에 사용됩니다:
- 000b
- 브로드캐스트 (Downstream Port Receiver 및 모든 Retimer Pseudo Port Receiver)
- 001b
- Rx(A) (Downstream Port Receiver)
- 010b
- Rx(B) (Retimer X 또는 Z Upstream Pseudo Port Receiver)
- 011b
- Rx(C) (Retimer X 또는 Z Downstream Pseudo Port Receiver)
- 100b
- Rx(D) (Retimer Y Upstream Pseudo Port Receiver)
- 101b
- Rx(E) (Retimer Y Downstream Pseudo Port Receiver)
- 110b
- 예약됨 (Reserved)
- 111b
- 예약됨 (Reserved)
- 000b
- 수신기는 Figure 4-35에서 식별됩니다. 아래의 Receiver Number 인코딩은 다운스트림 포트 또는 해당 다운스트림 포트 아래에 있는 Retimer를 대상으로 하는 마진 명령(Margin Commands)에 사용됩니다:
다음 Receiver Number 인코딩은 업스트림 포트에서 해당 업스트림 포트를 대상으로 하는 Margin Command에 사용됩니다:
- 000b
- 브로드캐스트 (Upstream Port Receiver)
- 001b
- 예약됨 (Reserved)
- 010b
- 예약됨 (Reserved)
- 011b
- Reserved
- 100b
- Reserved
- 101b
- Reserved
- 110b Rx (F) (Upstream Port Receiver)
- 111b
- Reserved
Margin Type 및 Margin Payload:
Margin Type 필드와 유효한 Receiver Number(들), 그리고 관련된 Margin Type 인코딩 및 특정 Margin Payload 필드는 마진 작업에 사용되는 다양한 명령(이하 Margin Command라 칭함)을 정의합니다. Table 4-26은 유효한 Margin Commands와 해당 응답의 인코딩을 정의하며, 이는 Control SKP Ordered Sets, Margining Lane Control Register, 및 Margining Lane Status Register에서 사용됩니다.
항상 브로드캐스트로 전송되는 마진 명령은 Receiver Number에 대해 브로드캐스트 인코딩을 사용합니다. 이는 단 하나의 수신기(예: 재타이머가 없는 링크의 UP 또는 DP)를 대상으로 하는 경우에도 적용됩니다. 브로드캐스트가 아닌 Margin Command에 대한 응답에서 Receiver Number 필드는 응답하는 수신기의 수를 나타냅니다.
Margin Commands는 다운스트림 방향으로 전송되며, 응답은 업스트림 방향으로 반환됩니다. 응답의 Receiver Number 필드는 응답하는 대상 수신기와 일치하는 Margin Type을 반영합니다. 여기서 사용된 MSampleCount와 같은 다양한 매개변수는 Section 8.4.4에서 정의되어 있습니다.
아래에 설명된 모든 미사용 인코딩은 Reserved(예약됨)으로 간주되며, 유효한 Margin Command로 간주되어서는 안 됩니다.
Command | Response | ||||
Margin Command | Margin Type [2:0] | Valid Receiver Number(s) [2:0] | Margin Payload [7:0] | Response Margin Type [2:0] | Response Margin Payload [7:0] |
No Command | 111b | 000b | 9Ch (No Commandis also an independent command in Upstream direction. The expected Response isNo Commandwith theReceiver Number= 000b.) |
||
Access Retimer register (Optional) | 001b | 010b, 100b | Register offset in bytes: 00h - 87h, A0h - FFh |
001b | Register value, if supported. 00h if not supported. |
Report Margin Control Capabilities | 001b | 001b through 110b | 88h | 001b | Margin Payload[7:5] = Reserved; Margin Payload[4:0] = {MIndErrorSampler, MSampleReportingMethod, MIndLeftRightTiming, MIndUpDownVoltage, MVoltageSupported} |
Report MNumVoltageSteps | 001b | 001b through 110b | 89h | 001b | Margin Payload[7] = Reserved; Margin Payload[6:0] = MNumVoltageSteps |
Report MNumTimingSteps | 001b | 001b through 110b | 8Ah | 001b | Margin Payload[7:6] = Reserved; Margin Payload[5:0] = MNumTimingSteps |
Report MMaxTimingOffset | 001b | 001b through 110b | 88h | 001b | Margin Payload[7] = Reserved; Margin Payload[6:0] = MMaxTimingOffset |
Report MMaxVoltageOffset | 001b | 001b through 110b | 8Ch | 001b | Margin Payload[7] = Reserved; Margin Payload[6:0] = MMaxVoltageOffset |
Report MSamplingRateVoltage | 001b | 001b through 110b | 8Dh | 001b | Margin Payload[7:6] = Reserved; Margin Payload[5:0] = MSamplingRateVoltage[5:0] |
Report MSampleCount | 001b | 001b through 110b |
8Fh | 001b | Margin Payload[7] = Reserved Margin Payload[6:0] =MSampleCount |
Report MMaxLanes | 001b | 001b through 110b |
90h | 001b | Margin Payload[7:5] = Reserved Margin Payload[4:0] =MMaxLanes |
Report Reserved | 001b | 001b through 110b |
91-9Fh | 001b | Margin Payload[7:0] = Reserved |
Set Error Count Limit | 010b | 001b through 110b |
Margin Payload [7:6] = 11b Margin Payload[5:0] = Error Count Limit |
010b | Margin Payload[7:6] = 11b Margin Payload[5:0] =Error Count Limitregistered by the target Receiver |
Go to Normal Settings | 010b | 000b through 110b |
0Fh | 010b | 0Fh |
Clear Error Log | 010b | 000b through 110b |
55h | 010b | 55h |
Step Margin to timing offset to right/left of default |
011b | 001b through 110b |
SeeSection 4.2.13.1.2 |
011b | Margin Payload[7:6] = Step Margin Execution Status (seeSection4.2.13.1.1 ) Margin Payload[5:0] =MErrorCount |
Step Margin to voltage offset to up/ down of default |
100b | 001b through 110b |
SeeSection 4.2.13.1.2 |
100b | Margin Payload[7:6] = Step Margin Execution Status (seeSection4.2.13.1.1 ) Margin Payload[5:0] =MErrorCount |
Vendor Defined | 101b | 001b through 110b |
Vendor Defined | 101b | Vendor Defined |
4.2.13.1.1 Step Margin Execution Status
Table 4-26에서 사용된 Step Margin Execution Status는 2비트 필드로 다음과 같이 정의됩니다:
- 11b
- NAK (Negative Acknowledgement).
지원되지 않는 Lane Margining 명령이 실행되었음을 나타냅니다.
예: ±0.2 UI를 초과하는 타이밍 마진.
MErrorCount는 0입니다.
- NAK (Negative Acknowledgement).
- 10b
- 마진 작업 진행 중.
수신기가 Step Margin 명령을 실행하고 있습니다.
MErrorCount는 Section 8.4.4에 정의된 대로 감지된 오류 수를 나타냅니다.
- 마진 작업 진행 중.
- 01b
- 마진 작업 준비 중.
수신기가 준비 중이지만 Step Margin 명령 실행을 아직 시작하지 않았음을 나타냅니다.
MErrorCount는 0입니다.
- 마진 작업 준비 중.
- 00b
- 오류가 너무 많음 - 수신기가 자율적으로 기본 설정으로 복귀했습니다.
MErrorCount는 Section 8.4.4에 정의된 대로 감지된 오류 수를 나타냅니다.
MErrorCount가 오류 제한 수를 초과할 수 있음을 주의하세요.
- 오류가 너무 많음 - 수신기가 자율적으로 기본 설정으로 복귀했습니다.
4.2.13.1.2 Margin Payload for Step Margin Commands
Step Margin to Timing Offset의 오른쪽/왼쪽 기본 명령에 대한 Margin Payload 필드 정의:
- Margin Payload [7]: Reserved.
- MIndLeftRightTiming이 대상 수신기에 대해 설정(Set)된 경우:
- Margin Payload [6]은 Margin Command가 오른쪽인지 왼쪽인지를 나타냅니다.
0b는 수신기를 기본 설정의 오른쪽으로 이동하도록 지시합니다.
1b는 수신기를 기본 설정의 왼쪽으로 이동하도록 지시합니다. - Margin Payload [5:0]은 기본 설정의 왼쪽 또는 오른쪽으로 이동할 단계(step) 수를 나타냅니다.
- Margin Payload [6]은 Margin Command가 오른쪽인지 왼쪽인지를 나타냅니다.
- MIndLeftRightTiming이 대상 수신기에 대해 클리어(Clear)된 경우:
- Margin Payload [6]: Reserved.
- Margin Payload [5:0]은 기본 설정을 초과하는 단계 수를 나타냅니다.
Step Margin의 전압 오프셋을 위/아래로 조정하는 기본 명령에 대한 Margin Payload 필드 정의:
- MIndUpDownVoltage가 대상 수신기에 대해 설정(Set)된 경우:
- Margin Payload [7]**은 Margin Command가 위쪽(up)인지 아래쪽(down)인지를 나타냅니다.
0b는 수신기를 기본 설정에서 위쪽으로 이동시키도록 지시합니다.
1b는 수신기를 기본 설정에서 아래쪽으로 이동시키도록 지시합니다. - Margin Payload [6:0]**은 기본 설정에서 위쪽 또는 아래쪽으로 이동할 단계(step) 수를 나타냅니다.
- Margin Payload [7]**은 Margin Command가 위쪽(up)인지 아래쪽(down)인지를 나타냅니다.
- MIndUpDownVoltage가 대상 수신기에 대해 클리어(Clear)된 경우:
- Margin Payload [7]: Reserved.
- Margin Payload [6:0]**은 기본 설정을 초과하는 단계 수를 나타냅니다.
4.2.13.2Margin Command and Response Flow
각 수신기는 Section 8.4.4에 정의된 대로 자신의 기능을 광고(Advertise)합니다. 마진 작업을 수행하는 수신기는 마진 지점에서 발생한 데이터 샘플과 일치하는 오류 수를 보고해야 합니다.
단순화를 위해, Margin Commands 및 요구사항은 데이터 샘플러의 위치를 이동시키는 관점에서 정의되지만, 실제 마진 방법은 구현에 따라 다를 수 있습니다. 예를 들어, 타이밍 마진은 실제 데이터 샘플러나 독립적인 오류 샘플러에서 구현될 수 있습니다.
타이밍 마진은 데이터 샘플 위치에 적절한 수준의 스트레스 또는 지터를 주입하거나 데이터/오류 샘플 위치를 실제로 이동시킴으로써 구현될 수 있습니다. 독립적인 데이터/오류 샘플러를 사용하는 경우, 링크가 오류를 경험하지 않더라도 발견된 오류는 MErrorCount로 보고되어야 합니다. 수신기를 마진 처리하려면, 소프트웨어는 대상 수신기를 기본 샘플링 위치에서 전압/타이밍 오프셋으로 이동시킵니다.
다음 규칙을 따라야 합니다:
- 모든 Retimer 업스트림 Pseudo Port 수신기 및 다운스트림 포트 수신기는 Margin CRC와 Margin Parity 비트를 계산하고, 수신된 Margin CRC 및 Margin Parity 비트와 비교해야 합니다. 일치하지 않는 경우, Symbols 4N+2 및 4N+3의 내용을 무시해야 합니다. 다운스트림 포트 수신기는 Margin CRC 및 Margin Parity 오류를 Lane Error Status Register에서 보고해야 합니다(참고: Section 7.7.3.3).
- 업스트림 포트 수신기는 Margin CRC 비트, Margin Parity 비트 및 Control SKP Ordered Sets의 모든 비트를 검사할 수 있습니다.Margin CRC 및 Margin Parity가 일치하지 않는 경우, 해당 오류는 보고되어야 합니다.
- 다운스트림 포트는 각 레인에서 SKP Ordered Sets를 전송해야 하며, 여기는 Margin Type, Receiver Number, Usage Model 및 Margin Payload 필드가 포함됩니다.이 값들은 Margining Lane Control Register의 해당 필드와 일치해야 합니다.
구성 쓰기 완료 후 10us 이내에 전송되지 않는 SKP Ordered Sets는 잘못된 것으로 간주됩니다.
잘못된 SKP Ordered Sets는 수신기 구성 레지스터를 반영하지 않아야 합니다. 이는 수신기가 링크에서 Margin Command를 수신했음을 보장하기 위한 필수 요구사항입니다.
- 이 요구사항은 Margining Lane Control Register의 값과 상관없이 적용됩니다.
- 이 요구사항은 링크 내 Retimer의 개수와 상관없이 적용됩니다.
- 업스트림 Pseudo Port에서 수신된 Control SKP Ordered Sets의 경우, Retimer 수신기가 유효한 Margin Command의 대상이 되려면 다음 조건이 모두 충족되어야 합니다:
- Margin Type이 "No Command"가 아닐 것.
- Receiver Number가 수신기에 할당된 번호이거나, Margin Type이 "Clear Error Log" 또는 "Go to Normal Settings" 중 하나이며 Receiver Number가 "Broadcast"일 것.
- Usage Model 필드가 0b일 것.
- Margin Type, Receiver Number, 및 Margin Payload 필드가 Table 4-25 및 Table 4-26에 정의된 내용과 일치할 것.
- Margin CRC 검사와 Margin Parity 검사가 통과할 것.
- 업스트림 및 다운스트림 포트의 경우, 수신기가 유효한 Margin Command의 대상이 되려면, 해당 수신기의 Margining Lane Control Register에 대해 다음 조건이 모두 충족되어야 합니다:
- Margin Type이 "No Command"가 아닐 것.
- Receiver Number가 수신기에 할당된 번호이거나, Margin Type이 "Clear Error Log" 또는 "Go to Normal Settings" 중 하나이며 Receiver Number가 "Broadcast"일 것.
- Usage Model 필드가 0b일 것.
- Margin Type, Receiver Number, 및 Margin Payload 필드가 Table 4-26에 정의된 내용과 일치할 것.
- 업스트림 포트는 No Command로 설정된 Control SKP Ordered Set을 전송해야 합니다.
- 대상 수신기는 유효한 Margin Command를 수신한 후 1ms 이내에 이를 적용하고 응답해야 합니다. 이때 링크는 여전히 L0 상태에 있고, 16.0 GT/s 이상의 데이터 속도로 작동 중이어야 합니다.
- Retimer 내의 대상 수신기는 1ms 이내에 업스트림 방향의 Control SKP Ordered Set에서 Margin Command에 대한 응답을 전송해야 합니다.
- 업스트림 포트 내의 대상 수신기는 1ms 이내에 Lane Margin Command 및 Status 레지스터의 상태 필드를 업데이트해야 합니다.
- 다운스트림 포트 내의 대상 수신기는 명령이 브로드캐스트가 아니거나 재타이머가 없는 경우, 1ms 이내에 Lane Margin Command 및 Status 레지스터의 상태 필드를 업데이트해야 합니다.
- 유효한 Margin Type(단, No Command는 제외)이 브로드캐스트로 전송되어 Retimer가 이를 수신한 경우:
- Retimer 가(그림 4-35 참고) 위치 X에 있는 경우, 명령이 적용되었으면 수정 없이 업스트림 Control SKP Ordered Set에서 응답을 전달하며, 그렇지 않으면 No Command를 전송합니다.
- 응답의 Receiver Number 필드는 재타이머의 Pseudo Ports 중 하나의 인코딩으로 설정되어야 합니다.
- 재타이머는 두 Pseudo Port가 Margin Command를 완료한 후에만 응답해야 합니다.
- Retimer는 Margin Command의 대상 수신기이고 명령을 실행 중인 경우, 업스트림 방향으로 Control SKP Ordered Set을 전달하면서 다음 비트를 덮어써야 합니다:
- Symbol 4N+1의 비트 [4:0],
- Symbol 4N+2의 비트 [7:5:0],
- Symbol 4N+3의 비트 [7:0].
- Control SKP Ordered Set을 수신하면, 다운스트림 포트는 수신된 Control SKP Ordered Set의 해당 필드로부터 Margining Lane Status Register를 1µs 이내에 반영해야 합니다. 이때, Margin CRC 및 Margin Parity 검사를 통과하고 아래 조건 중 하나를 충족해야 합니다:
- Margining Lane Control Register에서 Receiver Number가 010b에서 101b 사이일 경우.
- Margining Lane Control Register에서 Receiver Number가 000b이고, Margin Command가 Clear Error Log, No Command, 또는 Go to Normal Settings이며, 링크에 재타이머(Retimer)가 있는 경우.
- 선택적으로, Margining Lane Control Register Usage Model 필드가 1b인 경우.
- 선택적으로, Margining Lane Control Register Receiver Number 필드가 110b 또는 111b인 경우.
Margining Lane Status Register 필드는 수신된 Control SKP Ordered Set에서 Usage Model 비트와 상관없이 업데이트됩니다.
- 컴포넌트는 Section 8.4.4의 Table 8-11에 정의된 각 파라미터 값이 모든 수신기에서 동일하게 광고(Advertise)되어야 합니다. LinkUp = 1b일 때, MSampleCount 및 MErrorCount를 제외하고 다른 파라미터 값은 변경되지 않아야 합니다.
- 유효한 Step Margin 명령을 수신한 대상 수신기(Target Receiver)는 다음 중 하나가 발생할 때까지 해당 오프셋을 계속 적용해야 합니다:
- 유효한 Go to Normal Settings 명령을 수신했을 경우.
- 다른 Margin Type 또는 Margin Payload 필드를 가진 후속 유효한 Step Margin 명령을 수신했을 경우.
- 유효한 Go to Normal Settings 명령을 수신했을 경우.
- 다른 Margin Type 또는 Margin Payload 필드를 가진 후속 유효한 Step Margin 명령을 수신했을 경우.
- MErrorCount가 Error Count Limit을 초과하여 Step Margin 명령이 종료되는 경우, 대상 수신기는 자동으로 기본 샘플링 위치로 복귀해야 하며, 이를 Margin Payload 필드(Step Margin Execution Status = 00b)에 표시해야 합니다.
참고: 이 이유로 종료되는 것은 MIndErrorSampler가 1b일 때 선택 사항입니다. - MIndErrorSampler가 0b일 경우, 다음 상황에서 오류가 감지됩니다:
- 대상 수신기가 Recovery 상태로 진입하거나 L0 상태에서 데이터 패리티(Data Parity) 불일치를 감지하는 포트일 때.
- 대상 수신기가 Pseudo Port이고, 훈련 세트를 전달하는 동안이거나 비훈련 세트를 전달하는 동안 데이터 패리티 불일치를 감지할 때.
- MIndErrorSampler가 1b일 경우, 다음 상황에서 오류가 감지됩니다:
- 대상 수신기가 포트이고, L0 상태에서 비트 오류를 감지할 때.
- 대상 수신기가 Pseudo Port이고, Retimer가 비훈련 세트를 전달하는 동안 비트 오류를 감지할 때.
- MIndErrorSampler가 0b이고 다음 중 하나일 경우:
- 대상 수신기가 Recovery 상태로 진입하는 포트이거나,
- 대상 수신기가 Forwarding 훈련 세트로 진입하는 Pseudo Port일 경우:
- 대상 수신기는 기본 샘플링 위치로 복귀해야 합니다.
- 대상 수신기가 포트이고 여전히 마진 작업을 수행 중이라면, L0 상태로 진입한 지 128µs 이내에 마진 위치로 복귀해야 합니다.
- 대상 수신기가 Pseudo Port이고 여전히 마진 작업을 수행 중이라면, 비훈련 세트를 Forwarding한 지 128µs 이내에 마진 위치로 복귀해야 합니다.
- Clear Error Log 명령을 수신한 대상 수신기는 누적된 오류 카운트를 초기화해야 합니다.이와 동시에, 대상 수신기가 현재 진행 중인 Step Margin 명령의 대상이라면, 마진 작업을 계속 수행해야 합니다.
- Set Error Count Limit 명령의 대상 수신기인 경우, 새로운 값은 이후의 모든 Step Margin 명령에 대해 사용됩니다. 새로운 Set Error Count Limit 명령을 수신할 때까지 해당 값이 유지됩니다.
- L0 상태로 진입한 이후 Set Error Count Limit 명령을 수신하지 않았다면, 기본값은 4입니다.
- Set Error Count Limit 명령이 Step Margin 명령이 진행 중일 때 수신되면, 동작은 정의되지 않습니다.
- 대상 수신기가 Step Margin Execution Status를 11b (NAK) 또는 00b ('Too many errors')로 보고한 경우, 해당 Step Margin 명령이 유효한 동안 동일한 상태를 계속 보고해야 합니다.
- 대상 수신기는 01b ('Set up for margin in progress') 상태를 새로운 유효한 Step Margin 명령을 수신한 후 100ms 이상 보고해서는 안 됩니다.
- 01b 이외의 Step Margin Execution Status를 보고한 대상 수신기는 새로운 유효한 Step Margin 명령을 수신하지 않는 한 이후에 01b를 보고할 수 없습니다.
- Margin Payload의 예약된 비트(Reserved bits)는 다음 규칙을 따라야 합니다:
- 다운스트림 또는 업스트림 포트는 예약된 비트에 대해 0을 전송해야 합니다.
- Retimer는 예약된 비트를 수정 없이 전달해야 합니다.
- 모든 수신기는 예약된 비트를 무시해야 합니다.
- Margin Command, Receiver Number, 또는 Margin Payload 필드의 예약된 인코딩(Reserved encodings)은 다음 규칙을 따라야 합니다:
- 재타이머는 예약된 인코딩을 수정 없이 전달해야 합니다.
- 모든 수신기는 예약된 인코딩을 Margin Command의 대상이 아닌 것처럼 처리해야 합니다.
- Retimer에 의해 정의되지 않은 Vendor Defined Margin Command 또는 응답은 무시되고 정상적으로 전달됩니다.
- Retimer에서의 대상 수신기(Target Receiver)는 Access Retimer register 명령에 대해 레지스터 액세스를 지원하지 않는 경우, 응답 페이로드에서 00h를 반환해야 합니다. Retimer가 Access Retimer register 명령을 지원하는 경우, 다음 사항을 준수해야 합니다:
- 위치 80h와 84h의 DWORD에 대해 0이 아닌 값을 반환해야 합니다.
- Margin Payload 위치 88h에서 9Fh에 해당하는 레지스터를 배치해서는 안 됩니다.
4.2.13.3 Receiver Margin Testing Requirements
소프트웨어는 수신기에서 Lane Margining을 수행하기 전에 다음 조건을 충족해야 합니다:
- 현재 링크 데이터 속도는 16.0 GT/s 이상이어야 합니다.
- 현재 링크 폭은 테스트할 레인을 포함해야 합니다.
- 업스트림 포트의 기능(Function)은 포트가 L1 링크 상태로 진입하지 못하도록 D 상태로 설정되어야 합니다. 자세한 내용은 Section 5.2를 참조하세요.
- 링크 제어 레지스터의 ASPM Control 필드는 다운스트림 및 업스트림 포트 모두에서 **00b(비활성화)**로 설정되어야 합니다.
- 링크 제어 2 레지스터의 Hardware Autonomous Speed Disable 비트와 Hardware Autonomous Width Disable 비트의 상태는 저장되어, 이 절차 후 나중에 복원될 수 있어야 합니다.
- 수정 가능하다면, 링크 제어 2 레지스터의 Hardware Autonomous Speed Disable 비트는 다운스트림 및 업스트림 포트 모두에서 설정(Set)되어야 합니다.
(만약 하드웨어적으로 0b로 고정되어 있다면, 자동 속도 변경 메커니즘이 구현되지 않으며 본질적으로 비활성화됩니다.) - 수정 가능하다면, 링크 제어 레지스터의 Hardware Autonomous Width Disable 비트는 다운스트림 및 업스트림 포트 모두에서 설정(Set)되어야 합니다.
(만약 하드웨어적으로 0b로 고정되어 있다면, 자동 폭 변경 메커니즘이 구현되지 않으며 본질적으로 비활성화됩니다.)
마진 작업 중, 소프트웨어는 다음을 보장해야 합니다:
- 모든 Margin Command는 Margining Lane Control Register의 Usage Model 필드가 0b로 설정되어야 합니다.
진행 중인 Margin Command의 상태를 확인할 때, 소프트웨어는 Margining Lane Status Register의 상태 부분에서 Usage Model 필드가 0b로 설정되었는지 확인해야 합니다. - 소프트웨어는 수신기가 제공하는 기능을 읽고, 제공된 기능의 제약 내에서 마진 작업을 수행해야 합니다.
명령 및 마진을 결정하기 위해 따르는 프로세스는 Section 4.2.13 및 Section 8.4.4에서 제공된 정의와 일치해야 합니다.
예를 들어, 포트가 전압 테스트를 지원하지 않는 경우, 소프트웨어는 전압 테스트를 시작하지 말아야 합니다.
추가적으로, 포트가 최대 2개의 레인 테스트를 지원하는 경우, 한 번에 1개 또는 2개의 레인만 테스트해야 하며, 이를 초과해서는 안 됩니다. - MIndErrorSampler가 1b로 설정된 수신기의 경우, 해당 수신기는 병렬로 마진 작업이 허용됩니다.
- MIndErrorSampler가 0b로 설정된 수신기의 경우, 한 번에 하나의 수신기만 마진 작업이 허용됩니다.
그러나 디바이스가 지원하는 레인의 최대 개수 내에서 여러 레인에 대해 동시에 마진 작업을 수행할 수 있습니다. - 소프트웨어는 Margining Lane Control Register에서 제공되는 Margin Command가 유효한 명령인지 확인해야 합니다(Section 4.2.13.1 참조).
예를 들어, Margin Type은 정의된 인코딩을 가져야 하며, Receiver Number 및 Margin Payload와 일치해야 합니다. - 소프트웨어는 Margining Lane Control Register에 명령을 원자적으로 작성한 후, 해당 명령이 완료되었는지 확인해야 합니다.이는 Margining Lane Status Register를 원자적으로 읽고, 상태 필드가 발행된 명령에 대한 예상 응답과 일치하는지 확인함으로써 수행됩니다(Table 4-25 참조). 새로운 Margin Command가 발행된 후 10ms가 경과했지만 읽은 값이 예상된 응답과 일치하지 않는 경우, 소프트웨어는 수신기가 응답하지 않을 것으로 간주하고, 해당 수신기가 마진 작업에 실패했음을 선언할 수 있습니다. No Command가 아닌 브로드캐스트 명령의 경우, 응답에 있는 Receiver Number는 Retimer Y 또는 Retimer Z의 Pseudo Ports 중 하나와 일치해야 합니다(Figure 4-35 참조).
- Margining Lane Status Register를 두 번 읽을 때는 최소 10µs 간격을 두어, 서로 다른 Control SKP Ordered Sets의 결과를 읽고 있는지 확인해야 합니다.
- 소프트웨어는 No Command를 브로드캐스트하고 완료되기를 기다려야 하며, Margining Lane Control Register에서 새로운 Margin Type, Receiver Number, 또는 Margin Payload를 발행하기 전에 이를 수행해야 합니다.
- 특정 방향(전압/타이밍 및 위/아래/왼쪽/오른쪽)에서의 마진 작업이 끝나면, 소프트웨어는 Go to Normal Settings, No Command, Clear Error Log, No Command를 다운스트림 및 업스트림 포트에 순서대로 브로드캐스트해야 하며, 각 명령이 대상 수신기에서 확인(acknowledge)된 후 진행해야 합니다.
- 마진 작업 중에 데이터 속도가 변경되면 결과(있을 경우)는 정확하지 않을 수 있으므로, 소프트웨어는 마진 작업을 종료해야 합니다. 데이터 속도가 이후에 16.0 GT/s 이상으로 변경될 가능성이 있는 경우, 소프트웨어는 Margining Lane Control Register를 No Command로 설정하여 마진 작업 시작을 방지해야 합니다.
- 소프트웨어는 긴 시간 동안 오류 정보를 수집하기 위해 마진 작업 진행 중에 주기적으로 Clear Error Log 명령을 발행할 수 있습니다.
- 소프트웨어는 대상 수신기의 전압과 타이밍을 동시에 마진 작업하려고 시도해서는 안 됩니다. 두 마진 위치를 동시에 변경하는 명령을 수신기가 수신하면 결과는 정의되지 않습니다.
- 소프트웨어는 테스트 중인 수신기에 의해 최소 10^8 비트가 마진 작업을 완료한 후에 다음 마진 스텝 위치로 전환해야 합니다(오류 한계가 초과되지 않는 한).
- 소프트웨어는 마진 시간이나 수신기에 의해 샘플링된 비트 수를 측정할 때, "마진 작업 준비 중(set up for margin in progress)" 상태를 고려해야 합니다.
- 대상 수신기가 Step Margin 명령 중 하나를 발행한 후 200ms 동안 "마진 작업 준비 중(set up for margin in progress)" 상태를 보고하는 경우, 소프트웨어는 수신기가 응답하지 않을 것이라고 간주하고, 마진 작업이 실패했음을 선언할 수 있습니다.
- 수신기가 Margin Payload 상태 필드에서 "NAK"를 보고하고, 해당 Step Margin 명령이 유효하며 허용 가능한 범위 내에 있었다고 판단되면(Section 4.2.13 및 Section 8.4.4 참조), 소프트웨어는 대상 수신기가 마진 작업에 실패했음을 선언할 수 있습니다.
- 마진 테스트 절차가 완료되면, Hardware Autonomous Speed Disable 비트와 Hardware Autonomous Width Disable 비트의 상태는 저장된 값으로 복원되어야 합니다.
7.7.7 Lane Margining at the Receiver Extended Capability
Figure 7-97 shows the layout of the Margining Extended Capability.
이 기능은 포트당 레지스터 pair과 Lane당 레지스터 세트를 포함합니다.
The number of per-Lane entries is determined by the 32 entries are permitted regardless of the Maximum Link Width (see Section 7.5.3.6 or Maximum Link Width. The value of entries beyond the undefined.
Each per-Lane entry contains the values for that Lane. Lane numbering uses the default Lane number and is thus invariant to Link width and Lane reversal negotiation that occurs during Link training
7.7.7.2 the Receiver Extended Capability Header (Offset 00h)
7.7.7.2 Margining Port Capabilities Register(Offset 04h)
7.7.7.3Margining Port Status Register(Offset 06h)
7.7.7.4 Margining Lane Control Register(Offset 08h)
Bit Locaton | Register Decription | Attributes |
2:0 | Receiver Number The default value is 000b This field must be reset to the default value if the Port goes to DL_Down status. |
RW |
5:3 | Margin Type The default value is 111b This field must be reset to the default value if the Port goes to DL_Down status. |
RW |
6 | Usage Model The defult value is 0b This field must be reset to the default value if the Port goes to DL_Down status. |
RW |
15:8 | Margin Payload This field`s value is used in conjunction with the Margin Type field. The default value is 9Ch This field must be reset to the default value if the Port goes to DL_Down status. |
RW |
7.7.7.5Margining Lane Status Register(Offset 0Ah)
Bit Locaton | Register Decription | Attributes |
2:0 | Receiver Number Status The default value is 000b |
RO |
5:3 | Margin Type Status The default value is 111b |
RO |
6 | Usage Model Status The defult value is 0b |
RO |
15:8 | Margin Payload Status This field is oly meaningful, when the Margin Type is a defined encoding other than 'No Command'. The default value is 00h |
RO |
8.4.4 Lane Margining at the Receiver - Electrical Requirements
16.0 GT/s 속도를 지원하는 리타이머를 포함한 PCI Express 컴포넌트는 16.0 또는 32.0 GT/s로 동작할 때 Receiver 에서 Lane Margining을 지원해야 합니다. Lane Margining은 시스템 소프트웨어가 L0 상태의 링크에서 특정 Lane의 Margin 정보를 획득할 수 있게 해줍니다. 이 Margin 정보는 현재 Receiver의 위치에서 전압과 시간 모두를 포함하며, 양방향으로 제공됩니다. Margin 기능을 위해 추가적인 외부 하드웨어가 필요하도록 요구하는 것은 허용되지 않습니다.
- 전압에 대한 Lane Margining 지원은 16.0 GT/s에서 선택 사항이며, 32.0 GT/s에서는 필수입니다.
- 독립적인 타이밍 Margin을 왼쪽 또는 오른쪽으로 지원하는 것은 선택 사항입니다.
단순화를 위해 이 사양의 프로토콜 장(들)에서는 Margin 명령 및 요구사항을 데이터 샘플 위치를 이동하는 형태로 설명하지만, 실제 Margining 방법은 구현에 따라 다를 수 있습니다. 예를 들어, 타이밍 Margin은 실제 데이터 샘플러 또는 독립적 오류 샘플러에 구현될 수 있습니다. 또한 타이밍 Margin은 데이터 샘플 위치에 적절한 스트레스/지터를 주입하거나 실제로 데이터/오류 샘플 위치를 이동하여 달성할 수 있습니다.
표 8-11에 나와 있는 매개변수는 16.0 및 32.0 GT/s에 대해 보고되며, 각 속도에 따라 다를 수 있습니다.
Parameter Name | Min | Max | Description |
MMaxTimingOffSet | 20 | 50 | 기본값으로부터 최대 단계값의 오프셋은 명목 UI의 백분율로 표시됩니다. 벤더가 오프셋을 보고하지 않기로 선택한 경우, 0 값이 보고될 수 있습니다. |
MNumVoltageSteps | 32 | 127 | 기본값으로부터의 전압 단계 수(위 또는 아래)는 참조 이퀄라이저에 의해 측정된 최소 범위 ±50mV여야 합니다. 전압 오프셋은 단조 증가해야(increase monotonically) 합니다. 기본 샘플 위치에서 양수 및 음수 방향의 단계 수는 동일해야 합니다. MVoltageSupported가 0b인 경우, 이 값은 정의되지 않습니다. |
MMaxVoltageOffset | 5 | 50 |
기본값으로부터 최대 단계값의 오프셋은 1볼트의 백분율로 표시됩니다.
MVoltageSupported가 1b일 때, 벤더가 오프셋을 보고하지 않기로 선택하면 0 값이 보고될 수 있습니다. MVoltageSupported가 0b인 경우, 이 값은 정의되지 않습니다. |
MSamplingRateVoltage | 0 | 63 | 전압 마진 측정 중 테스트된 비트 수와 수신된 비트 수의 비율입니다. 값이 0이면 1:64의 비율(수신된 비트 64개당 1개 비트 테스트)이고, 값이 63이면 64:64의 비율(모든 비트가 수신됨)입니다. |
MsamplingRateTiming | 0 | 63 | 타이밍 마진 측정 중 테스트된 비트 수와 수신된 비트 수의 비율입니다. 값이 0이면 1:64의 비율(수신된 비트 64개당 1개 비트 테스트)이고, 값이 63이면 64:64의 비율(모든 비트가 수신됨)입니다. |
MvoltageSupported | 0 | 1 | 1b indicates that voltage margining is supported |
MIndLeftRightTiming | 0 | 1 | 1b는 독립적인 좌/우 타이밍 마진이 지원됨을 나타냅니다. |
MIndUpDownVoltage | 0 | 1 | 1b는 독립적인 상/하 전압 마진이 지원됨을 나타냅니다. |
MIndErrorsampler | 0 | 1 | 1b: 마진 측정은 데이터 스트림에서 오류를 발생시키지 않습니다 (즉, 오류 샘플러가 독립적임). 0b: 마진 측정은 데이터 스트림에 오류를 발생시킬 수 있습니다. |
MMaxLanes | 0 | 31 | Maximum number of Lanes - 1 가 동시에 마진 측정할 수 있는 최대 마진 수 입니다. 이 값은 링크 내 Lane 수 - 1보다 크거나 같을 것을 권장합니다. 소프트웨어가 동시에 MMaxLanes + 1보다 많은 Lane을 마진 측정하려고 시도하면 인코딩 동작은 정의되지 않습니다. 참고: 이 값은 링크 내 Lane 수 - 1을 초과하는 것이 허용됩니다. |
MSampleReportingMethod | 0 | 1 | 샘플링 비율이 지원되는지 (MSamplingRateVoltage and MSamplingRateTiming) 또는 샘플 수가 지원되는지(0)를 나타냅니다. 각 장치는 이 두 가지 방법 중 하나를 지원합니다. |
MErrorCount | 0 | 63 | MIndErrorSampler가 1b이면, 이는 마진 측정 시작 이후의 실제 비트 오류 수를 나타냅니다. MIndErrorSampler가 0b이면, 이는 마진 측정 시작 이후의 논리적 오류 수를 나타냅니다. 오류의 정의에 대해서는 Physical Layer Logical Block 장을 참조하십시오. 그 MErrorCount 는 63에서 포화됩니다. |
MSampleCount | 0 | 127 | Value = 3 * log₂(마진 측정된 비트 수) 여기서 마진 측정된 비트 수는 마진 측정 중 테스트된 실제 비트 수를 의미합니다. 개수는 마진 측정이 중단될 때 멈추며, 127에서 포화됩니다 (약 5.54 × 10¹² 비트 이후). 새로운 마진 명령을 수신하면 개수는 0으로 초기화됩니다. |
PCIe Lane Margining – What changed from Gen4 to Gen6?
새로운 PCIe 6.0 기본 사양이 출시되면서, NRZ(Non-Return-to-Zero)에서 PAM4(4-Level Pulse Amplitude Modulation)로의 전환은 놀라운 일이 아닙니다. 64GT/s에서 Nyquist 주파수 문제를 해결하기 위해 PAM4가 도입되었습니다. 이는 주파수가 32GHz로 두 배 증가하면서 발생하는 주파수 의존 손실이 70dB로 증가하는 문제를 해결합니다.
PAM4 신호 방식을 사용하면 무결성, 채널 손실 및 하위 호환성과 관련된 문제를 해결할 수 있지만, 설계 검증의 복잡성이 증가합니다. PCIe 5.0까지는 수신기에서 Lane margining을 위해 NRZ(Non-Return-to-Zero)가 사용되었으나, PCIe 6.0에서는 PAM4가 사용됩니다. PAM4는 단위 간격(UI)당 두 비트를 전송하는 다중 수준 신호 기술로, 전통적인 NRZ는 단위 간격(UI)당 하나의 비트만 전송하는 방식과 다릅니다. PAM4는 두 비트를 네 개의 전압 수준을 사용해 인코딩하므로, PCIe 4.0에서 PCIe 6.0으로의 Eye Diagram에서 변화가 발생합니다
PAM4 신호 방식에서는 추가적인 전압 수준이 Eye Height를 3배 줄여주며, 이로 인해 Eye Width가 NRZ의 1/2에서 2/3으로 이동하게 됩니다. 이제 하나의 Eye 대신 세 개의 Eye가 생깁니다. Eye는 전압 영역뿐만 아니라 시간 영역에서도 더 작아집니다.
두 전압이 동일하지 않기 때문에, 전압 차이로 인해 세 개의 Eye는 절대 동일한 너비나 높이를 가지지 않습니다.
가운데 Eye는 세 개 중에서 가장 대칭적인 형태를 가지고 있으며, 상단 Eye와 하단 Eye는 가운데 Eye와 거의 일치하지 않습니다.
명령어에 대해 이야기하자면, Step Margin 명령은 모든 Eye에 동시에 적용되므로 Margin 명령을 실행하는 데 차이가 없습니다. 소프트웨어/Margin 명령 흐름은 동일하게 유지됩니다.
수신기에서 Lane Margining을 달성하기 위해, PCIe 4.0 사양에 정의된 대로 Control SKP Ordered Sets를 사용하여 명령을 전송합니다.
PCIe 6.0에서는 Control SKP의 형식이 1b/1b 인코딩을 사용하게 되어, Control SKP의 비트 필드 위치가 변경되었습니다. 아래는 PCIe 6.0과 PCIe 4.0 Control SKP Ordered Set의 비교입니다.
위의 내용 외에도, Eye Height와 Eye Width가 변경되었기 때문에, PCIe 6.0은 네 가지 새로운 매개변수(MNumTimingStepsPAM4, MNumVoltageStepsPAM4, MMaxTimingOffsetPAM4, MMaxVoltageOffsetPAM4)를 도입했습니다.
이제 가장 중요한 질문은 "어떻게 설계를 검증할 것인가?" 입니다.
출처)
PCIe Lane Margining - What changed from Gen4 to Gen6? | ChipEstimate.com
PCIe Lane Margining - What changed from Gen4 to Gen6? | ChipEstimate.com
Semiconductor IP News and Trends Blog PCIe Lane Margining – What changed from Gen4 to Gen6? October 31, 2022 With new PCIe 6.0 Base specifications rolled out, the move from NRZ (non-return-to-zero) to PAM4 (4-Level Pulse Amplitude Modulation) is no surpr
www.chipestimate.com
'PCIe' 카테고리의 다른 글
[굿썸] Lane Margining at Receiver (0) | 2024.12.20 |
---|---|
Hot Plug and Power Budgeting (0) | 2024.12.11 |
DevCon Korea 2024 - PCIe 6.x Electrical Update (4) | 2024.10.08 |
DevCon Korea 2024 - PCIe Basics & Background (1) | 2024.09.27 |
PCI-SIG Developers Conference Korea 2024 (4) | 2024.09.20 |