고급 패시브 히트싱크가 장착된 XUP-P3R

백서

비트웨어의 루프백 앱 노트 및 예제 소개

개요

비트웨어의 루프백 예시는 몇 가지를 보여줍니다:

  • 설계에서 Xilinx CMAC를 완벽하게 사용하는 방법. 여기에는 DAC 케이블 길이에 따른 서데스 전송 프리 엠퍼시스 값 설정이 포함됩니다. 또한 AN/LT 기능(옵션)을 구성하고 활성 QSFP 트랜시버에서 수신된 인터럽트를 처리하는 방법도 포함되어 있습니다.
  • Xilinx HLS/C++를 사용하여 패킷 처리 파이프라인을 구성하는 방법. 비트웨어는 패킷 처리를 위해 RTL 또는 P4를 사용하는 대신 HLS/C++를 권장합니다.
  • Python을 BittWare 툴킷과 함께 사용하여 PCIe 보드의 제어 플레인을 조작하는 방법. 또한 원격 호스트에서 Python Scapy를 사용하여 패킷 지향 비트 스트림을 테스트하는 방법(https://scapy.net/).
  • 디버그 작업을 지원하기 위해 글로벌 통계 레지스터 스냅샷을 구현하는 방법.

기능

루프백의 기능은 이 예제의 주요 초점이 아닙니다. 위에 나열된 모든 글머리 기호 항목을 시연하는 데 중점을 두었습니다. 하지만 루프백은 가치가 있습니다. 비트웨어는 NIC 카드 및 스위치와 같은 타사 장치에 연결할 때 DAC 케이블 설정을 검증하는 데 루프백을 사용합니다.

루프백에는 처리할 프레임을 선택하는 L2 필터가 포함되어 있습니다. 해당 프레임에 IPv4 패킷이 포함된 경우 루프백은 MAC 계층과 IP 계층 모두에서 소스 및 대상 주소를 교환합니다. 루프백은 ARP 패킷에 응답할 수 있습니다. 이 기능은 타사 디바이스의 특수 구성에 대한 요구 사항을 없애기 위해 추가되었습니다.

루프백은 입력에서 출력으로 패킷을 반복하는 단일 QSFP 케이지에서 작동합니다. 추가 QSFP 케이지가 사용되지 않습니다.

루프백 블록 다이어그램

하드웨어

이 루프백은 속도 등급 2의 자일링스 VU9P 칩이 포함된 BittWare XUP-P3R 보드에서 설계 및 테스트되었습니다. 루프백은 외부 메모리를 사용하지 않으며 CMAC가 포함된 모든 BittWare Xilinx UltraScale+ 칩에 포팅해야 합니다.

FPGA 비트스트림 개요

루프백의 FPGA 비트스트림에는 여러 컴포넌트가 포함되어 있습니다. 각 컴포넌트에는 입력과 출력 모두에 AXI4 스트림 인터페이스가 있으며, 이 인터페이스를 데이터 플레인으로 통합하여 사용합니다. 비트스트림의 컨트롤 플레인은 물리적 PCIe 인터페이스에 연결된 AXI4-Lite 인터페이스를 사용합니다.

디자인 흐름

루프백은 자일링스 IP 통합기 프로젝트로 제공됩니다. 여러 컴포넌트는 Verilog로 작성되었습니다. 세 개는 Verilog를 출력하는 Xilinx HLS 플로우를 사용하여 작성되었습니다.

현재 구현에서는 HLS로 작성된 세 가지 컴포넌트를 IP 통합자의 관점에서 단일 컴포넌트로 그룹화합니다. 그러나 이 세 가지 컴포넌트는 여기에 별도로 문서화되어 있습니다. 실제로는 4개의 별개의 컴포넌트로 문서화되어 있습니다. 이는 HLS 컴포넌트들이 공통의 "파서 라이브러리"를 공유하기 때문에 반복을 피하기 위해 별도로 문서화했기 때문입니다.

빈 제목

BittWare IP를 통한 AXI4 흐름
BittWare IP를 통한 AXI4 흐름

재설정 및 통계

원칙적으로 재설정 시 모든 구성 요소는 활성화된 상태로 초기화되지만, '최소한의 피해'를 주는 모드로 초기화됩니다. 그런 다음 루프백이 성공적으로 작동하기 전에 소프트웨어에서 구성 요소를 구성해야 합니다.

또한 각 컴포넌트는 사용자가 하드웨어 또는 소프트웨어를 디버깅하는 데 도움이 되는 통계 레지스터를 노출합니다. 모든 통계 레지스터 값이 제 시간에 동기화되도록 스냅샷 신호가 포함되어 있습니다.

AXI 인터페이스

비트스트림의 인터페이스 폭과 클럭 속도는 100기가비트 이더넷 트래픽을 호스팅하기 위해 선택되었습니다. 데이터 플레인의 AXI4 스트림 인터페이스 폭은 512비트입니다. CMAC에 닿는 부분을 제외하고 인터페이스는 300MHz로 클럭됩니다. 프레임 메타데이터는 별도의 버스인 AXI TUSER 비트를 통해 이동하며, AXI TLAST가 높을 때 유효한 데이터를 전송합니다.

메타데이터는 비트스트림 전체에서 일관되지 않습니다. 따라서 각 컴포넌트와 관련된 문서에는 해당 컴포넌트가 입력 시 기대하는 메타데이터와 출력 시 전달되는 메타데이터가 설명되어 있습니다.

참고: 이 루프백 구현에서 메타데이터는 프레임 데이터를 따릅니다. 이는 NetFPGA.org 학술 팀이 내린 설계 결정과 반대입니다. 이 팀은 각 프레임의 목적지를 미리 아는 것이 도움이 되는 라우터 구축에 최적화했습니다. 반면 루프백은 비트스트림 크기와 지연 시간을 중심으로 최적화되었습니다. 후행 메타데이터는 각 컴포넌트 내에서 버퍼링이 덜 필요합니다.

비트스트림 제어 인터페이스는 32비트 폭의 AXI4-Lite 슬레이브입니다. 모든 읽기 및 쓰기는 32비트입니다. 바이트 순서가 중요한 경우 루프백은 제어 레지스터가 네트워크 또는 빅 엔디안 바이트 순서로 데이터를 보유할 것으로 예상합니다.

컴포넌트 자체에 대한 설명과는 별도로 컴포넌트 컨트롤 플레인 레지스터를 한 곳에 문서화합니다. 사용자가 두 위치 사이를 탐색할 수 있도록 상호 참조가 존재합니다. 루프백의 제어 레지스터에 사용되는 메모리 맵은 Xilinx HLS 툴 체인에서 AXI4-Lite 인터페이스 구현의 요구 사항에 따라 크게 영향을 받습니다.

사용된 AXI의 공식적인 정의는 여기에서 제공되는 자일링스 "AXI 참조 가이드"( https://www.xilinx.com/support/documentation/ip_documentation/ug761_axi_reference_guide.pdf)에서 확인할 수 있습니다.

컨트롤 플레인 소프트웨어 개요

BittWare 루프백 예제는 호스트 컴퓨터에 삽입된 PCIe 카드에서 실행됩니다. BittWare는 예제의 기능을 제어하기 위해 해당 호스트 컴퓨터용 소프트웨어를 제공합니다. 제어 소프트웨어는 호스트에서 실행되는 Python 3을 사용합니다.

이 예제의 소프트웨어는 비트웨어의 비트웍스 II 툴킷 위에 빌드됩니다. 좀 더 구체적으로 설명하면, BwHIL 및 BmcLib 라이브러리에 Python 바인딩을 추가합니다. 그런 다음 예제의 비트스트림이 PCIe 주소 공간에 노출하는 레지스터를 조작하기 위해 생성된 Python 컴포넌트 모음 내에서 이러한 바인딩을 활용합니다.

또한 루프백 예제 비트스트림은 일부 하드웨어 이벤트를 PCIe 인터럽트로 변환합니다. 이를 지원하기 위해 루프백의 소프트웨어는 이러한 인터럽트를 파이썬 호출로 변환합니다.

루프백 예제 비트스트림과의 아주 기본적인 상호작용을 예로 들어 설명하겠습니다:

$ # 먼저 툴킷의 명령줄을 사용하거나 GUI를 사용하여 PCIe 카드를 매핑합니다.
                $ bwconfig --add=usb # 먼저 USB를 통해 장치 0으로 매핑합니다.
                bwconfig --add=pci # 장치 1과 동일한 카드를 PCIe에 매핑합니다.
                $ python3 # python3 호출
                components.hildev에서 * 임포트 * >>>
                >>> card = Card(1)
                >>> card.show_stats() # 모든 구성 요소의 모든 통계를 표시합니다.
                >>> # 몇 가지 옵션과 함께 첫 번째 CMAC 컴포넌트의 통계만 표시합니다.
                >>> card.cmac[0].show_stats(showall=False,  doTick=False)
                >>> help()
                >>> exit()
                

모든 Python 컴포넌트는 공통의 저수준 메서드 모음을 지원합니다. Python 구현에는 PCIe 메모리 맵이 하드 코딩되어 있지 않다는 점에 유의하세요. 대신 Python은 사용 가능한 FPGA 비트스트림 컴포넌트, 레지스터, 레지스터가 PCIe 주소 공간에서 어디에 위치하는지 정의하는 JSON 데이터베이스를 읽습니다. 이 JSON 데이터베이스는 루프백 예제의 문서에서 자동으로 생성됩니다.

Python API 문서 전문은 비트웨어의 개발자 사이트에서 확인할 수 있습니다.

낮은 수준의 방법에는 다음이 포함됩니다:

  • list_regs()
  • find_reg(pattern)
  • list_fields()
  • find_field(pattern)
  • 읽기32(), 쓰기32()
  • 읽기64(), 쓰기64()
  • reg_get(), reg_set()
  • MATON64(MACADDR), N64TOMA(VAL64)

사용 가능한 더 높은 수준의 방법은 특정 구성 요소에 따라 다릅니다. 그러나 몇 가지 방법은 비교적 일반적입니다:

  • enable()
  • show()
  • show_stats()

루프백에 대해 자세히 알고 싶으신가요?

루프백에 대한 자세한 내용은 앱 노트에서 무료로 다운로드할 수 있으니 아래 양식을 통해 지금 바로 받아보세요!

앱 노트 받기

즉시 PDF 다운로드

이 페이지에 표시된 것은 루프백 예제에 대한 소개입니다. 전체 앱 노트에는 훨씬 더 자세한 내용이 있으며, 무엇보다도 무료로 다운로드할 수 있습니다! 양식을 작성하여 전체 앱 노트의 PDF 버전에 대한 액세스를 요청하세요.

"*"는 필수 필드를 나타냅니다.

이름*
이 주소를 사용하여 PDF가 전송되므로 이 이메일이 활성 이메일인지 확인하세요.
주소 및 도시*