A A+ A++

NetFPGA

W semestrze letnim, w roku akademickim 2020/2021 oraz w semestrze zimowym, w roku akademickim 2021/2022 Studenckie Koło Naukowe Linuks i Wolne Oprogramowanie otrzymało dofinansowanie na realizację projektu pt.: "Przełącznik sieciowy z mechanizmem aktywnego zarządzania pakietami z wykorzystaniem specjalistycznego układu opartego o macierz programowalną FPGA"

Serdecznie gratulujemy sukcesów studentce zaangażazowanej w realizację projektu - Pani Marcie Szczygieł.

Spis treści

1 Instrukcja uruchomienia projektów NetFPGA

1.1 Wprowadzenie

Instrukcja prezentuje kolejne kroki jakie należy wykonać, aby przygotować środowisko do budowy i uruchamiania projektów stworzonych na uniwersytecie w Cambridge dostępnych pod adresem: NetFPGA.

1.2 Dostępne projekty

W repozytorium Github zawierającym projekty NetFPGA znajdują się następujące projekty:

  • Ethernet Interface Loopback Test
  • Reference NIC
  • Reference Flash
  • Learning CAM Switch
  • Learning Switch (Lite)
  • Reference Router

Programy dla macierzy programowalnej FPGA w projektach NetFPGA posiadają przedstawioną na rysunku 1 strukturę. Blok Output Port Lookup zależny jest od wybranego projektu.

netfpga

Rys 1: Schemat blokowy projektów NetFPGA

1.3 Wymagania

Do uruchomienia przykładów należy posiadać:

Dla wyżej wymienionych wersji oprogramowania zostały przeprowadzone badania. Niemożliwe jest natomiast uruchomienie przykładów dla nowszych wersji oprogramowania, takich jak:

  • Fedora 20 MATE Compiz
  • Fedora 33
  • Vivado Design Suite 2019, 2020

1.4 Przygotowanie systemu Fedora 20

Budowanie i uruchamianie przykładów dla NetFPGA 1G CML, dostępnych na repozytorium link, możliwe jest tylko na archiwalnych systemach opartych o dystrybucję Red Hat, takich jak Fedora czy CentOS. W niniejszej instrukcji zaprezentowane zostało uruchomienie środowiska na systemie Fedora 20. Obraz instalatora systemu dostępny jest pod adresem: link.

1.4.1 Instalacja

Instalację systemu należy przeprowadzić tak, aby partycja administratora (root) posiadała minimalnie 50 GB pamięci. Podczas instalacji można pominąć tworzenie użytkowników, gdyż wszystkie prace będą wykonywane z konta użytkownika root.

1.4.2 Wybór użytkownika systemu

Aby oprogramowanie oraz jego budowa wykonana została poprawnie wszystkie czynności związane z obsługą repozytorium powinny zostać przeprowadzone z konta administratora (root). Po uruchomieniu systemu należy logować się na użytkownika root.

1.4.3 Aktualizacja adresów repozytorium YUM do danych archiwalnych

Po przeprowadzeniu instalacji systemu Fedora 20 należy zaktualizować adresy repozytoriów dla instalatora pakietów YUM. W tym celu należy zamienić poszczególne adresy w plikach. Przygotowane pliki pod system Fedora 20 zostały dodane do instrukcji w katalogu 1.yum.repo:

  • W pliku fedora.repo należy dokonać następujących modyfikacji
    • Zakomentować wszystkie adresy metalink
    • Odkomentować i ustawić baseurl dla następujących elementów:
      • fedora:
      • baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/$releasever/Everything/$basearch/os/
      • fedora-debuginfo:
      • baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/$releasever/Everything/$basearch/debug/
      • fedora-source:
      • baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/updates/$releasever/SRPMS/
  • W pliku fedora-updates.repo należy dokonać następujących modyfikacji:
    • Zakomentować wszystkie adresy metalink
    • Odkomentować i ustawić baseurl dla następujących elementów:
      • fedora:
      • baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/updates/$releasever/$basearch/
      • fedora-debuginfo:
      • baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/updates/$releasever/$basearch/debug/
      • fedora-source:
      • baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/updates/$releasever/SRPMS/

1.4.4 Instalacja potrzebnych pakietów

Po zaktualizowaniu adresów repozytorium dla menadżera pakietów YUM należy zaktualizować system oraz wszystkie zainstalowane w systemie pakiety za pomocą komendy: yum update Po przeprowadzeniu aktualizacji należy zainstalować wymagane pakiety do działania przykładów NetFPGA, takie jak: kompilator gcc, bibliotekę do obsługi interfejsu JTAG, itd. Poniższa komenda umożliwia instalację wszystkich potrzebnych pakietów:

yum install gcc gcc-c++ minicom libusb-devel glibc.i686 scapy xterm libXp java-devel libnet-devel iperf screen openmotif ncurses-compat-libs make git minicom '*stdc*' libsigc++ libsigc++.i686 qt.i686 qt qgit dnf install lrzsz gedit firefox gtkterm

1.5 Instalacja oprogramowania Xilinx

1.5.1 Wyłączenie zabezpieczeń SEL

Do poprawnego działania oprogramowania Xilinx oraz bibliotek należy wyłączyć zabezpieczenia Security-Enhanced Linux. W tym celu należy otworzyć plik selinux za pomocą komendy:

gedit /etc/sysconfig/selinux

W pliku tym należy zmienić enforcing mode na permissive w następujący sposób:

SELINUX=permissive

Na rysunku 2 przedstawiono poprawny plik.

netfpga

Rys 2: Wyłączenie zabezpieczeń SEL

1.5.2 Instalacja Xilinx Design Suite 14.7

Oprogramowanie Xilinx Design Suite 14.7 dostępne jest pod adresem: link

Po pobraniu instalatora należy rozpakować archiwum za pomocą interfejsu GUI lub następującej komendy:

tar -xvf Xilinx_ISE_DS_Lin_14.7_1015_1.tar

Następnie należy przejść do rozpakowanego folderu i uruchomić program instalacyjny za pomocą skryptu xsetup:

cd Xilinx_ISE_DS_Lin_14.7_1015_1

./xsetup

Podczas instalacji należy odznaczyć instalację sterowników Install Cable Drivers oraz Import tool preferences from previous version. Wszystkie okna zawierające kolejne kroki instalacji zostały zamieszczone na rysunkach 3, 4, 5 i 6.

netfpga

netfpga

Rys 3: Instalacja Xilinx ISE Design Suite 14.7

netfpga

netfpga

Rys 4: Instalacja Xilinx ISE Design Suite 14.7

netfpga

netfpga

Rys 5: Instalacja Xilinx ISE Design Suite 14.7

netfpga

Rys 6: Instalacja Xilinx ISE Design Suite 14.7

1.5.3 Instalacja Vivado Design Suite 15.2

Oprogramowanie Vivado Design Suite 15.2 dostępne jest pod adresem: link

Po pobraniu instalatora należy rozpakować archiwum za pomocą interfejsu GUI lub następującej komendy:

tar -xvf Xilinx_Vivado_SDK_Lin_2015.2_0626_1.tar.gz

Następnie należy przejść do rozpakowanego folderu i uruchomić program instalacyjny za pomocą skryptu xsetup:

cdXilinx_Vivado_SDK_Lin_2015.2_0626_1

./xsetup

Podczas instalacji należy odznaczyć instalację sterowników: Install Cable Drivers. Ponadto można odznaczyć instalację oprogramowania dla Zynq czy UltraScale, gdyż te funkcjonalności nie będą wykorzystywane. Wszystkie okna zawierające kolejne kroki instalacji zostały zamieszczone na rysunkach 7, 8 i 9.

netfpga

netfpga

Rys 7: Instalacja Vivado Design Suite 15.2

netfpga

netfpga

Rys 8: Instalacja Vivado Design Suite 15.2

netfpga

netfpga

Rys 9: Instalacja Vivado Design Suite 15.2

1.5.4 Instalacja potrzebnych sterowników

Do poprawnego zaprogramowania urządzenia potrzebne są sterowniki dostępne pod adresem: link

Po pobraniu należy je rozpakować, zbudować i skopiować do folderu ze sterownikami. Można to wykonać za pomocą następujących komend:

tar -xvf usb-driver-HEAD-2d19c7c.tar.gz

cd usb-driver-HEAD-2d19c7c

source /opt/Xilinx/14.6/ISE_DS/settings64.sh\

make

./setup_pcusb

cp libusb-driver.so /usr/local/lib/libusb-jtag-driver.so

1.6 Budowa przykładów NetFPGA

1.6.1 Pobranie repozytorium NetFPGA 1G CML

Dostęp do repozytorium NetFPGA można uzyskać po wysłaniu prośby o dostęp za pomocą formularza rejestracyjnego dostępnego pod adresem: link

Po otrzymaniu dostępu do repozytorium należy je pobrać z serwisu Github lub za pomocą komendy. Najlepiej poniższą komendę wykonać w bazowym folderze administratora /root/:

git clone https://github.com/NetFPGA/NetFPGA-1G-CML-live.git

1.6.2 Przygotowanie komend do uruchamiania projektów i oprogramowania Xilinx

Do budowy i programowania projektów NetFPGA wymagane jest poprawne skonfigurowanie środowiska. Środowisko powinno być skonfigurowany w taki sposób, aby oprogramowanie Xilinx, biblioteki oraz skróty do projektów były dostępne z poziomu linii poleceń. W konsoli, w której będą budowane projekty należy uruchomić następujące komendy:

source /opt/Xilinx/14.7/ISE_DS/settings64.sh

source /opt/Xilinx/Vivado/2015.2/settings64.sh

export NF_ROOT=/root/NetFPGA-1G-CML-live/

export NF_DESIGN_DIR=${NF_ROOT}/projects/loopback_test_nf1_cml

export NF_WORK_DIR=/root/tmp/

export PYTHONPATH= ${NF_ROOT}/lib/python:${NF_DESIGN_DIR}/lib/Python:${NF_ROOT}/tools/scripts:}

export LD_LIBRARY_PATH= ${NF_ROOT}/lib/java/NetFPGAFrontEnd/bin:${LD_LIBRARY_PATH}}

export XILINXD_LICENSE_FILE=licencja

W przypadku, gdy folder z repozytorium NetFPGA nie znajduje się w /root/ należy zmienić ścieżkę dostępu. W przygotowanych skryptach początkowo wybranym projektem, który będzie kompilowany jest loopback_test_nf1_cml. Zmiana projektu wykonywana jest poprzez zmianę wartości zmiennej NF_DESIGN_DIR.

1.6.3 Budowa podstawowych bibliotek do oprogramowania Xilinx

Po wywołaniu komend z rozdziału 1.6.2 możliwe jest zbudowanie podstawowych bibliotek wykorzystywanych w projektach NetFPGA. Do budowy wykorzystywany jest system make. W celu zbudowania bibliotek należy przejść do głównego katalogu projektu i wywołać komendę make:

cd $NF_ROOT

make

Wykonanie kolejnych kroków instrukcji powinno umożliwić poprawną budowę projektów, jednak podczas budowy może wystąpić niewykryty podczas testowania błąd. W celu jego wykrycia należy sprawdzić wygenerowany w konsoli log pod względem błędów.

1.6.4 Przygotowanie do budowania projektów Router oraz Switch

Projekty Learning CAM Switch oraz Reference Router bazują na podobnej logice działania. Projekty te wykorzystują pamięć adresowaną (CAM). Do jej poprawnego budowania należy pobrać xapp1151.

Oprogramowanie to dostępne jest na forum Xilinx pod adresem: link

Dokumentacja oprogramowania xapp1151_Param_CAM dostępna jest pod adresem: link

Aby użyć pobranego oprogramowania należy je rozpakować i wykonać następujące kroki:

  • Rozpakować archiwum:

unzip xapp1151_Param_CAM.zip

  • Przejść do folderu z oprogramowaniem:

cd xapp1151_cam_v1_1/

  • Stworzyć zmienne zawierające ścieżkę dostępu do projektu NetFPGA:

export NF_ROOT=/root/NetFPGA-1G-CML-live/

export NF_DESIGN_DIR=${NF_ROOT}/projects/reference_switch_nf1_cml

  • Skopiować folder patches z projektu NetFPGA do folderu z pobranym oprogramowaniem:

cp -r $NF_DESIGN_DIR/patches .

  • Przejść do folderu patches:

cd patches/

  • Zmienić ścieżki dostępu do plików z krótkich na pełne. Zmianę tą należy wykonać edytując plik cam_patch.sh i zmieniając ,,..'' na pełną ścieżkę dostępu:

gedit cam_patch.sh

  • Przykład poprawnego pliku ze ścieżkami dostępu:

patch /root/Pobrane/xapp1151_cam_v1_1/implement/CustomizeWrapper.pl CustomizeWrapper.pl.patch

patch /root/Pobrane/xapp1151_cam_v1_1/implement/vhdl_xst.scr vhdl_xst.scr.patch

patch /root/Pobrane/xapp1151_cam_v1_1/src/vhdl/cam_pkg.vhd cam_pkg.vhd.patch

patch /root/Pobrane/xapp1151_cam_v1_1/src/vhdl/cam_control.vhd cam_control.vhd.patch

patch /root/Pobrane/xapp1151_cam_v1_1/src/vhdl/cam_mem_blk.vhd cam_mem_blk.vhd.patch

patch /root/Pobrane/xapp1151_cam_v1_1/src/vhdl/cam_mem_blk_extdepth_prim.vhd cam_mem_blk_extdepth_prim.vhd.patch

patch /root/Pobrane/xapp1151_cam_v1_1/src/vhdl/cam_rtl.vhd cam_rtl.vhd.patch

  • Uruchomić skrypt cam_patch.sh :

sh cam_patch.sh

  • Przejść do folderu z implementacją:

cd ../implement/

  • Uruchomić skrypt ustawień dla Xilinx Design Suite 14.7, a następnie wywołać skrypt CustomizeWrapper.pl:

source /opt/Xilinx/14.7/ISE_DS/settings64.sh

xilperl CustomizeWrapper.pl

  • Odpowiedzieć na kilka pytań jakie będą zadawane w konsoli:

Odpowiedzi dla projektu Learning CAM Switch:

Enter the FPGA base architecture to target: kintex7

Input the CAM data width: 48

Input the CAM depth: 16

Enter the CAM memory type to implement: 1

Will the CAM be write-able (WE pin)?: y

Use a MIF file to initialize the memory contents?: n

Choose what type of encoding the MATCH_ADDR port will have: 0

For Binary Encoded or Single Match Unencoded MATCH_ADDR, output lowest address match or highest address match?: 0

Please select the optional features to be implemented: Simultaneous Read/Write: y

Register Outputs: n

Please select from the following optional input ports: Enable (EN) : n

Please select from the following optional output ports: Multiple Match Flag (MULTIPLE_MATCH): n

Single Match Flag (SINGLE_MATCH): n

Read Warning Flag (READ_WARNING): n

Odpowiedzi dla projektu Reference Router:

Enter the FPGA base architecture to target: kintex7

Input the CAM data width: 32

Input the CAM depth: 32

Enter the CAM memory type to implement: 1

Will the CAM be write-able (WE pin)?: y

Use a MIF file to initialize the memory contents?: n

Choose what type of encoding the MATCH_ADDR port will have: 1

For Binary Encoded or Single Match Unencoded MATCH_ADDR, output lowest address match or highest address match?: 0

Please select the optional features to be implemented: Simultaneous Read/Write: y

Register Outputs: n

Please select from the following optional input ports: Enable (EN) : n

Please select from the following optional output ports: Multiple Match Flag (MULTIPLE_MATCH): n

Single Match Flag (SINGLE_MATCH): n

Read Warning Flag (READ_WARNING): n

  • Sprawdzić czy plik vhdl_xst.scr został wygenerowany poprawnie po odpowiedzeniu na pytania:

gedit vhdl_xst.scr

    • Pliki konfiguracyjne projektów powinny wyglądać następująco:
      • Plik dla projektu Learning CAM Switch:

C_FAMILY : string := kintex7;

C_MEM_TYPE : integer := 1;

C_WIDTH : integer := 48;

C_DEPTH : integer := 16;

C_ADDR_TYPE : integer := 0;

C_MATCH_RESOLUTION_TYPE : integer := 0;

C_TERNARY_MODE : integer := 0;

C_HAS_WE : integer := 1;

C_MEM_INIT : integer := 0;

C_HAS_CMP_DIN : integer := 1;

C_REG_OUTPUTS : integer := 0;

C_HAS_EN : integer := 0;

C_HAS_MULTIPLE_MATCH : integer := 0;

C_HAS_SINGLE_MATCH : integer := 0;

C_HAS_READ_WARNING : integer := 0;

      • Plik dla projektu Reference Router:

C_FAMILY : string := kintex7;

C_MEM_TYPE : integer := 0;

C_WIDTH : integer := 32;

C_DEPTH : integer := 32;

C_ADDR_TYPE : integer := 1;

C_MATCH_RESOLUTION_TYPE : integer := 0;

C_TERNARY_MODE : integer := 1;

C_HAS_WE : integer := 1;

C_MEM_INIT : integer := 0;

C_HAS_CMP_DIN : integer := 1;

C_REG_OUTPUTS : integer := 0;

C_HAS_EN : integer := 0;

C_HAS_MULTIPLE_MATCH : integer := 0;

C_HAS_SINGLE_MATCH : integer := 0;

C_HAS_READ_WARNING : integer := 0;

      • Uruchomić skrypt RunXST.pl:

xilperl RunXST.pl

      • Przejść do folderu z wynikami i stworzyć pliki potrzebne do symulacji:

cd results netgen -sim -ofmt verilog cam.ngc

      • Poprawić dane wygenerowane w pliku cam.v:

gedit cam.v 

      • Wygenerowany plik posiada 2 moduły. Nazwę pierwszego modułu należy zmienić z ,,cam_wrapper'' na ,,cam''. Przykładowy fragment kodu został zamieszczony na rysunku 10.

netfpga

Rys 10: Zmiana nazwy modułu

      • Po deklaracji portu: output [3 : 0] MATCH_ADDR i przed deklaracją: wire NlwRenamedSig_OI_BUSY należy włączyć ignorowanie kodu:

// synthesis translate_off

      • Przykładowy fragment kodu został zamieszczony na rysunku 11.

netfpga

Rys 11: Włączenie ignorowania kodu

      • Następnie przed zakończeniem pierwszego modułu (endmodule) należy wyłączyć ignorowanie kodu:

// synthesis translate_on

      • Przykładowy fragment kodu został zamieszczony na rysunku 12.

netfpga

Rys 12: Wyłączenie ignorowania kodu

      • Skopiować cam.ngc oraz cam.v do folderów bibliotek IP core używanych w projektach:
      • Plik dla projektu Learning CAM Switch:

mkdir -p $NF_ROOT/lib/hw/std/pcores/nf10_switch_output_port_lookup_v1_10_a/netlist

cp cam.ngc $NF_ROOT/lib/hw/std/pcores/nf10_switch_output_port_lookup_v1_10_a/netlist

cp cam.v $NF_ROOT/lib/hw/std/pcores/nf10_switch_output_port_lookup_v1_10_a/hdl/verilog

      • Plik dla projektu Reference Router:

mkdir -p $NF_ROOT/lib/hw/std/pcores/nf10_router_output_port_lookup_v1_00_a/netlist

cp cam.ngc $NF_ROOT/lib/hw/std/pcores/nf10_router_output_port_lookup_v1_00_a/netlist

cp cam.v $NF_ROOT/lib/hw/std/pcores/nf10_router_output_port_lookup_v1_00_a/hdl/verilog

1.6.5 Budowa projektu NetFPGA

Po budowie podstawowych bibliotek opisanych w rozdziale 1.6.3 oraz przygotowaniu bibliotek dla projektów Learning CAM Switch oraz Reference Router, opisanych w rozdziale 1.6.4, można przystąpić do budowy projektów. W tym celu należy przejść do katalogu z projektem i wywołać komendę make:

cd $NF_DESIGN_DIR

make

Po wykonaniu komendy powinien zostać stworzony plik konfiguracyjny macierz FPGA w folderze bitfiles.

1.7 Programowanie układu NetFPGA 1G CML

netfpga

Rys 13: Układ NetFPGA 1G CML

1.7.1 Podłączenie układu NetFPGA 1G CML do komputera

Układ można używać jako wewnętrzne urządzenie PCI-E podłączone do płyty głównej komputera lub jako zewnętrze urządzenie. W przypadku, gdy urządzenie nie jest stosowane jako karta sieciowa lub router nie musi być ono podłączone do złącza PCI.

1.7.1.1 Podłączenie programatora

Do programowania można wykorzystać programator zewnętrzny lub wewnętrzny. Na rysunku 14 został przedstawiony sposób podłączenia programatora zewnętrznego, a na rysunku 15 programatora wewnętrznego.

netfpga

Rys 14: Podłączenie kabla micro USB do wbudowanego programatora układu NetFPGA 1G CML

netfpga

Rys 15: Podłączenie zewnętrznego programatora do układu NetFPGA 1G CML

1.7.1.2 Podłączenie interfejsu UART

W dostępnych projektach NetFPGA działanie FPGA zależne jest od programowego procesora Microblaze w wersji 8. Programy dedykowane dla tego procesora wykorzystują złącze Pmod układu NetFPGA 1G CML z podłączonym konwerterem dostarczonym w zestawie NetFPGA, jakim jest PmodUSBUART (rysunek 16). Podłączenie FPGA do tego interfejsu zostało przedstawione na rysunku 17.

netfpga

Rys 16: Konwerter PmodUSBUART

netfpga

Rys 17: Podłączenie konwertera PmodUSBUART do układu NetFPGA 1G CML

Aby poprawnie odczytywać dane przychodzące należy włączyć oprogramowanie umożliwiające odczyt danych z portu COM i zmienić następujące parametry komunikacji:

      • Prędkość: 115200
      • Typ połączenia: 8N1
1.7.1.3 Podłączenie zasilania

Zasilanie układu NetFPGA jest wyprowadzone na złączu zasilania PCI-E 6 pin. Do złącza należy podłączyć kabel zasilania z zasilacza komputerowego, a następnie przełączyć pozycję przełącznika, znajdującego się obok złącza na pozycję ON. Podłączanie zasilania zostało przedstawione na rysunku 18.

netfpga

Rys 18: Podłączenie zasilania do układu NetFPGA 1G CML

1.7.2 Programowanie urządzenia za pomocą Xilinx Vivado Design Suite 15.2

Programowanie układu NetFPGA 1G CML można wykonać za pomocą oprogramowania Vivado oraz programatora, którego podłączenie zostało opisane w rozdziale 1.7.1.1. Po podłączeniu układu i włączeniu zasilania należy uruchomić oprogramowanie Hardware Manager dostępne w Vivado. Następnie należy nacisnąć przycisk Open target i wybrać dostępny układ FPGA. Po wykryciu urządzenia należy nacisnąć przycisk Program device i wybrać plik *.bit. Na koniec należy nacisnąć przycisk Program. Poszczególne kroki instalacji zostały zaprezentowane na rysunku 19.

netfpga

netfpga

netfpga

Rys 19: Programowanie układu NetFPGA 1G CML za pomocą Vivado

1.7.3 Programowanie urządzenia za pomocą Xilinx ISE Design Suite 14.7

Programowanie układu NetFPGA 1G CML można wykonać za pomocą oprogramowania ISE Design Suite oraz programatora, którego podłączenie opisane zostało w rozdziale 1.7.1.1. Po podłączeniu układu i włączeniu zasilania należy uruchomić oprogramowanie impact za pomocą konsoli:

source /opt/Xilinx/14.7/ISE_DS/settings64.sh

impact

Po wykonaniu komendy należy nacisnąć prawym przyciskiem myszy na wykryte urządzenie, na rysunku 20 oznaczone na zielono, wybrać Assign New Configuration File i następnie wybrać plik *.bit. Po wybraniu pliku należy nacisnąć ponownie prawym przyciskiem myszy na wykryte urządzenie i wybrać Program.

netfpga

Rys 20: Programowanie układu NetFPGA 1G CML za pomocą ISE Design Suite

1.7.4 Programowanie urządzenia z wykorzystaniem konsoli poleceń i oprogramowania Xilinx ISE Design Suite 14.7

System make w projektach NetFPGA posiada komendę umożliwiającą programowanie układu NetFPGA 1G CML. Po zbudowaniu projektu i podłączeniu programatora, którego podłączenie zostało opisane w rozdziale \ref{pod_prog}, należy użyć komendy make download, która uruchomi oprogramowanie Impact i zaprogramuje urządzenie zbudowanym plikiem konfiguracyjnym:

cd $NF_DESIGN_DIR source /opt/Xilinx/14.7/ISE_DS/settings64.sh

make download

1.8 Testowanie działania kart sieciowych układu NetFPGA 1G CML za pomocą projektu Ethernet Interface Loopback Test

Sprawdzenie działania kart Ethernet w układzie NetFPGA 1G CML można wykonać za pomocą projektu Ethernet Interface Loopback Test. W tym celu należy zaprogramować urządzenie plikem konfiguracyjnym wygenerowanym w projekcie Ethernet Interface Loopback Test oraz podłączyć interfejs UART opisany w rozdziale 1.7.1.2. Następnie należy podłączyć pierwszą kartę sieciową do drugiej oraz trzecią do czwartej za pomocą kabli Ethernet.

netfpga

Rys 21: Podłączenie kart sieciowych układ NetFPGA 1G CML w projekcie Ethernet Interface Loopback Test

Po zaprogramowaniu układu NetFPGA i podłączeniu interfejsu UART do komputera, możliwa jest komunikacja z kartą za pomocą portu COM. Komunikację można realizować dowolnym oprogramowaniem np. gtkterm z ustawieniem parametrów połączenia na:

      • Prędkość: 115200
      • Typ połączenia: 8N1

netfpga

Rys 22:Ustawienie parametrów połączenia UART

Po uruchomieniu komunikacji możliwe jest włączanie i wyłączanie przesyłania pakietów pomiędzy kartami Ethernet układu NetFPGA.

netfpga

netfpga

Rys 23: Uruchomienie testowania kart za pomocą projektu Ethernet Interface Loopback Test

1.9 Uruchamianie projektów NetFPGA 1G CML

1.9.1 Uruchamianie oprogramowania Reference NIC

1.9.1.1 Budowa i programowanie projektu Reference NIC

W celu użycia układu NetFPGA 1G CML jako czterech kart sieciowych należy zbudować projekt Reference NIC, a następnie zaprogramować nim układ FPGA. Po zaprogramowaniu należy uruchomić ponownie komputer. Można to zrobić za pomocą następujących komend: export NF_DESIGN_DIR=${NF_ROOT}/projects/reference_nic_nf1_cml cd $NF_DESIGN_DIR make reboot Po uruchomieniu system powinien wyświetlać w liście podłączonych urządzeń do magistrali PCI, kartę NetFPGA. Podłączone urządzenia można sprawdzić za pomocą następującej komendy: lspci | grep Xilinx

netfpga

Rys 24: Wyświetlenie zaprogramowanego układu podłączonego do PCI-E

1.9.1.2 Instalacja sterowników PCI

Po wykonaniu kroków z rozdziału 1.9.1.1 należy zbudować i zainstalować sterowniki PCI-E dostępne w projekcie Reference NIC. W tym celu należy przejść do folderu drivers, a następnie zbudować i zainstalować sterowniki:

cd $NF_ROOT/projects/reference_nic_nf1_cml/sw/host/driver/

make

sudo insmod nf10.ko

1.9.1.3 Włączanie kart sieciowych

Po wykonaniu kroków z rozdziału 1.9.1.2 należy włączyć karty sieciowe: ifconfig nf0 up ifconfig nf1 up ifconfig nf2 up ifconfig nf3 up

netfpga

Rys 25: Wyświetlenie kart sieciowych układu NetFPGA

1.9.1.3 Testowanie połączenia za pomocą karty sieciowej NetPFGA

Po wykonaniu kroków z rozdziału 1.9.1.3 możliwe jest przypisanie adresu IP do karty sieciowej NetFPGA. Do pierwszego złącza, znajdującego się najbliżej złącza PCI układu NetFPGA 1G CML, należy podłączyć kabel sieciowy umożliwiając dostęp do sieci. Karta sieciowa urządzenia podłączanego musi obsługiwać połączenie 1Gbit. Następnie należy wykonać przypisanie adresu IP oraz DNS. Przykład konfiguracji:

ifconfig nf0 192.168.1.200 netmask 255.255.255.0

echo ''nameserver 192.168.1.1'' > /etc/resolv.conf

netfpga

netfpga

Rys 26: Ustawienie adresów IP oraz DNS \noindent Następnie można wykonać ping sprawdzający komunikację: ping 192.168.1.1 - ping do bramy ping 192.168.1.175 - ping do dowolnego urządzenia w sieci wewnętrznej ping google.com - ping do adresu zewnętrznego

netfpga

netfpga

Rys 27: Zrzuty ekranu przedstawiające testowanie połączenia za pomocą komendy ping

1.9.1.5 Testowanie połączenia z innym urządzeniem podłączonym do sieci

W celu przetestowania działania połączenia należy podłączyć dwa urządzenia do sieci, jedno z podłączonym układem NetFPGA oraz drugie posiadające kartę sieciową. Na drugim urządzeniu należy uruchomić serwer za pomocą iperf. Oprogramowanie dostępne jest pod adresem link Przykład uruchomienia serwera:

iperf -s -p 8080

Następnie można sprawdzić przepustowość połączenia uruchamiając program klienta z komputera z podłączonym układem NetFPGA. Przykład uruchomienia klienta:

iperf -c 192.168.1.175 -p 8080

netfpga

netfpga

Rys 28: Testowanie połączenia z innym urządzeniem podłączonym do sieci

1.9.2 Uruchamianie oprogramowania Learning Switch (Lite)

W celu uruchomienia układu NetFPGA 1G CML jako urządzenia switch przełączającego ruch w sieci Ethernet należy zaprogramować układ zbudowanym projektem Learning Switch (Lite). Po zaprogramowaniu urządzenia należy podłączyć do złącz kart sieciowych dowolne urządzenia np. Raspberry PI 4 i ustawić na nich adresy IP.

netfpga

Rys 29: Podłączenie dwóch urządzeń Raspberry PI 4 do układu NetFPGA z zaprogramowanym Switch'em

1.9.3 Testowanie przepustowości połączenia

W celu sprawdzenia przepustowości połączenia należy podłączyć dwa urządzenia do sieci. Następnie na jednym urządzeniu należy uruchomić serwer za pomocą programowania iperf. Oprogramowanie dostępne jest pod adresem link Przykład uruchomienia serwera:

iperf3 -s -p 8080

Następnie należy sprawdzić przepustowość połączenia uruchamiając program klienta z komputera z podłączonym układem NetFPGA. Przykład uruchomienia klienta:

iperf -c 192.168.1.102 -p 8080

netfpga

Rys 30: Badanie przepustowości między dwoma urządzeniami Raspberry PI 4 podłączonymi do układu NetFPGA z zaprogramowanym Switch'em

1.10 Dodatkowe informacje

1.10.1 Zmiana działania oprogramowania dla programowego procesora Microblaze

Jeżeli istnieje potrzeba dokonania zmiany działania programów dla programowanego procesora Microblaze, to aby dokonać zmiany w ich działaniu, należy zmodyfikować kod programu dostępnego w każdym z projektów w folderze sw/embedded.

1.10.2 Podłączenie Ethernet do układu NetFPGA

Do poprawnego połączenia sieci Ethernet należy stosować układy wspierające połączenie 1Gbps. Poprawne podłączenie sieci sygnalizowane jest mruganiem diod układu NetFPGA opisanych znakami ETH0, ETH1, ETH2 i ETH3 na PCB układu.

2 Badania oprogramowania układu NetFPGA

W niniejszym rozdziale przedstawiono wyniki eksperymentów badawczych dla dwóch oprogramowań układu NetFPGA 1G CML.

2.1 Badania układu NetFPGA jako karty sieciowej

W podrozdziale przedstawiono wyniki eksperymentów badawczych dla układu NetFPGA 1G CML, zastosowanego jako kartę sieciową.

2.1.1 Przygotowanie stanowiska badawczego

Do badań przygotowane zostało stanowisko badawcze składające się z komputera PC, posiadającego złącze PCI-E na płycie głównej. Do złącza PCI-E komputera PC podłączono układ NetFPGA 1G CML z programem umożliwiającym wykrywanie kart sieciowych podłączonego, układu jako systemowych kart sieciowych. Następnie do kart sieciowych układu NetFPGA podłączono 4 urządzenia Raspberry PI 4, posiadające karty sieciowe o przepustowości 1 Gbps. Do kart sieciowych urządzeń Raspberry PI 4 przypisano następujące adresy IP:

      • 192.168.1.100
      • 192.168.2.100
      • 192.168.3.100
      • 192.168.4.100

Do kart sieciowych układu NetFPGA 1G CML przypisano następujące adresy IP:

      • 192.168.1.200
      • 192.168.2.200
      • 192.168.3.200
      • 192.168.4.200

Następnie połączono karty sieciowe zgodnie ze schematem przedstawionym na rysunku 31.

netfpga

Rys 31: Schemat połączenia urządzeń Raspberry Pi 4 do układu NetFPGA 1G CML

2.1.2 Badanie prędkości transmisji

Na każdym urządzeniu uruchomione zostało dedykowane oprogramowanie, umożliwiające badanie prędkości transmisji w sieci Ethernet. Pomiędzy urządzeniem Raspberry Pi 4, a komputerem PC z podłączonym układem NetFPGA 1G CML zmierzono następujące prędkości transferu danych:

      • Raspberry Pi 4 (192.168.1.100) - 226Mbps
      • Raspberry Pi 4 (192.168.2.100) - 235Mbps
      • Raspberry Pi 4 (192.168.3.100) - 213Mbps
      • Raspberry Pi 4 (192.168.4.100) - 221Mbps

Na rysunku 32 przedstawiono zrzut ekranu prezentujący otrzymane wyniki prędkości transferu pomiędzy jednym urządzeniem Raspberry Pi 4, a komputerem PC.

netfpga

Rys 32: Zrzut ekranu prezentujący prędkość transmisji pomiędzy urządzeniem Raspberry Pi 4, a komputerem PC z podłączonym układem NetFPGA zastosowanym jako karta sieciowa

W analogiczny sposób zmierzono prędkości transferu pomiędzy dwoma urządzeniami Raspberry Pi 4 połączonymi bezpośrednio do siebie. Średnia prędkość wyniosła 934 Mbps. Na rysunku 33przedstawiono schemat połączenia obu urządzeń.

netfpga

Rys 33: Schemat bezpośredniego połączenia dwóch urządzeń Raspberry Pi 4

2.1.3 Badanie opóźnień transmisji

Na każdym urządzeniu uruchomione zostało dedykowane oprogramowanie, umożliwiające badanie opóźnień transmisji w sieci Ethernet. Pomiędzy urządzeniem Raspberry Pi 4, a komputerem PC z podłączonym układem NetFPGA 1G CML zmierzono następujące opóźnienia transmisji danych:

      • Raspberry Pi 4 (192.168.1.100) - 0.211 ms
      • Raspberry Pi 4 (192.168.2.100) - 0.222 ms
      • Raspberry Pi 4 (192.168.3.100) - 0.205 ms
      • Raspberry Pi 4 (192.168.4.100) - 0.208 ms

Na rysunku 34 przedstawiono zrzut ekranu prezentujący otrzymane wyniki opóźnienia transmisji pomiędzy jednym urządzeniem Raspberry Pi 4, a komputerem PC.

netfpga

Rys 34: Zrzut ekranu prezentujący opóźnienie transmisji pomiędzy urządzeniem Raspberry Pi 4, a komputerem PC z podłączonym układem NetFPGA zastosowanym jako karta sieciowa

W analogiczny sposób zmierzono opóźnienia transferu pomiędzy dwoma urządzeniami Raspberry Pi 4. Średnie opóźnienie wyniosło 0.205ms. Na rysunku 33 przedstawiono schemat połączenia obu urządzeń.

2.1.4 Wnioski

Rezultaty przeprowadzonych eksperymentów sieciowych dowodzą poprawności działania oprogramowania umożliwiającego wykrywanie układu NetFPGA 1G CML jako 4 kart sieciowych. Niestety znikoma wiedza literaturowa w tematyce stworzenia podobnych mechanizmów sieciowych na specjalizowanych układach opartych o macierze programowalne FPGA uniemożliwiła zaimplementowanie układu o wydajności rzeczywistych kart sieciowych o przepustowości 1Gbps.

2.2 Badania układu NetFPGA jako urządzenia do przełączania pakietów (Switch)

W podrozdziale przedstawiono wyniki eksperymentów badawczych dla układu NetFPGA 1G CML, zastosowanego jako urządzenie do przełączania pakietów (Switch).

2.2.1 Przygotowanie stanowiska badawczego

Do badań przygotowane zostały dwa stanowiska badawcze składające się z układu NetFPGA 1G CML zaprogramowanego jako urządzenia do przełączania pakietów (Switch) oraz dwóch lub czterech urządzeń Raspberry Pi 4. Następnie do kart sieciowych układu NetFPGA podłączono urządzenia Raspberry PI 4 posiadające karty sieciowe o przepustowości 1 Gbps. Do kart sieciowych urządzeń Raspberry PI 4 przypisano następujące adresy IP:

      • 192.168.1.100
      • 192.168.1.101
      • 192.168.1.102
      • 192.168.1.103

Następnie połączono karty sieciowe zgodnie ze schematem przedstawionym na rysunku 35 dla 4 urządzeń oraz na rysunku 36 dla 2 urządzeń.

netfpga

Rys 35: Schemat połączenia czterech urządzeń Raspberry Pi 4 do układu NetFPGA 1G CML zaprogramowanego jako urządzenie do przełączania pakietów

netfpga

Rys 36: Schemat połączenia dwóch urządzeń Raspberry Pi 4 do układu NetFPGA 1G CML zaprogramowanego jako urządzenie do przełączania pakietów

2.2.2 Badanie poprawności przełączania pakietów

Na każdym z czterech (rysunek 35) urządzeń Raspberry PI 4 uruchomione zostało dedykowane oprogramowanie, umożliwiające przesyłanie pakietów pomiędzy urządzeniami w sieci Ethernet. Sprawdzono poprawność przesyłania pakietów pomiędzy każdym z urządzeń. Rezultaty przeprowadzanych eksperymentów dowiodły poprawność przełączania pakietów pomiędzy kartami Ethernet w układzie NetFPGA. Na rysunku przedstawiono zrzut ekranu prezentujący poprawność przesyłu danych pomiędzy dwoma urządzeniami Raspberry Pi 4.

2.2.3 Badanie prędkości transmisji

Na każdym z dwóch (rysunek 36) urządzeń Raspberry Pi 4 uruchomione zostało dedykowane oprogramowanie, umożliwiające badanie prędkości transmisji w sieci Ethernet. Zmierzono średnią prędkość transferu danych pomiędzy urządzeniami Raspberry Pi 4, podłączonymi za pośrednictwem układu NetFPGA. Średnia prędkość wyniosła 289 Mbps. W analogiczny sposób zmierzono prędkości transferu pomiędzy dwoma urządzeniami Raspberry Pi 4, połączonymi za pośrednictwem rzeczywistego urządzenia do przełączania pakietów o przepustowości 1Gbps oraz podczas połączenia bezpośredniego. Otrzymane średnie prędkości wyniosły kolejno 905 Mbps i 934 Mbps. Na rysunku 37 przedstawiono zrzut ekranu prezentujący otrzymane wyniki prędkości transferu pomiędzy urządzeniami Raspberry Pi 4, połączonymi za pośrednictwem układu NetFPGA.

netfpga

Rys 37: Zrzut ekranu prezentujący prędkość transmisji pomiędzy urządzeniami Raspberry Pi 4, połączonymi za pośrednictwem układu NetFPGA

2.2.4 Badanie opóźnień transmisji

Na każdym z dwóch (rysunek 35) urządzeń Raspberry Pi 4 uruchomione zostało dedykowane oprogramowanie, umożliwiające badanie opóźnień transmisji w sieci Ethernet. Zmierzono średnie opóźnienie transmisji danych pomiędzy urządzeniami Raspberry Pi 4, połączonymi za pośrednictwem układu NetFPGA wynoszące 0.263 ms. W analogiczny sposób zmierzono średnie opóźnienie transmisji pomiędzy dwoma urządzeniami Raspberry Pi 4, połączonymi za pośrednictwem rzeczywistego urządzenia do przełączania pakietów o przepustowości 1Gbps oraz podczas połączenia bezpośredniego. Otrzymane średnie opóźnienia transmisji wyniosły kolejno 0.248 ms i 0.205 Mbps. Na rysunku 38 przedstawiono zrzut ekranu prezentujący otrzymane wyniki prezentujące opóźnienie transmisji pomiędzy urządzeniami Raspberry Pi 4 podłączonymi za pośrednictwem układu NetFPGA.

netfpga

Rys 38: Zrzut ekranu prezentujący opóźnienie transmisji pomiędzy urządzeniami Raspberry Pi 4, połączonymi za pośrednictwem układu NetFPGA

2.2.5 Wnioski

Rezultaty przeprowadzonych eksperymentów sieciowych dowodzą poprawności działania układu NetFPGA 1G CML, zastosowanego jako urządzenie do przełączania pakietów (Switch). Otrzymane prędkości transmisji danych jak i czasy opóźnień niestety okazały się gorsze od wartości otrzymanych przy połączeniu układów za pośrednictwem rzeczywistego urządzenia do przełączania pakietów. Znikoma wiedza literaturowa w tematyce stworzenia podobnych mechanizmów sieciowych na specjalizowanych układach opartych o macierze programowalne FPGA, nie umożliwiła zaimplementowania rozwiązania o wydajności rzeczywistych urządzeń.

2.3 Wnioski z przeprowadzonych badań

Rezultaty dotychczas wykonanych prac nie są na tyle zadowalające, aby móc je opublikować na międzynarodowej konferencji, bądź w wysoko punktowanym czasopiśmie.

Wykonana praca stwarza jednak nowe możliwości badawcze w tematyce wykorzystania macierzy FPGA w sieciach komputerowych. Kolejne prace wykonywane w ramach realizacji projektów Studenckiego Koła Naukowego, czy też prac magisterskich nawiązywać mogą do zagadnień implementowania algorytmów aktywnego zarządzania kolejką w węźle komunikacyjnym, czy też do badania ich zachowania w rzeczywistym układzie. Bez obecnie wykonanego kroku, który umożliwia przechwytywanie przychodzących pakietów oraz pozwala przełączać pakiety pomiędzy kartami sieciowymi, nie można było by zakładać powodzenia realizacji takich badań.

© Politechnika Śląska

Polityka prywatności

Całkowitą odpowiedzialność za poprawność, aktualność i zgodność z przepisami prawa materiałów publikowanych za pośrednictwem serwisu internetowego Politechniki Śląskiej ponoszą ich autorzy - jednostki organizacyjne, w których materiały informacyjne wytworzono. Prowadzenie: Centrum Informatyczne Politechniki Śląskiej (www@polsl.pl)

Deklaracja dostępności

„E-Politechnika Śląska - utworzenie platformy elektronicznych usług publicznych Politechniki Śląskiej”

Fundusze Europejskie
Fundusze Europejskie
Fundusze Europejskie
Fundusze Europejskie