백서
비트웨어의 루프백 앱 노트 및 예제 소개
개요
비트웨어의 루프백 예시는 몇 가지를 보여줍니다:
- 설계에서 자일링스 CMAC를 완벽하게 사용하는 방법. 여기에는 DAC 케이블 길이에 따라 서데스 전송 프리 엠퍼시스 값 설정이 포함됩니다. 또한 옵션인 AN/LT 기능을 구성하고 활성 QSFP 트랜시버에서 수신한 인터럽트를 처리하는 방법도 포함됩니다.
- Xilinx HLS/C++를 사용하여 패킷 처리 파이프라인을 구성하는 방법. BittWare는 패킷 처리를 위해 RTL 또는 P4를 사용하는 대신 HLS/C++를 권장합니다.
- Python을 BittWare 툴킷과 함께 사용하여 PCIe 보드의 제어 플레인을 조작하는 방법. 또한 원격 호스트에서 Python Scapy를 사용하여 패킷 지향 비트 스트림을 테스트하는 방법(https://scapy.net/).
- 디버그 작업을 지원하기 위해 글로벌 통계 레지스터 스냅샷을 구현하는 방법을 알아보세요.
기능
루프백의 기능은 이 예제의 주요 초점이 아닙니다. 위에 나열된 모든 글머리 기호 항목을 시연하는 데 중점을 두었습니다. 하지만 루프백은 가치가 있습니다. BittWare는 NIC 카드 및 스위치와 같은 타사 장치에 연결할 때 DAC 케이블 설정을 검증하는 데 이 기능을 사용합니다.
루프백에는 처리할 프레임을 선택하는 L2 필터가 포함되어 있습니다. 해당 프레임에 IPv4 패킷이 포함된 경우 루프백은 MAC 및 IP 계층 모두에서 소스 및 대상 주소를 교환합니다. 루프백은 ARP 패킷에 응답할 수 있습니다. 이 기능은 타사 디바이스의 특수 구성에 대한 요구 사항을 없애기 위해 추가되었습니다.
루프백은 입력에서 출력으로 패킷을 반복하는 단일 QSFP 케이지에서 작동합니다. 추가 QSFP 케이지가 사용되지 않습니다.
하드웨어
이 루프백은 속도 등급 2의 자일링스 VU9P 칩이 포함된 BittWare XUP-P3R 보드에서 설계 및 테스트되었습니다. 루프백은 외부 메모리를 사용하지 않으며 CMAC가 포함된 모든 BittWare Xilinx UltraScale+ 칩에 포팅해야 합니다.
FPGA 비트스트림 개요
루프백의 FPGA 비트스트림에는 여러 구성 요소가 포함되어 있습니다. 각 컴포넌트에는 입력과 출력 모두에 AXI4-Stream 인터페이스가 있으며 데이터 플레인으로 집합적으로 사용됩니다. 비트스트림의 컨트롤 플레인은 물리적 PCIe 인터페이스에 연결된 AXI4-Lite 인터페이스를 사용합니다.
디자인 흐름
루프백은 자일링스 IP 통합기 프로젝트로 제공됩니다. 여러 구성 요소는 Verilog로 작성되었습니다. 세 개는 Verilog를 방출하는 Xilinx HLS 플로우를 사용하여 작성되었습니다.
현재 구현에서는 HLS로 작성된 세 가지 구성 요소를 IP 통합자의 관점에서 단일 구성 요소로 그룹화합니다. 그러나 이 세 가지 구성 요소는 여기에 별도로 문서화되어 있습니다. 실제로는 4개의 별개의 컴포넌트로 문서화되어 있습니다. 이는 HLS 컴포넌트가 공통의 "파서 라이브러리"를 공유하기 때문에 반복을 피하기 위해 별도로 문서화했기 때문입니다.
빈 제목
재설정 및 통계
원칙적으로 재설정 시 모든 구성 요소는 활성화된 상태로 초기화되지만 '최소한의 피해'를 주는 모드로 초기화됩니다. 그런 다음 루프백이 성공적으로 작동하기 전에 소프트웨어에서 구성 요소를 구성해야 합니다.
또한 각 컴포넌트는 사용자가 하드웨어나 소프트웨어를 디버깅할 수 있도록 통계 레지스터를 노출합니다. 모든 통계 레지스터 값이 제 시간에 동기화되도록 스냅샷 신호가 포함되어 있습니다.
AXI 인터페이스
비트스트림의 인터페이스 폭과 클럭 속도는 100기가비트 이더넷 트래픽을 호스팅하기 위해 선택되었습니다. 데이터 플레인의 AXI4 스트림 인터페이스의 폭은 512비트입니다. CMAC에 닿는 부분을 제외하고 인터페이스는 300MHz로 클럭됩니다. 프레임 메타데이터는 AXI TLAST가 높을 때 유효한 데이터와 함께 별도의 버스인 AXI TUSER 비트를 통해 이동합니다.
메타데이터는 비트스트림 전체에서 일관되지 않습니다. 따라서 각 컴포넌트와 관련된 문서에는 해당 컴포넌트가 입력 시 기대하는 메타데이터와 출력 시 전달되는 메타데이터가 설명되어 있습니다.
비트스트림 제어 인터페이스는 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을 사용합니다.
이 예제의 소프트웨어는 BittWare의 BittWorks II 툴킷 위에 빌드됩니다. 좀 더 구체적으로 설명하면, BwHIL 및 BmcLib 라이브러리에 Python 바인딩을 추가합니다. 그런 다음 예제의 비트스트림이 PCIe 주소 공간에 노출하는 레지스터를 조작하기 위해 생성된 Python 컴포넌트 모음 내에서 이러한 바인딩을 활용합니다.
또한 루프백 예제 비트스트림은 일부 하드웨어 이벤트를 PCIe 인터럽트로 변환합니다. 이를 지원하기 위해 루프백의 소프트웨어는 이러한 인터럽트를 파이썬 호출로 변환합니다.
루프백 예시 비트스트림과의 아주 기본적인 상호 작용을 통해 설명하겠습니다:
$ # 먼저 툴킷의 명령줄을 사용하거나 GUI를 사용하여 PCIe 카드를 매핑합니다.
$ bwconfig --add=usb # 먼저 USB를 통해 장치 0으로 매핑합니다.
$ bwconfig --add=pci # 동일한 카드를 장치 1로 PCIe에 매핑합니다.
$ python3 # python3 호출
>>> from components.hildev import * >>>
>>> 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 문서 전문은 BittWare의 개발자 사이트에서 확인할 수 있습니다.
낮은 수준의 방법에는 다음이 포함됩니다:
- list_regs()
- find_reg(pattern)
- list_fields()
- find_field(pattern)
- read32(), write32()
- read64(), write64()
- reg_get(), reg_set()
- MATON64(MACADDR), N64TOMA(VAL64)
사용 가능한 더 높은 수준의 방법은 특정 구성 요소에 따라 다릅니다. 그러나 몇 가지 방법은 비교적 일반적입니다:
- enable()
- show()
- show_stats()
루프백에 대해 자세히 알고 싶으신가요?
루프백에 대한 자세한 내용은 앱 노트에서 무료로 다운로드할 수 있으니 아래 양식을 통해 지금 바로 받아보세요!
앱 노트 받기
즉시 PDF 다운로드
이 페이지에 표시된 내용은 루프백 예제에 대한 소개입니다. 전체 앱 노트에는 훨씬 더 자세한 내용이 있으며, 무엇보다도 무료로 다운로드할 수 있습니다! 양식을 작성하여 전체 앱 노트의 PDF 버전에 대한 액세스를 요청하세요.
"*"는 필수 필드를 나타냅니다.