백서

타임스탬프

A10PL4 타이밍 키트 클로즈업

개요

FPGA 제품의 고속 기능으로 인해 타임스탬핑이 어려울 수 있습니다. 비트웨어는 A10PL4 타이밍 키트(사진)와 같은 전용 애드온 모듈, 베이스 카드의 동축 입력, Atomic Rules TimeServo와 같은 IP 지원을 포함한 다양한 솔루션을 제공합니다.

많은 비트웨어 FPGA 카드는 두 개의 동축 입력을 제공합니다. 하나의 입력은 1PS 시간 동기화 신호용입니다. 다른 하나는 10MHz 레퍼런스 클럭용입니다. 이 조합을 사용하면 입력 데이터에 매우 정확한 타임스탬프를 첨부할 수 있습니다. 또한 BittWare는 IEEE-1588 PTP 프로토콜로 제어되는 100GbE 이더넷 패킷 타임스탬프의 구현 예제도 제공합니다. BittWare의 SmartNIC Shell 레퍼런스 디자인은 Atomic Rules에서 라이선스를 취득한 FPGA 내부의 타임 서보를 사용합니다.

두 개의 동축 입력은 카드 사용자가 다양한 타임스탬프 시스템 구성에 필요한 모든 것입니다. 다음 단락에서 제공하는 기능과 정확성에 대해 자세히 설명합니다.

시간 서보

AMD의 이더넷 MAC은 타임스탬프를 적용할 수 있습니다. 그러나 AMD IP는 사용자가 정확한 타임스탬프를 제공해야 하며, 이를 통해 MAC은 각 패킷을 통과하는 각 패킷과 연결합니다. 정확한 타임스탬프의 생성 및 유지 관리는 사용자가 제공한 IP의 책임입니다.

간단히 말해, 250MHz 클럭에 연결된 4나노초 단위로 증가하는 카운터를 제공하는 것만으로도 간단하게 구현할 수 있습니다. 이 구현은 보드의 크리스탈만큼 정확할 것입니다. 시간대와 동기화하기는 어려울 것입니다. 외부 1 PPS 신호가 카운터의 가장 중요하지 않은 비트 중 일부를 매초 리셋하도록 허용하여 정확도와 동기화를 모두 개선할 수 있습니다.) 그러나 카운터가 실제 시간보다 빠르게 실행되는 경우 이렇게 하면 타임스탬프가 거꾸로 흐르게 됩니다. 타임스탬프가 거꾸로 흐르면 일부 인기 있는 애플리케이션 소프트웨어가 손상되는 것으로 알려져 있으므로, 더 나은 해결책은 어떻게든 1PS 신호를 사용하여 FPGA의 타임스탬프 클럭을 느리게 하거나 빠르게 하는 것입니다. 이것이 바로 타임 서보가 하는 일입니다.

시간 서보 구현은 외부 하드웨어를 사용할 수 있습니다. 일부 BittWare의 로우 프로파일 카드에 대한 정밀 타이밍 모듈 옵션에는 칩 기반 시간 서보가 포함되어 있습니다. 그러나 BittWare는 일반적으로 FPGA 내부에 들어가는 원자 규칙 시간 서보 IP를 고려할 것을 권장합니다.

하드웨어 또는 소프트웨어 기반의 모든 시간 서보의 기능은 Linux 커널과 연결된 시간 서보 API에 의해 정의됩니다. Linux 커널에는 시간 서보를 조작하기 위한 사용자 수준 API가 있습니다. API는 Kernel.org에 설명되어 있습니다. 사용자는 시간을 설정하거나, 설정된 오프셋만큼 시간을 이동하거나, 클럭 속도를 위아래로 조정할 수 있습니다. 이는 모든 시간 서보가 지원해야 하는 기본 기능입니다. 리눅스에서 구현된 PTP는 이 시계 API를 사용합니다. 안타깝게도 비트웨어의 SmartNIC 레퍼런스 디자인에는 이더넷 드라이버가 없으므로 이 Linux 프로토콜을 활성화할 수 없습니다. 애니타임 서보 구현에서 예상되는 기능에 대한 설명은 Linux API를 참고하시기 바랍니다.

비트웨어의 SmartNIC는 DPDK를 지원합니다. DPDK에는 시간 서보를 조작하기 위한 사용자 수준 API가 있습니다. rte_eth_timesync_adjust_time, rte_eth_timesync_read_time, rte_eth_timesync_write_time 함수를 찾아보세요. 아토믹 룰즈는 시간 서보를 위해 이 DPDK API의 구현을 제공합니다. 그러나 사용자는 이를 사용하려면 Atomic Rules Arkville PCIe DMA 블록도 획득해야 합니다. 이 DPDK API는 두 아토믹 룰스 블록을 모두 라이선스하고자 하는 고객을 위해 비트웨어의 SmartNIC 레퍼런스 디자인에 완벽하게 구현되어 있습니다. 마지막으로, Atomic Rules는 호스트에서 이더넷이나 DPDK 없이도 FPGA 내부에서 실행할 수 있는 PTP를 완벽하게 구현합니다.

올바른 시계 조정

사용자가 호스트 컴퓨터의 이더넷 포트를 PTP 전용으로 지정한 다음 해당 시간을 FPGA 보드와 동기화하려고 시도하는 것을 보았습니다. 이 방법은 FPGA 카드에 1 PPS 신호가 있는 경우에만 작동합니다. 그렇지 않으면 매우 부정확한 값을 얻을 수 있습니다. 문제는 PTP가 NIC ASIC 내부의 타임스탬프 클럭을 조정한다는 것입니다. PTP는 마더보드 클럭을 직접 조정하지 않습니다. 1 PPS가 없으면 세 가지 클록(NIC, 마더보드, FPGA)을 모두 긴밀하게 동기화할 수 있는 방법이 없습니다. 1 PPS 없이 타임스탬프 정확도를 높이려면 PTP 패킷이 FPGA 카드를 통과해야 합니다. 따라서 사용자는 모든 PTP 구현(이더넷 드라이버를 통한 호스트, DPDK 드라이버를 통한 호스트 또는 FPGA 내부에서 실행되는 원자 규칙 PTP)으로 흐르는 PTP 패킷에 타임스탬프를 찍기 위해 FPGA의 QSFP 네트워크 포트 중 하나가 필요합니다.

상품 크리스탈이 있는 PTP

많은 BittWare 카드에 있는 10MHz 입력을 통해 사용자는 애플리케이션에 필요한 모든 품질의 타이밍 레퍼런스 신호를 공급할 수 있습니다. 이 신호가 없으면 BittWare의 FPGA 카드는 약 20~30ppm의 잠재적 오차(안정성, 지터 및 허용 오차 결합)를 가진 상용 수정 발진기를 사용합니다. 따라서 FPGA 보드의 타임스탬프 클럭은 매초 20마이크로초 정도 위아래로 오차가 발생할 수 있습니다. 외부 신호(1 PPS 또는 IEEE 1588)로 수정하지 않고 방치하면 오류가 하루에 최대 1.7초까지 늘어날 수 있습니다. 즉, 홀드 오버(PPS 신호 손실)가 애플리케이션에 중요한 경우 외부 10MHz 타이밍 레퍼런스를 연결해야 합니다.

20~30ppm의 잠재적 오류는 컴퓨터실에서는 경험할 수 없는 온도 및 전압의 큰 변화와 관련이 있습니다. PTP 시간 동기화 프로토콜을 잘 구현하면 수정의 허용 오차와 장기적인 오류 구성 요소를 숨길 수 있으므로 수정의 단기 지터에만 주로 신경을 쓰게 됩니다. 일부 공급업체는 컴퓨터실에서 추가 1 PPS 없이 상용 크리스털을 사용하여 PTP를 잘 구현하면 그랜드마스터와 +/- 1 마이크로초 동기화를 달성할 수 있다고 주장합니다. 다른 사람들은 더 특수한 하드웨어 없이 이 정도의 정확도를 달성할 수 있을지에 대해 회의적입니다.

이 조합의 실제 정확도가 어떻든, 트위터가 알고 있는 유일한 법적 정확도 요건을 충족하기에는 충분할 것입니다. 자동 거래로 트리거된 금융 거래의 타임스탬프에 대한 유럽의 ESMA 법적 요건은 불확실성이 100마이크로초를 넘지 않는 UTC 기준입니다.

GPS 정확도

애플리케이션을 하루 중 시간과 동기화해야 하는 경우 대부분의 사용자는 GPS 위성 별자리에서 제공되는 원자 시계를 활용합니다. 각 위성에는 연간 0.5나노초 이상 정확한 루비듐 원자 시계가 포함되어 있습니다. 하지만 이 시계와 FPGA 보드 사이에는 많은 회로와 대기가 있습니다. 이 때문에 몇 시간 동안 GPS 시간 신호는 약 14나노초의 정확도를 유지합니다. 안타깝게도 대기 효과는 50~300나노초의 GPS 신호에 단기 지터를 발생시킵니다. 고가의 GPS 수신기는 GPS 신호를 매우 정확한 로컬 클록(이중 오븐 크리스탈 또는 원자)과 혼합하여 이러한 지터를 제거할 수 있습니다. 이러한 수신기는 GPS 시간 신호의 전위 14ns에 가까운 신호를 전달하기 위해 몇 시간 동안 켜져 있어야 합니다.

높은 정확도를 얻으려면 GPS 수신기와 FPGA 보드 사이에 동기화 신호를 연결해야 합니다. 대부분의 수신기에서 이 신호는 수신기의 1PPS 출력입니다. 대략적인 시간을 수신하려면 별도의 연결이 필요합니다. 이 다른 연결을 "타임 코드"라고 합니다. 가장 일반적인 타임 코드는 구식 직렬 포트를 통해 흐르는 독점적인 ASCII 프로토콜입니다. 그러나 일부 수신기에서는 프로토콜 IRIG A, B, G 또는 NASA36의 AM 또는 DCLS(직류 레벨 시프트) 전송을 통해 BNC 커넥터를 통해 표준 타임 코드를 제공하기도 합니다. 현재 비트웨어 카드는 타임 코드를 직접 수신하는 데 필요한 하드웨어를 제공하지 않습니다. 사용자는 보드의 호스트 컴퓨터를 통해 타임 코드를 전송해야 합니다.

IEEE-1588 설치에서는 일반적으로 그랜드마스터만 GPS 리시버에 직접 연결됩니다. 해당 수신기의 1PS 신호를 모든 PTP 소비자에게 배포하는 경우는 매우 드물며, GPS 10MHz 클럭을 PTP 소비자에게 배포하는 경우는 더욱 드뭅니다. 따라서 이러한 스타일의 설치에서 이중 오븐 안정화 GPS 수신기에 많은 비용을 지출하는 것은 비용 효율적이지 않습니다. PTP 소비자들이 단 몇 마이크로초 이내로 동기화할 가능성이 높은데 그랜드마스터가 시간을 14ns 이내로 유지한다고 해서 누가 신경을 쓸까요?

여러 FPGA 카드 동기화

사용자가 장비 랙과 같이 좁은 공간에 함께 배치된 여러 FPGA 보드 간에 타임스탬프를 동기화하려는 애플리케이션이 있습니다. 이 경우 모든 보드에 동일한 1PS 보정 신호와 10MHz 시간 레퍼런스를 배포하는 것이 실용적입니다. 타임스탬프는 얼마나 근접할까요?

공칭 클럭이 400MHz인 원자 규칙 시간 서보를 사용한다고 가정해 보겠습니다. 즉, 각 클럭 틱의 길이는 대략 2.5ns입니다. 그러나 100GbE에서 시간 서보는 약 322MHz(3.1ns)로 실행되는 AMD CMAC에 비동기적으로 출력을 공급합니다. 이러한 비동기 신호가 어떻게 혼합되는지는 잘 문서화되어 있지 않습니다. 하지만 실험을 통해 이 구성의 타임스탬프 값이 카드 간에 3~4ns 이내로 떨어지는 경향이 있음을 발견했습니다.

비트웨어가 10MHz 클럭 입력을 지원하는 것은 이례적인 일입니다. 전용 패킷 캡처 카드에는 일반적으로 10MHz 레퍼런스 입력이 없습니다. 대신 고품질 크리스털 오실레이터가 포함되어 있습니다. 그러나 멀티 보드 동기화가 필요한 경우 공통 레퍼런스 클럭을 사용하면 도움이 됩니다. 따라서 BittWare 접근 방식은 정확도는 약간 떨어지지만(크리스탈이 적음) 훨씬 더 정확해질 수 있으며(실험실 품질의 레퍼런스 클럭 사용) 여러 카드 간에 시간을 훨씬 더 정확하게 동기화할 수 있습니다.

SmartNIC 참조 설계의 타임스탬프

비트웨어의 SmartNIC 100GbE 레퍼런스 디자인에는 타임스탬프 지원이 포함되어 있습니다. 이 설계는 원자 규칙 시간 서보를 사용합니다. 이 제품은 DPDK의 PTP 클라이언트 샘플 애플리케이션을 사용하여 PTP 프로토콜을 처리하고 시간 서보를 제어합니다( https://doc.dpdk.org/guides/sample_app_ug/ptpclient.html).

SmartNIC 파이프라인에는 PTP 패킷을 식별하는 키 필터가 있습니다. 현재 이 필터에는 파서가 포함되어 있지 않으므로 "부록 F, IEEE 802.3/이더넷을 통한 PTP 전송" 패킷만 식별할 수 있습니다. 이후 BittWare는 UDP 및 TCP를 통한 PTP를 지원하기 위해 배포할 수 있는 파서를 만들었습니다.

타임스탬프 사용자에게 SmartNIC 레퍼런스 디자인에서 가장 유용한 블록은 아마도 BittWare의 CMAC LBus to AXI4-Streaming 개스킷일 것입니다. 이 버전은 필요한 타임스탬프 수학을 처리합니다.

결론

많은 비트웨어 FPGA 카드의 기존 기능을 통해 "충분함"에서 "시간 실험실 참조"에 이르기까지 애플리케이션에 필요한 정확도까지 타임스탬프를 유지하는 데 필요한 모든 것을 갖추고 있습니다. Atomic Rules와의 파트너십을 통해 애플리케이션에 필요한 모든 타임스탬프 배관을 제공하므로 카드 사용자는 회사 고유의 부가 가치에 집중할 수 있습니다.