1
0
mirror of https://github.com/corundum/corundum.git synced 2025-01-16 08:12:53 +08:00

Initial commit of sphinx documentation

This commit is contained in:
Alex Forencich 2022-03-13 23:32:01 -07:00
parent 2ca96463fe
commit 1e601cff56
75 changed files with 10220 additions and 0 deletions

20
docs/Makefile Normal file
View File

@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = source
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

35
docs/make.bat Normal file
View File

@ -0,0 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build
if "%1" == "" goto help
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.https://www.sphinx-doc.org/
exit /b 1
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd

80
docs/source/conf.py Normal file
View File

@ -0,0 +1,80 @@
# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
import datetime
import sys
# -- Path setup --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('.'))
# -- Project information -----------------------------------------------------
project = 'Corundum'
author = f'{project} contributors'
copyright = f'2019-{datetime.datetime.now().year}, {author}'
# -- General configuration ---------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
"sphinxcontrib.inkscapeconverter",
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = []
root_doc = 'contents'
numfig = True
highlight_language = 'none'
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'alabaster'
try:
import sphinx_rtd_theme
html_theme = 'sphinx_rtd_theme'
except ImportError:
sys.stderr.write('Warning: The Sphinx \'sphinx_rtd_theme\' HTML theme was '+
'not found. Make sure you have the theme installed to produce pretty '+
'HTML output. Falling back to the default theme.\n')
html_theme = 'default'
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
graphviz_output_format = 'svg'
# -- Options for LaTeX output ------------------------------------------------
latex_show_pagerefs = True
latex_show_urls = 'footnote'

21
docs/source/contents.rst Normal file
View File

@ -0,0 +1,21 @@
.. _contents:
========
Contents
========
.. toctree::
:numbered:
:includehidden:
index
gettingstarted
debugging
tuning
porting
macaddr
operations
modules/index
rb/index
devicelist
glossary

46
docs/source/debugging.rst Normal file
View File

@ -0,0 +1,46 @@
.. _debugging:
=========
Debugging
=========
The server rebooted when configuring the FPGA
=============================================
This is a common problem caused by the server management subsystem (IPMI, iLO, iDRAC, or whatever your server manufacturer calls it). It detects the PCIe device falling off the bus when the FPGA is reset, and does something in response. In some machines it just complains bitterly by logging an event and turning on an angry red LED. In other machines, it does that, and then immediately reboots the machine. Highly annoying. However, there is a simple solution for this that involves some poking around in PCIe configuration registers to disable PCIe fatal error reporting on the port that the device is connected to.
Run the ``pcie_disable_fatal_err.sh`` script before you configure the FPGA. Specify the PCIe device ID of the FPGA board as the argument (``xy:00.0``, as shown in ``lspci``). You'll have to do a warm reboot after loading the configuration if the PCIe BAR configuration has changed. This will most likely be the case when going from a stock flash image that brings up the PCIe link to Corundum, but not from Corundum to Corundum unless something was changed in the PCIe IP core configuration. If the BAR configuration has not changed, then using the ``pcie_hot_reset.sh`` script to perform a hot reset of the device may be sufficient. The firmware update utility ``mqnic-fw`` includes the same functionality as ``pcie_disable_fatal_err.sh`` and ``pcie_hot_reset.sh``, so if the card is running a Corundum design, then you can use ``mqnic-fw -t`` to disable fatal error reporting and reset the card before connecting to it via JTAG.
The link is down
================
Things to check, in no particular order:
- Try a hot reset of the card
- Try an unmodified "known good" design for your board, either corundum or verilog-ethernet
- Try using a direct attach copper cable to rule out issues with optical transceivers.
- Try a different link partner---try a NIC instead of a switch, or a different model NIC.
- txdisable/lpmode/reset pins---only applies if you're using optical transceivers or active optical cables. If these pins are pulled the wrong way, the lasers in the transceiver will not turn on, and the link will not come up. (No, I have never wasted an hour waiting for Vivado to do its thing after pulling lpmode the wrong way...on several different boards...)
- Optical module CDR settings---if you're trying to run a 25G or 100G optical transceiver or active optical cable at 10G or 40G, you may need to disable the module CDRs via I2C by writing 0x00 to MSA register 98 on I2C address 0x50 (CDR control). (No, I have not wasted several days trying to figure out why the electrical loopback works fine at 10G, but the optical transceiver only works at 25G...)
- Check settings at link partner---some devices are better about figuring out the proper configuration than others and need to have the correct settings applied manually (e.g. Mellanox NICs are quite good, but most packet switches can be rather bad about this and may only look at the line rate reported in the transceiver EEPROM instead of what's actually going on on the link). Also check to make sure the link partner doesn't have some sort of disagreement with the cable/transceiver - some devices, usually switches, are very picky about what the EEPROM says about who manufactured the cable.
- Check FEC settings---in general, 100G devices seem to require the use of RS-FEC, 10G and 25G usually run fine without FEC, but it may need to be manually disabled on the link partner.
- Serdes configuration---ensure the correct line rate, gearbox settings, etc. are correct. Some boards also have p/n swapped (e.g. ExaNIC X10/X25), so check tx/rx invert settings. (Yes, I managed to figure *that* one out after some head-scratching despite not having access to the schematic)
- Serdes site locations---make sure you're using the correct pins.
- Serdes reference clock configuration---make sure the reference clock matches the serdes configuration, and on some boards the reference clock needs to be configured in some way before use.
Ping and iperf don't work
=========================
Things to check, in no particular order:
- Check that the interface is up (``ip link set dev <interface> up``)
- Check that the interface has an IP address assigned (``ip addr``, ``ip -c a``, ``ip -c -br``, to check, ``ip addr add 192.168.1.1/24 dev <interface>`` to set)
- The corundum driver does not currently report the link status to the OS, so check for a link light (not all design variants implement this) and check the link partner for the link status (``ip link``, NO-CARRIER means the link is down at the PHY layer)
- Try hot resetting the card with the link partner connected (clear up possible RX DFE problem)
- Check tcpdump for inbound traffic on both ends of the link ``tcpdump -i <interface> -Q in`` to see what is actually traversing the link. If the TX direction works but the RX direction does not, there is a high probability it is a transceiver DFE issue that may be fixable with a hot reset.
- Check with ``mqnic-dump`` to see if there is anything stuck in transmit queues, transmit or receive completion queues, or event queues.
The device loses its IP address
===============================
This is not a corundum issue, this is NetworkManager or a similar application causing trouble by attempting to run DHCP or similar on the interface. There are basically four options here: disable NetworkManager, configure NetworkManager to ignore the interface, use NetworkManager to configure the interface and assign the IP address you want, or use network namespaces to isolate the interface from NetworkManager. Unfortunately, if you have a board that doesn't support persistent MAC addresses, it may not be possible to configure NetworkManager to deal with the interface correctly.

122
docs/source/devicelist.rst Normal file
View File

@ -0,0 +1,122 @@
.. _device_list:
===========
Device list
===========
This section includes a summary of the various devices supported by Corundum, including a summary of board-specific features.
PCIe
====
This section details PCIe form-factor targets, which interface with a separate host system via PCI express as a PCIe endpoint.
.. table:: Summary of the various devices supported by Corundum.
============ ================= ==================== ==========
Manufacturer Board FPGA Board ID
============ ================= ==================== ==========
Alpha Data ADM-PCIE-9V3 XCVU3P-2FFVC1517I 0x41449003
Exablaze ExaNIC X10 XCKU035-2FBVA676E 0x1ce40003
Exablaze ExaNIC X25 XCKU3P-2FFVB676E 0x1ce40009
Silicom fb2CG\@KU15P XCKU15P-2FFVE1760E 0x1c2ca00e
Digilent NetFPGA SUME XC7V690T-3FFG1761 0x10ee7028
Intel DK-DEV-1SMC-H-A 1SM21CHU1F53E1VG 0x11720001
Xilinx Alveo U50 XCU50-2FSVH2104E 0x10ee9032
Xilinx Alveo U200 XCU200-2FSGD2104E 0x10ee90c8
Xilinx Alveo U250 XCU250-2FIGD2104E 0x10ee90fa
Xilinx Alveo U280 XCU280-L2FSVH2892E 0x10ee9118
Xilinx VCU108 XCVU095-2FFVA2104E 0x10ee806c
Xilinx VCU118 XCVU9P-L2FLGA2104E 0x10ee9076
Xilinx VCU1525 XCVU9P-L2FSGD2014E 0x10ee95f5
Xilinx ZCU106 XCZU7EV-2FFVC1156E 0x10ee906a
============ ================= ==================== ==========
.. table:: Summary of available interfaces and on-board memory.
================= ========= ========== =============================== =====
Board PCIe IF Network IF DDR HBM
================= ========= ========== =============================== =====
ADM-PCIE-9V3 Gen 3 x16 2x QSFP28 16 GB DDR4 2400 (2x 1G x72) \-
ExaNIC X10 Gen 3 x8 2x SFP+ \- \-
ExaNIC X25 Gen 3 x8 2x SFP28 \- \-
fb2CG\@KU15P Gen 3 x16 2x QSFP28 16 GB DDR4 2400 (4x 512M x72) \-
NetFPGA SUME Gen 3 x8 4x SFP+ 8 GB DDR3 1866 (2x 512M x64) \-
DK-DEV-1SMC-H-A Gen 3 x8 2x QSFP28 16 GB DDR4 2666 (2x 512M x72) 16 GB
Alveo U50 Gen 3 x16 1x QSFP28 \- 8 GB
Alveo U200 Gen 3 x16 2x QSFP28 64 GB DDR4 2400 (4x 2G x72) \-
Alveo U250 Gen 3 x16 2x QSFP28 64 GB DDR4 2400 (4x 2G x72) \-
Alveo U280 Gen 3 x16 2x QSFP28 32 GB DDR4 2400 (2x 2G x72) 8 GB
VCU108 Gen 3 x8 1x QSFP28 4 GB DDR4 2400 (2x 256M x80) \-
VCU118 Gen 3 x16 2x QSFP28 4 GB DDR4 2400 (2x 256M x80) \-
VCU1525 Gen 3 x16 2x QSFP28 64 GB DDR4 2400 (4x 2G x72) \-
ZCU106 Gen 3 x4 2x SFP+ 2 GB DDR4 2400 (256M x64) \-
================= ========= ========== =============================== =====
.. table:: Summary of support for various ancillary features.
================= ============ ============ ==========
Board I2C :sup:`1` MAC :sup:`2` FW update
================= ============ ============ ==========
ADM-PCIE-9V3 N :sup:`3` Y :sup:`5` Y
ExaNIC X10 N :sup:`3` Y Y
ExaNIC X25 N :sup:`3` Y Y
fb2CG\@KU15P Y Y Y
NetFPGA SUME Y N :sup:`7` N :sup:`8`
DK-DEV-1SMC-H-A N N N
Alveo U50 N :sup:`4` Y Y
Alveo U200 Y Y Y
Alveo U250 Y Y Y
Alveo U280 N :sup:`4` Y Y
VCU108 Y Y :sup:`5` Y
VCU118 Y Y :sup:`5` Y
VCU1525 Y Y :sup:`5` Y
ZCU106 Y Y :sup:`5` Y
================= ============ ============ ==========
- :sup:`1` I2C access to optical modules
- :sup:`2` Persistent MAC address storage
- :sup:`3` Supported in hardware, driver support in progress
- :sup:`4` Limited read/write access via BMC pending driver support, full read/write access requires support in BMC firmware
- :sup:`5` Can read MAC from I2C EEPROM, but EEPROM is blank from factory
- :sup:`6` MAC available from BMC, but accessing BMC is not yet implemented
- :sup:`7` No on-board EEPROM
- :sup:`8` Flash sits behind CPLD, not currently exposed via PCIe
.. table:: Summary of the board-specific design variants and some important configuration parameters.
================= ========================= ==== ======= ==== =====
Board Design IFxP RXQ/TXQ MAC Sched
================= ========================= ==== ======= ==== =====
ADM-PCIE-9V3 mqnic/fpga_10g/fpga 2x1 256/8K 10G RR
ADM-PCIE-9V3 mqnic/fpga_10g/fpga_tdma 2x1 256/256 10G TDMA
ADM-PCIE-9V3 mqnic/fpga_25g/fpga 2x1 256/8K 25G RR
ADM-PCIE-9V3 mqnic/fpga_25g/fpga_tdma 2x1 256/256 25G TDMA
ADM-PCIE-9V3 mqnic/fpga_100g/fpga 2x1 256/8K 100G RR
ADM-PCIE-9V3 mqnic/fpga_100g/fpga_tdma 2x1 256/256 100G TDMA
ExaNIC X10 mqnic/fpga/fpga 2x1 256/1K 10G RR
ExaNIC X25 mqnic/fpga_10g/fpga 2x1 256/8K 10G RR
ExaNIC X25 mqnic/fpga_25g/fpga 2x1 256/8K 25G RR
fb2CG\@KU15P mqnic/fpga_10g/fpga 2x1 256/8K 10G RR
fb2CG\@KU15P mqnic/fpga_10g/fpga_tdma 2x1 256/256 10G TDMA
fb2CG\@KU15P mqnic/fpga_25g/fpga 2x1 256/8K 25G RR
fb2CG\@KU15P mqnic/fpga_25g/fpga_tdma 2x1 256/256 25G TDMA
fb2CG\@KU15P mqnic/fpga_100g/fpga 2x1 256/8K 100G RR
fb2CG\@KU15P mqnic/fpga_100g/fpga_tdma 2x1 256/256 100G TDMA
NetFPGA SUME mqnic/fpga/fpga 1x1 256/512 10G RR
DK-DEV-1SMC-H-A mqnic/fpga_10g/fpga 2x1 256/1K 10G RR
Alveo U50 mqnic/fpga_10g/fpga 1x1 256/8K 10G RR
Alveo U50 mqnic/fpga_100g/fpga 1x1 256/8K 100G RR
Alveo U200 mqnic/fpga_10g/fpga 2x1 256/8K 10G RR
Alveo U200 mqnic/fpga_100g/fpga 2x1 256/8K 100G RR
Alveo U250 mqnic/fpga_10g/fpga 2x1 256/8K 10G RR
Alveo U250 mqnic/fpga_100g/fpga 2x1 256/8K 100G RR
Alveo U280 mqnic/fpga_10g/fpga 2x1 256/8K 10G RR
Alveo U280 mqnic/fpga_100g/fpga 2x1 256/8K 100G RR
VCU108 mqnic/fpga_10g/fpga 1x1 256/2K 10G RR
VCU118 mqnic/fpga_10g/fpga 2x1 256/8K 10G RR
VCU118 mqnic/fpga_100g/fpga 2x1 256/8K 100G RR
VCU1525 mqnic/fpga_10g/fpga 2x1 256/8K 10G RR
VCU1525 mqnic/fpga_100g/fpga 2x1 256/8K 100G RR
ZCU106 mqnic/fpga_10g/fpga 2x1 256/8K 10G RR
================= ========================= ==== ======= ==== =====

Binary file not shown.

View File

@ -0,0 +1,983 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="230.25mm" height="73.03mm" viewBox="1109 1108 23025 7303" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs>
<font id="EmbeddedFont_1" horiz-adv-x="2048">
<font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="441"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="y" horiz-adv-x="1024" d="M 191,-425 C 142,-425 100,-421 67,-414 L 67,-279 C 92,-283 120,-285 151,-285 263,-285 352,-203 417,-38 L 434,5 5,1082 197,1082 425,484 C 428,475 432,464 437,451 442,438 457,394 482,320 507,246 521,205 523,196 L 593,393 830,1082 1020,1082 604,0 C 559,-115 518,-201 479,-258 440,-314 398,-356 351,-384 304,-411 250,-425 191,-425 Z"/>
<glyph unicode="w" horiz-adv-x="1518" d="M 1174,0 L 965,0 776,765 740,934 C 734,904 725,861 712,805 699,748 631,480 508,0 L 300,0 -3,1082 175,1082 358,347 C 363,331 377,265 401,149 L 418,223 644,1082 837,1082 1026,339 1072,149 1103,288 1308,1082 1484,1082 1174,0 Z"/>
<glyph unicode="v" horiz-adv-x="1024" d="M 613,0 L 400,0 7,1082 199,1082 437,378 C 446,351 469,272 506,141 L 541,258 580,376 826,1082 1017,1082 613,0 Z"/>
<glyph unicode="t" horiz-adv-x="547" d="M 554,8 C 495,-8 434,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 474,127 509,132 554,141 L 554,8 Z"/>
<glyph unicode="s" horiz-adv-x="901" d="M 950,299 C 950,197 912,118 835,63 758,8 650,-20 511,-20 376,-20 273,2 200,47 127,91 79,160 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 602,117 669,131 712,159 754,187 775,229 775,285 775,328 760,362 731,389 702,416 654,438 589,455 L 460,489 C 357,516 283,542 240,568 196,593 162,624 137,661 112,698 100,743 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 759,862 732,899 689,925 645,950 586,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,783 283,758 299,738 315,718 339,701 370,687 401,673 467,654 568,629 663,605 732,583 774,563 816,542 849,520 874,495 898,470 917,442 930,410 943,377 950,340 950,299 Z"/>
<glyph unicode="r" horiz-adv-x="531" d="M 142,0 L 142,830 C 142,906 140,990 136,1082 L 306,1082 C 311,959 314,886 314,861 L 318,861 C 347,954 380,1017 417,1051 454,1085 507,1102 575,1102 599,1102 623,1099 648,1092 L 648,927 C 624,934 592,937 552,937 477,937 420,905 381,841 342,776 322,684 322,564 L 322,0 142,0 Z"/>
<glyph unicode="p" horiz-adv-x="936" d="M 1053,546 C 1053,169 920,-20 655,-20 488,-20 376,43 319,168 L 314,168 C 317,163 318,106 318,-2 L 318,-425 138,-425 138,861 C 138,972 136,1046 132,1082 L 306,1082 C 307,1079 308,1070 309,1054 310,1037 312,1012 314,978 315,944 316,921 316,908 L 320,908 C 352,975 394,1024 447,1055 500,1086 569,1101 655,1101 788,1101 888,1056 954,967 1020,878 1053,737 1053,546 Z M 864,542 C 864,693 844,800 803,865 762,930 698,962 609,962 538,962 482,947 442,917 401,887 371,840 350,777 329,713 318,630 318,528 318,386 341,281 386,214 431,147 505,113 607,113 696,113 762,146 803,212 844,277 864,387 864,542 Z"/>
<glyph unicode="o" horiz-adv-x="988" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 407,-20 288,28 207,125 126,221 86,360 86,542 86,915 248,1102 571,1102 736,1102 858,1057 936,966 1014,875 1053,733 1053,542 Z M 864,542 C 864,691 842,800 798,868 753,935 679,969 574,969 469,969 393,935 346,866 299,797 275,689 275,542 275,399 298,292 345,221 391,149 464,113 563,113 671,113 748,148 795,217 841,286 864,395 864,542 Z"/>
<glyph unicode="n" horiz-adv-x="883" d="M 825,0 L 825,686 C 825,757 818,813 804,852 790,891 768,920 737,937 706,954 661,963 602,963 515,963 447,933 397,874 347,815 322,732 322,627 L 322,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 358,972 406,1025 461,1056 515,1087 582,1102 663,1102 782,1102 869,1073 924,1014 979,955 1006,857 1006,721 L 1006,0 825,0 Z"/>
<glyph unicode="m" horiz-adv-x="1448" d="M 768,0 L 768,686 C 768,791 754,863 725,903 696,943 645,963 570,963 493,963 433,934 388,875 343,816 321,734 321,627 L 321,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 356,974 400,1027 450,1057 500,1087 561,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 967,970 1013,1022 1066,1054 1119,1086 1183,1102 1258,1102 1367,1102 1447,1072 1497,1013 1546,954 1571,856 1571,721 L 1571,0 1393,0 1393,686 C 1393,791 1379,863 1350,903 1321,943 1270,963 1195,963 1116,963 1055,934 1012,876 968,817 946,734 946,627 L 946,0 768,0 Z"/>
<glyph unicode="l" horiz-adv-x="213" d="M 138,0 L 138,1484 318,1484 318,0 138,0 Z"/>
<glyph unicode="i" horiz-adv-x="196" d="M 137,1312 L 137,1484 317,1484 317,1312 137,1312 Z M 137,0 L 137,1082 317,1082 317,0 137,0 Z"/>
<glyph unicode="h" horiz-adv-x="865" d="M 317,897 C 356,968 402,1020 457,1053 511,1086 580,1102 663,1102 780,1102 867,1073 923,1015 978,956 1006,858 1006,721 L 1006,0 825,0 825,686 C 825,762 818,819 804,856 790,893 767,920 735,937 703,954 659,963 602,963 517,963 450,934 399,875 348,816 322,737 322,638 L 322,0 142,0 142,1484 322,1484 322,1098 C 322,1057 321,1015 319,972 316,929 315,904 314,897 L 317,897 Z"/>
<glyph unicode="g" horiz-adv-x="953" d="M 548,-425 C 430,-425 336,-402 266,-356 196,-309 151,-243 131,-158 L 312,-132 C 324,-182 351,-220 392,-248 433,-274 486,-288 553,-288 732,-288 822,-183 822,27 L 822,201 820,201 C 786,132 739,80 680,45 621,10 551,-8 472,-8 339,-8 242,36 180,124 117,212 86,350 86,539 86,730 120,872 187,963 254,1054 355,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,917 825,952 828,1001 831,1050 833,1077 836,1082 L 1007,1082 C 1003,1046 1001,971 1001,858 L 1001,31 C 1001,-273 850,-425 548,-425 Z M 822,541 C 822,629 810,705 786,769 762,832 728,881 685,915 641,948 591,965 536,965 444,965 377,932 335,865 293,798 272,690 272,541 272,393 292,287 331,222 370,157 438,125 533,125 590,125 640,142 684,175 728,208 762,256 786,319 810,381 822,455 822,541 Z"/>
<glyph unicode="f" horiz-adv-x="565" d="M 361,951 L 361,0 181,0 181,951 29,951 29,1082 181,1082 181,1204 C 181,1303 203,1374 246,1417 289,1460 356,1482 445,1482 495,1482 537,1478 572,1470 L 572,1333 C 542,1338 515,1341 492,1341 446,1341 413,1329 392,1306 371,1283 361,1240 361,1179 L 361,1082 572,1082 572,951 361,951 Z"/>
<glyph unicode="e" horiz-adv-x="988" d="M 276,503 C 276,379 302,283 353,216 404,149 479,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 954,65 807,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,727 129,864 213,959 296,1054 416,1102 571,1102 889,1102 1048,910 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 481,969 412,940 361,882 310,823 282,743 278,641 L 862,641 Z"/>
<glyph unicode="d" horiz-adv-x="953" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 821,1035 821,1484 1001,1484 1001,223 C 1001,110 1003,36 1007,0 L 835,0 C 833,11 831,35 829,74 826,113 825,146 825,174 L 821,174 Z M 275,542 C 275,391 295,282 335,217 375,152 440,119 530,119 632,119 706,154 752,225 798,296 821,405 821,554 821,697 798,802 752,869 706,936 633,969 532,969 441,969 376,936 336,869 295,802 275,693 275,542 Z"/>
<glyph unicode="c" horiz-adv-x="900" d="M 275,546 C 275,402 298,295 343,226 388,157 457,122 548,122 612,122 666,139 709,174 752,209 778,262 788,334 L 970,322 C 956,218 912,135 837,73 762,11 668,-20 553,-20 402,-20 286,28 207,124 127,219 87,359 87,542 87,724 127,863 207,959 287,1054 402,1102 551,1102 662,1102 754,1073 827,1016 900,959 945,880 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 451,961 382,929 339,866 296,803 275,696 275,546 Z"/>
<glyph unicode="b" horiz-adv-x="936" d="M 1053,546 C 1053,169 920,-20 655,-20 573,-20 505,-5 451,25 396,54 352,102 318,168 L 316,168 C 316,147 315,116 312,74 309,31 307,7 306,0 L 132,0 C 136,36 138,110 138,223 L 138,1484 318,1484 318,1061 C 318,1018 317,967 314,908 L 318,908 C 351,977 396,1027 451,1057 506,1087 574,1102 655,1102 792,1102 892,1056 957,964 1021,872 1053,733 1053,546 Z M 864,540 C 864,691 844,800 804,865 764,930 699,963 609,963 508,963 434,928 388,859 341,790 318,680 318,529 318,387 341,282 386,215 431,147 505,113 607,113 698,113 763,147 804,214 844,281 864,389 864,540 Z"/>
<glyph unicode="a" horiz-adv-x="1077" d="M 414,-20 C 305,-20 224,9 169,66 114,123 87,202 87,302 87,414 124,500 198,560 271,620 390,652 554,656 L 797,660 797,719 C 797,807 778,870 741,908 704,946 645,965 565,965 484,965 426,951 389,924 352,897 330,853 323,793 L 135,810 C 166,1005 310,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1097,111 1117,113 1139,118 L 1139,6 C 1094,-5 1047,-10 1000,-10 933,-10 885,8 855,43 824,78 807,132 803,207 L 797,207 C 751,124 698,66 637,32 576,-3 501,-20 414,-20 Z M 455,115 C 521,115 580,130 631,160 682,190 723,231 753,284 782,336 797,390 797,445 L 797,534 600,530 C 515,529 451,520 408,504 364,488 330,463 307,430 284,397 272,353 272,299 272,240 288,195 320,163 351,131 396,115 455,115 Z"/>
<glyph unicode="X" horiz-adv-x="1289" d="M 1112,0 L 689,616 257,0 46,0 582,732 87,1409 298,1409 690,856 1071,1409 1282,1409 800,739 1323,0 1112,0 Z"/>
<glyph unicode="T" horiz-adv-x="1183" d="M 720,1253 L 720,0 530,0 530,1253 46,1253 46,1409 1204,1409 1204,1253 720,1253 Z"/>
<glyph unicode="S" horiz-adv-x="1201" d="M 1272,389 C 1272,259 1221,158 1120,87 1018,16 875,-20 690,-20 347,-20 148,99 93,338 L 278,375 C 299,290 345,228 414,189 483,149 578,129 697,129 820,129 916,150 983,193 1050,235 1083,297 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 541,675 456,699 399,724 341,749 295,776 262,807 229,837 203,872 186,913 168,954 159,1000 159,1053 159,1174 205,1267 298,1332 390,1397 522,1430 694,1430 854,1430 976,1406 1061,1357 1146,1308 1205,1224 1239,1106 L 1051,1073 C 1030,1148 991,1202 933,1236 875,1269 795,1286 692,1286 579,1286 493,1267 434,1230 375,1193 345,1137 345,1063 345,1020 357,984 380,956 403,927 436,903 479,884 522,864 609,840 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
<glyph unicode="R" horiz-adv-x="1235" d="M 1164,0 L 798,585 359,585 359,0 168,0 168,1409 831,1409 C 990,1409 1112,1374 1199,1303 1285,1232 1328,1133 1328,1006 1328,901 1298,813 1237,742 1176,671 1091,626 984,607 L 1384,0 1164,0 Z M 1136,1004 C 1136,1086 1108,1149 1053,1192 997,1235 917,1256 812,1256 L 359,1256 359,736 820,736 C 921,736 999,760 1054,807 1109,854 1136,919 1136,1004 Z"/>
<glyph unicode="Q" horiz-adv-x="1412" d="M 1495,711 C 1495,512 1445,349 1345,221 1245,93 1106,17 928,-6 955,-90 991,-151 1036,-188 1080,-225 1136,-244 1204,-244 1241,-244 1279,-240 1319,-231 L 1319,-365 C 1257,-380 1198,-387 1141,-387 1040,-387 958,-358 893,-302 828,-244 774,-149 733,-16 601,-9 487,24 392,85 296,145 223,229 173,337 122,444 97,569 97,711 97,936 159,1113 282,1240 405,1367 577,1430 797,1430 940,1430 1065,1402 1170,1345 1275,1288 1356,1205 1412,1096 1467,987 1495,859 1495,711 Z M 1300,711 C 1300,886 1256,1024 1169,1124 1081,1224 957,1274 797,1274 636,1274 511,1225 423,1126 335,1027 291,889 291,711 291,534 336,394 425,291 514,187 637,135 795,135 958,135 1083,185 1170,286 1257,386 1300,528 1300,711 Z"/>
<glyph unicode="P" horiz-adv-x="1112" d="M 1258,985 C 1258,852 1215,746 1128,667 1041,588 922,549 773,549 L 359,549 359,0 168,0 168,1409 761,1409 C 919,1409 1041,1372 1128,1298 1215,1224 1258,1120 1258,985 Z M 1066,983 C 1066,1165 957,1256 738,1256 L 359,1256 359,700 746,700 C 959,700 1066,794 1066,983 Z"/>
<glyph unicode="O" horiz-adv-x="1412" d="M 1495,711 C 1495,564 1467,435 1411,324 1354,213 1273,128 1168,69 1063,10 938,-20 795,-20 650,-20 526,9 421,68 316,127 235,212 180,323 125,434 97,563 97,711 97,936 159,1113 282,1240 405,1367 577,1430 797,1430 940,1430 1065,1402 1170,1345 1275,1288 1356,1205 1412,1096 1467,987 1495,859 1495,711 Z M 1300,711 C 1300,886 1256,1024 1169,1124 1081,1224 957,1274 797,1274 636,1274 511,1225 423,1126 335,1027 291,889 291,711 291,534 336,394 425,291 514,187 637,135 795,135 958,135 1083,185 1170,286 1257,386 1300,528 1300,711 Z"/>
<glyph unicode="M" horiz-adv-x="1394" d="M 1366,0 L 1366,940 C 1366,1044 1369,1144 1375,1240 1342,1121 1313,1027 1287,960 L 923,0 789,0 420,960 364,1130 331,1240 334,1129 338,940 338,0 168,0 168,1409 419,1409 794,432 C 807,393 820,351 833,306 845,261 853,228 857,208 862,235 874,275 891,330 908,384 919,418 925,432 L 1293,1409 1538,1409 1538,0 1366,0 Z"/>
<glyph unicode="L" horiz-adv-x="918" d="M 168,0 L 168,1409 359,1409 359,156 1071,156 1071,0 168,0 Z"/>
<glyph unicode="I" horiz-adv-x="213" d="M 189,0 L 189,1409 380,1409 380,0 189,0 Z"/>
<glyph unicode="H" horiz-adv-x="1165" d="M 1121,0 L 1121,653 359,653 359,0 168,0 168,1409 359,1409 359,813 1121,813 1121,1409 1312,1409 1312,0 1121,0 Z"/>
<glyph unicode="G" horiz-adv-x="1359" d="M 103,711 C 103,940 164,1117 287,1242 410,1367 582,1430 804,1430 960,1430 1087,1404 1184,1351 1281,1298 1356,1214 1409,1098 L 1227,1044 C 1187,1124 1132,1182 1062,1219 991,1256 904,1274 799,1274 636,1274 512,1225 426,1127 340,1028 297,890 297,711 297,533 343,393 434,290 525,187 652,135 813,135 905,135 991,149 1071,177 1150,205 1215,243 1264,291 L 1264,545 843,545 843,705 1440,705 1440,219 C 1365,143 1274,84 1166,43 1057,1 940,-20 813,-20 666,-20 539,9 432,68 325,127 244,211 188,322 131,432 103,562 103,711 Z"/>
<glyph unicode="F" horiz-adv-x="1024" d="M 359,1253 L 359,729 1145,729 1145,571 359,571 359,0 168,0 168,1409 1169,1409 1169,1253 359,1253 Z"/>
<glyph unicode="E" horiz-adv-x="1130" d="M 168,0 L 168,1409 1237,1409 1237,1253 359,1253 359,801 1177,801 1177,647 359,647 359,156 1278,156 1278,0 168,0 Z"/>
<glyph unicode="D" horiz-adv-x="1235" d="M 1381,719 C 1381,574 1353,447 1296,338 1239,229 1159,145 1055,87 951,29 831,0 695,0 L 168,0 168,1409 634,1409 C 873,1409 1057,1349 1187,1230 1316,1110 1381,940 1381,719 Z M 1189,719 C 1189,894 1141,1027 1046,1119 950,1210 811,1256 630,1256 L 359,1256 359,153 673,153 C 776,153 867,176 946,221 1024,266 1084,332 1126,417 1168,502 1189,603 1189,719 Z"/>
<glyph unicode="C" horiz-adv-x="1324" d="M 792,1274 C 636,1274 515,1224 428,1124 341,1023 298,886 298,711 298,538 343,400 434,295 524,190 646,137 800,137 997,137 1146,235 1245,430 L 1401,352 C 1343,231 1262,138 1157,75 1052,12 930,-20 791,-20 649,-20 526,10 423,69 319,128 240,212 186,322 131,431 104,561 104,711 104,936 165,1112 286,1239 407,1366 575,1430 790,1430 940,1430 1065,1401 1166,1342 1267,1283 1341,1196 1388,1081 L 1207,1021 C 1174,1103 1122,1166 1050,1209 977,1252 891,1274 792,1274 Z"/>
<glyph unicode="A" horiz-adv-x="1377" d="M 1167,0 L 1006,412 364,412 202,0 4,0 579,1409 796,1409 1362,0 1167,0 Z M 685,1265 L 676,1237 C 659,1182 635,1111 602,1024 L 422,561 949,561 768,1026 C 749,1072 731,1124 712,1182 L 685,1265 Z"/>
<glyph unicode="." horiz-adv-x="213" d="M 187,0 L 187,219 382,219 382,0 187,0 Z"/>
<glyph unicode="-" horiz-adv-x="513" d="M 91,464 L 91,624 591,624 591,464 91,464 Z"/>
<glyph unicode=" " horiz-adv-x="564"/>
</font>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g class="Page">
<g class="com.sun.star.drawing.CustomShape">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="1109" y="1108" width="2324" height="3975"/>
<path fill="rgb(221,221,221)" stroke="none" d="M 1278,1126 L 1278,1126 C 1252,1126 1226,1133 1203,1146 1180,1160 1161,1179 1147,1202 1134,1225 1127,1251 1127,1277 L 1127,4912 1127,4913 C 1127,4939 1134,4965 1147,4988 1161,5011 1180,5030 1203,5044 1226,5057 1252,5064 1278,5064 L 3262,5064 3263,5064 C 3289,5064 3315,5057 3338,5044 3361,5030 3380,5011 3394,4988 3407,4965 3414,4939 3414,4913 L 3414,1277 3414,1277 3414,1277 C 3414,1251 3407,1225 3394,1202 3380,1179 3361,1160 3338,1146 3315,1133 3289,1126 3263,1126 L 1278,1126 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 1278,1126 L 1278,1126 C 1252,1126 1226,1133 1203,1146 1180,1160 1161,1179 1147,1202 1134,1225 1127,1251 1127,1277 L 1127,4912 1127,4913 C 1127,4939 1134,4965 1147,4988 1161,5011 1180,5030 1203,5044 1226,5057 1252,5064 1278,5064 L 3262,5064 3263,5064 C 3289,5064 3315,5057 3338,5044 3361,5030 3380,5011 3394,4988 3407,4965 3414,4939 3414,4913 L 3414,1277 3414,1277 3414,1277 C 3414,1251 3407,1225 3394,1202 3380,1179 3361,1160 3338,1146 3315,1133 3289,1126 3263,1126 L 1278,1126 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1438" y="1761"><tspan fill="rgb(0,0,0)" stroke="none">Host</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id4">
<rect class="BoundingBox" stroke="none" fill="none" x="3648" y="1108" width="18961" height="7277"/>
<path fill="rgb(221,221,221)" stroke="none" d="M 3822,1126 L 3822,1126 C 3795,1126 3768,1133 3744,1147 3720,1161 3701,1180 3687,1204 3673,1228 3666,1255 3666,1282 L 3666,8209 3666,8210 C 3666,8237 3673,8264 3687,8288 3701,8312 3720,8331 3744,8345 3768,8359 3795,8366 3822,8366 L 22433,8366 22434,8366 C 22461,8366 22488,8359 22512,8345 22536,8331 22555,8312 22569,8288 22583,8264 22590,8237 22590,8210 L 22589,1282 22590,1282 22590,1282 C 22590,1255 22583,1228 22569,1204 22555,1180 22536,1161 22512,1147 22488,1133 22461,1126 22434,1126 L 3822,1126 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 3822,1126 L 3822,1126 C 3795,1126 3768,1133 3744,1147 3720,1161 3701,1180 3687,1204 3673,1228 3666,1255 3666,1282 L 3666,8209 3666,8210 C 3666,8237 3673,8264 3687,8288 3701,8312 3720,8331 3744,8345 3768,8359 3795,8366 3822,8366 L 22433,8366 22434,8366 C 22461,8366 22488,8359 22512,8345 22536,8331 22555,8312 22569,8288 22583,8264 22590,8237 22590,8210 L 22589,1282 22590,1282 22590,1282 C 22590,1255 22583,1228 22569,1204 22555,1180 22536,1161 22512,1147 22488,1133 22461,1126 22434,1126 L 3822,1126 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3978" y="1762"><tspan fill="rgb(0,0,0)" stroke="none">FPGA</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id5">
<rect class="BoundingBox" stroke="none" fill="none" x="7713" y="1490" width="12484" height="6642"/>
<path fill="rgb(238,238,238)" stroke="none" d="M 7873,1508 L 7874,1508 C 7849,1508 7824,1515 7802,1527 7781,1540 7763,1558 7750,1579 7738,1601 7731,1626 7731,1651 L 7731,7970 7731,7970 C 7731,7995 7738,8020 7750,8042 7763,8063 7781,8081 7802,8094 7824,8106 7849,8113 7874,8113 L 20035,8113 20035,8113 C 20060,8113 20085,8106 20107,8094 20128,8081 20146,8063 20159,8042 20171,8020 20178,7995 20178,7970 L 20178,1650 20178,1651 20178,1651 C 20178,1626 20171,1601 20159,1579 20146,1558 20128,1540 20107,1527 20085,1515 20060,1508 20035,1508 L 7873,1508 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 7873,1508 L 7874,1508 C 7849,1508 7824,1515 7802,1527 7781,1540 7763,1558 7750,1579 7738,1601 7731,1626 7731,1651 L 7731,7970 7731,7970 C 7731,7995 7738,8020 7750,8042 7763,8063 7781,8081 7802,8094 7824,8106 7849,8113 7874,8113 L 20035,8113 20035,8113 C 20060,8113 20085,8106 20107,8094 20128,8081 20146,8063 20159,8042 20171,8020 20178,7995 20178,7970 L 20178,1650 20178,1651 20178,1651 C 20178,1626 20171,1601 20159,1579 20146,1558 20128,1540 20107,1527 20085,1515 20060,1508 20035,1508 L 7873,1508 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8039" y="2140"><tspan fill="rgb(0,0,0)" stroke="none">Interface</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id6">
<rect class="BoundingBox" stroke="none" fill="none" x="7586" y="1363" width="12484" height="6642"/>
<path fill="rgb(238,238,238)" stroke="none" d="M 7746,1381 L 7747,1381 C 7722,1381 7697,1388 7675,1400 7654,1413 7636,1431 7623,1452 7611,1474 7604,1499 7604,1524 L 7604,7843 7604,7843 C 7604,7868 7611,7893 7623,7915 7636,7936 7654,7954 7675,7967 7697,7979 7722,7986 7747,7986 L 19908,7986 19908,7986 C 19933,7986 19958,7979 19980,7967 20001,7954 20019,7936 20032,7915 20044,7893 20051,7868 20051,7843 L 20051,1523 20051,1524 20051,1524 C 20051,1499 20044,1474 20032,1452 20019,1431 20001,1413 19980,1400 19958,1388 19933,1381 19908,1381 L 7746,1381 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 7746,1381 L 7747,1381 C 7722,1381 7697,1388 7675,1400 7654,1413 7636,1431 7623,1452 7611,1474 7604,1499 7604,1524 L 7604,7843 7604,7843 C 7604,7868 7611,7893 7623,7915 7636,7936 7654,7954 7675,7967 7697,7979 7722,7986 7747,7986 L 19908,7986 19908,7986 C 19933,7986 19958,7979 19980,7967 20001,7954 20019,7936 20032,7915 20044,7893 20051,7868 20051,7843 L 20051,1523 20051,1524 20051,1524 C 20051,1499 20044,1474 20032,1452 20019,1431 20001,1413 19980,1400 19958,1388 19933,1381 19908,1381 L 7746,1381 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7912" y="2013"><tspan fill="rgb(0,0,0)" stroke="none">Interface</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id7">
<rect class="BoundingBox" stroke="none" fill="none" x="17110" y="2760" width="2451" height="4102"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 17180,2778 L 17180,2778 C 17171,2778 17162,2780 17154,2785 17146,2790 17140,2796 17135,2804 17130,2812 17128,2821 17128,2830 L 17128,6790 17128,6791 C 17128,6800 17130,6809 17135,6817 17140,6825 17146,6831 17154,6836 17162,6841 17171,6843 17180,6843 L 19489,6842 19490,6843 C 19499,6843 19508,6841 19516,6836 19524,6831 19530,6825 19535,6817 19540,6809 19542,6800 19542,6791 L 19542,2830 19542,2830 19542,2830 C 19542,2821 19540,2812 19535,2804 19530,2796 19524,2790 19516,2785 19508,2780 19499,2778 19490,2778 L 17180,2778 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 17180,2778 L 17180,2778 C 17171,2778 17162,2780 17154,2785 17146,2790 17140,2796 17135,2804 17130,2812 17128,2821 17128,2830 L 17128,6790 17128,6791 C 17128,6800 17130,6809 17135,6817 17140,6825 17146,6831 17154,6836 17162,6841 17171,6843 17180,6843 L 19489,6842 19490,6843 C 19499,6843 19508,6841 19516,6836 19524,6831 19530,6825 19535,6817 19540,6809 19542,6800 19542,6791 L 19542,2830 19542,2830 19542,2830 C 19542,2821 19540,2812 19535,2804 19530,2796 19524,2790 19516,2785 19508,2780 19499,2778 19490,2778 L 17180,2778 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="17410" y="3384"><tspan fill="rgb(0,0,0)" stroke="none">Port</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id8">
<rect class="BoundingBox" stroke="none" fill="none" x="16983" y="2633" width="2451" height="4102"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 17053,2651 L 17053,2651 C 17044,2651 17035,2653 17027,2658 17019,2663 17013,2669 17008,2677 17003,2685 17001,2694 17001,2703 L 17001,6663 17001,6664 C 17001,6673 17003,6682 17008,6690 17013,6698 17019,6704 17027,6709 17035,6714 17044,6716 17053,6716 L 19362,6715 19363,6716 C 19372,6716 19381,6714 19389,6709 19397,6704 19403,6698 19408,6690 19413,6682 19415,6673 19415,6664 L 19415,2703 19415,2703 19415,2703 C 19415,2694 19413,2685 19408,2677 19403,2669 19397,2663 19389,2658 19381,2653 19372,2651 19363,2651 L 17053,2651 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 17053,2651 L 17053,2651 C 17044,2651 17035,2653 17027,2658 17019,2663 17013,2669 17008,2677 17003,2685 17001,2694 17001,2703 L 17001,6663 17001,6664 C 17001,6673 17003,6682 17008,6690 17013,6698 17019,6704 17027,6709 17035,6714 17044,6716 17053,6716 L 19362,6715 19363,6716 C 19372,6716 19381,6714 19389,6709 19397,6704 19403,6698 19408,6690 19413,6682 19415,6673 19415,6664 L 19415,2703 19415,2703 19415,2703 C 19415,2694 19413,2685 19408,2677 19403,2669 19397,2663 19389,2658 19381,2653 19372,2651 19363,2651 L 17053,2651 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="17283" y="3257"><tspan fill="rgb(0,0,0)" stroke="none">Port</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id9">
<rect class="BoundingBox" stroke="none" fill="none" x="8221" y="4665" width="1562" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 8366,4683 L 8366,4683 C 8344,4683 8322,4689 8303,4700 8283,4711 8267,4727 8256,4747 8245,4766 8239,4788 8239,4810 L 8239,5318 8239,5319 C 8239,5341 8245,5363 8256,5382 8267,5402 8283,5418 8303,5429 8322,5440 8344,5446 8366,5446 L 9636,5446 9637,5446 C 9659,5446 9681,5440 9700,5429 9720,5418 9736,5402 9747,5382 9758,5363 9764,5341 9764,5319 L 9763,4810 9764,4810 9764,4810 C 9764,4788 9758,4766 9747,4747 9736,4727 9720,4711 9700,4700 9681,4689 9659,4683 9637,4683 L 8366,4683 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 8366,4683 L 8366,4683 C 8344,4683 8322,4689 8303,4700 8283,4711 8267,4727 8256,4747 8245,4766 8239,4788 8239,4810 L 8239,5318 8239,5319 C 8239,5341 8245,5363 8256,5382 8267,5402 8283,5418 8303,5429 8322,5440 8344,5446 8366,5446 L 9636,5446 9637,5446 C 9659,5446 9681,5440 9700,5429 9720,5418 9736,5402 9747,5382 9758,5363 9764,5341 9764,5319 L 9763,4810 9764,4810 9764,4810 C 9764,4788 9758,4766 9747,4747 9736,4727 9720,4711 9700,4700 9681,4689 9659,4683 9637,4683 L 8366,4683 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8315" y="5236"><tspan fill="rgb(0,0,0)" stroke="none">TXCQ</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id10">
<rect class="BoundingBox" stroke="none" fill="none" x="8221" y="5554" width="1562" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 8366,5572 L 8366,5572 C 8344,5572 8322,5578 8303,5589 8283,5600 8267,5616 8256,5636 8245,5655 8239,5677 8239,5699 L 8239,6207 8239,6208 C 8239,6230 8245,6252 8256,6271 8267,6291 8283,6307 8303,6318 8322,6329 8344,6335 8366,6335 L 9636,6335 9637,6335 C 9659,6335 9681,6329 9700,6318 9720,6307 9736,6291 9747,6271 9758,6252 9764,6230 9764,6208 L 9763,5699 9764,5699 9764,5699 C 9764,5677 9758,5655 9747,5636 9736,5616 9720,5600 9700,5589 9681,5578 9659,5572 9637,5572 L 8366,5572 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 8366,5572 L 8366,5572 C 8344,5572 8322,5578 8303,5589 8283,5600 8267,5616 8256,5636 8245,5655 8239,5677 8239,5699 L 8239,6207 8239,6208 C 8239,6230 8245,6252 8256,6271 8267,6291 8283,6307 8303,6318 8322,6329 8344,6335 8366,6335 L 9636,6335 9637,6335 C 9659,6335 9681,6329 9700,6318 9720,6307 9736,6291 9747,6271 9758,6252 9764,6230 9764,6208 L 9763,5699 9764,5699 9764,5699 C 9764,5677 9758,5655 9747,5636 9736,5616 9720,5600 9700,5589 9681,5578 9659,5572 9637,5572 L 8366,5572 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8287" y="6125"><tspan fill="rgb(0,0,0)" stroke="none">RXCQ</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id11">
<rect class="BoundingBox" stroke="none" fill="none" x="8221" y="2887" width="1562" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 8366,2905 L 8366,2905 C 8344,2905 8322,2911 8303,2922 8283,2933 8267,2949 8256,2969 8245,2988 8239,3010 8239,3032 L 8239,3540 8239,3541 C 8239,3563 8245,3585 8256,3604 8267,3624 8283,3640 8303,3651 8322,3662 8344,3668 8366,3668 L 9636,3668 9637,3668 C 9659,3668 9681,3662 9700,3651 9720,3640 9736,3624 9747,3604 9758,3585 9764,3563 9764,3541 L 9763,3032 9764,3032 9764,3032 C 9764,3010 9758,2988 9747,2969 9736,2949 9720,2933 9700,2922 9681,2911 9659,2905 9637,2905 L 8366,2905 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 8366,2905 L 8366,2905 C 8344,2905 8322,2911 8303,2922 8283,2933 8267,2949 8256,2969 8245,2988 8239,3010 8239,3032 L 8239,3540 8239,3541 C 8239,3563 8245,3585 8256,3604 8267,3624 8283,3640 8303,3651 8322,3662 8344,3668 8366,3668 L 9636,3668 9637,3668 C 9659,3668 9681,3662 9700,3651 9720,3640 9736,3624 9747,3604 9758,3585 9764,3563 9764,3541 L 9763,3032 9764,3032 9764,3032 C 9764,3010 9758,2988 9747,2969 9736,2949 9720,2933 9700,2922 9681,2911 9659,2905 9637,2905 L 8366,2905 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8493" y="3458"><tspan fill="rgb(0,0,0)" stroke="none">TXQ</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id12">
<rect class="BoundingBox" stroke="none" fill="none" x="8221" y="3776" width="1562" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 8366,3794 L 8366,3794 C 8344,3794 8322,3800 8303,3811 8283,3822 8267,3838 8256,3858 8245,3877 8239,3899 8239,3921 L 8239,4429 8239,4430 C 8239,4452 8245,4474 8256,4493 8267,4513 8283,4529 8303,4540 8322,4551 8344,4557 8366,4557 L 9636,4557 9637,4557 C 9659,4557 9681,4551 9700,4540 9720,4529 9736,4513 9747,4493 9758,4474 9764,4452 9764,4430 L 9763,3921 9764,3921 9764,3921 C 9764,3899 9758,3877 9747,3858 9736,3838 9720,3822 9700,3811 9681,3800 9659,3794 9637,3794 L 8366,3794 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 8366,3794 L 8366,3794 C 8344,3794 8322,3800 8303,3811 8283,3822 8267,3838 8256,3858 8245,3877 8239,3899 8239,3921 L 8239,4429 8239,4430 C 8239,4452 8245,4474 8256,4493 8267,4513 8283,4529 8303,4540 8322,4551 8344,4557 8366,4557 L 9636,4557 9637,4557 C 9659,4557 9681,4551 9700,4540 9720,4529 9736,4513 9747,4493 9758,4474 9764,4452 9764,4430 L 9763,3921 9764,3921 9764,3921 C 9764,3899 9758,3877 9747,3858 9736,3838 9720,3822 9700,3811 9681,3800 9659,3794 9637,3794 L 8366,3794 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8465" y="4347"><tspan fill="rgb(0,0,0)" stroke="none">RXQ</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id13">
<rect class="BoundingBox" stroke="none" fill="none" x="8221" y="6443" width="1562" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 8366,6461 L 8366,6461 C 8344,6461 8322,6467 8303,6478 8283,6489 8267,6505 8256,6525 8245,6544 8239,6566 8239,6588 L 8239,7096 8239,7097 C 8239,7119 8245,7141 8256,7160 8267,7180 8283,7196 8303,7207 8322,7218 8344,7224 8366,7224 L 9636,7224 9637,7224 C 9659,7224 9681,7218 9700,7207 9720,7196 9736,7180 9747,7160 9758,7141 9764,7119 9764,7097 L 9763,6588 9764,6588 9764,6588 C 9764,6566 9758,6544 9747,6525 9736,6505 9720,6489 9700,6478 9681,6467 9659,6461 9637,6461 L 8366,6461 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 8366,6461 L 8366,6461 C 8344,6461 8322,6467 8303,6478 8283,6489 8267,6505 8256,6525 8245,6544 8239,6566 8239,6588 L 8239,7096 8239,7097 C 8239,7119 8245,7141 8256,7160 8267,7180 8283,7196 8303,7207 8322,7218 8344,7224 8366,7224 L 9636,7224 9637,7224 C 9659,7224 9681,7218 9700,7207 9720,7196 9736,7180 9747,7160 9758,7141 9764,7119 9764,7097 L 9763,6588 9764,6588 9764,6588 C 9764,6566 9758,6544 9747,6525 9736,6505 9720,6489 9700,6478 9681,6467 9659,6461 9637,6461 L 8366,6461 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8644" y="7014"><tspan fill="rgb(0,0,0)" stroke="none">EQ</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id14">
<rect class="BoundingBox" stroke="none" fill="none" x="9998" y="3013" width="1435" height="1435"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 10104,3031 L 10104,3031 C 10089,3031 10073,3035 10060,3043 10047,3051 10036,3062 10028,3075 10020,3088 10016,3104 10016,3119 L 10016,4340 10016,4341 C 10016,4356 10020,4372 10028,4385 10036,4398 10047,4409 10060,4417 10073,4425 10089,4429 10104,4429 L 11325,4429 11326,4429 C 11341,4429 11357,4425 11370,4417 11383,4409 11394,4398 11402,4385 11410,4372 11414,4356 11414,4341 L 11414,3119 11414,3119 11414,3119 C 11414,3104 11410,3088 11402,3075 11394,3062 11383,3051 11370,3043 11357,3035 11341,3031 11326,3031 L 10104,3031 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10104,3031 L 10104,3031 C 10089,3031 10073,3035 10060,3043 10047,3051 10036,3062 10028,3075 10020,3088 10016,3104 10016,3119 L 10016,4340 10016,4341 C 10016,4356 10020,4372 10028,4385 10036,4398 10047,4409 10060,4417 10073,4425 10089,4429 10104,4429 L 11325,4429 11326,4429 C 11341,4429 11357,4425 11370,4417 11383,4409 11394,4398 11402,4385 11410,4372 11414,4356 11414,4341 L 11414,3119 11414,3119 11414,3119 C 11414,3104 11410,3088 11402,3075 11394,3062 11383,3051 11370,3043 11357,3035 11341,3031 11326,3031 L 10104,3031 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10149" y="3624"><tspan fill="rgb(0,0,0)" stroke="none">Desc</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10174" y="4179"><tspan fill="rgb(0,0,0)" stroke="none">fetch</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id15">
<rect class="BoundingBox" stroke="none" fill="none" x="3903" y="1997" width="800" height="2832"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 3921,4683 L 3921,4683 C 3921,4705 3927,4727 3938,4746 3949,4766 3965,4782 3985,4793 4004,4804 4026,4810 4048,4810 L 4556,4810 4557,4810 C 4579,4810 4601,4804 4620,4793 4640,4782 4656,4766 4667,4746 4678,4727 4684,4705 4684,4683 L 4684,2143 4684,2142 C 4684,2120 4678,2098 4667,2079 4656,2059 4640,2043 4620,2032 4601,2021 4579,2015 4557,2015 L 4048,2015 4048,2015 4048,2015 C 4026,2015 4004,2021 3985,2032 3965,2043 3949,2059 3938,2079 3927,2098 3921,2120 3921,2142 L 3921,4683 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 3921,4683 L 3921,4683 C 3921,4705 3927,4727 3938,4746 3949,4766 3965,4782 3985,4793 4004,4804 4026,4810 4048,4810 L 4556,4810 4557,4810 C 4579,4810 4601,4804 4620,4793 4640,4782 4656,4766 4667,4746 4678,4727 4684,4705 4684,4683 L 4684,2143 4684,2142 C 4684,2120 4678,2098 4667,2079 4656,2059 4640,2043 4620,2032 4601,2021 4579,2015 4557,2015 L 4048,2015 4048,2015 4048,2015 C 4026,2015 4004,2021 3985,2032 3965,2043 3949,2059 3938,2079 3927,2098 3921,2120 3921,2142 L 3921,4683 Z"/>
<text class="SVGTextShape" transform="rotate(-90 4474 4447)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4474" y="4447"><tspan fill="rgb(0,0,0)" stroke="none">PCIe HIP</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id16">
<rect class="BoundingBox" stroke="none" fill="none" x="9745" y="3268" width="291" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10017,3286 L 9763,3286"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id17">
<rect class="BoundingBox" stroke="none" fill="none" x="9745" y="4157" width="291" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10017,4175 L 9763,4175"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id18">
<rect class="BoundingBox" stroke="none" fill="none" x="9745" y="5046" width="291" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10017,5064 L 9763,5064"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id19">
<rect class="BoundingBox" stroke="none" fill="none" x="9745" y="5935" width="291" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10017,5953 L 9763,5953"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id20">
<rect class="BoundingBox" stroke="none" fill="none" x="9745" y="6824" width="291" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10017,6842 L 9763,6842"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id21">
<rect class="BoundingBox" stroke="none" fill="none" x="3159" y="2271" width="763" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 3774,2397 L 3306,2397"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 3757,2271 L 3921,2397 3757,2523 3757,2271 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 3323,2523 L 3159,2397 3323,2271 3323,2523 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id22">
<rect class="BoundingBox" stroke="none" fill="none" x="22826" y="3776" width="1308" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 22971,3794 L 22971,3794 C 22949,3794 22927,3800 22908,3811 22888,3822 22872,3838 22861,3858 22850,3877 22844,3899 22844,3921 L 22844,4429 22844,4430 C 22844,4452 22850,4474 22861,4493 22872,4513 22888,4529 22908,4540 22927,4551 22949,4557 22971,4557 L 23987,4557 23988,4557 C 24010,4557 24032,4551 24051,4540 24071,4529 24087,4513 24098,4493 24109,4474 24115,4452 24115,4430 L 24115,3921 24115,3921 24115,3921 C 24115,3899 24109,3877 24098,3858 24087,3838 24071,3822 24051,3811 24032,3800 24010,3794 23988,3794 L 22971,3794 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 22971,3794 L 22971,3794 C 22949,3794 22927,3800 22908,3811 22888,3822 22872,3838 22861,3858 22850,3877 22844,3899 22844,3921 L 22844,4429 22844,4430 C 22844,4452 22850,4474 22861,4493 22872,4513 22888,4529 22908,4540 22927,4551 22949,4557 22971,4557 L 23987,4557 23988,4557 C 24010,4557 24032,4551 24051,4540 24071,4529 24087,4513 24098,4493 24109,4474 24115,4452 24115,4430 L 24115,3921 24115,3921 24115,3921 C 24115,3899 24109,3877 24098,3858 24087,3838 24071,3822 24051,3811 24032,3800 24010,3794 23988,3794 L 22971,3794 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="22998" y="4347"><tspan fill="rgb(0,0,0)" stroke="none">SFP</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id23">
<rect class="BoundingBox" stroke="none" fill="none" x="22336" y="4049" width="509" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 22483,4175 L 22697,4175"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 22500,4301 L 22336,4175 22500,4049 22500,4301 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 22680,4049 L 22844,4175 22680,4301 22680,4049 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id24">
<rect class="BoundingBox" stroke="none" fill="none" x="14317" y="2886" width="800" height="2070"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 14335,4810 L 14335,4810 C 14335,4832 14341,4854 14352,4873 14363,4893 14379,4909 14399,4920 14418,4931 14440,4937 14462,4937 L 14970,4937 14971,4937 C 14993,4937 15015,4931 15034,4920 15054,4909 15070,4893 15081,4873 15092,4854 15098,4832 15098,4810 L 15098,3032 15098,3031 C 15098,3009 15092,2987 15081,2968 15070,2948 15054,2932 15034,2921 15015,2910 14993,2904 14971,2904 L 14462,2905 14462,2904 14462,2904 C 14440,2904 14418,2910 14399,2921 14379,2932 14363,2948 14352,2968 14341,2987 14335,3009 14335,3031 L 14335,4810 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 14335,4810 L 14335,4810 C 14335,4832 14341,4854 14352,4873 14363,4893 14379,4909 14399,4920 14418,4931 14440,4937 14462,4937 L 14970,4937 14971,4937 C 14993,4937 15015,4931 15034,4920 15054,4909 15070,4893 15081,4873 15092,4854 15098,4832 15098,4810 L 15098,3032 15098,3031 C 15098,3009 15092,2987 15081,2968 15070,2948 15054,2932 15034,2921 15015,2910 14993,2904 14971,2904 L 14462,2905 14462,2904 14462,2904 C 14440,2904 14418,2910 14399,2921 14379,2932 14363,2948 14352,2968 14341,2987 14335,3009 14335,3031 L 14335,4810 Z"/>
<text class="SVGTextShape" transform="rotate(-90 14888 4694)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="14888" y="4694"><tspan fill="rgb(0,0,0)" stroke="none">Egress</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id25">
<rect class="BoundingBox" stroke="none" fill="none" x="1363" y="1998" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 1508,2016 L 1508,2016 C 1486,2016 1464,2022 1445,2033 1425,2044 1409,2060 1398,2080 1387,2099 1381,2121 1381,2143 L 1381,2651 1381,2652 C 1381,2674 1387,2696 1398,2715 1409,2735 1425,2751 1445,2762 1464,2773 1486,2779 1508,2779 L 3032,2779 3033,2779 C 3055,2779 3077,2773 3096,2762 3116,2751 3132,2735 3143,2715 3154,2696 3160,2674 3160,2652 L 3160,2143 3160,2143 3160,2143 C 3160,2121 3154,2099 3143,2080 3132,2060 3116,2044 3096,2033 3077,2022 3055,2016 3033,2016 L 1508,2016 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 1508,2016 L 1508,2016 C 1486,2016 1464,2022 1445,2033 1425,2044 1409,2060 1398,2080 1387,2099 1381,2121 1381,2143 L 1381,2651 1381,2652 C 1381,2674 1387,2696 1398,2715 1409,2735 1425,2751 1445,2762 1464,2773 1486,2779 1508,2779 L 3032,2779 3033,2779 C 3055,2779 3077,2773 3096,2762 3116,2751 3132,2735 3143,2715 3154,2696 3160,2674 3160,2652 L 3160,2143 3160,2143 3160,2143 C 3160,2121 3154,2099 3143,2080 3132,2060 3116,2044 3096,2033 3077,2022 3055,2016 3033,2016 L 1508,2016 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1609" y="2569"><tspan fill="rgb(0,0,0)" stroke="none">Driver</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id26">
<rect class="BoundingBox" stroke="none" fill="none" x="22826" y="6062" width="1308" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 22971,6080 L 22971,6080 C 22949,6080 22927,6086 22908,6097 22888,6108 22872,6124 22861,6144 22850,6163 22844,6185 22844,6207 L 22844,6715 22844,6716 C 22844,6738 22850,6760 22861,6779 22872,6799 22888,6815 22908,6826 22927,6837 22949,6843 22971,6843 L 23987,6843 23988,6843 C 24010,6843 24032,6837 24051,6826 24071,6815 24087,6799 24098,6779 24109,6760 24115,6738 24115,6716 L 24115,6207 24115,6207 24115,6207 C 24115,6185 24109,6163 24098,6144 24087,6124 24071,6108 24051,6097 24032,6086 24010,6080 23988,6080 L 22971,6080 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 22971,6080 L 22971,6080 C 22949,6080 22927,6086 22908,6097 22888,6108 22872,6124 22861,6144 22850,6163 22844,6185 22844,6207 L 22844,6715 22844,6716 C 22844,6738 22850,6760 22861,6779 22872,6799 22888,6815 22908,6826 22927,6837 22949,6843 22971,6843 L 23987,6843 23988,6843 C 24010,6843 24032,6837 24051,6826 24071,6815 24087,6799 24098,6779 24109,6760 24115,6738 24115,6716 L 24115,6207 24115,6207 24115,6207 C 24115,6185 24109,6163 24098,6144 24087,6124 24071,6108 24051,6097 24032,6086 24010,6080 23988,6080 L 22971,6080 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="22998" y="6633"><tspan fill="rgb(0,0,0)" stroke="none">SFP</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id27">
<rect class="BoundingBox" stroke="none" fill="none" x="22336" y="6335" width="509" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 22483,6461 L 22697,6461"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 22500,6587 L 22336,6461 22500,6335 22500,6587 Z"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 22680,6335 L 22844,6461 22680,6587 22680,6335 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id28">
<rect class="BoundingBox" stroke="none" fill="none" x="1363" y="3014" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 1508,3032 L 1508,3032 C 1486,3032 1464,3038 1445,3049 1425,3060 1409,3076 1398,3096 1387,3115 1381,3137 1381,3159 L 1381,3667 1381,3668 C 1381,3690 1387,3712 1398,3731 1409,3751 1425,3767 1445,3778 1464,3789 1486,3795 1508,3795 L 3032,3795 3033,3795 C 3055,3795 3077,3789 3096,3778 3116,3767 3132,3751 3143,3731 3154,3712 3160,3690 3160,3668 L 3160,3159 3160,3159 3160,3159 C 3160,3137 3154,3115 3143,3096 3132,3076 3116,3060 3096,3049 3077,3038 3055,3032 3033,3032 L 1508,3032 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 1508,3032 L 1508,3032 C 1486,3032 1464,3038 1445,3049 1425,3060 1409,3076 1398,3096 1387,3115 1381,3137 1381,3159 L 1381,3667 1381,3668 C 1381,3690 1387,3712 1398,3731 1409,3751 1425,3767 1445,3778 1464,3789 1486,3795 1508,3795 L 3032,3795 3033,3795 C 3055,3795 3077,3789 3096,3778 3116,3767 3132,3751 3143,3731 3154,3712 3160,3690 3160,3668 L 3160,3159 3160,3159 3160,3159 C 3160,3137 3154,3115 3143,3096 3132,3076 3116,3060 3096,3049 3077,3038 3055,3032 3033,3032 L 1508,3032 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1913" y="3585"><tspan fill="rgb(0,0,0)" stroke="none">OS</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id29">
<rect class="BoundingBox" stroke="none" fill="none" x="1363" y="4030" width="1816" height="800"/>
<path fill="rgb(255,233,148)" stroke="none" d="M 1508,4048 L 1508,4048 C 1486,4048 1464,4054 1445,4065 1425,4076 1409,4092 1398,4112 1387,4131 1381,4153 1381,4175 L 1381,4683 1381,4684 C 1381,4706 1387,4728 1398,4747 1409,4767 1425,4783 1445,4794 1464,4805 1486,4811 1508,4811 L 3032,4811 3033,4811 C 3055,4811 3077,4805 3096,4794 3116,4783 3132,4767 3143,4747 3154,4728 3160,4706 3160,4684 L 3160,4175 3160,4175 3160,4175 C 3160,4153 3154,4131 3143,4112 3132,4092 3116,4076 3096,4065 3077,4054 3055,4048 3033,4048 L 1508,4048 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 1508,4048 L 1508,4048 C 1486,4048 1464,4054 1445,4065 1425,4076 1409,4092 1398,4112 1387,4131 1381,4153 1381,4175 L 1381,4683 1381,4684 C 1381,4706 1387,4728 1398,4747 1409,4767 1425,4783 1445,4794 1464,4805 1486,4811 1508,4811 L 3032,4811 3033,4811 C 3055,4811 3077,4805 3096,4794 3116,4783 3132,4767 3143,4747 3154,4728 3160,4706 3160,4684 L 3160,4175 3160,4175 3160,4175 C 3160,4153 3154,4131 3143,4112 3132,4092 3116,4076 3096,4065 3077,4054 3055,4048 3033,4048 L 1508,4048 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1830" y="4601"><tspan fill="rgb(0,0,0)" stroke="none">App</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id30">
<rect class="BoundingBox" stroke="none" fill="none" x="7332" y="5554" width="37" height="1942"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 7350,5572 L 7350,7477"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id31">
<rect class="BoundingBox" stroke="none" fill="none" x="20794" y="5935" width="1562" height="1054"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 20934,5953 L 20935,5953 C 20913,5953 20892,5959 20874,5969 20855,5980 20839,5996 20828,6015 20818,6033 20812,6054 20812,6076 L 20812,6847 20812,6847 C 20812,6869 20818,6890 20828,6909 20839,6927 20855,6943 20874,6954 20892,6964 20913,6970 20935,6970 L 22214,6970 22214,6970 C 22236,6970 22257,6964 22276,6954 22294,6943 22310,6927 22321,6909 22331,6890 22337,6869 22337,6847 L 22337,6075 22337,6076 22337,6076 C 22337,6054 22331,6033 22321,6015 22310,5996 22294,5980 22276,5969 22257,5959 22236,5953 22214,5953 L 20934,5953 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 20934,5953 L 20935,5953 C 20913,5953 20892,5959 20874,5969 20855,5980 20839,5996 20828,6015 20818,6033 20812,6054 20812,6076 L 20812,6847 20812,6847 C 20812,6869 20818,6890 20828,6909 20839,6927 20855,6943 20874,6954 20892,6964 20913,6970 20935,6970 L 22214,6970 22214,6970 C 22236,6970 22257,6964 22276,6954 22294,6943 22310,6927 22321,6909 22331,6890 22337,6869 22337,6847 L 22337,6075 22337,6076 22337,6076 C 22337,6054 22331,6033 22321,6015 22310,5996 22294,5980 22276,5969 22257,5959 22236,5953 22214,5953 L 20934,5953 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="21026" y="6633"><tspan fill="rgb(0,0,0)" stroke="none">MAC</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id32">
<rect class="BoundingBox" stroke="none" fill="none" x="20413" y="4303" width="400" height="253"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="35" stroke-linejoin="round" d="M 20431,4429 L 20665,4429"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 20648,4303 L 20812,4429 20648,4555 20648,4303 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id33">
<rect class="BoundingBox" stroke="none" fill="none" x="20032" y="6081" width="781" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 20050,6207 L 20665,6207"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 20648,6081 L 20812,6207 20648,6333 20648,6081 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id34">
<rect class="BoundingBox" stroke="none" fill="none" x="20032" y="6443" width="799" height="37"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 20050,6461 L 20812,6461"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id35">
<rect class="BoundingBox" stroke="none" fill="none" x="20413" y="6589" width="400" height="253"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="35" stroke-linejoin="round" d="M 20431,6715 L 20665,6715"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 20648,6589 L 20812,6715 20648,6841 20648,6589 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id36">
<rect class="BoundingBox" stroke="none" fill="none" x="20939" y="4683" width="963" height="1144"/>
<text class="SVGTextShape" transform="rotate(-90 21640 5576)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="21640" y="5576"><tspan fill="rgb(0,0,0)" stroke="none">...</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id37">
<rect class="BoundingBox" stroke="none" fill="none" x="22844" y="4683" width="963" height="1144"/>
<text class="SVGTextShape" transform="rotate(-90 23545 5576)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="23545" y="5576"><tspan fill="rgb(0,0,0)" stroke="none">...</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id38">
<rect class="BoundingBox" stroke="none" fill="none" x="7840" y="3160" width="400" height="253"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 7858,3286 L 8092,3286"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 8075,3160 L 8239,3286 8075,3412 8075,3160 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id39">
<rect class="BoundingBox" stroke="none" fill="none" x="7840" y="4049" width="400" height="253"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 7858,4175 L 8092,4175"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 8075,4049 L 8239,4175 8075,4301 8075,4049 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id40">
<rect class="BoundingBox" stroke="none" fill="none" x="7840" y="4938" width="400" height="253"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 7858,5064 L 8092,5064"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 8075,4938 L 8239,5064 8075,5190 8075,4938 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id41">
<rect class="BoundingBox" stroke="none" fill="none" x="7840" y="5827" width="400" height="253"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 7858,5953 L 8092,5953"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 8075,5827 L 8239,5953 8075,6079 8075,5827 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id42">
<rect class="BoundingBox" stroke="none" fill="none" x="7840" y="6716" width="400" height="253"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 7858,6842 L 8092,6842"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 8075,6716 L 8239,6842 8075,6968 8075,6716 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id43">
<rect class="BoundingBox" stroke="none" fill="none" x="7840" y="2379" width="37" height="4482"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 7858,6842 L 7858,2397"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id44">
<rect class="BoundingBox" stroke="none" fill="none" x="4683" y="2144" width="527" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 5191,2270 L 4830,2270"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 4847,2396 L 4683,2270 4847,2144 4847,2396 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id45">
<rect class="BoundingBox" stroke="none" fill="none" x="6951" y="2379" width="926" height="37"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 7858,2397 L 6969,2397"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id46">
<rect class="BoundingBox" stroke="none" fill="none" x="10272" y="7096" width="253" height="400"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 10398,7477 L 10398,7243"/>
<path fill="rgb(141,29,117)" stroke="none" d="M 10272,7260 L 10398,7096 10524,7260 10272,7260 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id47">
<rect class="BoundingBox" stroke="none" fill="none" x="10907" y="4429" width="253" height="3067"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 11033,7477 L 11033,4576"/>
<path fill="rgb(141,29,117)" stroke="none" d="M 10907,4593 L 11033,4429 11159,4593 10907,4593 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id48">
<rect class="BoundingBox" stroke="none" fill="none" x="9998" y="4792" width="1435" height="2324"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 10115,4810 L 10116,4810 C 10098,4810 10081,4815 10066,4823 10051,4832 10038,4845 10029,4860 10021,4875 10016,4892 10016,4910 L 10016,6997 10016,6997 C 10016,7015 10021,7032 10029,7047 10038,7062 10051,7075 10066,7084 10081,7092 10098,7097 10116,7097 L 11314,7097 11314,7097 C 11332,7097 11349,7092 11364,7084 11379,7075 11392,7062 11401,7047 11409,7032 11414,7015 11414,6997 L 11414,4909 11414,4910 11414,4910 C 11414,4892 11409,4875 11401,4860 11392,4845 11379,4832 11364,4823 11349,4815 11332,4810 11314,4810 L 10115,4810 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10115,4810 L 10116,4810 C 10098,4810 10081,4815 10066,4823 10051,4832 10038,4845 10029,4860 10021,4875 10016,4892 10016,4910 L 10016,6997 10016,6997 C 10016,7015 10021,7032 10029,7047 10038,7062 10051,7075 10066,7084 10081,7092 10098,7097 10116,7097 L 11314,7097 11314,7097 C 11332,7097 11349,7092 11364,7084 11379,7075 11392,7062 11401,7047 11409,7032 11414,7015 11414,6997 L 11414,4909 11414,4910 11414,4910 C 11414,4892 11409,4875 11401,4860 11392,4845 11379,4832 11364,4823 11349,4815 11332,4810 11314,4810 L 10115,4810 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10344" y="5847"><tspan fill="rgb(0,0,0)" stroke="none">Cpl</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10191" y="6402"><tspan fill="rgb(0,0,0)" stroke="none">write</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id49">
<rect class="BoundingBox" stroke="none" fill="none" x="1381" y="6080" width="2414" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1631" y="6654"><tspan fill="rgb(0,0,0)" stroke="none">Memory</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id50">
<rect class="BoundingBox" stroke="none" fill="none" x="1109" y="6335" width="400" height="253"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 1127,6461 L 1361,6461"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 1344,6335 L 1508,6461 1344,6587 1344,6335 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id51">
<rect class="BoundingBox" stroke="none" fill="none" x="1381" y="6588" width="2414" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1631" y="7162"><tspan fill="rgb(0,0,0)" stroke="none">Stream</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id52">
<rect class="BoundingBox" stroke="none" fill="none" x="1109" y="6843" width="400" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 1127,6969 L 1361,6969"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 1344,6843 L 1508,6969 1344,7095 1344,6843 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id53">
<rect class="BoundingBox" stroke="none" fill="none" x="1109" y="7351" width="400" height="253"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 1127,7477 L 1361,7477"/>
<path fill="rgb(141,29,117)" stroke="none" d="M 1344,7351 L 1508,7477 1344,7603 1344,7351 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id54">
<rect class="BoundingBox" stroke="none" fill="none" x="1381" y="7096" width="2414" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1631" y="7670"><tspan fill="rgb(0,0,0)" stroke="none">DMA</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id55">
<rect class="BoundingBox" stroke="none" fill="none" x="1109" y="7859" width="400" height="253"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="35" stroke-linejoin="round" d="M 1127,7985 L 1361,7985"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 1344,7859 L 1508,7985 1344,8111 1344,7859 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id56">
<rect class="BoundingBox" stroke="none" fill="none" x="1381" y="7604" width="2414" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1631" y="8178"><tspan fill="rgb(0,0,0)" stroke="none">PTP</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id57">
<rect class="BoundingBox" stroke="none" fill="none" x="14317" y="5172" width="800" height="2070"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 14335,7096 L 14335,7096 C 14335,7118 14341,7140 14352,7159 14363,7179 14379,7195 14399,7206 14418,7217 14440,7223 14462,7223 L 14970,7223 14971,7223 C 14993,7223 15015,7217 15034,7206 15054,7195 15070,7179 15081,7159 15092,7140 15098,7118 15098,7096 L 15098,5318 15098,5317 C 15098,5295 15092,5273 15081,5254 15070,5234 15054,5218 15034,5207 15015,5196 14993,5190 14971,5190 L 14462,5191 14462,5190 14462,5190 C 14440,5190 14418,5196 14399,5207 14379,5218 14363,5234 14352,5254 14341,5273 14335,5295 14335,5317 L 14335,7096 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 14335,7096 L 14335,7096 C 14335,7118 14341,7140 14352,7159 14363,7179 14379,7195 14399,7206 14418,7217 14440,7223 14462,7223 L 14970,7223 14971,7223 C 14993,7223 15015,7217 15034,7206 15054,7195 15070,7179 15081,7159 15092,7140 15098,7118 15098,7096 L 15098,5318 15098,5317 C 15098,5295 15092,5273 15081,5254 15070,5234 15054,5218 15034,5207 15015,5196 14993,5190 14971,5190 L 14462,5191 14462,5190 14462,5190 C 14440,5190 14418,5196 14399,5207 14379,5218 14363,5234 14352,5254 14341,5273 14335,5295 14335,5317 L 14335,7096 Z"/>
<text class="SVGTextShape" transform="rotate(-90 14888 7023)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="14888" y="7023"><tspan fill="rgb(0,0,0)" stroke="none">Ingress</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id58">
<rect class="BoundingBox" stroke="none" fill="none" x="16730" y="3668" width="527" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 16748,3794 L 17109,3794"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 17092,3668 L 17256,3794 17092,3920 17092,3668 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id59">
<rect class="BoundingBox" stroke="none" fill="none" x="19034" y="5954" width="781" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 19796,6080 L 19181,6080"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 19198,6206 L 19034,6080 19198,5954 19198,6206 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id60">
<rect class="BoundingBox" stroke="none" fill="none" x="19778" y="4157" width="37" height="1942"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 19796,4175 L 19796,6080"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id61">
<rect class="BoundingBox" stroke="none" fill="none" x="19778" y="4157" width="1053" height="37"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 19796,4175 L 20812,4175"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id62">
<rect class="BoundingBox" stroke="none" fill="none" x="12431" y="6969" width="253" height="527"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 12557,7477 L 12557,7116"/>
<path fill="rgb(141,29,117)" stroke="none" d="M 12431,7133 L 12557,6969 12683,7133 12431,7133 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id63">
<rect class="BoundingBox" stroke="none" fill="none" x="13447" y="4937" width="253" height="2559"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 13573,7477 L 13573,5084"/>
<path fill="rgb(141,29,117)" stroke="none" d="M 13447,5101 L 13573,4937 13699,5101 13447,5101 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id64">
<rect class="BoundingBox" stroke="none" fill="none" x="20413" y="2252" width="37" height="4482"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="35" stroke-linejoin="round" d="M 20431,6715 L 20431,2270"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id65">
<rect class="BoundingBox" stroke="none" fill="none" x="5173" y="4030" width="1816" height="800"/>
<path fill="rgb(238,238,238)" stroke="none" d="M 5318,4048 L 5318,4048 C 5296,4048 5274,4054 5255,4065 5235,4076 5219,4092 5208,4112 5197,4131 5191,4153 5191,4175 L 5191,4683 5191,4684 C 5191,4706 5197,4728 5208,4747 5219,4767 5235,4783 5255,4794 5274,4805 5296,4811 5318,4811 L 6842,4811 6843,4811 C 6865,4811 6887,4805 6906,4794 6926,4783 6942,4767 6953,4747 6964,4728 6970,4706 6970,4684 L 6970,4175 6970,4175 6970,4175 C 6970,4153 6964,4131 6953,4112 6942,4092 6926,4076 6906,4065 6887,4054 6865,4048 6843,4048 L 5318,4048 Z"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 5318,4048 L 5318,4048 C 5296,4048 5274,4054 5255,4065 5235,4076 5219,4092 5208,4112 5197,4131 5191,4153 5191,4175 L 5191,4683 5191,4684 C 5191,4706 5197,4728 5208,4747 5219,4767 5235,4783 5255,4794 5274,4805 5296,4811 5318,4811 L 6842,4811 6843,4811 C 6865,4811 6887,4805 6906,4794 6926,4783 6942,4767 6953,4747 6964,4728 6970,4706 6970,4684 L 6970,4175 6970,4175 6970,4175 C 6970,4153 6964,4131 6953,4112 6942,4092 6926,4076 6906,4065 6887,4054 6865,4048 6843,4048 L 5318,4048 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5405" y="4601"><tspan fill="rgb(128,128,128)" stroke="none">AXI M</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id66">
<rect class="BoundingBox" stroke="none" fill="none" x="5173" y="6189" width="1816" height="800"/>
<path fill="rgb(238,238,238)" stroke="none" d="M 5318,6207 L 5318,6207 C 5296,6207 5274,6213 5255,6224 5235,6235 5219,6251 5208,6271 5197,6290 5191,6312 5191,6334 L 5191,6842 5191,6843 C 5191,6865 5197,6887 5208,6906 5219,6926 5235,6942 5255,6953 5274,6964 5296,6970 5318,6970 L 6842,6970 6843,6970 C 6865,6970 6887,6964 6906,6953 6926,6942 6942,6926 6953,6906 6964,6887 6970,6865 6970,6843 L 6970,6334 6970,6334 6970,6334 C 6970,6312 6964,6290 6953,6271 6942,6251 6926,6235 6906,6224 6887,6213 6865,6207 6843,6207 L 5318,6207 Z"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 5318,6207 L 5318,6207 C 5296,6207 5274,6213 5255,6224 5235,6235 5219,6251 5208,6271 5197,6290 5191,6312 5191,6334 L 5191,6842 5191,6843 C 5191,6865 5197,6887 5208,6906 5219,6926 5235,6942 5255,6953 5274,6964 5296,6970 5318,6970 L 6842,6970 6843,6970 C 6865,6970 6887,6964 6906,6953 6926,6942 6942,6926 6953,6906 6964,6887 6970,6865 6970,6843 L 6970,6334 6970,6334 6970,6334 C 6970,6312 6964,6290 6953,6271 6942,6251 6926,6235 6906,6224 6887,6213 6865,6207 6843,6207 L 5318,6207 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5254" y="6760"><tspan fill="rgb(128,128,128)" stroke="none">DMA IF</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id67">
<rect class="BoundingBox" stroke="none" fill="none" x="1363" y="5300" width="1816" height="800"/>
<path fill="rgb(238,238,238)" stroke="none" d="M 1508,5318 L 1508,5318 C 1486,5318 1464,5324 1445,5335 1425,5346 1409,5362 1398,5382 1387,5401 1381,5423 1381,5445 L 1381,5953 1381,5954 C 1381,5976 1387,5998 1398,6017 1409,6037 1425,6053 1445,6064 1464,6075 1486,6081 1508,6081 L 3032,6081 3033,6081 C 3055,6081 3077,6075 3096,6064 3116,6053 3132,6037 3143,6017 3154,5998 3160,5976 3160,5954 L 3160,5445 3160,5445 3160,5445 C 3160,5423 3154,5401 3143,5382 3132,5362 3116,5346 3096,5335 3077,5324 3055,5318 3033,5318 L 1508,5318 Z"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 1508,5318 L 1508,5318 C 1486,5318 1464,5324 1445,5335 1425,5346 1409,5362 1398,5382 1387,5401 1381,5423 1381,5445 L 1381,5953 1381,5954 C 1381,5976 1387,5998 1398,6017 1409,6037 1425,6053 1445,6064 1464,6075 1486,6081 1508,6081 L 3032,6081 3033,6081 C 3055,6081 3077,6075 3096,6064 3116,6053 3132,6037 3143,6017 3154,5998 3160,5976 3160,5954 L 3160,5445 3160,5445 3160,5445 C 3160,5423 3154,5401 3143,5382 3132,5362 3116,5346 3096,5335 3077,5324 3055,5318 3033,5318 L 1508,5318 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1544" y="5871"><tspan fill="rgb(128,128,128)" stroke="none">DRAM</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id68">
<rect class="BoundingBox" stroke="none" fill="none" x="6969" y="3287" width="400" height="253"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 7350,3413 L 7116,3413"/>
<path fill="rgb(141,29,117)" stroke="none" d="M 7133,3539 L 6969,3413 7133,3287 7133,3539 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id69">
<rect class="BoundingBox" stroke="none" fill="none" x="5173" y="3014" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 5318,3032 L 5318,3032 C 5296,3032 5274,3038 5255,3049 5235,3060 5219,3076 5208,3096 5197,3115 5191,3137 5191,3159 L 5191,3667 5191,3668 C 5191,3690 5197,3712 5208,3731 5219,3751 5235,3767 5255,3778 5274,3789 5296,3795 5318,3795 L 6842,3795 6843,3795 C 6865,3795 6887,3789 6906,3778 6926,3767 6942,3751 6953,3731 6964,3712 6970,3690 6970,3668 L 6970,3159 6970,3159 6970,3159 C 6970,3137 6964,3115 6953,3096 6942,3076 6926,3060 6906,3049 6887,3038 6865,3032 6843,3032 L 5318,3032 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 5318,3032 L 5318,3032 C 5296,3032 5274,3038 5255,3049 5235,3060 5219,3076 5208,3096 5197,3115 5191,3137 5191,3159 L 5191,3667 5191,3668 C 5191,3690 5197,3712 5208,3731 5219,3751 5235,3767 5255,3778 5274,3789 5296,3795 5318,3795 L 6842,3795 6843,3795 C 6865,3795 6887,3789 6906,3778 6926,3767 6942,3751 6953,3731 6964,3712 6970,3690 6970,3668 L 6970,3159 6970,3159 6970,3159 C 6970,3137 6964,3115 6953,3096 6942,3076 6926,3060 6906,3049 6887,3038 6865,3032 6843,3032 L 5318,3032 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5254" y="3585"><tspan fill="rgb(0,0,0)" stroke="none">DMA IF</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id70">
<rect class="BoundingBox" stroke="none" fill="none" x="5173" y="1998" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 5318,2016 L 5318,2016 C 5296,2016 5274,2022 5255,2033 5235,2044 5219,2060 5208,2080 5197,2099 5191,2121 5191,2143 L 5191,2651 5191,2652 C 5191,2674 5197,2696 5208,2715 5219,2735 5235,2751 5255,2762 5274,2773 5296,2779 5318,2779 L 6842,2779 6843,2779 C 6865,2779 6887,2773 6906,2762 6926,2751 6942,2735 6953,2715 6964,2696 6970,2674 6970,2652 L 6970,2143 6970,2143 6970,2143 C 6970,2121 6964,2099 6953,2080 6942,2060 6926,2044 6906,2033 6887,2022 6865,2016 6843,2016 L 5318,2016 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 5318,2016 L 5318,2016 C 5296,2016 5274,2022 5255,2033 5235,2044 5219,2060 5208,2080 5197,2099 5191,2121 5191,2143 L 5191,2651 5191,2652 C 5191,2674 5197,2696 5208,2715 5219,2735 5235,2751 5255,2762 5274,2773 5296,2779 5318,2779 L 6842,2779 6843,2779 C 6865,2779 6887,2773 6906,2762 6926,2751 6942,2735 6953,2715 6964,2696 6970,2674 6970,2652 L 6970,2143 6970,2143 6970,2143 C 6970,2121 6964,2099 6953,2080 6942,2060 6926,2044 6906,2033 6887,2022 6865,2016 6843,2016 L 5318,2016 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5275" y="2569"><tspan fill="rgb(0,0,0)" stroke="none">AXIL M</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id71">
<rect class="BoundingBox" stroke="none" fill="none" x="20794" y="1744" width="1562" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 20939,1762 L 20939,1762 C 20917,1762 20895,1768 20876,1779 20856,1790 20840,1806 20829,1826 20818,1845 20812,1867 20812,1889 L 20812,2397 20812,2398 C 20812,2420 20818,2442 20829,2461 20840,2481 20856,2497 20876,2508 20895,2519 20917,2525 20939,2525 L 22209,2525 22210,2525 C 22232,2525 22254,2519 22273,2508 22293,2497 22309,2481 22320,2461 22331,2442 22337,2420 22337,2398 L 22336,1889 22337,1889 22337,1889 C 22337,1867 22331,1845 22320,1826 22309,1806 22293,1790 22273,1779 22254,1768 22232,1762 22210,1762 L 20939,1762 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 20939,1762 L 20939,1762 C 20917,1762 20895,1768 20876,1779 20856,1790 20840,1806 20829,1826 20818,1845 20812,1867 20812,1889 L 20812,2397 20812,2398 C 20812,2420 20818,2442 20829,2461 20840,2481 20856,2497 20876,2508 20895,2519 20917,2525 20939,2525 L 22209,2525 22210,2525 C 22232,2525 22254,2519 22273,2508 22293,2497 22309,2481 22320,2461 22331,2442 22337,2420 22337,2398 L 22336,1889 22337,1889 22337,1889 C 22337,1867 22331,1845 22320,1826 22309,1806 22293,1790 22273,1779 22254,1768 22232,1762 22210,1762 L 20939,1762 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="21053" y="2315"><tspan fill="rgb(0,0,0)" stroke="none">PHC</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id72">
<rect class="BoundingBox" stroke="none" fill="none" x="6081" y="5681" width="253" height="527"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 6207,5699 L 6207,6060"/>
<path fill="rgb(153,153,153)" stroke="none" d="M 6333,6043 L 6207,6207 6081,6043 6333,6043 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id73">
<rect class="BoundingBox" stroke="none" fill="none" x="5681" y="4792" width="37" height="672"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 5699,5445 L 5699,4810"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id74">
<rect class="BoundingBox" stroke="none" fill="none" x="3903" y="5172" width="800" height="2832"/>
<path fill="rgb(238,238,238)" stroke="none" d="M 3921,7858 L 3921,7858 C 3921,7880 3927,7902 3938,7921 3949,7941 3965,7957 3985,7968 4004,7979 4026,7985 4048,7985 L 4556,7985 4557,7985 C 4579,7985 4601,7979 4620,7968 4640,7957 4656,7941 4667,7921 4678,7902 4684,7880 4684,7858 L 4684,5318 4684,5317 C 4684,5295 4678,5273 4667,5254 4656,5234 4640,5218 4620,5207 4601,5196 4579,5190 4557,5190 L 4048,5190 4048,5190 4048,5190 C 4026,5190 4004,5196 3985,5207 3965,5218 3949,5234 3938,5254 3927,5273 3921,5295 3921,5317 L 3921,7858 Z"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 3921,7858 L 3921,7858 C 3921,7880 3927,7902 3938,7921 3949,7941 3965,7957 3985,7968 4004,7979 4026,7985 4048,7985 L 4556,7985 4557,7985 C 4579,7985 4601,7979 4620,7968 4640,7957 4656,7941 4667,7921 4678,7902 4684,7880 4684,7858 L 4684,5318 4684,5317 C 4684,5295 4678,5273 4667,5254 4656,5234 4640,5218 4620,5207 4601,5196 4579,5190 4557,5190 L 4048,5190 4048,5190 4048,5190 C 4026,5190 4004,5196 3985,5207 3965,5218 3949,5234 3938,5254 3927,5273 3921,5295 3921,5317 L 3921,7858 Z"/>
<text class="SVGTextShape" transform="rotate(-90 4474 7664)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4474" y="7664"><tspan fill="rgb(128,128,128)" stroke="none">AXI X-bar</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id75">
<rect class="BoundingBox" stroke="none" fill="none" x="4683" y="6462" width="527" height="253"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 4830,6588 L 5191,6588"/>
<path fill="rgb(153,153,153)" stroke="none" d="M 4847,6714 L 4683,6588 4847,6462 4847,6714 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id76">
<rect class="BoundingBox" stroke="none" fill="none" x="15479" y="1998" width="253" height="1162"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 15605,2016 L 15605,3012"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 15731,2995 L 15605,3159 15479,2995 15731,2995 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id77">
<rect class="BoundingBox" stroke="none" fill="none" x="4683" y="5319" width="1035" height="253"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 5699,5445 L 4830,5445"/>
<path fill="rgb(153,153,153)" stroke="none" d="M 4847,5571 L 4683,5445 4847,5319 4847,5571 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id78">
<rect class="BoundingBox" stroke="none" fill="none" x="3159" y="5573" width="763" height="253"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 3306,5699 L 3774,5699"/>
<path fill="rgb(153,153,153)" stroke="none" d="M 3323,5825 L 3159,5699 3323,5573 3323,5825 Z"/>
<path fill="rgb(153,153,153)" stroke="none" d="M 3757,5573 L 3921,5699 3757,5825 3757,5573 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id79">
<rect class="BoundingBox" stroke="none" fill="none" x="7332" y="7459" width="8292" height="38"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 15605,7477 L 7350,7478"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id80">
<rect class="BoundingBox" stroke="none" fill="none" x="10253" y="1890" width="10560" height="253"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 10271,2016 L 20665,2016"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 20648,1890 L 20812,2016 20648,2142 20648,1890 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyPolygonShape">
<g id="id81">
<rect class="BoundingBox" stroke="none" fill="none" x="16349" y="3522" width="418" height="799"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 16748,3540 L 16748,4302 16367,4175 16367,3667 16748,3540 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 16748,3540 L 16748,4302 16367,4175 16367,3667 16748,3540 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyPolygonShape">
<g id="id82">
<rect class="BoundingBox" stroke="none" fill="none" x="16349" y="5681" width="418" height="799"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 16748,5699 L 16748,6461 16367,6334 16367,5826 16748,5699 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 16748,5699 L 16748,6461 16367,6334 16367,5826 16748,5699 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id83">
<rect class="BoundingBox" stroke="none" fill="none" x="16730" y="5935" width="545" height="37"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 16748,5953 L 17256,5953"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id84">
<rect class="BoundingBox" stroke="none" fill="none" x="16730" y="6189" width="291" height="37"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 16748,6207 L 17002,6207"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id85">
<rect class="BoundingBox" stroke="none" fill="none" x="16730" y="4030" width="291" height="37"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 16748,4048 L 17002,4048"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id86">
<rect class="BoundingBox" stroke="none" fill="none" x="12939" y="1998" width="253" height="1035"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 13065,2016 L 13065,2885"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 13191,2868 L 13065,3032 12939,2868 13191,2868 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id87">
<rect class="BoundingBox" stroke="none" fill="none" x="20794" y="3649" width="1562" height="1054"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 20934,3667 L 20935,3667 C 20913,3667 20892,3673 20874,3683 20855,3694 20839,3710 20828,3729 20818,3747 20812,3768 20812,3790 L 20812,4561 20812,4561 C 20812,4583 20818,4604 20828,4623 20839,4641 20855,4657 20874,4668 20892,4678 20913,4684 20935,4684 L 22214,4684 22214,4684 C 22236,4684 22257,4678 22276,4668 22294,4657 22310,4641 22321,4623 22331,4604 22337,4583 22337,4561 L 22337,3789 22337,3790 22337,3790 C 22337,3768 22331,3747 22321,3729 22310,3710 22294,3694 22276,3683 22257,3673 22236,3667 22214,3667 L 20934,3667 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 20934,3667 L 20935,3667 C 20913,3667 20892,3673 20874,3683 20855,3694 20839,3710 20828,3729 20818,3747 20812,3768 20812,3790 L 20812,4561 20812,4561 C 20812,4583 20818,4604 20828,4623 20839,4641 20855,4657 20874,4668 20892,4678 20913,4684 20935,4684 L 22214,4684 22214,4684 C 22236,4684 22257,4678 22276,4668 22294,4657 22310,4641 22321,4623 22331,4604 22337,4583 22337,4561 L 22337,3789 22337,3790 22337,3790 C 22337,3768 22331,3747 22321,3729 22310,3710 22294,3694 22276,3683 22257,3673 22236,3667 22214,3667 L 20934,3667 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="21026" y="4347"><tspan fill="rgb(0,0,0)" stroke="none">MAC</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id88">
<rect class="BoundingBox" stroke="none" fill="none" x="13555" y="2252" width="7276" height="37"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="35" stroke-linejoin="round" d="M 13573,2270 L 20812,2270"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyPolygonShape">
<g id="id89">
<rect class="BoundingBox" stroke="none" fill="none" x="6570" y="5173" width="418" height="799"/>
<path fill="rgb(238,238,238)" stroke="none" d="M 6588,5953 L 6588,5191 6969,5318 6969,5826 6588,5953 Z"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 6588,5953 L 6588,5191 6969,5318 6969,5826 6588,5953 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id90">
<rect class="BoundingBox" stroke="none" fill="none" x="7332" y="3395" width="37" height="1688"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 7350,3413 L 7350,5064"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id91">
<rect class="BoundingBox" stroke="none" fill="none" x="6189" y="5046" width="1180" height="37"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 6207,5064 L 7350,5064"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id92">
<rect class="BoundingBox" stroke="none" fill="none" x="6189" y="5681" width="418" height="37"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 6207,5699 L 6588,5699"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id93">
<rect class="BoundingBox" stroke="none" fill="none" x="6189" y="5046" width="38" height="418"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 6208,5064 L 6207,5445"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id94">
<rect class="BoundingBox" stroke="none" fill="none" x="6189" y="5427" width="418" height="37"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 6588,5445 L 6207,5445"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id95">
<rect class="BoundingBox" stroke="none" fill="none" x="6952" y="5554" width="417" height="37"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 7350,5572 L 6970,5572"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id96">
<rect class="BoundingBox" stroke="none" fill="none" x="17238" y="5681" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 17383,5699 L 17383,5699 C 17361,5699 17339,5705 17320,5716 17300,5727 17284,5743 17273,5763 17262,5782 17256,5804 17256,5826 L 17256,6334 17256,6335 C 17256,6357 17262,6379 17273,6398 17284,6418 17300,6434 17320,6445 17339,6456 17361,6462 17383,6462 L 18907,6462 18908,6462 C 18930,6462 18952,6456 18971,6445 18991,6434 19007,6418 19018,6398 19029,6379 19035,6357 19035,6335 L 19035,5826 19035,5826 19035,5826 C 19035,5804 19029,5782 19018,5763 19007,5743 18991,5727 18971,5716 18952,5705 18930,5699 18908,5699 L 17383,5699 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 17383,5699 L 17383,5699 C 17361,5699 17339,5705 17320,5716 17300,5727 17284,5743 17273,5763 17262,5782 17256,5804 17256,5826 L 17256,6334 17256,6335 C 17256,6357 17262,6379 17273,6398 17284,6418 17300,6434 17320,6445 17339,6456 17361,6462 17383,6462 L 18907,6462 18908,6462 C 18930,6462 18952,6456 18971,6445 18991,6434 19007,6418 19018,6398 19029,6379 19035,6357 19035,6335 L 19035,5826 19035,5826 19035,5826 C 19035,5804 19029,5782 19018,5763 19007,5743 18991,5727 18971,5716 18952,5705 18930,5699 18908,5699 L 17383,5699 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="17582" y="6252"><tspan fill="rgb(0,0,0)" stroke="none">FIFO</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id97">
<rect class="BoundingBox" stroke="none" fill="none" x="15333" y="3140" width="800" height="3848"/>
<path fill="rgb(255,233,148)" stroke="none" d="M 15351,6842 L 15351,6842 C 15351,6864 15357,6886 15368,6905 15379,6925 15395,6941 15415,6952 15434,6963 15456,6969 15478,6969 L 15986,6969 15987,6969 C 16009,6969 16031,6963 16050,6952 16070,6941 16086,6925 16097,6905 16108,6886 16114,6864 16114,6842 L 16114,3286 16114,3285 C 16114,3263 16108,3241 16097,3222 16086,3202 16070,3186 16050,3175 16031,3164 16009,3158 15987,3158 L 15478,3158 15478,3158 15478,3158 C 15456,3158 15434,3164 15415,3175 15395,3186 15379,3202 15368,3222 15357,3241 15351,3263 15351,3285 L 15351,6842 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 15351,6842 L 15351,6842 C 15351,6864 15357,6886 15368,6905 15379,6925 15395,6941 15415,6952 15434,6963 15456,6969 15478,6969 L 15986,6969 15987,6969 C 16009,6969 16031,6963 16050,6952 16070,6941 16086,6925 16097,6905 16108,6886 16114,6864 16114,6842 L 16114,3286 16114,3285 C 16114,3263 16108,3241 16097,3222 16086,3202 16070,3186 16050,3175 16031,3164 16009,3158 15987,3158 L 15478,3158 15478,3158 15478,3158 C 15456,3158 15434,3164 15415,3175 15395,3186 15379,3202 15368,3222 15357,3241 15351,3263 15351,3285 L 15351,6842 Z"/>
<text class="SVGTextShape" transform="rotate(-90 15904 5505)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="15904" y="5505"><tspan fill="rgb(0,0,0)" stroke="none">App</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id98">
<rect class="BoundingBox" stroke="none" fill="none" x="15479" y="6969" width="253" height="527"/>
<path fill="none" stroke="rgb(141,29,117)" stroke-width="35" stroke-linejoin="round" d="M 15605,7477 L 15605,7116"/>
<path fill="rgb(141,29,117)" stroke="none" d="M 15479,7133 L 15605,6969 15731,7133 15479,7133 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id99">
<rect class="BoundingBox" stroke="none" fill="none" x="4683" y="7605" width="11195" height="253"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 15859,7731 L 4830,7731"/>
<path fill="rgb(153,153,153)" stroke="none" d="M 4847,7857 L 4683,7731 4847,7605 4847,7857 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id100">
<rect class="BoundingBox" stroke="none" fill="none" x="15841" y="6951" width="37" height="799"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 15859,7731 L 15859,6969"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id101">
<rect class="BoundingBox" stroke="none" fill="none" x="15079" y="3903" width="1307" height="37"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 15097,3921 L 16367,3921"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id102">
<rect class="BoundingBox" stroke="none" fill="none" x="7840" y="2379" width="2450" height="37"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 10271,2397 L 7858,2397"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyPolygonShape">
<g id="id103">
<rect class="BoundingBox" stroke="none" fill="none" x="15714" y="2506" width="37" height="37"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id104">
<rect class="BoundingBox" stroke="none" fill="none" x="15097" y="5954" width="1289" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 16367,6080 L 15244,6080"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 15261,6206 L 15097,6080 15261,5954 15261,6206 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id105">
<rect class="BoundingBox" stroke="none" fill="none" x="15733" y="2252" width="253" height="908"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="35" stroke-linejoin="round" d="M 15859,2270 L 15859,3012"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 15985,2995 L 15859,3159 15733,2995 15985,2995 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id106">
<rect class="BoundingBox" stroke="none" fill="none" x="4665" y="2398" width="527" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 4683,2524 L 5044,2524"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 5027,2398 L 5191,2524 5027,2650 5027,2398 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id107">
<rect class="BoundingBox" stroke="none" fill="none" x="4683" y="3160" width="527" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 5191,3286 L 4830,3286"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 4847,3412 L 4683,3286 4847,3160 4847,3412 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id108">
<rect class="BoundingBox" stroke="none" fill="none" x="4665" y="3414" width="527" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 4683,3540 L 5044,3540"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 5027,3414 L 5191,3540 5027,3666 5027,3414 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id109">
<rect class="BoundingBox" stroke="none" fill="none" x="4683" y="4176" width="527" height="253"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 5191,4302 L 4830,4302"/>
<path fill="rgb(153,153,153)" stroke="none" d="M 4847,4428 L 4683,4302 4847,4176 4847,4428 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id110">
<rect class="BoundingBox" stroke="none" fill="none" x="4665" y="4430" width="527" height="253"/>
<path fill="none" stroke="rgb(153,153,153)" stroke-width="35" stroke-linejoin="round" d="M 4683,4556 L 5044,4556"/>
<path fill="rgb(153,153,153)" stroke="none" d="M 5027,4430 L 5191,4556 5027,4682 5027,4430 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id111">
<rect class="BoundingBox" stroke="none" fill="none" x="12158" y="4157" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 12303,4175 L 12303,4175 C 12281,4175 12259,4181 12240,4192 12220,4203 12204,4219 12193,4239 12182,4258 12176,4280 12176,4302 L 12176,4810 12176,4811 C 12176,4833 12182,4855 12193,4874 12204,4894 12220,4910 12240,4921 12259,4932 12281,4938 12303,4938 L 13827,4938 13828,4938 C 13850,4938 13872,4932 13891,4921 13911,4910 13927,4894 13938,4874 13949,4855 13955,4833 13955,4811 L 13955,4302 13955,4302 13955,4302 C 13955,4280 13949,4258 13938,4239 13927,4219 13911,4203 13891,4192 13872,4181 13850,4175 13828,4175 L 12303,4175 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12303,4175 L 12303,4175 C 12281,4175 12259,4181 12240,4192 12220,4203 12204,4219 12193,4239 12182,4258 12176,4280 12176,4302 L 12176,4810 12176,4811 C 12176,4833 12182,4855 12193,4874 12204,4894 12220,4910 12240,4921 12259,4932 12281,4938 12303,4938 L 13827,4938 13828,4938 C 13850,4938 13872,4932 13891,4921 13911,4910 13927,4894 13938,4874 13949,4855 13955,4833 13955,4811 L 13955,4302 13955,4302 13955,4302 C 13955,4280 13949,4258 13938,4239 13927,4219 13911,4203 13891,4192 13872,4181 13850,4175 13828,4175 L 12303,4175 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12750" y="4728"><tspan fill="rgb(0,0,0)" stroke="none">TX</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id112">
<rect class="BoundingBox" stroke="none" fill="none" x="12158" y="6189" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 12303,6207 L 12303,6207 C 12281,6207 12259,6213 12240,6224 12220,6235 12204,6251 12193,6271 12182,6290 12176,6312 12176,6334 L 12176,6842 12176,6843 C 12176,6865 12182,6887 12193,6906 12204,6926 12220,6942 12240,6953 12259,6964 12281,6970 12303,6970 L 13827,6970 13828,6970 C 13850,6970 13872,6964 13891,6953 13911,6942 13927,6926 13938,6906 13949,6887 13955,6865 13955,6843 L 13955,6334 13955,6334 13955,6334 C 13955,6312 13949,6290 13938,6271 13927,6251 13911,6235 13891,6224 13872,6213 13850,6207 13828,6207 L 12303,6207 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12303,6207 L 12303,6207 C 12281,6207 12259,6213 12240,6224 12220,6235 12204,6251 12193,6271 12182,6290 12176,6312 12176,6334 L 12176,6842 12176,6843 C 12176,6865 12182,6887 12193,6906 12204,6926 12220,6942 12240,6953 12259,6964 12281,6970 12303,6970 L 13827,6970 13828,6970 C 13850,6970 13872,6964 13891,6953 13911,6942 13927,6926 13938,6906 13949,6887 13955,6865 13955,6843 L 13955,6334 13955,6334 13955,6334 C 13955,6312 13949,6290 13938,6271 13927,6251 13911,6235 13891,6224 13872,6213 13850,6207 13828,6207 L 12303,6207 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12722" y="6760"><tspan fill="rgb(0,0,0)" stroke="none">RX</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id113">
<rect class="BoundingBox" stroke="none" fill="none" x="10253" y="1998" width="37" height="418"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 10271,2397 L 10271,2016"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id114">
<rect class="BoundingBox" stroke="none" fill="none" x="13447" y="2252" width="253" height="781"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="35" stroke-linejoin="round" d="M 13573,2270 L 13573,2885"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 13699,2868 L 13573,3032 13447,2868 13699,2868 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id115">
<rect class="BoundingBox" stroke="none" fill="none" x="12939" y="3776" width="253" height="400"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 13065,3794 L 13065,4028"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 13191,4011 L 13065,4175 12939,4011 13191,4011 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id116">
<rect class="BoundingBox" stroke="none" fill="none" x="12431" y="2633" width="253" height="400"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12557,2651 L 12557,2885"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 12683,2868 L 12557,3032 12431,2868 12683,2868 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id117">
<rect class="BoundingBox" stroke="none" fill="none" x="9491" y="2633" width="37" height="291"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 9509,2905 L 9509,2651"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id118">
<rect class="BoundingBox" stroke="none" fill="none" x="9491" y="2633" width="3085" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12557,2651 L 9509,2651"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id119">
<rect class="BoundingBox" stroke="none" fill="none" x="17365" y="3649" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 17510,3667 L 17510,3667 C 17488,3667 17466,3673 17447,3684 17427,3695 17411,3711 17400,3731 17389,3750 17383,3772 17383,3794 L 17383,4302 17383,4303 C 17383,4325 17389,4347 17400,4366 17411,4386 17427,4402 17447,4413 17466,4424 17488,4430 17510,4430 L 19034,4430 19035,4430 C 19057,4430 19079,4424 19098,4413 19118,4402 19134,4386 19145,4366 19156,4347 19162,4325 19162,4303 L 19162,3794 19162,3794 19162,3794 C 19162,3772 19156,3750 19145,3731 19134,3711 19118,3695 19098,3684 19079,3673 19057,3667 19035,3667 L 17510,3667 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 17510,3667 L 17510,3667 C 17488,3667 17466,3673 17447,3684 17427,3695 17411,3711 17400,3731 17389,3750 17383,3772 17383,3794 L 17383,4302 17383,4303 C 17383,4325 17389,4347 17400,4366 17411,4386 17427,4402 17447,4413 17466,4424 17488,4430 17510,4430 L 19034,4430 19035,4430 C 19057,4430 19079,4424 19098,4413 19118,4402 19134,4386 19145,4366 19156,4347 19162,4325 19162,4303 L 19162,3794 19162,3794 19162,3794 C 19162,3772 19156,3750 19145,3731 19134,3711 19118,3695 19098,3684 19079,3673 19057,3667 19035,3667 L 17510,3667 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="17709" y="4220"><tspan fill="rgb(0,0,0)" stroke="none">FIFO</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id120">
<rect class="BoundingBox" stroke="none" fill="none" x="19143" y="3795" width="1670" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 19161,3921 L 20665,3921"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 20648,3795 L 20812,3921 20648,4047 20648,3795 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id121">
<rect class="BoundingBox" stroke="none" fill="none" x="17238" y="3522" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 17383,3540 L 17383,3540 C 17361,3540 17339,3546 17320,3557 17300,3568 17284,3584 17273,3604 17262,3623 17256,3645 17256,3667 L 17256,4175 17256,4176 C 17256,4198 17262,4220 17273,4239 17284,4259 17300,4275 17320,4286 17339,4297 17361,4303 17383,4303 L 18907,4303 18908,4303 C 18930,4303 18952,4297 18971,4286 18991,4275 19007,4259 19018,4239 19029,4220 19035,4198 19035,4176 L 19035,3667 19035,3667 19035,3667 C 19035,3645 19029,3623 19018,3604 19007,3584 18991,3568 18971,3557 18952,3546 18930,3540 18908,3540 L 17383,3540 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 17383,3540 L 17383,3540 C 17361,3540 17339,3546 17320,3557 17300,3568 17284,3584 17273,3604 17262,3623 17256,3645 17256,3667 L 17256,4175 17256,4176 C 17256,4198 17262,4220 17273,4239 17284,4259 17300,4275 17320,4286 17339,4297 17361,4303 17383,4303 L 18907,4303 18908,4303 C 18930,4303 18952,4297 18971,4286 18991,4275 19007,4259 19018,4239 19029,4220 19035,4198 19035,4176 L 19035,3667 19035,3667 19035,3667 C 19035,3645 19029,3623 19018,3604 19007,3584 18991,3568 18971,3557 18952,3546 18930,3540 18908,3540 L 17383,3540 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="17582" y="4093"><tspan fill="rgb(0,0,0)" stroke="none">FIFO</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id122">
<rect class="BoundingBox" stroke="none" fill="none" x="11777" y="4430" width="400" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11795,4556 L 12029,4556"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 12012,4430 L 12176,4556 12012,4682 12012,4430 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id123">
<rect class="BoundingBox" stroke="none" fill="none" x="11777" y="6462" width="400" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11795,6588 L 12029,6588"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 12012,6462 L 12176,6588 12012,6714 12012,6462 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id124">
<rect class="BoundingBox" stroke="none" fill="none" x="11777" y="3903" width="37" height="2704"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11795,6588 L 11795,3921"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id125">
<rect class="BoundingBox" stroke="none" fill="none" x="11414" y="6462" width="400" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11795,6588 L 11561,6588"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 11578,6714 L 11414,6588 11578,6462 11578,6714 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id126">
<rect class="BoundingBox" stroke="none" fill="none" x="11414" y="3795" width="400" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11795,3921 L 11561,3921"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 11578,4047 L 11414,3921 11578,3795 11578,4047 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id127">
<rect class="BoundingBox" stroke="none" fill="none" x="13936" y="4430" width="400" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 13954,4556 L 14188,4556"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 14171,4430 L 14335,4556 14171,4682 14171,4430 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id128">
<rect class="BoundingBox" stroke="none" fill="none" x="13954" y="6462" width="400" height="253"/>
<path fill="none" stroke="rgb(191,0,65)" stroke-width="35" stroke-linejoin="round" d="M 14335,6588 L 14101,6588"/>
<path fill="rgb(191,0,65)" stroke="none" d="M 14118,6714 L 13954,6588 14118,6462 14118,6714 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id129">
<rect class="BoundingBox" stroke="none" fill="none" x="12285" y="3141" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 12430,3159 L 12430,3159 C 12408,3159 12386,3165 12367,3176 12347,3187 12331,3203 12320,3223 12309,3242 12303,3264 12303,3286 L 12303,3794 12303,3795 C 12303,3817 12309,3839 12320,3858 12331,3878 12347,3894 12367,3905 12386,3916 12408,3922 12430,3922 L 13954,3922 13955,3922 C 13977,3922 13999,3916 14018,3905 14038,3894 14054,3878 14065,3858 14076,3839 14082,3817 14082,3795 L 14082,3286 14082,3286 14082,3286 C 14082,3264 14076,3242 14065,3223 14054,3203 14038,3187 14018,3176 13999,3165 13977,3159 13955,3159 L 12430,3159 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12430,3159 L 12430,3159 C 12408,3159 12386,3165 12367,3176 12347,3187 12331,3203 12320,3223 12309,3242 12303,3264 12303,3286 L 12303,3794 12303,3795 C 12303,3817 12309,3839 12320,3858 12331,3878 12347,3894 12367,3905 12386,3916 12408,3922 12430,3922 L 13954,3922 13955,3922 C 13977,3922 13999,3916 14018,3905 14038,3894 14054,3878 14065,3858 14076,3839 14082,3817 14082,3795 L 14082,3286 14082,3286 14082,3286 C 14082,3264 14076,3242 14065,3223 14054,3203 14038,3187 14018,3176 13999,3165 13977,3159 13955,3159 L 12430,3159 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12489" y="3712"><tspan fill="rgb(0,0,0)" stroke="none">Sched</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id130">
<rect class="BoundingBox" stroke="none" fill="none" x="12158" y="3014" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 12303,3032 L 12303,3032 C 12281,3032 12259,3038 12240,3049 12220,3060 12204,3076 12193,3096 12182,3115 12176,3137 12176,3159 L 12176,3667 12176,3668 C 12176,3690 12182,3712 12193,3731 12204,3751 12220,3767 12240,3778 12259,3789 12281,3795 12303,3795 L 13827,3795 13828,3795 C 13850,3795 13872,3789 13891,3778 13911,3767 13927,3751 13938,3731 13949,3712 13955,3690 13955,3668 L 13955,3159 13955,3159 13955,3159 C 13955,3137 13949,3115 13938,3096 13927,3076 13911,3060 13891,3049 13872,3038 13850,3032 13828,3032 L 12303,3032 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12303,3032 L 12303,3032 C 12281,3032 12259,3038 12240,3049 12220,3060 12204,3076 12193,3096 12182,3115 12176,3137 12176,3159 L 12176,3667 12176,3668 C 12176,3690 12182,3712 12193,3731 12204,3751 12220,3767 12240,3778 12259,3789 12281,3795 12303,3795 L 13827,3795 13828,3795 C 13850,3795 13872,3789 13891,3778 13911,3767 13927,3751 13938,3731 13949,3712 13955,3690 13955,3668 L 13955,3159 13955,3159 13955,3159 C 13955,3137 13949,3115 13938,3096 13927,3076 13911,3060 13891,3049 13872,3038 13850,3032 13828,3032 L 12303,3032 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12362" y="3585"><tspan fill="rgb(0,0,0)" stroke="none">Sched</tspan></tspan></tspan></text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 111 KiB

View File

@ -0,0 +1,471 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="154.36mm" height="113.41mm" viewBox="953 1108 15436 11341" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs>
<font id="EmbeddedFont_1" horiz-adv-x="2048">
<font-face font-family="Liberation Mono embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1711" descent="617"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="f" horiz-adv-x="989" d="M 580,940 L 580,0 400,0 400,940 138,940 138,1082 400,1082 400,1107 C 400,1244 432,1341 497,1398 561,1455 668,1484 818,1484 866,1484 918,1482 974,1478 1029,1473 1071,1468 1099,1463 L 1099,1318 C 1079,1321 1039,1325 978,1329 917,1333 870,1335 839,1335 770,1335 717,1327 682,1312 647,1297 621,1272 605,1237 588,1202 580,1154 580,1092 L 580,1082 1071,1082 1071,940 580,940 Z"/>
<glyph unicode="c" horiz-adv-x="972" d="M 130,542 C 130,722 173,860 259,957 345,1054 469,1102 632,1102 753,1102 853,1073 932,1015 1011,956 1059,878 1078,779 L 886,765 C 875,826 849,874 806,909 763,944 703,961 624,961 519,961 442,928 393,863 344,798 319,692 319,546 319,398 344,290 393,222 442,153 518,119 623,119 695,119 755,137 802,172 849,207 879,261 890,334 L 1080,322 C 1071,258 1047,200 1008,148 968,95 915,54 850,25 785,-5 712,-20 631,-20 468,-20 343,28 258,124 173,220 130,359 130,542 Z"/>
<glyph unicode="a" horiz-adv-x="1042" d="M 1101,111 C 1118,111 1138,113 1160,118 L 1160,6 C 1115,-5 1068,-10 1021,-10 954,-10 906,8 876,43 845,78 828,132 824,207 L 818,207 C 775,126 724,68 665,33 606,-2 533,-20 446,-20 341,-20 261,9 208,66 155,123 128,202 128,302 128,535 279,653 582,656 L 818,660 818,719 C 818,806 800,869 765,908 730,946 673,965 596,965 517,965 461,951 426,923 391,895 371,852 364,793 L 176,810 C 207,1005 348,1102 599,1102 732,1102 833,1071 900,1009 967,946 1000,856 1000,738 L 1000,272 C 1000,219 1007,179 1021,152 1035,125 1062,111 1101,111 Z M 492,117 C 556,117 613,132 662,163 711,194 750,235 777,286 804,337 818,390 818,445 L 818,534 628,530 C 549,529 489,520 448,504 407,488 375,464 352,431 329,398 317,354 317,299 317,244 332,200 362,167 391,134 435,117 492,117 Z"/>
<glyph unicode="7" horiz-adv-x="936" d="M 1069,1210 C 754,757 596,353 596,0 L 408,0 C 408,175 449,365 531,568 612,771 734,983 895,1204 L 158,1204 158,1349 1069,1349 1069,1210 Z"/>
<glyph unicode="6" horiz-adv-x="971" d="M 1096,446 C 1096,305 1056,192 975,107 894,22 782,-20 641,-20 484,-20 363,38 278,153 193,268 151,431 151,642 151,874 195,1053 283,1180 371,1307 495,1370 655,1370 868,1370 1002,1274 1057,1083 L 885,1052 C 850,1167 772,1224 653,1224 551,1224 472,1178 415,1085 358,992 330,862 330,695 363,756 409,802 468,834 527,865 595,881 672,881 800,881 903,842 980,763 1057,684 1096,578 1096,446 Z M 913,438 C 913,534 888,609 837,662 786,715 716,742 629,742 580,742 533,731 489,709 445,686 411,655 386,616 361,576 348,531 348,481 348,380 375,295 429,227 482,159 551,125 635,125 720,125 787,153 838,209 888,265 913,341 913,438 Z"/>
<glyph unicode="4" horiz-adv-x="1042" d="M 937,319 L 937,0 757,0 757,319 103,319 103,459 738,1349 937,1349 937,461 1125,461 1125,319 937,319 Z M 757,1154 L 257,461 757,461 757,1154 Z"/>
<glyph unicode="3" horiz-adv-x="989" d="M 1099,370 C 1099,246 1057,150 973,82 889,14 772,-20 621,-20 478,-20 364,12 279,77 194,142 143,237 128,362 L 314,379 C 338,212 440,129 621,129 712,129 783,150 835,192 886,234 912,295 912,376 912,426 897,468 867,503 836,537 795,563 743,582 691,600 633,609 568,609 L 466,609 466,765 564,765 C 621,765 674,775 722,794 769,813 807,839 834,874 861,909 875,950 875,997 875,1068 853,1123 809,1163 764,1202 698,1222 611,1222 532,1222 468,1202 419,1161 370,1120 341,1063 333,989 L 152,1003 C 165,1118 213,1208 296,1273 378,1338 484,1370 613,1370 754,1370 864,1339 943,1277 1021,1214 1060,1127 1060,1016 1060,937 1034,868 981,809 928,750 856,712 765,693 L 765,689 C 866,678 947,642 1008,583 1069,524 1099,453 1099,370 Z"/>
<glyph unicode="2" horiz-adv-x="954" d="M 144,0 L 144,117 C 177,190 228,263 297,337 366,410 459,494 578,589 684,674 760,747 807,810 854,873 877,933 877,991 877,1065 854,1122 808,1162 762,1202 696,1222 611,1222 535,1222 474,1201 427,1160 380,1118 352,1059 343,984 L 159,1001 C 172,1114 219,1204 298,1271 377,1337 482,1370 611,1370 753,1370 864,1338 943,1274 1022,1210 1062,1119 1062,1002 1062,925 1037,849 986,773 935,696 860,618 759,538 622,429 527,348 474,297 421,245 383,195 361,146 L 1084,146 1084,0 144,0 Z"/>
</font>
</defs>
<defs>
<font id="EmbeddedFont_2" horiz-adv-x="2048">
<font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="441"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="y" horiz-adv-x="1024" d="M 191,-425 C 142,-425 100,-421 67,-414 L 67,-279 C 92,-283 120,-285 151,-285 263,-285 352,-203 417,-38 L 434,5 5,1082 197,1082 425,484 C 428,475 432,464 437,451 442,438 457,394 482,320 507,246 521,205 523,196 L 593,393 830,1082 1020,1082 604,0 C 559,-115 518,-201 479,-258 440,-314 398,-356 351,-384 304,-411 250,-425 191,-425 Z"/>
<glyph unicode="u" horiz-adv-x="883" d="M 314,1082 L 314,396 C 314,325 321,269 335,230 349,191 371,162 402,145 433,128 478,119 537,119 624,119 692,149 742,208 792,267 817,350 817,455 L 817,1082 997,1082 997,231 C 997,105 999,28 1003,0 L 833,0 C 832,3 832,12 831,27 830,42 830,59 829,78 828,97 826,132 825,185 L 822,185 C 781,110 733,58 679,27 624,-4 557,-20 476,-20 357,-20 271,10 216,69 161,128 133,225 133,361 L 133,1082 314,1082 Z"/>
<glyph unicode="t" horiz-adv-x="547" d="M 554,8 C 495,-8 434,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 474,127 509,132 554,141 L 554,8 Z"/>
<glyph unicode="s" horiz-adv-x="901" d="M 950,299 C 950,197 912,118 835,63 758,8 650,-20 511,-20 376,-20 273,2 200,47 127,91 79,160 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 602,117 669,131 712,159 754,187 775,229 775,285 775,328 760,362 731,389 702,416 654,438 589,455 L 460,489 C 357,516 283,542 240,568 196,593 162,624 137,661 112,698 100,743 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 759,862 732,899 689,925 645,950 586,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,783 283,758 299,738 315,718 339,701 370,687 401,673 467,654 568,629 663,605 732,583 774,563 816,542 849,520 874,495 898,470 917,442 930,410 943,377 950,340 950,299 Z"/>
<glyph unicode="r" horiz-adv-x="531" d="M 142,0 L 142,830 C 142,906 140,990 136,1082 L 306,1082 C 311,959 314,886 314,861 L 318,861 C 347,954 380,1017 417,1051 454,1085 507,1102 575,1102 599,1102 623,1099 648,1092 L 648,927 C 624,934 592,937 552,937 477,937 420,905 381,841 342,776 322,684 322,564 L 322,0 142,0 Z"/>
<glyph unicode="q" horiz-adv-x="953" d="M 484,-20 C 347,-20 246,26 182,119 118,212 86,351 86,536 86,913 219,1102 484,1102 566,1102 634,1088 687,1059 740,1030 785,981 821,914 L 823,914 C 823,934 824,969 827,1018 830,1067 832,1093 835,1096 L 1008,1096 C 1003,1057 1001,958 1001,801 L 1001,-425 821,-425 821,14 825,178 823,178 C 787,107 743,56 690,26 637,-5 569,-20 484,-20 Z M 821,554 C 821,695 798,799 752,867 706,935 633,969 532,969 441,969 375,935 335,867 295,799 275,691 275,542 275,391 295,282 336,217 376,152 441,119 530,119 632,119 706,155 752,228 798,301 821,409 821,554 Z"/>
<glyph unicode="p" horiz-adv-x="936" d="M 1053,546 C 1053,169 920,-20 655,-20 488,-20 376,43 319,168 L 314,168 C 317,163 318,106 318,-2 L 318,-425 138,-425 138,861 C 138,972 136,1046 132,1082 L 306,1082 C 307,1079 308,1070 309,1054 310,1037 312,1012 314,978 315,944 316,921 316,908 L 320,908 C 352,975 394,1024 447,1055 500,1086 569,1101 655,1101 788,1101 888,1056 954,967 1020,878 1053,737 1053,546 Z M 864,542 C 864,693 844,800 803,865 762,930 698,962 609,962 538,962 482,947 442,917 401,887 371,840 350,777 329,713 318,630 318,528 318,386 341,281 386,214 431,147 505,113 607,113 696,113 762,146 803,212 844,277 864,387 864,542 Z"/>
<glyph unicode="o" horiz-adv-x="988" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 407,-20 288,28 207,125 126,221 86,360 86,542 86,915 248,1102 571,1102 736,1102 858,1057 936,966 1014,875 1053,733 1053,542 Z M 864,542 C 864,691 842,800 798,868 753,935 679,969 574,969 469,969 393,935 346,866 299,797 275,689 275,542 275,399 298,292 345,221 391,149 464,113 563,113 671,113 748,148 795,217 841,286 864,395 864,542 Z"/>
<glyph unicode="n" horiz-adv-x="883" d="M 825,0 L 825,686 C 825,757 818,813 804,852 790,891 768,920 737,937 706,954 661,963 602,963 515,963 447,933 397,874 347,815 322,732 322,627 L 322,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 358,972 406,1025 461,1056 515,1087 582,1102 663,1102 782,1102 869,1073 924,1014 979,955 1006,857 1006,721 L 1006,0 825,0 Z"/>
<glyph unicode="m" horiz-adv-x="1448" d="M 768,0 L 768,686 C 768,791 754,863 725,903 696,943 645,963 570,963 493,963 433,934 388,875 343,816 321,734 321,627 L 321,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 356,974 400,1027 450,1057 500,1087 561,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 967,970 1013,1022 1066,1054 1119,1086 1183,1102 1258,1102 1367,1102 1447,1072 1497,1013 1546,954 1571,856 1571,721 L 1571,0 1393,0 1393,686 C 1393,791 1379,863 1350,903 1321,943 1270,963 1195,963 1116,963 1055,934 1012,876 968,817 946,734 946,627 L 946,0 768,0 Z"/>
<glyph unicode="l" horiz-adv-x="213" d="M 138,0 L 138,1484 318,1484 318,0 138,0 Z"/>
<glyph unicode="k" horiz-adv-x="919" d="M 816,0 L 450,494 318,385 318,0 138,0 138,1484 318,1484 318,557 793,1082 1004,1082 565,617 1027,0 816,0 Z"/>
<glyph unicode="i" horiz-adv-x="196" d="M 137,1312 L 137,1484 317,1484 317,1312 137,1312 Z M 137,0 L 137,1082 317,1082 317,0 137,0 Z"/>
<glyph unicode="h" horiz-adv-x="865" d="M 317,897 C 356,968 402,1020 457,1053 511,1086 580,1102 663,1102 780,1102 867,1073 923,1015 978,956 1006,858 1006,721 L 1006,0 825,0 825,686 C 825,762 818,819 804,856 790,893 767,920 735,937 703,954 659,963 602,963 517,963 450,934 399,875 348,816 322,737 322,638 L 322,0 142,0 142,1484 322,1484 322,1098 C 322,1057 321,1015 319,972 316,929 315,904 314,897 L 317,897 Z"/>
<glyph unicode="g" horiz-adv-x="953" d="M 548,-425 C 430,-425 336,-402 266,-356 196,-309 151,-243 131,-158 L 312,-132 C 324,-182 351,-220 392,-248 433,-274 486,-288 553,-288 732,-288 822,-183 822,27 L 822,201 820,201 C 786,132 739,80 680,45 621,10 551,-8 472,-8 339,-8 242,36 180,124 117,212 86,350 86,539 86,730 120,872 187,963 254,1054 355,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,917 825,952 828,1001 831,1050 833,1077 836,1082 L 1007,1082 C 1003,1046 1001,971 1001,858 L 1001,31 C 1001,-273 850,-425 548,-425 Z M 822,541 C 822,629 810,705 786,769 762,832 728,881 685,915 641,948 591,965 536,965 444,965 377,932 335,865 293,798 272,690 272,541 272,393 292,287 331,222 370,157 438,125 533,125 590,125 640,142 684,175 728,208 762,256 786,319 810,381 822,455 822,541 Z"/>
<glyph unicode="f" horiz-adv-x="565" d="M 361,951 L 361,0 181,0 181,951 29,951 29,1082 181,1082 181,1204 C 181,1303 203,1374 246,1417 289,1460 356,1482 445,1482 495,1482 537,1478 572,1470 L 572,1333 C 542,1338 515,1341 492,1341 446,1341 413,1329 392,1306 371,1283 361,1240 361,1179 L 361,1082 572,1082 572,951 361,951 Z"/>
<glyph unicode="e" horiz-adv-x="988" d="M 276,503 C 276,379 302,283 353,216 404,149 479,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 954,65 807,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,727 129,864 213,959 296,1054 416,1102 571,1102 889,1102 1048,910 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 481,969 412,940 361,882 310,823 282,743 278,641 L 862,641 Z"/>
<glyph unicode="d" horiz-adv-x="953" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 821,1035 821,1484 1001,1484 1001,223 C 1001,110 1003,36 1007,0 L 835,0 C 833,11 831,35 829,74 826,113 825,146 825,174 L 821,174 Z M 275,542 C 275,391 295,282 335,217 375,152 440,119 530,119 632,119 706,154 752,225 798,296 821,405 821,554 821,697 798,802 752,869 706,936 633,969 532,969 441,969 376,936 336,869 295,802 275,693 275,542 Z"/>
<glyph unicode="c" horiz-adv-x="900" d="M 275,546 C 275,402 298,295 343,226 388,157 457,122 548,122 612,122 666,139 709,174 752,209 778,262 788,334 L 970,322 C 956,218 912,135 837,73 762,11 668,-20 553,-20 402,-20 286,28 207,124 127,219 87,359 87,542 87,724 127,863 207,959 287,1054 402,1102 551,1102 662,1102 754,1073 827,1016 900,959 945,880 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 451,961 382,929 339,866 296,803 275,696 275,546 Z"/>
<glyph unicode="b" horiz-adv-x="936" d="M 1053,546 C 1053,169 920,-20 655,-20 573,-20 505,-5 451,25 396,54 352,102 318,168 L 316,168 C 316,147 315,116 312,74 309,31 307,7 306,0 L 132,0 C 136,36 138,110 138,223 L 138,1484 318,1484 318,1061 C 318,1018 317,967 314,908 L 318,908 C 351,977 396,1027 451,1057 506,1087 574,1102 655,1102 792,1102 892,1056 957,964 1021,872 1053,733 1053,546 Z M 864,540 C 864,691 844,800 804,865 764,930 699,963 609,963 508,963 434,928 388,859 341,790 318,680 318,529 318,387 341,282 386,215 431,147 505,113 607,113 698,113 763,147 804,214 844,281 864,389 864,540 Z"/>
<glyph unicode="a" horiz-adv-x="1077" d="M 414,-20 C 305,-20 224,9 169,66 114,123 87,202 87,302 87,414 124,500 198,560 271,620 390,652 554,656 L 797,660 797,719 C 797,807 778,870 741,908 704,946 645,965 565,965 484,965 426,951 389,924 352,897 330,853 323,793 L 135,810 C 166,1005 310,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1097,111 1117,113 1139,118 L 1139,6 C 1094,-5 1047,-10 1000,-10 933,-10 885,8 855,43 824,78 807,132 803,207 L 797,207 C 751,124 698,66 637,32 576,-3 501,-20 414,-20 Z M 455,115 C 521,115 580,130 631,160 682,190 723,231 753,284 782,336 797,390 797,445 L 797,534 600,530 C 515,529 451,520 408,504 364,488 330,463 307,430 284,397 272,353 272,299 272,240 288,195 320,163 351,131 396,115 455,115 Z"/>
<glyph unicode="X" horiz-adv-x="1289" d="M 1112,0 L 689,616 257,0 46,0 582,732 87,1409 298,1409 690,856 1071,1409 1282,1409 800,739 1323,0 1112,0 Z"/>
<glyph unicode="W" horiz-adv-x="1941" d="M 1511,0 L 1283,0 1039,895 C 1023,951 1000,1051 969,1196 952,1119 937,1054 925,1002 913,950 822,616 652,0 L 424,0 9,1409 208,1409 461,514 C 491,402 519,287 544,168 560,241 579,321 600,408 621,495 713,828 877,1409 L 1060,1409 1305,532 C 1342,389 1372,267 1393,168 L 1402,203 C 1420,280 1435,342 1446,391 1457,439 1551,778 1727,1409 L 1926,1409 1511,0 Z"/>
<glyph unicode="T" horiz-adv-x="1183" d="M 720,1253 L 720,0 530,0 530,1253 46,1253 46,1409 1204,1409 1204,1253 720,1253 Z"/>
<glyph unicode="S" horiz-adv-x="1201" d="M 1272,389 C 1272,259 1221,158 1120,87 1018,16 875,-20 690,-20 347,-20 148,99 93,338 L 278,375 C 299,290 345,228 414,189 483,149 578,129 697,129 820,129 916,150 983,193 1050,235 1083,297 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 541,675 456,699 399,724 341,749 295,776 262,807 229,837 203,872 186,913 168,954 159,1000 159,1053 159,1174 205,1267 298,1332 390,1397 522,1430 694,1430 854,1430 976,1406 1061,1357 1146,1308 1205,1224 1239,1106 L 1051,1073 C 1030,1148 991,1202 933,1236 875,1269 795,1286 692,1286 579,1286 493,1267 434,1230 375,1193 345,1137 345,1063 345,1020 357,984 380,956 403,927 436,903 479,884 522,864 609,840 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
<glyph unicode="R" horiz-adv-x="1235" d="M 1164,0 L 798,585 359,585 359,0 168,0 168,1409 831,1409 C 990,1409 1112,1374 1199,1303 1285,1232 1328,1133 1328,1006 1328,901 1298,813 1237,742 1176,671 1091,626 984,607 L 1384,0 1164,0 Z M 1136,1004 C 1136,1086 1108,1149 1053,1192 997,1235 917,1256 812,1256 L 359,1256 359,736 820,736 C 921,736 999,760 1054,807 1109,854 1136,919 1136,1004 Z"/>
<glyph unicode="Q" horiz-adv-x="1412" d="M 1495,711 C 1495,512 1445,349 1345,221 1245,93 1106,17 928,-6 955,-90 991,-151 1036,-188 1080,-225 1136,-244 1204,-244 1241,-244 1279,-240 1319,-231 L 1319,-365 C 1257,-380 1198,-387 1141,-387 1040,-387 958,-358 893,-302 828,-244 774,-149 733,-16 601,-9 487,24 392,85 296,145 223,229 173,337 122,444 97,569 97,711 97,936 159,1113 282,1240 405,1367 577,1430 797,1430 940,1430 1065,1402 1170,1345 1275,1288 1356,1205 1412,1096 1467,987 1495,859 1495,711 Z M 1300,711 C 1300,886 1256,1024 1169,1124 1081,1224 957,1274 797,1274 636,1274 511,1225 423,1126 335,1027 291,889 291,711 291,534 336,394 425,291 514,187 637,135 795,135 958,135 1083,185 1170,286 1257,386 1300,528 1300,711 Z"/>
<glyph unicode="P" horiz-adv-x="1112" d="M 1258,985 C 1258,852 1215,746 1128,667 1041,588 922,549 773,549 L 359,549 359,0 168,0 168,1409 761,1409 C 919,1409 1041,1372 1128,1298 1215,1224 1258,1120 1258,985 Z M 1066,983 C 1066,1165 957,1256 738,1256 L 359,1256 359,700 746,700 C 959,700 1066,794 1066,983 Z"/>
<glyph unicode="O" horiz-adv-x="1412" d="M 1495,711 C 1495,564 1467,435 1411,324 1354,213 1273,128 1168,69 1063,10 938,-20 795,-20 650,-20 526,9 421,68 316,127 235,212 180,323 125,434 97,563 97,711 97,936 159,1113 282,1240 405,1367 577,1430 797,1430 940,1430 1065,1402 1170,1345 1275,1288 1356,1205 1412,1096 1467,987 1495,859 1495,711 Z M 1300,711 C 1300,886 1256,1024 1169,1124 1081,1224 957,1274 797,1274 636,1274 511,1225 423,1126 335,1027 291,889 291,711 291,534 336,394 425,291 514,187 637,135 795,135 958,135 1083,185 1170,286 1257,386 1300,528 1300,711 Z"/>
<glyph unicode="M" horiz-adv-x="1394" d="M 1366,0 L 1366,940 C 1366,1044 1369,1144 1375,1240 1342,1121 1313,1027 1287,960 L 923,0 789,0 420,960 364,1130 331,1240 334,1129 338,940 338,0 168,0 168,1409 419,1409 794,432 C 807,393 820,351 833,306 845,261 853,228 857,208 862,235 874,275 891,330 908,384 919,418 925,432 L 1293,1409 1538,1409 1538,0 1366,0 Z"/>
<glyph unicode="L" horiz-adv-x="918" d="M 168,0 L 168,1409 359,1409 359,156 1071,156 1071,0 168,0 Z"/>
<glyph unicode="I" horiz-adv-x="213" d="M 189,0 L 189,1409 380,1409 380,0 189,0 Z"/>
<glyph unicode="H" horiz-adv-x="1165" d="M 1121,0 L 1121,653 359,653 359,0 168,0 168,1409 359,1409 359,813 1121,813 1121,1409 1312,1409 1312,0 1121,0 Z"/>
<glyph unicode="D" horiz-adv-x="1235" d="M 1381,719 C 1381,574 1353,447 1296,338 1239,229 1159,145 1055,87 951,29 831,0 695,0 L 168,0 168,1409 634,1409 C 873,1409 1057,1349 1187,1230 1316,1110 1381,940 1381,719 Z M 1189,719 C 1189,894 1141,1027 1046,1119 950,1210 811,1256 630,1256 L 359,1256 359,153 673,153 C 776,153 867,176 946,221 1024,266 1084,332 1126,417 1168,502 1189,603 1189,719 Z"/>
<glyph unicode="C" horiz-adv-x="1324" d="M 792,1274 C 636,1274 515,1224 428,1124 341,1023 298,886 298,711 298,538 343,400 434,295 524,190 646,137 800,137 997,137 1146,235 1245,430 L 1401,352 C 1343,231 1262,138 1157,75 1052,12 930,-20 791,-20 649,-20 526,10 423,69 319,128 240,212 186,322 131,431 104,561 104,711 104,936 165,1112 286,1239 407,1366 575,1430 790,1430 940,1430 1065,1401 1166,1342 1267,1283 1341,1196 1388,1081 L 1207,1021 C 1174,1103 1122,1166 1050,1209 977,1252 891,1274 792,1274 Z"/>
<glyph unicode="B" horiz-adv-x="1112" d="M 1258,397 C 1258,272 1212,174 1121,105 1030,35 903,0 740,0 L 168,0 168,1409 680,1409 C 1011,1409 1176,1295 1176,1067 1176,984 1153,914 1106,857 1059,800 993,762 908,743 1020,730 1106,692 1167,631 1228,569 1258,491 1258,397 Z M 984,1044 C 984,1120 958,1174 906,1207 854,1240 779,1256 680,1256 L 359,1256 359,810 680,810 C 782,810 858,829 909,868 959,906 984,965 984,1044 Z M 1065,412 C 1065,578 948,661 715,661 L 359,661 359,153 730,153 C 847,153 932,175 985,218 1038,261 1065,326 1065,412 Z"/>
<glyph unicode="A" horiz-adv-x="1377" d="M 1167,0 L 1006,412 364,412 202,0 4,0 579,1409 796,1409 1362,0 1167,0 Z M 685,1265 L 676,1237 C 659,1182 635,1111 602,1024 L 422,561 949,561 768,1026 C 749,1072 731,1124 712,1182 L 685,1265 Z"/>
<glyph unicode="9" horiz-adv-x="971" d="M 1042,733 C 1042,491 998,305 910,175 821,45 695,-20 532,-20 422,-20 334,3 268,50 201,96 154,171 125,274 L 297,301 C 333,184 412,125 535,125 638,125 718,173 775,269 832,365 861,502 864,680 837,620 792,572 727,536 662,499 591,481 514,481 387,481 286,524 210,611 134,698 96,813 96,956 96,1103 137,1219 220,1304 303,1388 418,1430 565,1430 722,1430 840,1372 921,1256 1002,1140 1042,966 1042,733 Z M 846,907 C 846,1020 820,1112 768,1181 716,1250 646,1284 559,1284 472,1284 404,1255 354,1196 304,1137 279,1057 279,956 279,853 304,772 354,713 404,653 472,623 557,623 609,623 657,635 702,659 747,682 782,716 808,759 833,802 846,852 846,907 Z"/>
<glyph unicode="8" horiz-adv-x="971" d="M 1050,393 C 1050,263 1009,162 926,89 843,16 725,-20 570,-20 419,-20 302,16 217,87 132,158 89,260 89,391 89,483 115,560 168,623 221,686 288,724 370,737 L 370,741 C 293,759 233,798 189,858 144,918 122,988 122,1069 122,1176 162,1263 243,1330 323,1397 431,1430 566,1430 705,1430 814,1397 895,1332 975,1267 1015,1178 1015,1067 1015,986 993,916 948,856 903,796 842,758 765,743 L 765,739 C 855,724 925,686 975,625 1025,563 1050,486 1050,393 Z M 828,1057 C 828,1216 741,1296 566,1296 481,1296 417,1276 373,1236 328,1196 306,1136 306,1057 306,976 329,915 375,873 420,830 485,809 568,809 653,809 717,829 762,868 806,907 828,970 828,1057 Z M 863,410 C 863,497 837,563 785,608 733,652 660,674 566,674 475,674 403,650 352,603 301,555 275,489 275,406 275,212 374,115 572,115 670,115 743,139 791,186 839,233 863,307 863,410 Z"/>
<glyph unicode="7" horiz-adv-x="954" d="M 1036,1263 C 892,1043 790,871 731,746 672,621 627,498 598,377 568,256 553,130 553,0 L 365,0 C 365,180 403,370 480,569 556,768 683,997 862,1256 L 105,1256 105,1409 1036,1409 1036,1263 Z"/>
<glyph unicode="6" horiz-adv-x="971" d="M 1049,461 C 1049,312 1009,195 928,109 847,23 736,-20 594,-20 435,-20 314,39 230,157 146,275 104,447 104,672 104,916 148,1103 235,1234 322,1365 447,1430 608,1430 821,1430 955,1334 1010,1143 L 838,1112 C 803,1227 725,1284 606,1284 503,1284 424,1236 368,1141 311,1045 283,906 283,725 316,786 362,832 421,864 480,895 548,911 625,911 755,911 858,870 935,789 1011,708 1049,598 1049,461 Z M 866,453 C 866,555 841,634 791,689 741,744 671,772 582,772 498,772 430,748 379,699 327,650 301,582 301,496 301,387 328,298 382,229 435,160 504,125 588,125 675,125 743,154 792,213 841,271 866,351 866,453 Z"/>
<glyph unicode="5" horiz-adv-x="988" d="M 1053,459 C 1053,310 1009,193 921,108 832,23 710,-20 553,-20 422,-20 316,9 235,66 154,123 103,206 82,315 L 264,336 C 302,197 400,127 557,127 654,127 729,156 784,215 839,273 866,353 866,455 866,544 839,615 784,670 729,725 654,752 561,752 512,752 467,744 425,729 383,714 341,688 299,651 L 123,651 170,1409 971,1409 971,1256 334,1256 307,809 C 385,869 482,899 598,899 737,899 847,858 930,777 1012,696 1053,590 1053,459 Z"/>
<glyph unicode="4" horiz-adv-x="1060" d="M 881,319 L 881,0 711,0 711,319 47,319 47,459 692,1409 881,1409 881,461 1079,461 1079,319 881,319 Z M 711,1206 C 710,1202 700,1184 683,1153 666,1122 653,1100 644,1087 L 283,555 229,481 213,461 711,461 711,1206 Z"/>
<glyph unicode="3" horiz-adv-x="988" d="M 1049,389 C 1049,259 1008,158 925,87 842,16 724,-20 571,-20 428,-20 315,12 230,77 145,141 94,236 78,362 L 264,379 C 288,212 390,129 571,129 662,129 733,151 785,196 836,241 862,307 862,395 862,472 833,532 774,575 715,618 629,639 518,639 L 416,639 416,795 514,795 C 613,795 689,817 744,860 798,903 825,962 825,1038 825,1113 803,1173 759,1217 714,1260 648,1282 561,1282 482,1282 418,1262 369,1221 320,1180 291,1123 283,1049 L 102,1063 C 115,1178 163,1268 246,1333 328,1398 434,1430 563,1430 704,1430 814,1397 893,1332 971,1266 1010,1174 1010,1057 1010,967 985,894 935,838 884,781 811,743 715,723 L 715,719 C 820,708 902,672 961,613 1020,554 1049,479 1049,389 Z"/>
<glyph unicode="2" horiz-adv-x="954" d="M 103,0 L 103,127 C 137,205 179,274 228,334 277,393 328,447 382,496 436,544 490,589 543,630 596,671 643,713 686,754 729,795 763,839 790,884 816,929 829,981 829,1038 829,1115 806,1175 761,1218 716,1261 653,1282 572,1282 495,1282 432,1261 383,1220 333,1178 304,1119 295,1044 L 111,1061 C 124,1174 172,1263 255,1330 337,1397 443,1430 572,1430 714,1430 823,1397 900,1330 976,1263 1014,1167 1014,1044 1014,989 1002,935 977,881 952,827 914,773 865,719 816,665 721,581 582,468 505,405 444,349 399,299 354,248 321,200 301,153 L 1036,153 1036,0 103,0 Z"/>
<glyph unicode="1" horiz-adv-x="901" d="M 156,0 L 156,153 515,153 515,1237 197,1010 197,1180 530,1409 696,1409 696,153 1039,153 1039,0 156,0 Z"/>
<glyph unicode="0" horiz-adv-x="988" d="M 1059,705 C 1059,470 1018,290 935,166 852,42 729,-20 567,-20 405,-20 283,42 202,165 121,288 80,468 80,705 80,947 120,1128 199,1249 278,1370 402,1430 573,1430 739,1430 862,1369 941,1247 1020,1125 1059,944 1059,705 Z M 876,705 C 876,908 853,1056 806,1147 759,1238 681,1284 573,1284 462,1284 383,1239 335,1149 286,1059 262,911 262,705 262,505 287,359 336,266 385,173 462,127 569,127 675,127 753,174 802,269 851,364 876,509 876,705 Z"/>
<glyph unicode="." horiz-adv-x="213" d="M 187,0 L 187,219 382,219 382,0 187,0 Z"/>
<glyph unicode=")" horiz-adv-x="565" d="M 555,528 C 555,335 525,162 465,9 404,-144 311,-289 186,-424 L 12,-424 C 137,-284 229,-136 287,19 345,174 374,344 374,530 374,716 345,887 287,1042 228,1197 137,1345 12,1484 L 186,1484 C 312,1348 405,1203 465,1050 525,896 555,723 555,532 L 555,528 Z"/>
<glyph unicode="(" horiz-adv-x="548" d="M 127,532 C 127,725 157,898 218,1051 278,1204 371,1349 496,1484 L 670,1484 C 545,1345 454,1198 396,1042 337,886 308,715 308,530 308,345 337,175 395,20 452,-135 544,-283 670,-424 L 496,-424 C 370,-288 277,-143 217,11 157,164 127,337 127,528 L 127,532 Z"/>
<glyph unicode=" " horiz-adv-x="564"/>
</font>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g class="Page">
<g class="com.sun.star.drawing.CustomShape">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="2887" y="1108" width="11468" height="11341"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 3149,1126 L 3149,1126 C 3106,1126 3064,1137 3027,1159 2990,1180 2959,1211 2938,1248 2916,1285 2905,1327 2905,1370 L 2905,12185 2905,12186 C 2905,12229 2916,12271 2938,12308 2959,12345 2990,12376 3027,12397 3064,12419 3106,12430 3149,12430 L 14091,12430 14092,12430 C 14135,12430 14177,12419 14214,12397 14251,12376 14282,12345 14303,12308 14325,12271 14336,12229 14336,12186 L 14336,1370 14336,1370 14336,1370 C 14336,1327 14325,1285 14303,1248 14282,1211 14251,1180 14214,1159 14177,1137 14135,1126 14092,1126 L 3149,1126 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 3149,1126 L 3149,1126 C 3106,1126 3064,1137 3027,1159 2990,1180 2959,1211 2938,1248 2916,1285 2905,1327 2905,1370 L 2905,12185 2905,12186 C 2905,12229 2916,12271 2938,12308 2959,12345 2990,12376 3027,12397 3064,12419 3106,12430 3149,12430 L 14091,12430 14092,12430 C 14135,12430 14177,12419 14214,12397 14251,12376 14282,12345 14303,12308 14325,12271 14336,12229 14336,12186 L 14336,1370 14336,1370 14336,1370 C 14336,1327 14325,1285 14303,1248 14282,1211 14251,1180 14214,1159 14177,1137 14135,1126 14092,1126 L 3149,1126 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3243" y="1788"><tspan fill="rgb(0,0,0)" stroke="none">Queue manager</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id4">
<rect class="BoundingBox" stroke="none" fill="none" x="953" y="5953" width="2078" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1203" y="6527"><tspan fill="rgb(0,0,0)" stroke="none">AXI lite</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id5">
<rect class="BoundingBox" stroke="none" fill="none" x="12158" y="8748" width="2434" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12176,8874 L 14407,8874"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 14591,8874 L 14390,8748 14390,9000 14591,8874 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id6">
<rect class="BoundingBox" stroke="none" fill="none" x="14573" y="7840" width="1816" height="2070"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 14887,7858 L 14887,7858 C 14835,7858 14784,7872 14739,7898 14694,7924 14657,7961 14631,8006 14605,8051 14591,8102 14591,8155 L 14591,9594 14591,9595 C 14591,9647 14605,9698 14631,9743 14657,9788 14694,9825 14739,9851 14784,9877 14835,9891 14887,9891 L 16073,9890 16073,9891 C 16126,9891 16177,9877 16222,9851 16267,9825 16304,9788 16330,9743 16356,9698 16370,9647 16370,9595 L 16370,8154 16370,8155 16370,8155 C 16370,8102 16356,8051 16330,8006 16304,7961 16267,7924 16222,7898 16177,7872 16126,7858 16073,7858 L 14887,7858 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 14887,7858 L 14887,7858 C 14835,7858 14784,7872 14739,7898 14694,7924 14657,7961 14631,8006 14605,8051 14591,8102 14591,8155 L 14591,9594 14591,9595 C 14591,9647 14605,9698 14631,9743 14657,9788 14694,9825 14739,9851 14784,9877 14835,9891 14887,9891 L 16073,9890 16073,9891 C 16126,9891 16177,9877 16222,9851 16267,9825 16304,9788 16330,9743 16356,9698 16370,9647 16370,9595 L 16370,8154 16370,8155 16370,8155 C 16370,8102 16356,8051 16330,8006 16304,7961 16267,7924 16222,7898 16177,7872 16126,7858 16073,7858 L 14887,7858 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="14915" y="8768"><tspan fill="rgb(0,0,0)" stroke="none">Desc</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="14940" y="9323"><tspan fill="rgb(0,0,0)" stroke="none">fetch</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id7">
<rect class="BoundingBox" stroke="none" fill="none" x="11523" y="6716" width="3323" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11541,6842 L 14661,6842"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 14845,6842 L 14644,6716 14644,6968 14845,6842 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id8">
<rect class="BoundingBox" stroke="none" fill="none" x="14573" y="6189" width="1816" height="1308"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 14802,6207 L 14803,6207 C 14766,6207 14729,6217 14697,6235 14665,6254 14638,6281 14619,6313 14601,6345 14591,6382 14591,6419 L 14591,7266 14591,7266 C 14591,7303 14601,7340 14619,7372 14638,7404 14665,7431 14697,7450 14729,7468 14766,7478 14803,7478 L 16158,7478 16158,7478 C 16195,7478 16232,7468 16264,7450 16296,7431 16323,7404 16342,7372 16360,7340 16370,7303 16370,7266 L 16370,6418 16370,6419 16370,6419 C 16370,6382 16360,6345 16342,6313 16323,6281 16296,6254 16264,6235 16232,6217 16195,6207 16158,6207 L 14802,6207 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 14802,6207 L 14803,6207 C 14766,6207 14729,6217 14697,6235 14665,6254 14638,6281 14619,6313 14601,6345 14591,6382 14591,6419 L 14591,7266 14591,7266 C 14591,7303 14601,7340 14619,7372 14638,7404 14665,7431 14697,7450 14729,7468 14766,7478 14803,7478 L 16158,7478 16158,7478 C 16195,7478 16232,7468 16264,7450 16296,7431 16323,7404 16342,7372 16360,7340 16370,7303 16370,7266 L 16370,6418 16370,6419 16370,6419 C 16370,6382 16360,6345 16342,6313 16323,6281 16296,6254 16264,6235 16232,6217 16195,6207 16158,6207 L 14802,6207 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="15164" y="6736"><tspan fill="rgb(0,0,0)" stroke="none">TX</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="14707" y="7291"><tspan fill="rgb(0,0,0)" stroke="none">Sched.</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.TableShape">
<g>
<rect class="BoundingBox" stroke="none" fill="none" x="3221" y="2567" width="10863" height="3281"/>
<path fill="rgb(179,179,179)" stroke="none" d="M 3223,2569 L 4417,2569 4417,3385 3223,3385 3223,2569 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3473" y="3148"><tspan fill="rgb(0,0,0)" stroke="none">Ind</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 4417,2569 L 6182,2569 6182,3385 4417,3385 4417,2569 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4667" y="3148"><tspan fill="rgb(0,0,0)" stroke="none">Addr</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 6182,2569 L 7370,2569 7370,3385 6182,3385 6182,2569 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6432" y="3148"><tspan fill="rgb(0,0,0)" stroke="none">Op</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 7370,2569 L 8618,2569 8618,3385 7370,3385 7370,2569 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7620" y="3148"><tspan fill="rgb(0,0,0)" stroke="none">Act</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 8618,2569 L 9783,2569 9783,3385 8618,3385 8618,2569 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8868" y="3148"><tspan fill="rgb(0,0,0)" stroke="none">LS</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 9783,2569 L 11127,2569 11127,3385 9783,3385 9783,2569 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10033" y="3148"><tspan fill="rgb(0,0,0)" stroke="none">Cpl</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 11127,2569 L 12379,2569 12379,3385 11127,3385 11127,2569 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11377" y="3148"><tspan fill="rgb(0,0,0)" stroke="none">Tail</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 12379,2569 L 14081,2569 14081,3385 12379,3385 12379,2569 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12629" y="3148"><tspan fill="rgb(0,0,0)" stroke="none">Head</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 3223,3385 L 4417,3385 4417,4205 3223,4205 3223,3385 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3473" y="3964"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 4417,3385 L 6182,3385 6182,4205 4417,4205 4417,3385 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Mono, monospace" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4667" y="3926"><tspan fill="rgb(0,0,0)" stroke="none">4376</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 6182,3385 L 7370,3385 7370,4205 6182,4205 6182,3385 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6432" y="3964"><tspan fill="rgb(0,0,0)" stroke="none">2</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 7370,3385 L 8618,3385 8618,4205 7370,4205 7370,3385 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7620" y="3964"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 8618,3385 L 9783,3385 9783,4205 8618,4205 8618,3385 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8868" y="3964"><tspan fill="rgb(0,0,0)" stroke="none">10</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 9783,3385 L 11127,3385 11127,4205 9783,4205 9783,3385 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10033" y="3964"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 11127,3385 L 12379,3385 12379,4205 11127,4205 11127,3385 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11377" y="3964"><tspan fill="rgb(0,0,0)" stroke="none">5</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 12379,3385 L 14081,3385 14081,4205 12379,4205 12379,3385 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12629" y="3964"><tspan fill="rgb(0,0,0)" stroke="none">8</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 3223,4205 L 4417,4205 4417,5025 3223,5025 3223,4205 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3473" y="4784"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 4417,4205 L 6182,4205 6182,5025 4417,5025 4417,4205 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Mono, monospace" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4667" y="4746"><tspan fill="rgb(0,0,0)" stroke="none">af34</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 6182,4205 L 7370,4205 7370,5025 6182,5025 6182,4205 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6432" y="4784"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 7370,4205 L 8618,4205 8618,5025 7370,5025 7370,4205 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7620" y="4784"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 8618,4205 L 9783,4205 9783,5025 8618,5025 8618,4205 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8868" y="4784"><tspan fill="rgb(0,0,0)" stroke="none">10</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 9783,4205 L 11127,4205 11127,5025 9783,5025 9783,4205 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10033" y="4784"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 11127,4205 L 12379,4205 12379,5025 11127,5025 11127,4205 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11377" y="4784"><tspan fill="rgb(0,0,0)" stroke="none">9</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 12379,4205 L 14081,4205 14081,5025 12379,5025 12379,4205 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12629" y="4784"><tspan fill="rgb(0,0,0)" stroke="none">9</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 3223,5025 L 4417,5025 4417,5845 3223,5845 3223,5025 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3473" y="5604"><tspan fill="rgb(0,0,0)" stroke="none">2</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 4417,5025 L 6182,5025 6182,5845 4417,5845 4417,5025 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Mono, monospace" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4667" y="5566"><tspan fill="rgb(0,0,0)" stroke="none">324c</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 6182,5025 L 7370,5025 7370,5845 6182,5845 6182,5025 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6432" y="5604"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 7370,5025 L 8618,5025 8618,5845 7370,5845 7370,5025 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7620" y="5604"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 8618,5025 L 9783,5025 9783,5845 8618,5845 8618,5025 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8868" y="5604"><tspan fill="rgb(0,0,0)" stroke="none">10</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 9783,5025 L 11127,5025 11127,5845 9783,5845 9783,5025 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10033" y="5604"><tspan fill="rgb(0,0,0)" stroke="none">2</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 11127,5025 L 12379,5025 12379,5845 11127,5845 11127,5025 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11377" y="5604"><tspan fill="rgb(0,0,0)" stroke="none">3</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 12379,5025 L 14081,5025 14081,5845 12379,5845 12379,5025 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12629" y="5604"><tspan fill="rgb(0,0,0)" stroke="none">4</tspan></tspan></tspan></text>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3214,2569 L 14090,2569"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3223,2560 L 3223,5854"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4417,2560 L 4417,5854"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 6182,2560 L 6182,5854"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 7370,2560 L 7370,5854"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 8618,2560 L 8618,5854"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 9783,2560 L 9783,5854"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 11127,2560 L 11127,5854"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 12379,2560 L 12379,5854"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 14081,2560 L 14081,5854"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3214,3385 L 14090,3385"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3214,4205 L 14090,4205"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3214,5025 L 14090,5025"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3214,5845 L 14090,5845"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id9">
<rect class="BoundingBox" stroke="none" fill="none" x="1742" y="6716" width="2940" height="253"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 1760,6842 L 4497,6842"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 4681,6842 L 4480,6716 4480,6968 4681,6842 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id10">
<rect class="BoundingBox" stroke="none" fill="none" x="5699" y="1845" width="6129" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5949" y="2419"><tspan fill="rgb(0,0,0)" stroke="none">Queue state (Block RAM)</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id11">
<rect class="BoundingBox" stroke="none" fill="none" x="4663" y="6570" width="1816" height="1308"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 4892,6588 L 4893,6588 C 4856,6588 4819,6598 4787,6616 4755,6635 4728,6662 4709,6694 4691,6726 4681,6763 4681,6800 L 4681,7647 4681,7647 C 4681,7684 4691,7721 4709,7753 4728,7785 4755,7812 4787,7831 4819,7849 4856,7859 4893,7859 L 6248,7859 6248,7859 C 6285,7859 6322,7849 6354,7831 6386,7812 6413,7785 6432,7753 6450,7721 6460,7684 6460,7647 L 6460,6799 6460,6800 6460,6800 C 6460,6763 6450,6726 6432,6694 6413,6662 6386,6635 6354,6616 6322,6598 6285,6588 6248,6588 L 4892,6588 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4892,6588 L 4893,6588 C 4856,6588 4819,6598 4787,6616 4755,6635 4728,6662 4709,6694 4691,6726 4681,6763 4681,6800 L 4681,7647 4681,7647 C 4681,7684 4691,7721 4709,7753 4728,7785 4755,7812 4787,7831 4819,7849 4856,7859 4893,7859 L 6248,7859 6248,7859 C 6285,7859 6322,7849 6354,7831 6386,7812 6413,7785 6432,7753 6450,7721 6460,7684 6460,7647 L 6460,6799 6460,6800 6460,6800 C 6460,6763 6450,6726 6432,6694 6413,6662 6386,6635 6354,6616 6322,6598 6285,6588 6248,6588 L 4892,6588 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5045" y="7117"><tspan fill="rgb(0,0,0)" stroke="none">Start</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5295" y="7672"><tspan fill="rgb(0,0,0)" stroke="none">op</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id12">
<rect class="BoundingBox" stroke="none" fill="none" x="5479" y="5826" width="253" height="781"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 5605,6588 L 5605,6010"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 5605,5826 L 5479,6027 5731,6027 5605,5826 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id13">
<rect class="BoundingBox" stroke="none" fill="none" x="3330" y="5862" width="2370" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3580" y="6436"><tspan fill="rgb(0,0,0)" stroke="none">RD Addr</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id14">
<rect class="BoundingBox" stroke="none" fill="none" x="8980" y="6570" width="2705" height="1308"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 9209,6588 L 9210,6588 C 9173,6588 9136,6598 9104,6616 9072,6635 9045,6662 9026,6694 9008,6726 8998,6763 8998,6800 L 8998,7647 8998,7647 C 8998,7684 9008,7721 9026,7753 9045,7785 9072,7812 9104,7831 9136,7849 9173,7859 9210,7859 L 11454,7859 11454,7859 C 11491,7859 11528,7849 11560,7831 11592,7812 11619,7785 11638,7753 11656,7721 11666,7684 11666,7647 L 11666,6799 11666,6800 11666,6800 C 11666,6763 11656,6726 11638,6694 11619,6662 11592,6635 11560,6616 11528,6598 11491,6588 11454,6588 L 9209,6588 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 9209,6588 L 9210,6588 C 9173,6588 9136,6598 9104,6616 9072,6635 9045,6662 9026,6694 9008,6726 8998,6763 8998,6800 L 8998,7647 8998,7647 C 8998,7684 9008,7721 9026,7753 9045,7785 9072,7812 9104,7831 9136,7849 9173,7859 9210,7859 L 11454,7859 11454,7859 C 11491,7859 11528,7849 11560,7831 11592,7812 11619,7785 11638,7753 11656,7721 11666,7684 11666,7647 L 11666,6799 11666,6800 11666,6800 C 11666,6763 11656,6726 11638,6694 11619,6662 11592,6635 11560,6616 11528,6598 11491,6588 11454,6588 L 9209,6588 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9273" y="7117"><tspan fill="rgb(0,0,0)" stroke="none">Complete</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10057" y="7672"><tspan fill="rgb(0,0,0)" stroke="none">op</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id15">
<rect class="BoundingBox" stroke="none" fill="none" x="9764" y="5808" width="253" height="781"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 9890,5826 L 9890,6404"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 9890,6588 L 10016,6387 9764,6387 9890,6588 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id16">
<rect class="BoundingBox" stroke="none" fill="none" x="7604" y="5826" width="2400" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7854" y="6400"><tspan fill="rgb(0,0,0)" stroke="none">RD Data</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id17">
<rect class="BoundingBox" stroke="none" fill="none" x="6822" y="6824" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 6967,6842 L 6967,6842 C 6945,6842 6923,6848 6904,6859 6884,6870 6868,6886 6857,6906 6846,6925 6840,6947 6840,6969 L 6840,7477 6840,7478 C 6840,7500 6846,7522 6857,7541 6868,7561 6884,7577 6904,7588 6923,7599 6945,7605 6967,7605 L 8491,7605 8492,7605 C 8514,7605 8536,7599 8555,7588 8575,7577 8591,7561 8602,7541 8613,7522 8619,7500 8619,7478 L 8619,6969 8619,6969 8619,6969 C 8619,6947 8613,6925 8602,6906 8591,6886 8575,6870 8555,6859 8536,6848 8514,6842 8492,6842 L 6967,6842 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 6967,6842 L 6967,6842 C 6945,6842 6923,6848 6904,6859 6884,6870 6868,6886 6857,6906 6846,6925 6840,6947 6840,6969 L 6840,7477 6840,7478 C 6840,7500 6846,7522 6857,7541 6868,7561 6884,7577 6904,7588 6923,7599 6945,7605 6967,7605 L 8491,7605 8492,7605 C 8514,7605 8536,7599 8555,7588 8575,7577 8591,7561 8602,7541 8613,7522 8619,7500 8619,7478 L 8619,6969 8619,6969 8619,6969 C 8619,6947 8613,6925 8602,6906 8591,6886 8575,6870 8555,6859 8536,6848 8514,6842 8492,6842 L 6967,6842 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7096" y="7395"><tspan fill="rgb(0,0,0)" stroke="none">Delay</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id18">
<rect class="BoundingBox" stroke="none" fill="none" x="10526" y="5826" width="253" height="781"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10652,6588 L 10652,6010"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 10652,5826 L 10526,6027 10778,6027 10652,5826 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id19">
<rect class="BoundingBox" stroke="none" fill="none" x="10525" y="5826" width="1324" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10775" y="6400"><tspan fill="rgb(0,0,0)" stroke="none">WR</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.TableShape">
<g>
<rect class="BoundingBox" stroke="none" fill="none" x="4428" y="8946" width="6609" height="3269"/>
<path fill="rgb(179,179,179)" stroke="none" d="M 4430,8948 L 5693,8948 5693,9764 4430,9764 4430,8948 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4680" y="9527"><tspan fill="rgb(0,0,0)" stroke="none">Ind</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 5693,8948 L 6953,8948 6953,9764 5693,9764 5693,8948 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5943" y="9527"><tspan fill="rgb(0,0,0)" stroke="none">Act</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 6953,8948 L 8629,8948 8629,9764 6953,9764 6953,8948 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7203" y="9527"><tspan fill="rgb(0,0,0)" stroke="none">Com</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 8629,8948 L 9885,8948 9885,9764 8629,9764 8629,8948 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8879" y="9527"><tspan fill="rgb(0,0,0)" stroke="none">QI</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 9885,8948 L 11034,8948 11034,9764 9885,9764 9885,8948 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10135" y="9527"><tspan fill="rgb(0,0,0)" stroke="none">Ptr</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 4430,9764 L 5693,9764 5693,10580 4430,10580 4430,9764 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4680" y="10343"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 5693,9764 L 6953,9764 6953,10580 5693,10580 5693,9764 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5943" y="10343"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 6953,9764 L 8629,9764 8629,10580 6953,10580 6953,9764 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7203" y="10343"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 8629,9764 L 9885,9764 9885,10580 8629,10580 8629,9764 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8879" y="10343"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 9885,9764 L 11034,9764 11034,10580 9885,10580 9885,9764 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10135" y="10343"><tspan fill="rgb(0,0,0)" stroke="none">9</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 4430,10580 L 5693,10580 5693,11396 4430,11396 4430,10580 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4680" y="11159"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 5693,10580 L 6953,10580 6953,11396 5693,11396 5693,10580 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5943" y="11159"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 6953,10580 L 8629,10580 8629,11396 6953,11396 6953,10580 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7203" y="11159"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 8629,10580 L 9885,10580 9885,11396 8629,11396 8629,10580 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8879" y="11159"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 9885,10580 L 11034,10580 11034,11396 9885,11396 9885,10580 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10135" y="11159"><tspan fill="rgb(0,0,0)" stroke="none">6</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 4430,11396 L 5693,11396 5693,12212 4430,12212 4430,11396 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4680" y="11975"><tspan fill="rgb(0,0,0)" stroke="none">2</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 5693,11396 L 6953,11396 6953,12212 5693,12212 5693,11396 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5943" y="11975"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 6953,11396 L 8629,11396 8629,12212 6953,12212 6953,11396 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7203" y="11975"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 8629,11396 L 9885,11396 9885,12212 8629,12212 8629,11396 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8879" y="11975"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 9885,11396 L 11034,11396 11034,12212 9885,12212 9885,11396 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10135" y="11975"><tspan fill="rgb(0,0,0)" stroke="none">7</tspan></tspan></tspan></text>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4421,8948 L 11043,8948"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4430,8939 L 4430,12221"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 5693,8939 L 5693,12221"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 6953,8939 L 6953,12221"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 8629,8939 L 8629,12221"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 9885,8939 L 9885,12221"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 11034,8939 L 11034,12221"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4421,9764 L 11043,9764"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4421,10580 L 11043,10580"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4421,11396 L 11043,11396"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4421,12212 L 11043,12212"/>
</g>
</g>
<g class="TextShape">
<g id="id20">
<rect class="BoundingBox" stroke="none" fill="none" x="5699" y="8239" width="3894" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5949" y="8813"><tspan fill="rgb(0,0,0)" stroke="none">Operation table</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id21">
<rect class="BoundingBox" stroke="none" fill="none" x="12176" y="6163" width="2264" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12426" y="6737"><tspan fill="rgb(0,0,0)" stroke="none">doorbell</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id22">
<rect class="BoundingBox" stroke="none" fill="none" x="4157" y="8221" width="10451" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 14589,8239 L 4175,8239"/>
</g>
</g>
<g class="TextShape">
<g id="id23">
<rect class="BoundingBox" stroke="none" fill="none" x="12303" y="7560" width="1271" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12553" y="8134"><tspan fill="rgb(0,0,0)" stroke="none">req</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id24">
<rect class="BoundingBox" stroke="none" fill="none" x="12303" y="8195" width="1468" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12553" y="8769"><tspan fill="rgb(0,0,0)" stroke="none">resp</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id25">
<rect class="BoundingBox" stroke="none" fill="none" x="11033" y="9383" width="3575" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 14589,9509 L 11217,9509"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 11033,9509 L 11234,9635 11234,9383 11033,9509 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id26">
<rect class="BoundingBox" stroke="none" fill="none" x="12303" y="8830" width="2099" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12553" y="9404"><tspan fill="rgb(0,0,0)" stroke="none">commit</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id27">
<rect class="BoundingBox" stroke="none" fill="none" x="6441" y="7097" width="400" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 6459,7223 L 6656,7223"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 6840,7223 L 6639,7097 6639,7349 6840,7223 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id28">
<rect class="BoundingBox" stroke="none" fill="none" x="8600" y="7097" width="400" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 8618,7223 L 8815,7223"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 8999,7223 L 8798,7097 8798,7349 8999,7223 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id29">
<rect class="BoundingBox" stroke="none" fill="none" x="11650" y="7205" width="545" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12176,7223 L 11668,7223"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id30">
<rect class="BoundingBox" stroke="none" fill="none" x="12158" y="7205" width="37" height="1688"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12176,8874 L 12176,7223"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id31">
<rect class="BoundingBox" stroke="none" fill="none" x="4157" y="7478" width="525" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4175,7604 L 4497,7604"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 4681,7604 L 4480,7478 4480,7730 4681,7604 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id32">
<rect class="BoundingBox" stroke="none" fill="none" x="4154" y="7586" width="40" height="672"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4175,8239 L 4172,7604"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id33">
<rect class="BoundingBox" stroke="none" fill="none" x="5446" y="7858" width="253" height="1162"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 5572,9001 L 5572,8042"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 5572,7858 L 5446,8059 5698,8059 5572,7858 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id34">
<rect class="BoundingBox" stroke="none" fill="none" x="9891" y="7858" width="253" height="1162"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10017,9001 L 10017,8042"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 10017,7858 L 9891,8059 10143,8059 10017,7858 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id35">
<rect class="BoundingBox" stroke="none" fill="none" x="10399" y="7840" width="253" height="1162"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10525,7858 L 10525,8817"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 10525,9001 L 10651,8800 10399,8800 10525,9001 Z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

View File

@ -0,0 +1,430 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="159.61mm" height="65.16mm" viewBox="934 1108 15961 6516" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs>
<font id="EmbeddedFont_1" horiz-adv-x="2048">
<font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="441"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="x" horiz-adv-x="988" d="M 801,0 L 510,444 217,0 23,0 408,556 41,1082 240,1082 510,661 778,1082 979,1082 612,558 1002,0 801,0 Z"/>
<glyph unicode="u" horiz-adv-x="883" d="M 314,1082 L 314,396 C 314,325 321,269 335,230 349,191 371,162 402,145 433,128 478,119 537,119 624,119 692,149 742,208 792,267 817,350 817,455 L 817,1082 997,1082 997,231 C 997,105 999,28 1003,0 L 833,0 C 832,3 832,12 831,27 830,42 830,59 829,78 828,97 826,132 825,185 L 822,185 C 781,110 733,58 679,27 624,-4 557,-20 476,-20 357,-20 271,10 216,69 161,128 133,225 133,361 L 133,1082 314,1082 Z"/>
<glyph unicode="t" horiz-adv-x="547" d="M 554,8 C 495,-8 434,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 474,127 509,132 554,141 L 554,8 Z"/>
<glyph unicode="s" horiz-adv-x="901" d="M 950,299 C 950,197 912,118 835,63 758,8 650,-20 511,-20 376,-20 273,2 200,47 127,91 79,160 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 602,117 669,131 712,159 754,187 775,229 775,285 775,328 760,362 731,389 702,416 654,438 589,455 L 460,489 C 357,516 283,542 240,568 196,593 162,624 137,661 112,698 100,743 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 759,862 732,899 689,925 645,950 586,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,783 283,758 299,738 315,718 339,701 370,687 401,673 467,654 568,629 663,605 732,583 774,563 816,542 849,520 874,495 898,470 917,442 930,410 943,377 950,340 950,299 Z"/>
<glyph unicode="r" horiz-adv-x="531" d="M 142,0 L 142,830 C 142,906 140,990 136,1082 L 306,1082 C 311,959 314,886 314,861 L 318,861 C 347,954 380,1017 417,1051 454,1085 507,1102 575,1102 599,1102 623,1099 648,1092 L 648,927 C 624,934 592,937 552,937 477,937 420,905 381,841 342,776 322,684 322,564 L 322,0 142,0 Z"/>
<glyph unicode="p" horiz-adv-x="936" d="M 1053,546 C 1053,169 920,-20 655,-20 488,-20 376,43 319,168 L 314,168 C 317,163 318,106 318,-2 L 318,-425 138,-425 138,861 C 138,972 136,1046 132,1082 L 306,1082 C 307,1079 308,1070 309,1054 310,1037 312,1012 314,978 315,944 316,921 316,908 L 320,908 C 352,975 394,1024 447,1055 500,1086 569,1101 655,1101 788,1101 888,1056 954,967 1020,878 1053,737 1053,546 Z M 864,542 C 864,693 844,800 803,865 762,930 698,962 609,962 538,962 482,947 442,917 401,887 371,840 350,777 329,713 318,630 318,528 318,386 341,281 386,214 431,147 505,113 607,113 696,113 762,146 803,212 844,277 864,387 864,542 Z"/>
<glyph unicode="o" horiz-adv-x="988" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 407,-20 288,28 207,125 126,221 86,360 86,542 86,915 248,1102 571,1102 736,1102 858,1057 936,966 1014,875 1053,733 1053,542 Z M 864,542 C 864,691 842,800 798,868 753,935 679,969 574,969 469,969 393,935 346,866 299,797 275,689 275,542 275,399 298,292 345,221 391,149 464,113 563,113 671,113 748,148 795,217 841,286 864,395 864,542 Z"/>
<glyph unicode="n" horiz-adv-x="883" d="M 825,0 L 825,686 C 825,757 818,813 804,852 790,891 768,920 737,937 706,954 661,963 602,963 515,963 447,933 397,874 347,815 322,732 322,627 L 322,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 358,972 406,1025 461,1056 515,1087 582,1102 663,1102 782,1102 869,1073 924,1014 979,955 1006,857 1006,721 L 1006,0 825,0 Z"/>
<glyph unicode="m" horiz-adv-x="1448" d="M 768,0 L 768,686 C 768,791 754,863 725,903 696,943 645,963 570,963 493,963 433,934 388,875 343,816 321,734 321,627 L 321,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 356,974 400,1027 450,1057 500,1087 561,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 967,970 1013,1022 1066,1054 1119,1086 1183,1102 1258,1102 1367,1102 1447,1072 1497,1013 1546,954 1571,856 1571,721 L 1571,0 1393,0 1393,686 C 1393,791 1379,863 1350,903 1321,943 1270,963 1195,963 1116,963 1055,934 1012,876 968,817 946,734 946,627 L 946,0 768,0 Z"/>
<glyph unicode="l" horiz-adv-x="213" d="M 138,0 L 138,1484 318,1484 318,0 138,0 Z"/>
<glyph unicode="i" horiz-adv-x="196" d="M 137,1312 L 137,1484 317,1484 317,1312 137,1312 Z M 137,0 L 137,1082 317,1082 317,0 137,0 Z"/>
<glyph unicode="h" horiz-adv-x="865" d="M 317,897 C 356,968 402,1020 457,1053 511,1086 580,1102 663,1102 780,1102 867,1073 923,1015 978,956 1006,858 1006,721 L 1006,0 825,0 825,686 C 825,762 818,819 804,856 790,893 767,920 735,937 703,954 659,963 602,963 517,963 450,934 399,875 348,816 322,737 322,638 L 322,0 142,0 142,1484 322,1484 322,1098 C 322,1057 321,1015 319,972 316,929 315,904 314,897 L 317,897 Z"/>
<glyph unicode="g" horiz-adv-x="953" d="M 548,-425 C 430,-425 336,-402 266,-356 196,-309 151,-243 131,-158 L 312,-132 C 324,-182 351,-220 392,-248 433,-274 486,-288 553,-288 732,-288 822,-183 822,27 L 822,201 820,201 C 786,132 739,80 680,45 621,10 551,-8 472,-8 339,-8 242,36 180,124 117,212 86,350 86,539 86,730 120,872 187,963 254,1054 355,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,917 825,952 828,1001 831,1050 833,1077 836,1082 L 1007,1082 C 1003,1046 1001,971 1001,858 L 1001,31 C 1001,-273 850,-425 548,-425 Z M 822,541 C 822,629 810,705 786,769 762,832 728,881 685,915 641,948 591,965 536,965 444,965 377,932 335,865 293,798 272,690 272,541 272,393 292,287 331,222 370,157 438,125 533,125 590,125 640,142 684,175 728,208 762,256 786,319 810,381 822,455 822,541 Z"/>
<glyph unicode="f" horiz-adv-x="565" d="M 361,951 L 361,0 181,0 181,951 29,951 29,1082 181,1082 181,1204 C 181,1303 203,1374 246,1417 289,1460 356,1482 445,1482 495,1482 537,1478 572,1470 L 572,1333 C 542,1338 515,1341 492,1341 446,1341 413,1329 392,1306 371,1283 361,1240 361,1179 L 361,1082 572,1082 572,951 361,951 Z"/>
<glyph unicode="e" horiz-adv-x="988" d="M 276,503 C 276,379 302,283 353,216 404,149 479,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 954,65 807,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,727 129,864 213,959 296,1054 416,1102 571,1102 889,1102 1048,910 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 481,969 412,940 361,882 310,823 282,743 278,641 L 862,641 Z"/>
<glyph unicode="d" horiz-adv-x="953" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 821,1035 821,1484 1001,1484 1001,223 C 1001,110 1003,36 1007,0 L 835,0 C 833,11 831,35 829,74 826,113 825,146 825,174 L 821,174 Z M 275,542 C 275,391 295,282 335,217 375,152 440,119 530,119 632,119 706,154 752,225 798,296 821,405 821,554 821,697 798,802 752,869 706,936 633,969 532,969 441,969 376,936 336,869 295,802 275,693 275,542 Z"/>
<glyph unicode="c" horiz-adv-x="900" d="M 275,546 C 275,402 298,295 343,226 388,157 457,122 548,122 612,122 666,139 709,174 752,209 778,262 788,334 L 970,322 C 956,218 912,135 837,73 762,11 668,-20 553,-20 402,-20 286,28 207,124 127,219 87,359 87,542 87,724 127,863 207,959 287,1054 402,1102 551,1102 662,1102 754,1073 827,1016 900,959 945,880 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 451,961 382,929 339,866 296,803 275,696 275,546 Z"/>
<glyph unicode="b" horiz-adv-x="936" d="M 1053,546 C 1053,169 920,-20 655,-20 573,-20 505,-5 451,25 396,54 352,102 318,168 L 316,168 C 316,147 315,116 312,74 309,31 307,7 306,0 L 132,0 C 136,36 138,110 138,223 L 138,1484 318,1484 318,1061 C 318,1018 317,967 314,908 L 318,908 C 351,977 396,1027 451,1057 506,1087 574,1102 655,1102 792,1102 892,1056 957,964 1021,872 1053,733 1053,546 Z M 864,540 C 864,691 844,800 804,865 764,930 699,963 609,963 508,963 434,928 388,859 341,790 318,680 318,529 318,387 341,282 386,215 431,147 505,113 607,113 698,113 763,147 804,214 844,281 864,389 864,540 Z"/>
<glyph unicode="a" horiz-adv-x="1077" d="M 414,-20 C 305,-20 224,9 169,66 114,123 87,202 87,302 87,414 124,500 198,560 271,620 390,652 554,656 L 797,660 797,719 C 797,807 778,870 741,908 704,946 645,965 565,965 484,965 426,951 389,924 352,897 330,853 323,793 L 135,810 C 166,1005 310,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1097,111 1117,113 1139,118 L 1139,6 C 1094,-5 1047,-10 1000,-10 933,-10 885,8 855,43 824,78 807,132 803,207 L 797,207 C 751,124 698,66 637,32 576,-3 501,-20 414,-20 Z M 455,115 C 521,115 580,130 631,160 682,190 723,231 753,284 782,336 797,390 797,445 L 797,534 600,530 C 515,529 451,520 408,504 364,488 330,463 307,430 284,397 272,353 272,299 272,240 288,195 320,163 351,131 396,115 455,115 Z"/>
<glyph unicode="X" horiz-adv-x="1289" d="M 1112,0 L 689,616 257,0 46,0 582,732 87,1409 298,1409 690,856 1071,1409 1282,1409 800,739 1323,0 1112,0 Z"/>
<glyph unicode="T" horiz-adv-x="1183" d="M 720,1253 L 720,0 530,0 530,1253 46,1253 46,1409 1204,1409 1204,1253 720,1253 Z"/>
<glyph unicode="S" horiz-adv-x="1201" d="M 1272,389 C 1272,259 1221,158 1120,87 1018,16 875,-20 690,-20 347,-20 148,99 93,338 L 278,375 C 299,290 345,228 414,189 483,149 578,129 697,129 820,129 916,150 983,193 1050,235 1083,297 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 541,675 456,699 399,724 341,749 295,776 262,807 229,837 203,872 186,913 168,954 159,1000 159,1053 159,1174 205,1267 298,1332 390,1397 522,1430 694,1430 854,1430 976,1406 1061,1357 1146,1308 1205,1224 1239,1106 L 1051,1073 C 1030,1148 991,1202 933,1236 875,1269 795,1286 692,1286 579,1286 493,1267 434,1230 375,1193 345,1137 345,1063 345,1020 357,984 380,956 403,927 436,903 479,884 522,864 609,840 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
<glyph unicode="P" horiz-adv-x="1112" d="M 1258,985 C 1258,852 1215,746 1128,667 1041,588 922,549 773,549 L 359,549 359,0 168,0 168,1409 761,1409 C 919,1409 1041,1372 1128,1298 1215,1224 1258,1120 1258,985 Z M 1066,983 C 1066,1165 957,1256 738,1256 L 359,1256 359,700 746,700 C 959,700 1066,794 1066,983 Z"/>
<glyph unicode="O" horiz-adv-x="1412" d="M 1495,711 C 1495,564 1467,435 1411,324 1354,213 1273,128 1168,69 1063,10 938,-20 795,-20 650,-20 526,9 421,68 316,127 235,212 180,323 125,434 97,563 97,711 97,936 159,1113 282,1240 405,1367 577,1430 797,1430 940,1430 1065,1402 1170,1345 1275,1288 1356,1205 1412,1096 1467,987 1495,859 1495,711 Z M 1300,711 C 1300,886 1256,1024 1169,1124 1081,1224 957,1274 797,1274 636,1274 511,1225 423,1126 335,1027 291,889 291,711 291,534 336,394 425,291 514,187 637,135 795,135 958,135 1083,185 1170,286 1257,386 1300,528 1300,711 Z"/>
<glyph unicode="N" horiz-adv-x="1165" d="M 1082,0 L 328,1200 333,1103 338,936 338,0 168,0 168,1409 390,1409 1152,201 C 1144,332 1140,426 1140,485 L 1140,1409 1312,1409 1312,0 1082,0 Z"/>
<glyph unicode="M" horiz-adv-x="1394" d="M 1366,0 L 1366,940 C 1366,1044 1369,1144 1375,1240 1342,1121 1313,1027 1287,960 L 923,0 789,0 420,960 364,1130 331,1240 334,1129 338,940 338,0 168,0 168,1409 419,1409 794,432 C 807,393 820,351 833,306 845,261 853,228 857,208 862,235 874,275 891,330 908,384 919,418 925,432 L 1293,1409 1538,1409 1538,0 1366,0 Z"/>
<glyph unicode="I" horiz-adv-x="213" d="M 189,0 L 189,1409 380,1409 380,0 189,0 Z"/>
<glyph unicode="F" horiz-adv-x="1024" d="M 359,1253 L 359,729 1145,729 1145,571 359,571 359,0 168,0 168,1409 1169,1409 1169,1253 359,1253 Z"/>
<glyph unicode="E" horiz-adv-x="1130" d="M 168,0 L 168,1409 1237,1409 1237,1253 359,1253 359,801 1177,801 1177,647 359,647 359,156 1278,156 1278,0 168,0 Z"/>
<glyph unicode="D" horiz-adv-x="1235" d="M 1381,719 C 1381,574 1353,447 1296,338 1239,229 1159,145 1055,87 951,29 831,0 695,0 L 168,0 168,1409 634,1409 C 873,1409 1057,1349 1187,1230 1316,1110 1381,940 1381,719 Z M 1189,719 C 1189,894 1141,1027 1046,1119 950,1210 811,1256 630,1256 L 359,1256 359,153 673,153 C 776,153 867,176 946,221 1024,266 1084,332 1126,417 1168,502 1189,603 1189,719 Z"/>
<glyph unicode="A" horiz-adv-x="1377" d="M 1167,0 L 1006,412 364,412 202,0 4,0 579,1409 796,1409 1362,0 1167,0 Z M 685,1265 L 676,1237 C 659,1182 635,1111 602,1024 L 422,561 949,561 768,1026 C 749,1072 731,1124 712,1182 L 685,1265 Z"/>
<glyph unicode="2" horiz-adv-x="954" d="M 103,0 L 103,127 C 137,205 179,274 228,334 277,393 328,447 382,496 436,544 490,589 543,630 596,671 643,713 686,754 729,795 763,839 790,884 816,929 829,981 829,1038 829,1115 806,1175 761,1218 716,1261 653,1282 572,1282 495,1282 432,1261 383,1220 333,1178 304,1119 295,1044 L 111,1061 C 124,1174 172,1263 255,1330 337,1397 443,1430 572,1430 714,1430 823,1397 900,1330 976,1263 1014,1167 1014,1044 1014,989 1002,935 977,881 952,827 914,773 865,719 816,665 721,581 582,468 505,405 444,349 399,299 354,248 321,200 301,153 L 1036,153 1036,0 103,0 Z"/>
<glyph unicode="1" horiz-adv-x="901" d="M 156,0 L 156,153 515,153 515,1237 197,1010 197,1180 530,1409 696,1409 696,153 1039,153 1039,0 156,0 Z"/>
<glyph unicode="0" horiz-adv-x="988" d="M 1059,705 C 1059,470 1018,290 935,166 852,42 729,-20 567,-20 405,-20 283,42 202,165 121,288 80,468 80,705 80,947 120,1128 199,1249 278,1370 402,1430 573,1430 739,1430 862,1369 941,1247 1020,1125 1059,944 1059,705 Z M 876,705 C 876,908 853,1056 806,1147 759,1238 681,1284 573,1284 462,1284 383,1239 335,1149 286,1059 262,911 262,705 262,505 287,359 336,266 385,173 462,127 569,127 675,127 753,174 802,269 851,364 876,509 876,705 Z"/>
<glyph unicode="." horiz-adv-x="213" d="M 187,0 L 187,219 382,219 382,0 187,0 Z"/>
<glyph unicode=" " horiz-adv-x="564"/>
</font>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g class="Page">
<g class="com.sun.star.drawing.CustomShape">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="3141" y="1108" width="11722" height="6515"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 3298,1126 L 3299,1126 C 3274,1126 3250,1132 3229,1145 3208,1157 3190,1175 3178,1196 3165,1217 3159,1241 3159,1266 L 3159,7464 3159,7464 C 3159,7489 3165,7513 3178,7534 3190,7555 3208,7573 3229,7585 3250,7598 3274,7604 3299,7604 L 14704,7604 14704,7604 C 14729,7604 14753,7598 14774,7585 14795,7573 14813,7555 14825,7534 14838,7513 14844,7489 14844,7464 L 14844,1265 14844,1266 14844,1266 C 14844,1241 14838,1217 14825,1196 14813,1175 14795,1157 14774,1145 14753,1132 14729,1126 14704,1126 L 3298,1126 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 3298,1126 L 3299,1126 C 3274,1126 3250,1132 3229,1145 3208,1157 3190,1175 3178,1196 3165,1217 3159,1241 3159,1266 L 3159,7464 3159,7464 C 3159,7489 3165,7513 3178,7534 3190,7555 3208,7573 3229,7585 3250,7598 3274,7604 3299,7604 L 14704,7604 14704,7604 C 14729,7604 14753,7598 14774,7585 14795,7573 14813,7555 14825,7534 14838,7513 14844,7489 14844,7464 L 14844,1265 14844,1266 14844,1266 C 14844,1241 14838,1217 14825,1196 14813,1175 14795,1157 14774,1145 14753,1132 14729,1126 14704,1126 L 3298,1126 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3466" y="1757"><tspan fill="rgb(0,0,0)" stroke="none">TDMA scheduler controller</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id4">
<rect class="BoundingBox" stroke="none" fill="none" x="2271" y="3395" width="253" height="2940"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 2397,3413 L 2397,6150"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 2397,6334 L 2523,6133 2271,6133 2397,6334 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id5">
<rect class="BoundingBox" stroke="none" fill="none" x="1109" y="6316" width="1816" height="1308"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 1338,6334 L 1339,6334 C 1302,6334 1265,6344 1233,6362 1201,6381 1174,6408 1155,6440 1137,6472 1127,6509 1127,6546 L 1127,7393 1127,7393 C 1127,7430 1137,7467 1155,7499 1174,7531 1201,7558 1233,7577 1265,7595 1302,7605 1339,7605 L 2694,7605 2694,7605 C 2731,7605 2768,7595 2800,7577 2832,7558 2859,7531 2878,7499 2896,7467 2906,7430 2906,7393 L 2906,6545 2906,6546 2906,6546 C 2906,6509 2896,6472 2878,6440 2859,6408 2832,6381 2800,6362 2768,6344 2731,6334 2694,6334 L 1338,6334 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 1338,6334 L 1339,6334 C 1302,6334 1265,6344 1233,6362 1201,6381 1174,6408 1155,6440 1137,6472 1127,6509 1127,6546 L 1127,7393 1127,7393 C 1127,7430 1137,7467 1155,7499 1174,7531 1201,7558 1233,7577 1265,7595 1302,7605 1339,7605 L 2694,7605 2694,7605 C 2731,7605 2768,7595 2800,7577 2832,7558 2859,7531 2878,7499 2896,7467 2906,7430 2906,7393 L 2906,6545 2906,6546 2906,6546 C 2906,6509 2896,6472 2878,6440 2859,6408 2832,6381 2800,6362 2768,6344 2731,6334 2694,6334 L 1338,6334 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1317" y="6863"><tspan fill="rgb(0,0,0)" stroke="none">TDMA</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1243" y="7418"><tspan fill="rgb(0,0,0)" stroke="none">Sched.</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id6">
<rect class="BoundingBox" stroke="none" fill="none" x="2887" y="6458" width="2813" height="254"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 2905,6588 L 5515,6584"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 5699,6584 L 5498,6458 5498,6710 5699,6584 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id7">
<rect class="BoundingBox" stroke="none" fill="none" x="1509" y="5681" width="253" height="654"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="35" stroke-linejoin="round" d="M 1635,5699 L 1635,6150"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 1635,6334 L 1761,6133 1509,6133 1635,6334 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.TableShape">
<g>
<rect class="BoundingBox" stroke="none" fill="none" x="3407" y="2529" width="5470" height="3269"/>
<path fill="rgb(179,179,179)" stroke="none" d="M 3409,2531 L 4607,2531 4607,3347 3409,3347 3409,2531 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3659" y="3110"><tspan fill="rgb(0,0,0)" stroke="none">Ind</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 4607,2531 L 6019,2531 6019,3347 4607,3347 4607,2531 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4857" y="3110"><tspan fill="rgb(0,0,0)" stroke="none">TS0</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 6019,2531 L 7437,2531 7437,3347 6019,3347 6019,2531 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6269" y="3110"><tspan fill="rgb(0,0,0)" stroke="none">TS1</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 7437,2531 L 8874,2531 8874,3347 7437,3347 7437,2531 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7687" y="3110"><tspan fill="rgb(0,0,0)" stroke="none">TS2</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 3409,3347 L 4607,3347 4607,4163 3409,4163 3409,3347 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3659" y="3926"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 4607,3347 L 6019,3347 6019,4163 4607,4163 4607,3347 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4857" y="3926"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 6019,3347 L 7437,3347 7437,4163 6019,4163 6019,3347 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6269" y="3926"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 7437,3347 L 8874,3347 8874,4163 7437,4163 7437,3347 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7687" y="3926"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 3409,4163 L 4607,4163 4607,4979 3409,4979 3409,4163 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3659" y="4742"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 4607,4163 L 6019,4163 6019,4979 4607,4979 4607,4163 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4857" y="4742"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 6019,4163 L 7437,4163 7437,4979 6019,4979 6019,4163 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6269" y="4742"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 7437,4163 L 8874,4163 8874,4979 7437,4979 7437,4163 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7687" y="4742"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 3409,4979 L 4607,4979 4607,5795 3409,5795 3409,4979 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3659" y="5558"><tspan fill="rgb(0,0,0)" stroke="none">2</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 4607,4979 L 6019,4979 6019,5795 4607,5795 4607,4979 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4857" y="5558"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 6019,4979 L 7437,4979 7437,5795 6019,5795 6019,4979 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6269" y="5558"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 7437,4979 L 8874,4979 8874,5795 7437,5795 7437,4979 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7687" y="5558"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3400,2531 L 8883,2531"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3409,2522 L 3409,5804"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4607,2522 L 4607,5804"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 6019,2522 L 6019,5804"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 7437,2522 L 7437,5804"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 8874,2522 L 8874,5804"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3400,3347 L 8883,3347"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3400,4163 L 8883,4163"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3400,4979 L 8883,4979"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 3400,5795 L 8883,5795"/>
</g>
</g>
<g class="com.sun.star.drawing.TableShape">
<g>
<rect class="BoundingBox" stroke="none" fill="none" x="9336" y="3030" width="1292" height="2453"/>
<path fill="rgb(230,230,230)" stroke="none" d="M 9338,3032 L 10625,3032 10625,3848 9338,3848 9338,3032 Z"/>
<path fill="rgb(204,204,204)" stroke="none" d="M 9338,3848 L 10625,3848 10625,4664 9338,4664 9338,3848 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9588" y="4427"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 9338,4664 L 10625,4664 10625,5480 9338,5480 9338,4664 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9588" y="5243"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 9329,3032 L 10634,3032"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 9338,3023 L 9338,5489"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 10625,3023 L 10625,5489"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 9329,3848 L 10634,3848"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 9329,4664 L 10634,4664"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 9329,5480 L 10634,5480"/>
</g>
</g>
<g class="com.sun.star.drawing.TableShape">
<g>
<rect class="BoundingBox" stroke="none" fill="none" x="11068" y="3048" width="1276" height="2453"/>
<path fill="rgb(230,230,230)" stroke="none" d="M 11070,3050 L 12341,3050 12341,3866 11070,3866 11070,3050 Z"/>
<path fill="rgb(204,204,204)" stroke="none" d="M 11070,3866 L 12341,3866 12341,4682 11070,4682 11070,3866 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11320" y="4445"><tspan fill="rgb(0,0,0)" stroke="none">2</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 11070,4682 L 12341,4682 12341,5498 11070,5498 11070,4682 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11320" y="5261"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 11061,3050 L 12350,3050"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 11070,3041 L 11070,5507"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 12341,3041 L 12341,5507"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 11061,3866 L 12350,3866"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 11061,4682 L 12350,4682"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 11061,5498 L 12350,5498"/>
</g>
</g>
<g class="com.sun.star.drawing.TableShape">
<g>
<rect class="BoundingBox" stroke="none" fill="none" x="12809" y="3045" width="1276" height="2453"/>
<path fill="rgb(230,230,230)" stroke="none" d="M 12811,3047 L 14082,3047 14082,3863 12811,3863 12811,3047 Z"/>
<path fill="rgb(204,204,204)" stroke="none" d="M 12811,3863 L 14082,3863 14082,4679 12811,4679 12811,3863 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="13061" y="4442"><tspan fill="rgb(0,0,0)" stroke="none">2</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 12811,4679 L 14082,4679 14082,5495 12811,5495 12811,4679 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="13061" y="5258"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 12802,3047 L 14091,3047"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 12811,3038 L 12811,5504"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 14082,3038 L 14082,5504"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 12802,3863 L 14091,3863"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 12802,4679 L 14091,4679"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 12802,5495 L 14091,5495"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id8">
<rect class="BoundingBox" stroke="none" fill="none" x="2379" y="3664" width="1035" height="254"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 2397,3794 L 3229,3791"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 3413,3790 L 3212,3665 3213,3917 3413,3790 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id9">
<rect class="BoundingBox" stroke="none" fill="none" x="5681" y="6185" width="2324" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 5826,6203 L 5826,6203 C 5804,6203 5782,6209 5763,6220 5743,6231 5727,6247 5716,6267 5705,6286 5699,6308 5699,6330 L 5699,6838 5699,6839 C 5699,6861 5705,6883 5716,6902 5727,6922 5743,6938 5763,6949 5782,6960 5804,6966 5826,6966 L 7858,6966 7859,6966 C 7881,6966 7903,6960 7922,6949 7942,6938 7958,6922 7969,6902 7980,6883 7986,6861 7986,6839 L 7986,6330 7986,6330 7986,6330 C 7986,6308 7980,6286 7969,6267 7958,6247 7942,6231 7922,6220 7903,6209 7881,6203 7859,6203 L 5826,6203 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 5826,6203 L 5826,6203 C 5804,6203 5782,6209 5763,6220 5743,6231 5727,6247 5716,6267 5705,6286 5699,6308 5699,6330 L 5699,6838 5699,6839 C 5699,6861 5705,6883 5716,6902 5727,6922 5743,6938 5763,6949 5782,6960 5804,6966 5826,6966 L 7858,6966 7859,6966 C 7881,6966 7903,6960 7922,6949 7942,6938 7958,6922 7969,6902 7980,6883 7986,6861 7986,6839 L 7986,6330 7986,6330 7986,6330 C 7986,6308 7980,6286 7969,6267 7958,6247 7942,6231 7922,6220 7903,6209 7881,6203 7859,6203 L 5826,6203 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5974" y="6756"><tspan fill="rgb(0,0,0)" stroke="none">FIFO fill</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id10">
<rect class="BoundingBox" stroke="none" fill="none" x="6716" y="5804" width="253" height="400"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 6842,5822 L 6842,6019"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 6842,6203 L 6968,6002 6716,6002 6842,6203 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id11">
<rect class="BoundingBox" stroke="none" fill="none" x="7967" y="6566" width="1180" height="41"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 7985,6584 L 9128,6588"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id12">
<rect class="BoundingBox" stroke="none" fill="none" x="9618" y="5808" width="2324" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 9763,5826 L 9763,5826 C 9741,5826 9719,5832 9700,5843 9680,5854 9664,5870 9653,5890 9642,5909 9636,5931 9636,5953 L 9636,6461 9636,6462 C 9636,6484 9642,6506 9653,6525 9664,6545 9680,6561 9700,6572 9719,6583 9741,6589 9763,6589 L 11795,6589 11796,6589 C 11818,6589 11840,6583 11859,6572 11879,6561 11895,6545 11906,6525 11917,6506 11923,6484 11923,6462 L 11923,5953 11923,5953 11923,5953 C 11923,5931 11917,5909 11906,5890 11895,5870 11879,5854 11859,5843 11840,5832 11818,5826 11796,5826 L 9763,5826 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 9763,5826 L 9763,5826 C 9741,5826 9719,5832 9700,5843 9680,5854 9664,5870 9653,5890 9642,5909 9636,5931 9636,5953 L 9636,6461 9636,6462 C 9636,6484 9642,6506 9653,6525 9664,6545 9680,6561 9700,6572 9719,6583 9741,6589 9763,6589 L 11795,6589 11796,6589 C 11818,6589 11840,6583 11859,6572 11879,6561 11895,6545 11906,6525 11917,6506 11923,6484 11923,6462 L 11923,5953 11923,5953 11923,5953 C 11923,5931 11917,5909 11906,5890 11895,5870 11879,5854 11859,5843 11840,5832 11818,5826 11796,5826 L 9763,5826 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9909" y="6379"><tspan fill="rgb(0,0,0)" stroke="none">TS start</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id13">
<rect class="BoundingBox" stroke="none" fill="none" x="9764" y="5431" width="253" height="396"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 9890,5449 L 9890,5642"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 9890,5826 L 10016,5625 9764,5625 9890,5826 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id14">
<rect class="BoundingBox" stroke="none" fill="none" x="11542" y="5431" width="253" height="396"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11668,5449 L 11668,5642"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 11668,5826 L 11794,5625 11542,5625 11668,5826 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id15">
<rect class="BoundingBox" stroke="none" fill="none" x="12793" y="5808" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 12938,5826 L 12938,5826 C 12916,5826 12894,5832 12875,5843 12855,5854 12839,5870 12828,5890 12817,5909 12811,5931 12811,5953 L 12811,6461 12811,6462 C 12811,6484 12817,6506 12828,6525 12839,6545 12855,6561 12875,6572 12894,6583 12916,6589 12938,6589 L 14462,6589 14463,6589 C 14485,6589 14507,6583 14526,6572 14546,6561 14562,6545 14573,6525 14584,6506 14590,6484 14590,6462 L 14590,5953 14590,5953 14590,5953 C 14590,5931 14584,5909 14573,5890 14562,5870 14546,5854 14526,5843 14507,5832 14485,5826 14463,5826 L 12938,5826 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12938,5826 L 12938,5826 C 12916,5826 12894,5832 12875,5843 12855,5854 12839,5870 12828,5890 12817,5909 12811,5931 12811,5953 L 12811,6461 12811,6462 C 12811,6484 12817,6506 12828,6525 12839,6545 12855,6561 12875,6572 12894,6583 12916,6589 12938,6589 L 14462,6589 14463,6589 C 14485,6589 14507,6583 14526,6572 14546,6561 14562,6545 14573,6525 14584,6506 14590,6484 14590,6462 L 14590,5953 14590,5953 14590,5953 C 14590,5931 14584,5909 14573,5890 14562,5870 14546,5854 14526,5843 14507,5832 14485,5826 14463,5826 L 12938,5826 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12902" y="6379"><tspan fill="rgb(0,0,0)" stroke="none">TS end</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id16">
<rect class="BoundingBox" stroke="none" fill="none" x="934" y="4937" width="1464" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1184" y="5511"><tspan fill="rgb(0,0,0)" stroke="none">PTP</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id17">
<rect class="BoundingBox" stroke="none" fill="none" x="1082" y="2607" width="2078" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1332" y="3181"><tspan fill="rgb(0,0,0)" stroke="none">AXI lite</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id18">
<rect class="BoundingBox" stroke="none" fill="none" x="11904" y="6189" width="672" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11922,6207 L 12557,6207"/>
</g>
</g>
<g class="TextShape">
<g id="id19">
<rect class="BoundingBox" stroke="none" fill="none" x="9001" y="1845" width="1968" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9251" y="2419"><tspan fill="rgb(0,0,0)" stroke="none">Start 0</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id20">
<rect class="BoundingBox" stroke="none" fill="none" x="10652" y="1845" width="2048" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10902" y="2419"><tspan fill="rgb(0,0,0)" stroke="none">Start N</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id21">
<rect class="BoundingBox" stroke="none" fill="none" x="12684" y="1845" width="1523" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="12934" y="2419"><tspan fill="rgb(0,0,0)" stroke="none">Stop</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id22">
<rect class="BoundingBox" stroke="none" fill="none" x="5028" y="1845" width="2958" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5278" y="2419"><tspan fill="rgb(0,0,0)" stroke="none">Enable bits</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id23">
<rect class="BoundingBox" stroke="none" fill="none" x="9764" y="2633" width="253" height="396"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 9890,2651 L 9890,2844"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 9890,3028 L 10016,2827 9764,2827 9890,3028 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id24">
<rect class="BoundingBox" stroke="none" fill="none" x="11542" y="2637" width="253" height="396"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11668,2655 L 11668,2848"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 11668,3032 L 11794,2831 11542,2831 11668,3032 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id25">
<rect class="BoundingBox" stroke="none" fill="none" x="13320" y="2637" width="253" height="396"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 13446,2655 L 13446,2848"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 13446,3032 L 13572,2831 13320,2831 13446,3032 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id26">
<rect class="BoundingBox" stroke="none" fill="none" x="9109" y="2633" width="38" height="3974"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 9127,2651 L 9128,6588"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id27">
<rect class="BoundingBox" stroke="none" fill="none" x="9111" y="2633" width="2576" height="38"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 9129,2652 L 11668,2651"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id28">
<rect class="BoundingBox" stroke="none" fill="none" x="13320" y="5431" width="253" height="396"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 13446,5449 L 13446,5642"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 13446,5826 L 13572,5625 13320,5625 13446,5826 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id29">
<rect class="BoundingBox" stroke="none" fill="none" x="12538" y="2633" width="38" height="3593"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12556,2651 L 12557,6207"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id30">
<rect class="BoundingBox" stroke="none" fill="none" x="12539" y="2633" width="926" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12557,2651 L 13446,2651"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id31">
<rect class="BoundingBox" stroke="none" fill="none" x="11523" y="6843" width="3575" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11541,6969 L 14913,6969"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 15097,6969 L 14896,6843 14896,7095 15097,6969 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id32">
<rect class="BoundingBox" stroke="none" fill="none" x="11523" y="6570" width="37" height="418"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11541,6588 L 11541,6969"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id33">
<rect class="BoundingBox" stroke="none" fill="none" x="14190" y="6570" width="37" height="418"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 14208,6588 L 14208,6969"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id34">
<rect class="BoundingBox" stroke="none" fill="none" x="15079" y="6316" width="1816" height="1308"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 15308,6334 L 15309,6334 C 15272,6334 15235,6344 15203,6362 15171,6381 15144,6408 15125,6440 15107,6472 15097,6509 15097,6546 L 15097,7393 15097,7393 C 15097,7430 15107,7467 15125,7499 15144,7531 15171,7558 15203,7577 15235,7595 15272,7605 15309,7605 L 16664,7605 16664,7605 C 16701,7605 16738,7595 16770,7577 16802,7558 16829,7531 16848,7499 16866,7467 16876,7430 16876,7393 L 16876,6545 16876,6546 16876,6546 C 16876,6509 16866,6472 16848,6440 16829,6408 16802,6381 16770,6362 16738,6344 16701,6334 16664,6334 L 15308,6334 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 15308,6334 L 15309,6334 C 15272,6334 15235,6344 15203,6362 15171,6381 15144,6408 15125,6440 15107,6472 15097,6509 15097,6546 L 15097,7393 15097,7393 C 15097,7430 15107,7467 15125,7499 15144,7531 15171,7558 15203,7577 15235,7595 15272,7605 15309,7605 L 16664,7605 16664,7605 C 16701,7605 16738,7595 16770,7577 16802,7558 16829,7531 16848,7499 16866,7467 16876,7430 16876,7393 L 16876,6545 16876,6546 16876,6546 C 16876,6509 16866,6472 16848,6440 16829,6408 16802,6381 16770,6362 16738,6344 16701,6334 16664,6334 L 15308,6334 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="15670" y="6863"><tspan fill="rgb(0,0,0)" stroke="none">TX</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="15213" y="7418"><tspan fill="rgb(0,0,0)" stroke="none">Sched.</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id35">
<rect class="BoundingBox" stroke="none" fill="none" x="2887" y="7332" width="10324" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 2905,7350 L 13192,7350"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id36">
<rect class="BoundingBox" stroke="none" fill="none" x="6716" y="6969" width="253" height="400"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 6842,7350 L 6842,7153"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 6842,6969 L 6716,7170 6968,7170 6842,6969 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id37">
<rect class="BoundingBox" stroke="none" fill="none" x="9891" y="6588" width="253" height="781"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10017,7350 L 10017,6772"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 10017,6588 L 9891,6789 10143,6789 10017,6588 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id38">
<rect class="BoundingBox" stroke="none" fill="none" x="13066" y="6588" width="253" height="781"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 13192,7350 L 13192,6772"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 13192,6588 L 13066,6789 13318,6789 13192,6588 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id39">
<rect class="BoundingBox" stroke="none" fill="none" x="3032" y="5909" width="2459" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3282" y="6483"><tspan fill="rgb(0,0,0)" stroke="none">TS index</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id40">
<rect class="BoundingBox" stroke="none" fill="none" x="3032" y="6671" width="1968" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3282" y="7245"><tspan fill="rgb(0,0,0)" stroke="none">Timing</tspan></tspan></tspan></text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 51 KiB

View File

@ -0,0 +1,530 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="152.6mm" height="126.11mm" viewBox="1000 1108 15260 12611" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs>
<font id="EmbeddedFont_1" horiz-adv-x="2048">
<font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="441"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="y" horiz-adv-x="1024" d="M 191,-425 C 142,-425 100,-421 67,-414 L 67,-279 C 92,-283 120,-285 151,-285 263,-285 352,-203 417,-38 L 434,5 5,1082 197,1082 425,484 C 428,475 432,464 437,451 442,438 457,394 482,320 507,246 521,205 523,196 L 593,393 830,1082 1020,1082 604,0 C 559,-115 518,-201 479,-258 440,-314 398,-356 351,-384 304,-411 250,-425 191,-425 Z"/>
<glyph unicode="u" horiz-adv-x="883" d="M 314,1082 L 314,396 C 314,325 321,269 335,230 349,191 371,162 402,145 433,128 478,119 537,119 624,119 692,149 742,208 792,267 817,350 817,455 L 817,1082 997,1082 997,231 C 997,105 999,28 1003,0 L 833,0 C 832,3 832,12 831,27 830,42 830,59 829,78 828,97 826,132 825,185 L 822,185 C 781,110 733,58 679,27 624,-4 557,-20 476,-20 357,-20 271,10 216,69 161,128 133,225 133,361 L 133,1082 314,1082 Z"/>
<glyph unicode="t" horiz-adv-x="547" d="M 554,8 C 495,-8 434,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 474,127 509,132 554,141 L 554,8 Z"/>
<glyph unicode="s" horiz-adv-x="901" d="M 950,299 C 950,197 912,118 835,63 758,8 650,-20 511,-20 376,-20 273,2 200,47 127,91 79,160 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 602,117 669,131 712,159 754,187 775,229 775,285 775,328 760,362 731,389 702,416 654,438 589,455 L 460,489 C 357,516 283,542 240,568 196,593 162,624 137,661 112,698 100,743 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 759,862 732,899 689,925 645,950 586,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,783 283,758 299,738 315,718 339,701 370,687 401,673 467,654 568,629 663,605 732,583 774,563 816,542 849,520 874,495 898,470 917,442 930,410 943,377 950,340 950,299 Z"/>
<glyph unicode="r" horiz-adv-x="531" d="M 142,0 L 142,830 C 142,906 140,990 136,1082 L 306,1082 C 311,959 314,886 314,861 L 318,861 C 347,954 380,1017 417,1051 454,1085 507,1102 575,1102 599,1102 623,1099 648,1092 L 648,927 C 624,934 592,937 552,937 477,937 420,905 381,841 342,776 322,684 322,564 L 322,0 142,0 Z"/>
<glyph unicode="q" horiz-adv-x="953" d="M 484,-20 C 347,-20 246,26 182,119 118,212 86,351 86,536 86,913 219,1102 484,1102 566,1102 634,1088 687,1059 740,1030 785,981 821,914 L 823,914 C 823,934 824,969 827,1018 830,1067 832,1093 835,1096 L 1008,1096 C 1003,1057 1001,958 1001,801 L 1001,-425 821,-425 821,14 825,178 823,178 C 787,107 743,56 690,26 637,-5 569,-20 484,-20 Z M 821,554 C 821,695 798,799 752,867 706,935 633,969 532,969 441,969 375,935 335,867 295,799 275,691 275,542 275,391 295,282 336,217 376,152 441,119 530,119 632,119 706,155 752,228 798,301 821,409 821,554 Z"/>
<glyph unicode="p" horiz-adv-x="936" d="M 1053,546 C 1053,169 920,-20 655,-20 488,-20 376,43 319,168 L 314,168 C 317,163 318,106 318,-2 L 318,-425 138,-425 138,861 C 138,972 136,1046 132,1082 L 306,1082 C 307,1079 308,1070 309,1054 310,1037 312,1012 314,978 315,944 316,921 316,908 L 320,908 C 352,975 394,1024 447,1055 500,1086 569,1101 655,1101 788,1101 888,1056 954,967 1020,878 1053,737 1053,546 Z M 864,542 C 864,693 844,800 803,865 762,930 698,962 609,962 538,962 482,947 442,917 401,887 371,840 350,777 329,713 318,630 318,528 318,386 341,281 386,214 431,147 505,113 607,113 696,113 762,146 803,212 844,277 864,387 864,542 Z"/>
<glyph unicode="o" horiz-adv-x="988" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 407,-20 288,28 207,125 126,221 86,360 86,542 86,915 248,1102 571,1102 736,1102 858,1057 936,966 1014,875 1053,733 1053,542 Z M 864,542 C 864,691 842,800 798,868 753,935 679,969 574,969 469,969 393,935 346,866 299,797 275,689 275,542 275,399 298,292 345,221 391,149 464,113 563,113 671,113 748,148 795,217 841,286 864,395 864,542 Z"/>
<glyph unicode="n" horiz-adv-x="883" d="M 825,0 L 825,686 C 825,757 818,813 804,852 790,891 768,920 737,937 706,954 661,963 602,963 515,963 447,933 397,874 347,815 322,732 322,627 L 322,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 358,972 406,1025 461,1056 515,1087 582,1102 663,1102 782,1102 869,1073 924,1014 979,955 1006,857 1006,721 L 1006,0 825,0 Z"/>
<glyph unicode="m" horiz-adv-x="1448" d="M 768,0 L 768,686 C 768,791 754,863 725,903 696,943 645,963 570,963 493,963 433,934 388,875 343,816 321,734 321,627 L 321,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 356,974 400,1027 450,1057 500,1087 561,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 967,970 1013,1022 1066,1054 1119,1086 1183,1102 1258,1102 1367,1102 1447,1072 1497,1013 1546,954 1571,856 1571,721 L 1571,0 1393,0 1393,686 C 1393,791 1379,863 1350,903 1321,943 1270,963 1195,963 1116,963 1055,934 1012,876 968,817 946,734 946,627 L 946,0 768,0 Z"/>
<glyph unicode="l" horiz-adv-x="213" d="M 138,0 L 138,1484 318,1484 318,0 138,0 Z"/>
<glyph unicode="k" horiz-adv-x="919" d="M 816,0 L 450,494 318,385 318,0 138,0 138,1484 318,1484 318,557 793,1082 1004,1082 565,617 1027,0 816,0 Z"/>
<glyph unicode="i" horiz-adv-x="196" d="M 137,1312 L 137,1484 317,1484 317,1312 137,1312 Z M 137,0 L 137,1082 317,1082 317,0 137,0 Z"/>
<glyph unicode="h" horiz-adv-x="865" d="M 317,897 C 356,968 402,1020 457,1053 511,1086 580,1102 663,1102 780,1102 867,1073 923,1015 978,956 1006,858 1006,721 L 1006,0 825,0 825,686 C 825,762 818,819 804,856 790,893 767,920 735,937 703,954 659,963 602,963 517,963 450,934 399,875 348,816 322,737 322,638 L 322,0 142,0 142,1484 322,1484 322,1098 C 322,1057 321,1015 319,972 316,929 315,904 314,897 L 317,897 Z"/>
<glyph unicode="g" horiz-adv-x="953" d="M 548,-425 C 430,-425 336,-402 266,-356 196,-309 151,-243 131,-158 L 312,-132 C 324,-182 351,-220 392,-248 433,-274 486,-288 553,-288 732,-288 822,-183 822,27 L 822,201 820,201 C 786,132 739,80 680,45 621,10 551,-8 472,-8 339,-8 242,36 180,124 117,212 86,350 86,539 86,730 120,872 187,963 254,1054 355,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,917 825,952 828,1001 831,1050 833,1077 836,1082 L 1007,1082 C 1003,1046 1001,971 1001,858 L 1001,31 C 1001,-273 850,-425 548,-425 Z M 822,541 C 822,629 810,705 786,769 762,832 728,881 685,915 641,948 591,965 536,965 444,965 377,932 335,865 293,798 272,690 272,541 272,393 292,287 331,222 370,157 438,125 533,125 590,125 640,142 684,175 728,208 762,256 786,319 810,381 822,455 822,541 Z"/>
<glyph unicode="e" horiz-adv-x="988" d="M 276,503 C 276,379 302,283 353,216 404,149 479,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 954,65 807,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,727 129,864 213,959 296,1054 416,1102 571,1102 889,1102 1048,910 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 481,969 412,940 361,882 310,823 282,743 278,641 L 862,641 Z"/>
<glyph unicode="d" horiz-adv-x="953" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 821,1035 821,1484 1001,1484 1001,223 C 1001,110 1003,36 1007,0 L 835,0 C 833,11 831,35 829,74 826,113 825,146 825,174 L 821,174 Z M 275,542 C 275,391 295,282 335,217 375,152 440,119 530,119 632,119 706,154 752,225 798,296 821,405 821,554 821,697 798,802 752,869 706,936 633,969 532,969 441,969 376,936 336,869 295,802 275,693 275,542 Z"/>
<glyph unicode="c" horiz-adv-x="900" d="M 275,546 C 275,402 298,295 343,226 388,157 457,122 548,122 612,122 666,139 709,174 752,209 778,262 788,334 L 970,322 C 956,218 912,135 837,73 762,11 668,-20 553,-20 402,-20 286,28 207,124 127,219 87,359 87,542 87,724 127,863 207,959 287,1054 402,1102 551,1102 662,1102 754,1073 827,1016 900,959 945,880 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 451,961 382,929 339,866 296,803 275,696 275,546 Z"/>
<glyph unicode="b" horiz-adv-x="936" d="M 1053,546 C 1053,169 920,-20 655,-20 573,-20 505,-5 451,25 396,54 352,102 318,168 L 316,168 C 316,147 315,116 312,74 309,31 307,7 306,0 L 132,0 C 136,36 138,110 138,223 L 138,1484 318,1484 318,1061 C 318,1018 317,967 314,908 L 318,908 C 351,977 396,1027 451,1057 506,1087 574,1102 655,1102 792,1102 892,1056 957,964 1021,872 1053,733 1053,546 Z M 864,540 C 864,691 844,800 804,865 764,930 699,963 609,963 508,963 434,928 388,859 341,790 318,680 318,529 318,387 341,282 386,215 431,147 505,113 607,113 698,113 763,147 804,214 844,281 864,389 864,540 Z"/>
<glyph unicode="a" horiz-adv-x="1077" d="M 414,-20 C 305,-20 224,9 169,66 114,123 87,202 87,302 87,414 124,500 198,560 271,620 390,652 554,656 L 797,660 797,719 C 797,807 778,870 741,908 704,946 645,965 565,965 484,965 426,951 389,924 352,897 330,853 323,793 L 135,810 C 166,1005 310,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1097,111 1117,113 1139,118 L 1139,6 C 1094,-5 1047,-10 1000,-10 933,-10 885,8 855,43 824,78 807,132 803,207 L 797,207 C 751,124 698,66 637,32 576,-3 501,-20 414,-20 Z M 455,115 C 521,115 580,130 631,160 682,190 723,231 753,284 782,336 797,390 797,445 L 797,534 600,530 C 515,529 451,520 408,504 364,488 330,463 307,430 284,397 272,353 272,299 272,240 288,195 320,163 351,131 396,115 455,115 Z"/>
<glyph unicode="X" horiz-adv-x="1289" d="M 1112,0 L 689,616 257,0 46,0 582,732 87,1409 298,1409 690,856 1071,1409 1282,1409 800,739 1323,0 1112,0 Z"/>
<glyph unicode="W" horiz-adv-x="1941" d="M 1511,0 L 1283,0 1039,895 C 1023,951 1000,1051 969,1196 952,1119 937,1054 925,1002 913,950 822,616 652,0 L 424,0 9,1409 208,1409 461,514 C 491,402 519,287 544,168 560,241 579,321 600,408 621,495 713,828 877,1409 L 1060,1409 1305,532 C 1342,389 1372,267 1393,168 L 1402,203 C 1420,280 1435,342 1446,391 1457,439 1551,778 1727,1409 L 1926,1409 1511,0 Z"/>
<glyph unicode="T" horiz-adv-x="1183" d="M 720,1253 L 720,0 530,0 530,1253 46,1253 46,1409 1204,1409 1204,1253 720,1253 Z"/>
<glyph unicode="S" horiz-adv-x="1201" d="M 1272,389 C 1272,259 1221,158 1120,87 1018,16 875,-20 690,-20 347,-20 148,99 93,338 L 278,375 C 299,290 345,228 414,189 483,149 578,129 697,129 820,129 916,150 983,193 1050,235 1083,297 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 541,675 456,699 399,724 341,749 295,776 262,807 229,837 203,872 186,913 168,954 159,1000 159,1053 159,1174 205,1267 298,1332 390,1397 522,1430 694,1430 854,1430 976,1406 1061,1357 1146,1308 1205,1224 1239,1106 L 1051,1073 C 1030,1148 991,1202 933,1236 875,1269 795,1286 692,1286 579,1286 493,1267 434,1230 375,1193 345,1137 345,1063 345,1020 357,984 380,956 403,927 436,903 479,884 522,864 609,840 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
<glyph unicode="R" horiz-adv-x="1235" d="M 1164,0 L 798,585 359,585 359,0 168,0 168,1409 831,1409 C 990,1409 1112,1374 1199,1303 1285,1232 1328,1133 1328,1006 1328,901 1298,813 1237,742 1176,671 1091,626 984,607 L 1384,0 1164,0 Z M 1136,1004 C 1136,1086 1108,1149 1053,1192 997,1235 917,1256 812,1256 L 359,1256 359,736 820,736 C 921,736 999,760 1054,807 1109,854 1136,919 1136,1004 Z"/>
<glyph unicode="Q" horiz-adv-x="1412" d="M 1495,711 C 1495,512 1445,349 1345,221 1245,93 1106,17 928,-6 955,-90 991,-151 1036,-188 1080,-225 1136,-244 1204,-244 1241,-244 1279,-240 1319,-231 L 1319,-365 C 1257,-380 1198,-387 1141,-387 1040,-387 958,-358 893,-302 828,-244 774,-149 733,-16 601,-9 487,24 392,85 296,145 223,229 173,337 122,444 97,569 97,711 97,936 159,1113 282,1240 405,1367 577,1430 797,1430 940,1430 1065,1402 1170,1345 1275,1288 1356,1205 1412,1096 1467,987 1495,859 1495,711 Z M 1300,711 C 1300,886 1256,1024 1169,1124 1081,1224 957,1274 797,1274 636,1274 511,1225 423,1126 335,1027 291,889 291,711 291,534 336,394 425,291 514,187 637,135 795,135 958,135 1083,185 1170,286 1257,386 1300,528 1300,711 Z"/>
<glyph unicode="P" horiz-adv-x="1112" d="M 1258,985 C 1258,852 1215,746 1128,667 1041,588 922,549 773,549 L 359,549 359,0 168,0 168,1409 761,1409 C 919,1409 1041,1372 1128,1298 1215,1224 1258,1120 1258,985 Z M 1066,983 C 1066,1165 957,1256 738,1256 L 359,1256 359,700 746,700 C 959,700 1066,794 1066,983 Z"/>
<glyph unicode="O" horiz-adv-x="1412" d="M 1495,711 C 1495,564 1467,435 1411,324 1354,213 1273,128 1168,69 1063,10 938,-20 795,-20 650,-20 526,9 421,68 316,127 235,212 180,323 125,434 97,563 97,711 97,936 159,1113 282,1240 405,1367 577,1430 797,1430 940,1430 1065,1402 1170,1345 1275,1288 1356,1205 1412,1096 1467,987 1495,859 1495,711 Z M 1300,711 C 1300,886 1256,1024 1169,1124 1081,1224 957,1274 797,1274 636,1274 511,1225 423,1126 335,1027 291,889 291,711 291,534 336,394 425,291 514,187 637,135 795,135 958,135 1083,185 1170,286 1257,386 1300,528 1300,711 Z"/>
<glyph unicode="N" horiz-adv-x="1165" d="M 1082,0 L 328,1200 333,1103 338,936 338,0 168,0 168,1409 390,1409 1152,201 C 1144,332 1140,426 1140,485 L 1140,1409 1312,1409 1312,0 1082,0 Z"/>
<glyph unicode="M" horiz-adv-x="1394" d="M 1366,0 L 1366,940 C 1366,1044 1369,1144 1375,1240 1342,1121 1313,1027 1287,960 L 923,0 789,0 420,960 364,1130 331,1240 334,1129 338,940 338,0 168,0 168,1409 419,1409 794,432 C 807,393 820,351 833,306 845,261 853,228 857,208 862,235 874,275 891,330 908,384 919,418 925,432 L 1293,1409 1538,1409 1538,0 1366,0 Z"/>
<glyph unicode="I" horiz-adv-x="213" d="M 189,0 L 189,1409 380,1409 380,0 189,0 Z"/>
<glyph unicode="H" horiz-adv-x="1165" d="M 1121,0 L 1121,653 359,653 359,0 168,0 168,1409 359,1409 359,813 1121,813 1121,1409 1312,1409 1312,0 1121,0 Z"/>
<glyph unicode="G" horiz-adv-x="1359" d="M 103,711 C 103,940 164,1117 287,1242 410,1367 582,1430 804,1430 960,1430 1087,1404 1184,1351 1281,1298 1356,1214 1409,1098 L 1227,1044 C 1187,1124 1132,1182 1062,1219 991,1256 904,1274 799,1274 636,1274 512,1225 426,1127 340,1028 297,890 297,711 297,533 343,393 434,290 525,187 652,135 813,135 905,135 991,149 1071,177 1150,205 1215,243 1264,291 L 1264,545 843,545 843,705 1440,705 1440,219 C 1365,143 1274,84 1166,43 1057,1 940,-20 813,-20 666,-20 539,9 432,68 325,127 244,211 188,322 131,432 103,562 103,711 Z"/>
<glyph unicode="F" horiz-adv-x="1024" d="M 359,1253 L 359,729 1145,729 1145,571 359,571 359,0 168,0 168,1409 1169,1409 1169,1253 359,1253 Z"/>
<glyph unicode="E" horiz-adv-x="1130" d="M 168,0 L 168,1409 1237,1409 1237,1253 359,1253 359,801 1177,801 1177,647 359,647 359,156 1278,156 1278,0 168,0 Z"/>
<glyph unicode="D" horiz-adv-x="1235" d="M 1381,719 C 1381,574 1353,447 1296,338 1239,229 1159,145 1055,87 951,29 831,0 695,0 L 168,0 168,1409 634,1409 C 873,1409 1057,1349 1187,1230 1316,1110 1381,940 1381,719 Z M 1189,719 C 1189,894 1141,1027 1046,1119 950,1210 811,1256 630,1256 L 359,1256 359,153 673,153 C 776,153 867,176 946,221 1024,266 1084,332 1126,417 1168,502 1189,603 1189,719 Z"/>
<glyph unicode="C" horiz-adv-x="1324" d="M 792,1274 C 636,1274 515,1224 428,1124 341,1023 298,886 298,711 298,538 343,400 434,295 524,190 646,137 800,137 997,137 1146,235 1245,430 L 1401,352 C 1343,231 1262,138 1157,75 1052,12 930,-20 791,-20 649,-20 526,10 423,69 319,128 240,212 186,322 131,431 104,561 104,711 104,936 165,1112 286,1239 407,1366 575,1430 790,1430 940,1430 1065,1401 1166,1342 1267,1283 1341,1196 1388,1081 L 1207,1021 C 1174,1103 1122,1166 1050,1209 977,1252 891,1274 792,1274 Z"/>
<glyph unicode="B" horiz-adv-x="1112" d="M 1258,397 C 1258,272 1212,174 1121,105 1030,35 903,0 740,0 L 168,0 168,1409 680,1409 C 1011,1409 1176,1295 1176,1067 1176,984 1153,914 1106,857 1059,800 993,762 908,743 1020,730 1106,692 1167,631 1228,569 1258,491 1258,397 Z M 984,1044 C 984,1120 958,1174 906,1207 854,1240 779,1256 680,1256 L 359,1256 359,810 680,810 C 782,810 858,829 909,868 959,906 984,965 984,1044 Z M 1065,412 C 1065,578 948,661 715,661 L 359,661 359,153 730,153 C 847,153 932,175 985,218 1038,261 1065,326 1065,412 Z"/>
<glyph unicode="A" horiz-adv-x="1377" d="M 1167,0 L 1006,412 364,412 202,0 4,0 579,1409 796,1409 1362,0 1167,0 Z M 685,1265 L 676,1237 C 659,1182 635,1111 602,1024 L 422,561 949,561 768,1026 C 749,1072 731,1124 712,1182 L 685,1265 Z"/>
<glyph unicode="2" horiz-adv-x="954" d="M 103,0 L 103,127 C 137,205 179,274 228,334 277,393 328,447 382,496 436,544 490,589 543,630 596,671 643,713 686,754 729,795 763,839 790,884 816,929 829,981 829,1038 829,1115 806,1175 761,1218 716,1261 653,1282 572,1282 495,1282 432,1261 383,1220 333,1178 304,1119 295,1044 L 111,1061 C 124,1174 172,1263 255,1330 337,1397 443,1430 572,1430 714,1430 823,1397 900,1330 976,1263 1014,1167 1014,1044 1014,989 1002,935 977,881 952,827 914,773 865,719 816,665 721,581 582,468 505,405 444,349 399,299 354,248 321,200 301,153 L 1036,153 1036,0 103,0 Z"/>
<glyph unicode="1" horiz-adv-x="901" d="M 156,0 L 156,153 515,153 515,1237 197,1010 197,1180 530,1409 696,1409 696,153 1039,153 1039,0 156,0 Z"/>
<glyph unicode="0" horiz-adv-x="988" d="M 1059,705 C 1059,470 1018,290 935,166 852,42 729,-20 567,-20 405,-20 283,42 202,165 121,288 80,468 80,705 80,947 120,1128 199,1249 278,1370 402,1430 573,1430 739,1430 862,1369 941,1247 1020,1125 1059,944 1059,705 Z M 876,705 C 876,908 853,1056 806,1147 759,1238 681,1284 573,1284 462,1284 383,1239 335,1149 286,1059 262,911 262,705 262,505 287,359 336,266 385,173 462,127 569,127 675,127 753,174 802,269 851,364 876,509 876,705 Z"/>
<glyph unicode="-" horiz-adv-x="513" d="M 91,464 L 91,624 591,624 591,464 91,464 Z"/>
<glyph unicode=")" horiz-adv-x="565" d="M 555,528 C 555,335 525,162 465,9 404,-144 311,-289 186,-424 L 12,-424 C 137,-284 229,-136 287,19 345,174 374,344 374,530 374,716 345,887 287,1042 228,1197 137,1345 12,1484 L 186,1484 C 312,1348 405,1203 465,1050 525,896 555,723 555,532 L 555,528 Z"/>
<glyph unicode="(" horiz-adv-x="548" d="M 127,532 C 127,725 157,898 218,1051 278,1204 371,1349 496,1484 L 670,1484 C 545,1345 454,1198 396,1042 337,886 308,715 308,530 308,345 337,175 395,20 452,-135 544,-283 670,-424 L 496,-424 C 370,-288 277,-143 217,11 157,164 127,337 127,528 L 127,532 Z"/>
<glyph unicode=" " horiz-adv-x="564"/>
</font>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g class="Page">
<g class="com.sun.star.drawing.CustomShape">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="3140" y="1108" width="11087" height="12611"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 3396,1126 L 3397,1126 C 3355,1126 3314,1137 3277,1158 3241,1179 3211,1209 3190,1245 3169,1282 3158,1323 3158,1365 L 3158,13461 3158,13461 C 3158,13503 3169,13544 3190,13581 3211,13617 3241,13647 3277,13668 3314,13689 3355,13700 3397,13700 L 13969,13700 13969,13700 C 14011,13700 14052,13689 14089,13668 14125,13647 14155,13617 14176,13581 14197,13544 14208,13503 14208,13461 L 14208,1364 14208,1365 14208,1365 C 14208,1323 14197,1282 14176,1245 14155,1209 14125,1179 14089,1158 14052,1137 14011,1126 13969,1126 L 3396,1126 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 3396,1126 L 3397,1126 C 3355,1126 3314,1137 3277,1158 3241,1179 3211,1209 3190,1245 3169,1282 3158,1323 3158,1365 L 3158,13461 3158,13461 C 3158,13503 3169,13544 3190,13581 3211,13617 3241,13647 3277,13668 3314,13689 3355,13700 3397,13700 L 13969,13700 13969,13700 C 14011,13700 14052,13689 14089,13668 14125,13647 14155,13617 14176,13581 14197,13544 14208,13503 14208,13461 L 14208,1364 14208,1365 14208,1365 C 14208,1323 14197,1282 14176,1245 14155,1209 14125,1179 14089,1158 14052,1137 14011,1126 13969,1126 L 3396,1126 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3494" y="1786"><tspan fill="rgb(0,0,0)" stroke="none">Round-robin transmit scheduler</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id4">
<rect class="BoundingBox" stroke="none" fill="none" x="1109" y="7342" width="1816" height="1308"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 1338,7360 L 1339,7360 C 1302,7360 1265,7370 1233,7388 1201,7407 1174,7434 1155,7466 1137,7498 1127,7535 1127,7572 L 1127,8419 1127,8419 C 1127,8456 1137,8493 1155,8525 1174,8557 1201,8584 1233,8603 1265,8621 1302,8631 1339,8631 L 2694,8631 2694,8631 C 2731,8631 2768,8621 2800,8603 2832,8584 2859,8557 2878,8525 2896,8493 2906,8456 2906,8419 L 2906,7571 2906,7572 2906,7572 C 2906,7535 2896,7498 2878,7466 2859,7434 2832,7407 2800,7388 2768,7370 2731,7360 2694,7360 L 1338,7360 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 1338,7360 L 1339,7360 C 1302,7360 1265,7370 1233,7388 1201,7407 1174,7434 1155,7466 1137,7498 1127,7535 1127,7572 L 1127,8419 1127,8419 C 1127,8456 1137,8493 1155,8525 1174,8557 1201,8584 1233,8603 1265,8621 1302,8631 1339,8631 L 2694,8631 2694,8631 C 2731,8631 2768,8621 2800,8603 2832,8584 2859,8557 2878,8525 2896,8493 2906,8456 2906,8419 L 2906,7571 2906,7572 2906,7572 C 2906,7535 2896,7498 2878,7466 2859,7434 2832,7407 2800,7388 2768,7370 2731,7360 2694,7360 L 1338,7360 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1508" y="7889"><tspan fill="rgb(0,0,0)" stroke="none">TXQ</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1591" y="8444"><tspan fill="rgb(0,0,0)" stroke="none">Mgr</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id5">
<rect class="BoundingBox" stroke="none" fill="none" x="1000" y="5953" width="2078" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1250" y="6527"><tspan fill="rgb(0,0,0)" stroke="none">AXI lite</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id6">
<rect class="BoundingBox" stroke="none" fill="none" x="14444" y="6696" width="1816" height="1435"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 14695,6714 L 14695,6714 C 14654,6714 14614,6725 14578,6745 14543,6766 14514,6795 14493,6831 14473,6866 14462,6906 14462,6947 L 14462,7879 14462,7879 C 14462,7920 14473,7960 14493,7996 14514,8031 14543,8060 14578,8081 14614,8101 14654,8112 14695,8112 L 16008,8112 16008,8112 C 16049,8112 16089,8101 16125,8081 16160,8060 16189,8031 16210,7996 16230,7960 16241,7920 16241,7879 L 16241,6947 16241,6947 16241,6947 C 16241,6906 16230,6866 16210,6831 16189,6795 16160,6766 16125,6745 16089,6725 16049,6714 16008,6714 L 14695,6714 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 14695,6714 L 14695,6714 C 14654,6714 14614,6725 14578,6745 14543,6766 14514,6795 14493,6831 14473,6866 14462,6906 14462,6947 L 14462,7879 14462,7879 C 14462,7920 14473,7960 14493,7996 14514,8031 14543,8060 14578,8081 14614,8101 14654,8112 14695,8112 L 16008,8112 16008,8112 C 16049,8112 16089,8101 16125,8081 16160,8060 16189,8031 16210,7996 16230,7960 16241,7920 16241,7879 L 16241,6947 16241,6947 16241,6947 C 16241,6906 16230,6866 16210,6831 16189,6795 16160,6766 16125,6745 16089,6725 16049,6714 16008,6714 L 14695,6714 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="15036" y="7307"><tspan fill="rgb(0,0,0)" stroke="none">TX</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="14608" y="7862"><tspan fill="rgb(0,0,0)" stroke="none">engine</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id7">
<rect class="BoundingBox" stroke="none" fill="none" x="1108" y="8856" width="1816" height="1308"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 1337,8874 L 1338,8874 C 1301,8874 1264,8884 1232,8902 1200,8921 1173,8948 1154,8980 1136,9012 1126,9049 1126,9086 L 1126,9933 1126,9933 C 1126,9970 1136,10007 1154,10039 1173,10071 1200,10098 1232,10117 1264,10135 1301,10145 1338,10145 L 2693,10145 2693,10145 C 2730,10145 2767,10135 2799,10117 2831,10098 2858,10071 2877,10039 2895,10007 2905,9970 2905,9933 L 2905,9085 2905,9086 2905,9086 C 2905,9049 2895,9012 2877,8980 2858,8948 2831,8921 2799,8902 2767,8884 2730,8874 2693,8874 L 1337,8874 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 1337,8874 L 1338,8874 C 1301,8874 1264,8884 1232,8902 1200,8921 1173,8948 1154,8980 1136,9012 1126,9049 1126,9086 L 1126,9933 1126,9933 C 1126,9970 1136,10007 1154,10039 1173,10071 1200,10098 1232,10117 1264,10135 1301,10145 1338,10145 L 2693,10145 2693,10145 C 2730,10145 2767,10135 2799,10117 2831,10098 2858,10071 2877,10039 2895,10007 2905,9970 2905,9933 L 2905,9085 2905,9086 2905,9086 C 2905,9049 2895,9012 2877,8980 2858,8948 2831,8921 2799,8902 2767,8884 2730,8874 2693,8874 L 1337,8874 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1312" y="9403"><tspan fill="rgb(0,0,0)" stroke="none">Sched</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1682" y="9958"><tspan fill="rgb(0,0,0)" stroke="none">ctrl</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id8">
<rect class="BoundingBox" stroke="none" fill="none" x="12412" y="6970" width="2051" height="254"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12430,7098 L 14278,7096"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 14462,7096 L 14261,6970 14261,7222 14462,7096 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.TableShape">
<g>
<rect class="BoundingBox" stroke="none" fill="none" x="4761" y="2556" width="7814" height="3269"/>
<path fill="rgb(179,179,179)" stroke="none" d="M 4763,2558 L 6024,2558 6024,3374 4763,3374 4763,2558 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5013" y="3137"><tspan fill="rgb(0,0,0)" stroke="none">Ind</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 6024,2558 L 7279,2558 7279,3374 6024,3374 6024,2558 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6274" y="3137"><tspan fill="rgb(0,0,0)" stroke="none">En</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 7279,2558 L 8597,2558 8597,3374 7279,3374 7279,2558 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7529" y="3137"><tspan fill="rgb(0,0,0)" stroke="none">GE</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 8597,2558 L 9827,2558 9827,3374 8597,3374 8597,2558 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8847" y="3137"><tspan fill="rgb(0,0,0)" stroke="none">SE</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 9827,2558 L 11156,2558 11156,3374 9827,3374 9827,2558 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10077" y="3137"><tspan fill="rgb(0,0,0)" stroke="none">Act</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 11156,2558 L 12572,2558 12572,3374 11156,3374 11156,2558 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11406" y="3137"><tspan fill="rgb(0,0,0)" stroke="none">Sch</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 4763,3374 L 6024,3374 6024,4190 4763,4190 4763,3374 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5013" y="3953"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 6024,3374 L 7279,3374 7279,4190 6024,4190 6024,3374 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6274" y="3953"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 7279,3374 L 8597,3374 8597,4190 7279,4190 7279,3374 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7529" y="3953"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 8597,3374 L 9827,3374 9827,4190 8597,4190 8597,3374 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8847" y="3953"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 9827,3374 L 11156,3374 11156,4190 9827,4190 9827,3374 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10077" y="3953"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 11156,3374 L 12572,3374 12572,4190 11156,4190 11156,3374 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11406" y="3953"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 4763,4190 L 6024,4190 6024,5006 4763,5006 4763,4190 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5013" y="4769"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 6024,4190 L 7279,4190 7279,5006 6024,5006 6024,4190 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6274" y="4769"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 7279,4190 L 8597,4190 8597,5006 7279,5006 7279,4190 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7529" y="4769"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 8597,4190 L 9827,4190 9827,5006 8597,5006 8597,4190 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8847" y="4769"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 9827,4190 L 11156,4190 11156,5006 9827,5006 9827,4190 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10077" y="4769"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 11156,4190 L 12572,4190 12572,5006 11156,5006 11156,4190 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11406" y="4769"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 4763,5006 L 6024,5006 6024,5822 4763,5822 4763,5006 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5013" y="5585"><tspan fill="rgb(0,0,0)" stroke="none">2</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 6024,5006 L 7279,5006 7279,5822 6024,5822 6024,5006 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6274" y="5585"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 7279,5006 L 8597,5006 8597,5822 7279,5822 7279,5006 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7529" y="5585"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 8597,5006 L 9827,5006 9827,5822 8597,5822 8597,5006 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8847" y="5585"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 9827,5006 L 11156,5006 11156,5822 9827,5822 9827,5006 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10077" y="5585"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 11156,5006 L 12572,5006 12572,5822 11156,5822 11156,5006 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11406" y="5585"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4754,2558 L 12581,2558"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4763,2549 L 4763,5831"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 6024,2549 L 6024,5831"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 7279,2549 L 7279,5831"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 8597,2549 L 8597,5831"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 9827,2549 L 9827,5831"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 11156,2549 L 11156,5831"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 12572,2549 L 12572,5831"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4754,3374 L 12581,3374"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4754,4190 L 12581,4190"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4754,5006 L 12581,5006"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4754,5822 L 12581,5822"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id9">
<rect class="BoundingBox" stroke="none" fill="none" x="2379" y="6716" width="3067" height="253"/>
<path fill="none" stroke="rgb(0,169,51)" stroke-width="35" stroke-linejoin="round" d="M 2397,6842 L 5261,6842"/>
<path fill="rgb(0,169,51)" stroke="none" d="M 5445,6842 L 5244,6716 5244,6968 5445,6842 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id10">
<rect class="BoundingBox" stroke="none" fill="none" x="5572" y="1845" width="6129" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5822" y="2419"><tspan fill="rgb(0,0,0)" stroke="none">Queue state (Block RAM)</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id11">
<rect class="BoundingBox" stroke="none" fill="none" x="5426" y="6572" width="1816" height="1560"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 5697,6590 L 5698,6590 C 5653,6590 5610,6602 5571,6624 5532,6646 5500,6678 5478,6717 5456,6756 5444,6799 5444,6844 L 5444,7859 5444,7859 C 5444,7904 5456,7947 5478,7986 5500,8025 5532,8057 5571,8079 5610,8101 5653,8113 5698,8113 L 6969,8113 6969,8113 C 7014,8113 7057,8101 7096,8079 7135,8057 7167,8025 7189,7986 7211,7947 7223,7904 7223,7859 L 7222,6843 7223,6844 7223,6844 C 7223,6799 7211,6756 7189,6717 7167,6678 7135,6646 7096,6624 7057,6602 7014,6590 6969,6590 L 5697,6590 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 5697,6590 L 5698,6590 C 5653,6590 5610,6602 5571,6624 5532,6646 5500,6678 5478,6717 5456,6756 5444,6799 5444,6844 L 5444,7859 5444,7859 C 5444,7904 5456,7947 5478,7986 5500,8025 5532,8057 5571,8079 5610,8101 5653,8113 5698,8113 L 6969,8113 6969,8113 C 7014,8113 7057,8101 7096,8079 7135,8057 7167,8025 7189,7986 7211,7947 7223,7904 7223,7859 L 7222,6843 7223,6844 7223,6844 C 7223,6799 7211,6756 7189,6717 7167,6678 7135,6646 7096,6624 7057,6602 7014,6590 6969,6590 L 5697,6590 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5808" y="7245"><tspan fill="rgb(0,0,0)" stroke="none">Start</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6058" y="7800"><tspan fill="rgb(0,0,0)" stroke="none">op</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id12">
<rect class="BoundingBox" stroke="none" fill="none" x="6242" y="5828" width="253" height="781"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 6368,6590 L 6368,6012"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 6368,5828 L 6242,6029 6494,6029 6368,5828 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id13">
<rect class="BoundingBox" stroke="none" fill="none" x="4093" y="5864" width="2370" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4343" y="6438"><tspan fill="rgb(0,0,0)" stroke="none">RD Addr</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id14">
<rect class="BoundingBox" stroke="none" fill="none" x="9743" y="6572" width="2705" height="1560"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 10014,6590 L 10015,6590 C 9970,6590 9927,6602 9888,6624 9849,6646 9817,6678 9795,6717 9773,6756 9761,6799 9761,6844 L 9761,7859 9761,7859 C 9761,7904 9773,7947 9795,7986 9817,8025 9849,8057 9888,8079 9927,8101 9970,8113 10015,8113 L 12175,8113 12175,8113 C 12220,8113 12263,8101 12302,8079 12341,8057 12373,8025 12395,7986 12417,7947 12429,7904 12429,7859 L 12429,6843 12429,6844 12429,6844 C 12429,6799 12417,6756 12395,6717 12373,6678 12341,6646 12302,6624 12263,6602 12220,6590 12175,6590 L 10014,6590 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10014,6590 L 10015,6590 C 9970,6590 9927,6602 9888,6624 9849,6646 9817,6678 9795,6717 9773,6756 9761,6799 9761,6844 L 9761,7859 9761,7859 C 9761,7904 9773,7947 9795,7986 9817,8025 9849,8057 9888,8079 9927,8101 9970,8113 10015,8113 L 12175,8113 12175,8113 C 12220,8113 12263,8101 12302,8079 12341,8057 12373,8025 12395,7986 12417,7947 12429,7904 12429,7859 L 12429,6843 12429,6844 12429,6844 C 12429,6799 12417,6756 12395,6717 12373,6678 12341,6646 12302,6624 12263,6602 12220,6590 12175,6590 L 10014,6590 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10036" y="7245"><tspan fill="rgb(0,0,0)" stroke="none">Complete</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10820" y="7800"><tspan fill="rgb(0,0,0)" stroke="none">op</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id15">
<rect class="BoundingBox" stroke="none" fill="none" x="10527" y="5810" width="253" height="781"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10653,5828 L 10653,6406"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 10653,6590 L 10779,6389 10527,6389 10653,6590 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id16">
<rect class="BoundingBox" stroke="none" fill="none" x="8367" y="5828" width="2400" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8617" y="6402"><tspan fill="rgb(0,0,0)" stroke="none">RD Data</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id17">
<rect class="BoundingBox" stroke="none" fill="none" x="7586" y="6951" width="1816" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 7731,6969 L 7731,6969 C 7709,6969 7687,6975 7668,6986 7648,6997 7632,7013 7621,7033 7610,7052 7604,7074 7604,7096 L 7604,7604 7604,7605 C 7604,7627 7610,7649 7621,7668 7632,7688 7648,7704 7668,7715 7687,7726 7709,7732 7731,7732 L 9255,7732 9256,7732 C 9278,7732 9300,7726 9319,7715 9339,7704 9355,7688 9366,7668 9377,7649 9383,7627 9383,7605 L 9383,7096 9383,7096 9383,7096 C 9383,7074 9377,7052 9366,7033 9355,7013 9339,6997 9319,6986 9300,6975 9278,6969 9256,6969 L 7731,6969 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 7731,6969 L 7731,6969 C 7709,6969 7687,6975 7668,6986 7648,6997 7632,7013 7621,7033 7610,7052 7604,7074 7604,7096 L 7604,7604 7604,7605 C 7604,7627 7610,7649 7621,7668 7632,7688 7648,7704 7668,7715 7687,7726 7709,7732 7731,7732 L 9255,7732 9256,7732 C 9278,7732 9300,7726 9319,7715 9339,7704 9355,7688 9366,7668 9377,7649 9383,7627 9383,7605 L 9383,7096 9383,7096 9383,7096 C 9383,7074 9377,7052 9366,7033 9355,7013 9339,6997 9319,6986 9300,6975 9278,6969 9256,6969 L 7731,6969 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7860" y="7522"><tspan fill="rgb(0,0,0)" stroke="none">Delay</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id18">
<rect class="BoundingBox" stroke="none" fill="none" x="11289" y="5828" width="253" height="781"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11415,6590 L 11415,6012"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 11415,5828 L 11289,6029 11541,6029 11415,5828 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id19">
<rect class="BoundingBox" stroke="none" fill="none" x="11288" y="5828" width="1324" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11538" y="6402"><tspan fill="rgb(0,0,0)" stroke="none">WR</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.TableShape">
<g>
<rect class="BoundingBox" stroke="none" fill="none" x="5002" y="10191" width="7623" height="3269"/>
<path fill="rgb(179,179,179)" stroke="none" d="M 5004,10193 L 6228,10193 6228,11009 5004,11009 5004,10193 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5254" y="10772"><tspan fill="rgb(0,0,0)" stroke="none">Ind</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 6228,10193 L 7448,10193 7448,11009 6228,11009 6228,10193 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6478" y="10772"><tspan fill="rgb(0,0,0)" stroke="none">Act</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 7448,10193 L 8475,10193 8475,11009 7448,11009 7448,10193 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7698" y="10772"><tspan fill="rgb(0,0,0)" stroke="none">QI</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 8475,10193 L 9674,10193 9674,11009 8475,11009 8475,10193 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8725" y="10772"><tspan fill="rgb(0,0,0)" stroke="none">DB</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 9674,10193 L 10658,10193 10658,11009 9674,11009 9674,10193 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9924" y="10772"><tspan fill="rgb(0,0,0)" stroke="none">H</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 10658,10193 L 11642,10193 11642,11009 10658,11009 10658,10193 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10908" y="10772"><tspan fill="rgb(0,0,0)" stroke="none">N</tspan></tspan></tspan></text>
<path fill="rgb(179,179,179)" stroke="none" d="M 11642,10193 L 12622,10193 12622,11009 11642,11009 11642,10193 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11892" y="10772"><tspan fill="rgb(0,0,0)" stroke="none">P</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 5004,11009 L 6228,11009 6228,11825 5004,11825 5004,11009 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5254" y="11588"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 6228,11009 L 7448,11009 7448,11825 6228,11825 6228,11009 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6478" y="11588"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 7448,11009 L 8475,11009 8475,11825 7448,11825 7448,11009 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7698" y="11588"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 8475,11009 L 9674,11009 9674,11825 8475,11825 8475,11009 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8725" y="11588"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 9674,11009 L 10658,11009 10658,11825 9674,11825 9674,11009 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9924" y="11588"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 10658,11009 L 11642,11009 11642,11825 10658,11825 10658,11009 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10908" y="11588"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 11642,11009 L 12622,11009 12622,11825 11642,11825 11642,11009 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11892" y="11588"><tspan fill="rgb(0,0,0)" stroke="none">-</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 5004,11825 L 6228,11825 6228,12641 5004,12641 5004,11825 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5254" y="12404"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 6228,11825 L 7448,11825 7448,12641 6228,12641 6228,11825 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6478" y="12404"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 7448,11825 L 8475,11825 8475,12641 7448,12641 7448,11825 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7698" y="12404"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 8475,11825 L 9674,11825 9674,12641 8475,12641 8475,11825 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8725" y="12404"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 9674,11825 L 10658,11825 10658,12641 9674,12641 9674,11825 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9924" y="12404"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 10658,11825 L 11642,11825 11642,12641 10658,12641 10658,11825 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10908" y="12404"><tspan fill="rgb(0,0,0)" stroke="none">-</tspan></tspan></tspan></text>
<path fill="rgb(230,230,230)" stroke="none" d="M 11642,11825 L 12622,11825 12622,12641 11642,12641 11642,11825 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11892" y="12404"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 5004,12641 L 6228,12641 6228,13457 5004,13457 5004,12641 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5254" y="13220"><tspan fill="rgb(0,0,0)" stroke="none">2</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 6228,12641 L 7448,12641 7448,13457 6228,13457 6228,12641 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6478" y="13220"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 7448,12641 L 8475,12641 8475,13457 7448,13457 7448,12641 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7698" y="13220"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 8475,12641 L 9674,12641 9674,13457 8475,13457 8475,12641 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8725" y="13220"><tspan fill="rgb(0,0,0)" stroke="none">0</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 9674,12641 L 10658,12641 10658,13457 9674,13457 9674,12641 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9924" y="13220"><tspan fill="rgb(0,0,0)" stroke="none">1</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 10658,12641 L 11642,12641 11642,13457 10658,13457 10658,12641 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10908" y="13220"><tspan fill="rgb(0,0,0)" stroke="none">-</tspan></tspan></tspan></text>
<path fill="rgb(204,204,204)" stroke="none" d="M 11642,12641 L 12622,12641 12622,13457 11642,13457 11642,12641 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="11892" y="13220"><tspan fill="rgb(0,0,0)" stroke="none">-</tspan></tspan></tspan></text>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4995,10193 L 12631,10193"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 5004,10184 L 5004,13466"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 6228,10184 L 6228,13466"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 7448,10184 L 7448,13466"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 8475,10184 L 8475,13466"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 9674,10184 L 9674,13466"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 10658,10184 L 10658,13466"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 11642,10184 L 11642,13466"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 12622,10184 L 12622,13466"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4995,11009 L 12631,11009"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4995,11825 L 12631,11825"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4995,12641 L 12631,12641"/>
<path fill="none" stroke="rgb(255,255,255)" stroke-width="18" stroke-linejoin="round" d="M 4995,13457 L 12631,13457"/>
</g>
</g>
<g class="TextShape">
<g id="id20">
<rect class="BoundingBox" stroke="none" fill="none" x="6378" y="9465" width="3894" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="6628" y="10039"><tspan fill="rgb(0,0,0)" stroke="none">Operation table</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id21">
<rect class="BoundingBox" stroke="none" fill="none" x="4665" y="9364" width="8419" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 13065,9382 L 4683,9382"/>
</g>
</g>
<g class="TextShape">
<g id="id22">
<rect class="BoundingBox" stroke="none" fill="none" x="12812" y="6419" width="1271" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="13062" y="6993"><tspan fill="rgb(0,0,0)" stroke="none">req</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id23">
<rect class="BoundingBox" stroke="none" fill="none" x="12812" y="7054" width="1468" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="13062" y="7628"><tspan fill="rgb(0,0,0)" stroke="none">resp</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id24">
<rect class="BoundingBox" stroke="none" fill="none" x="7205" y="7224" width="400" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 7223,7350 L 7420,7350"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 7604,7350 L 7403,7224 7403,7476 7604,7350 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id25">
<rect class="BoundingBox" stroke="none" fill="none" x="9364" y="7224" width="400" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 9382,7350 L 9579,7350"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 9763,7350 L 9562,7224 9562,7476 9763,7350 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id26">
<rect class="BoundingBox" stroke="none" fill="none" x="4665" y="7479" width="781" height="254"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4683,7604 L 5260,7606"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 5444,7606 L 5243,7479 5243,7731 5444,7606 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id27">
<rect class="BoundingBox" stroke="none" fill="none" x="4663" y="7588" width="39" height="1813"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4683,9382 L 4681,7606"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id28">
<rect class="BoundingBox" stroke="none" fill="none" x="6208" y="8112" width="253" height="2178"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 6334,10271 L 6334,8296"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 6334,8112 L 6208,8313 6460,8313 6334,8112 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id29">
<rect class="BoundingBox" stroke="none" fill="none" x="10653" y="8112" width="253" height="2178"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 10779,10271 L 10779,8296"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 10779,8112 L 10653,8313 10905,8313 10779,8112 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id30">
<rect class="BoundingBox" stroke="none" fill="none" x="11161" y="8094" width="253" height="2178"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 11287,8112 L 11287,10087"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 11287,10271 L 11413,10070 11161,10070 11287,10271 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id31">
<rect class="BoundingBox" stroke="none" fill="none" x="13047" y="7713" width="1434" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 14462,7731 L 13065,7731"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id32">
<rect class="BoundingBox" stroke="none" fill="none" x="6951" y="8348" width="3086" height="800"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 7096,8366 L 7096,8366 C 7074,8366 7052,8372 7033,8383 7013,8394 6997,8410 6986,8430 6975,8449 6969,8471 6969,8493 L 6969,9001 6969,9002 C 6969,9024 6975,9046 6986,9065 6997,9085 7013,9101 7033,9112 7052,9123 7074,9129 7096,9129 L 9890,9129 9891,9129 C 9913,9129 9935,9123 9954,9112 9974,9101 9990,9085 10001,9065 10012,9046 10018,9024 10018,9002 L 10017,8493 10018,8493 10018,8493 C 10018,8471 10012,8449 10001,8430 9990,8410 9974,8394 9954,8383 9935,8372 9913,8366 9891,8366 L 7096,8366 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 7096,8366 L 7096,8366 C 7074,8366 7052,8372 7033,8383 7013,8394 6997,8410 6986,8430 6975,8449 6969,8471 6969,8493 L 6969,9001 6969,9002 C 6969,9024 6975,9046 6986,9065 6997,9085 7013,9101 7033,9112 7052,9123 7074,9129 7096,9129 L 9890,9129 9891,9129 C 9913,9129 9935,9123 9954,9112 9974,9101 9990,9085 10001,9065 10012,9046 10018,9024 10018,9002 L 10017,8493 10018,8493 10018,8493 C 10018,8471 10012,8449 10001,8430 9990,8410 9974,8394 9954,8383 9935,8372 9913,8366 9891,8366 L 7096,8366 Z"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7157" y="8919"><tspan fill="rgb(0,0,0)" stroke="none">Sched FIFO</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id33">
<rect class="BoundingBox" stroke="none" fill="none" x="4157" y="6970" width="1289" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4175,7096 L 5261,7096"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 5445,7096 L 5244,6970 5244,7222 5445,7096 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id34">
<rect class="BoundingBox" stroke="none" fill="none" x="4411" y="7224" width="1035" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4429,7350 L 5261,7350"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 5445,7350 L 5244,7224 5244,7476 5445,7350 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id35">
<rect class="BoundingBox" stroke="none" fill="none" x="2887" y="7967" width="1307" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4175,7985 L 2905,7985"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id36">
<rect class="BoundingBox" stroke="none" fill="none" x="2887" y="9491" width="1561" height="37"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4429,9509 L 2905,9509"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id37">
<rect class="BoundingBox" stroke="none" fill="none" x="4156" y="7078" width="38" height="926"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4175,7985 L 4174,7096"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id38">
<rect class="BoundingBox" stroke="none" fill="none" x="4411" y="7332" width="37" height="2196"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4429,9509 L 4429,7350"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id39">
<rect class="BoundingBox" stroke="none" fill="none" x="4919" y="7732" width="525" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4937,7858 L 5259,7858"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 5443,7858 L 5242,7732 5242,7984 5443,7858 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id40">
<rect class="BoundingBox" stroke="none" fill="none" x="4917" y="7840" width="39" height="926"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 4937,8747 L 4935,7858"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id41">
<rect class="BoundingBox" stroke="none" fill="none" x="4919" y="8729" width="2069" height="39"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 6969,8747 L 4937,8749"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id42">
<rect class="BoundingBox" stroke="none" fill="none" x="10017" y="8621" width="2686" height="253"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12684,8747 L 10201,8747"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 10017,8747 L 10218,8873 10218,8621 10017,8747 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id43">
<rect class="BoundingBox" stroke="none" fill="none" x="13047" y="7713" width="37" height="1688"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 13065,9382 L 13065,7731"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id44">
<rect class="BoundingBox" stroke="none" fill="none" x="12410" y="7586" width="293" height="39"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12684,7604 L 12428,7606"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id45">
<rect class="BoundingBox" stroke="none" fill="none" x="12666" y="7586" width="37" height="1180"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 12684,8747 L 12684,7604"/>
</g>
</g>
<g class="TextShape">
<g id="id46">
<rect class="BoundingBox" stroke="none" fill="none" x="3032" y="7306" width="1271" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3282" y="7880"><tspan fill="rgb(0,0,0)" stroke="none">DB</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id47">
<rect class="BoundingBox" stroke="none" fill="none" x="3032" y="8830" width="1439" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3282" y="9404"><tspan fill="rgb(0,0,0)" stroke="none">cmd</tspan></tspan></tspan></text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

View File

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="96.89mm" height="55.06mm" viewBox="1109 956 9689 5506" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs>
<font id="EmbeddedFont_1" horiz-adv-x="2048">
<font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="441"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="”" horiz-adv-x="547" d="M 607,1264 C 607,1202 601,1147 590,1098 579,1049 558,1001 528,952 L 407,952 C 470,1043 501,1130 501,1214 L 413,1214 413,1409 607,1409 607,1264 Z M 276,1264 C 276,1194 270,1135 257,1088 244,1040 225,995 198,952 L 75,952 C 138,1043 169,1130 169,1214 L 81,1214 81,1409 276,1409 276,1264 Z"/>
<glyph unicode="“" horiz-adv-x="547" d="M 407,952 L 407,1098 C 407,1161 413,1218 425,1268 437,1317 457,1364 485,1409 L 607,1409 C 544,1318 513,1231 513,1147 L 601,1147 601,952 407,952 Z M 75,952 L 75,1098 C 75,1163 81,1220 94,1269 106,1318 126,1364 155,1409 L 276,1409 C 213,1318 181,1230 181,1147 L 270,1147 270,952 75,952 Z"/>
<glyph unicode="y" horiz-adv-x="1024" d="M 191,-425 C 142,-425 100,-421 67,-414 L 67,-279 C 92,-283 120,-285 151,-285 263,-285 352,-203 417,-38 L 434,5 5,1082 197,1082 425,484 C 428,475 432,464 437,451 442,438 457,394 482,320 507,246 521,205 523,196 L 593,393 830,1082 1020,1082 604,0 C 559,-115 518,-201 479,-258 440,-314 398,-356 351,-384 304,-411 250,-425 191,-425 Z"/>
<glyph unicode="w" horiz-adv-x="1518" d="M 1174,0 L 965,0 776,765 740,934 C 734,904 725,861 712,805 699,748 631,480 508,0 L 300,0 -3,1082 175,1082 358,347 C 363,331 377,265 401,149 L 418,223 644,1082 837,1082 1026,339 1072,149 1103,288 1308,1082 1484,1082 1174,0 Z"/>
<glyph unicode="u" horiz-adv-x="883" d="M 314,1082 L 314,396 C 314,325 321,269 335,230 349,191 371,162 402,145 433,128 478,119 537,119 624,119 692,149 742,208 792,267 817,350 817,455 L 817,1082 997,1082 997,231 C 997,105 999,28 1003,0 L 833,0 C 832,3 832,12 831,27 830,42 830,59 829,78 828,97 826,132 825,185 L 822,185 C 781,110 733,58 679,27 624,-4 557,-20 476,-20 357,-20 271,10 216,69 161,128 133,225 133,361 L 133,1082 314,1082 Z"/>
<glyph unicode="t" horiz-adv-x="547" d="M 554,8 C 495,-8 434,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 474,127 509,132 554,141 L 554,8 Z"/>
<glyph unicode="s" horiz-adv-x="901" d="M 950,299 C 950,197 912,118 835,63 758,8 650,-20 511,-20 376,-20 273,2 200,47 127,91 79,160 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 602,117 669,131 712,159 754,187 775,229 775,285 775,328 760,362 731,389 702,416 654,438 589,455 L 460,489 C 357,516 283,542 240,568 196,593 162,624 137,661 112,698 100,743 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 759,862 732,899 689,925 645,950 586,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,783 283,758 299,738 315,718 339,701 370,687 401,673 467,654 568,629 663,605 732,583 774,563 816,542 849,520 874,495 898,470 917,442 930,410 943,377 950,340 950,299 Z"/>
<glyph unicode="r" horiz-adv-x="531" d="M 142,0 L 142,830 C 142,906 140,990 136,1082 L 306,1082 C 311,959 314,886 314,861 L 318,861 C 347,954 380,1017 417,1051 454,1085 507,1102 575,1102 599,1102 623,1099 648,1092 L 648,927 C 624,934 592,937 552,937 477,937 420,905 381,841 342,776 322,684 322,564 L 322,0 142,0 Z"/>
<glyph unicode="p" horiz-adv-x="936" d="M 1053,546 C 1053,169 920,-20 655,-20 488,-20 376,43 319,168 L 314,168 C 317,163 318,106 318,-2 L 318,-425 138,-425 138,861 C 138,972 136,1046 132,1082 L 306,1082 C 307,1079 308,1070 309,1054 310,1037 312,1012 314,978 315,944 316,921 316,908 L 320,908 C 352,975 394,1024 447,1055 500,1086 569,1101 655,1101 788,1101 888,1056 954,967 1020,878 1053,737 1053,546 Z M 864,542 C 864,693 844,800 803,865 762,930 698,962 609,962 538,962 482,947 442,917 401,887 371,840 350,777 329,713 318,630 318,528 318,386 341,281 386,214 431,147 505,113 607,113 696,113 762,146 803,212 844,277 864,387 864,542 Z"/>
<glyph unicode="o" horiz-adv-x="988" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 407,-20 288,28 207,125 126,221 86,360 86,542 86,915 248,1102 571,1102 736,1102 858,1057 936,966 1014,875 1053,733 1053,542 Z M 864,542 C 864,691 842,800 798,868 753,935 679,969 574,969 469,969 393,935 346,866 299,797 275,689 275,542 275,399 298,292 345,221 391,149 464,113 563,113 671,113 748,148 795,217 841,286 864,395 864,542 Z"/>
<glyph unicode="n" horiz-adv-x="883" d="M 825,0 L 825,686 C 825,757 818,813 804,852 790,891 768,920 737,937 706,954 661,963 602,963 515,963 447,933 397,874 347,815 322,732 322,627 L 322,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 358,972 406,1025 461,1056 515,1087 582,1102 663,1102 782,1102 869,1073 924,1014 979,955 1006,857 1006,721 L 1006,0 825,0 Z"/>
<glyph unicode="m" horiz-adv-x="1448" d="M 768,0 L 768,686 C 768,791 754,863 725,903 696,943 645,963 570,963 493,963 433,934 388,875 343,816 321,734 321,627 L 321,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 356,974 400,1027 450,1057 500,1087 561,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 967,970 1013,1022 1066,1054 1119,1086 1183,1102 1258,1102 1367,1102 1447,1072 1497,1013 1546,954 1571,856 1571,721 L 1571,0 1393,0 1393,686 C 1393,791 1379,863 1350,903 1321,943 1270,963 1195,963 1116,963 1055,934 1012,876 968,817 946,734 946,627 L 946,0 768,0 Z"/>
<glyph unicode="l" horiz-adv-x="213" d="M 138,0 L 138,1484 318,1484 318,0 138,0 Z"/>
<glyph unicode="i" horiz-adv-x="196" d="M 137,1312 L 137,1484 317,1484 317,1312 137,1312 Z M 137,0 L 137,1082 317,1082 317,0 137,0 Z"/>
<glyph unicode="h" horiz-adv-x="865" d="M 317,897 C 356,968 402,1020 457,1053 511,1086 580,1102 663,1102 780,1102 867,1073 923,1015 978,956 1006,858 1006,721 L 1006,0 825,0 825,686 C 825,762 818,819 804,856 790,893 767,920 735,937 703,954 659,963 602,963 517,963 450,934 399,875 348,816 322,737 322,638 L 322,0 142,0 142,1484 322,1484 322,1098 C 322,1057 321,1015 319,972 316,929 315,904 314,897 L 317,897 Z"/>
<glyph unicode="g" horiz-adv-x="953" d="M 548,-425 C 430,-425 336,-402 266,-356 196,-309 151,-243 131,-158 L 312,-132 C 324,-182 351,-220 392,-248 433,-274 486,-288 553,-288 732,-288 822,-183 822,27 L 822,201 820,201 C 786,132 739,80 680,45 621,10 551,-8 472,-8 339,-8 242,36 180,124 117,212 86,350 86,539 86,730 120,872 187,963 254,1054 355,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,917 825,952 828,1001 831,1050 833,1077 836,1082 L 1007,1082 C 1003,1046 1001,971 1001,858 L 1001,31 C 1001,-273 850,-425 548,-425 Z M 822,541 C 822,629 810,705 786,769 762,832 728,881 685,915 641,948 591,965 536,965 444,965 377,932 335,865 293,798 272,690 272,541 272,393 292,287 331,222 370,157 438,125 533,125 590,125 640,142 684,175 728,208 762,256 786,319 810,381 822,455 822,541 Z"/>
<glyph unicode="e" horiz-adv-x="988" d="M 276,503 C 276,379 302,283 353,216 404,149 479,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 954,65 807,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,727 129,864 213,959 296,1054 416,1102 571,1102 889,1102 1048,910 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 481,969 412,940 361,882 310,823 282,743 278,641 L 862,641 Z"/>
<glyph unicode="d" horiz-adv-x="953" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 821,1035 821,1484 1001,1484 1001,223 C 1001,110 1003,36 1007,0 L 835,0 C 833,11 831,35 829,74 826,113 825,146 825,174 L 821,174 Z M 275,542 C 275,391 295,282 335,217 375,152 440,119 530,119 632,119 706,154 752,225 798,296 821,405 821,554 821,697 798,802 752,869 706,936 633,969 532,969 441,969 376,936 336,869 295,802 275,693 275,542 Z"/>
<glyph unicode="c" horiz-adv-x="900" d="M 275,546 C 275,402 298,295 343,226 388,157 457,122 548,122 612,122 666,139 709,174 752,209 778,262 788,334 L 970,322 C 956,218 912,135 837,73 762,11 668,-20 553,-20 402,-20 286,28 207,124 127,219 87,359 87,542 87,724 127,863 207,959 287,1054 402,1102 551,1102 662,1102 754,1073 827,1016 900,959 945,880 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 451,961 382,929 339,866 296,803 275,696 275,546 Z"/>
<glyph unicode="b" horiz-adv-x="936" d="M 1053,546 C 1053,169 920,-20 655,-20 573,-20 505,-5 451,25 396,54 352,102 318,168 L 316,168 C 316,147 315,116 312,74 309,31 307,7 306,0 L 132,0 C 136,36 138,110 138,223 L 138,1484 318,1484 318,1061 C 318,1018 317,967 314,908 L 318,908 C 351,977 396,1027 451,1057 506,1087 574,1102 655,1102 792,1102 892,1056 957,964 1021,872 1053,733 1053,546 Z M 864,540 C 864,691 844,800 804,865 764,930 699,963 609,963 508,963 434,928 388,859 341,790 318,680 318,529 318,387 341,282 386,215 431,147 505,113 607,113 698,113 763,147 804,214 844,281 864,389 864,540 Z"/>
<glyph unicode="a" horiz-adv-x="1077" d="M 414,-20 C 305,-20 224,9 169,66 114,123 87,202 87,302 87,414 124,500 198,560 271,620 390,652 554,656 L 797,660 797,719 C 797,807 778,870 741,908 704,946 645,965 565,965 484,965 426,951 389,924 352,897 330,853 323,793 L 135,810 C 166,1005 310,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1097,111 1117,113 1139,118 L 1139,6 C 1094,-5 1047,-10 1000,-10 933,-10 885,8 855,43 824,78 807,132 803,207 L 797,207 C 751,124 698,66 637,32 576,-3 501,-20 414,-20 Z M 455,115 C 521,115 580,130 631,160 682,190 723,231 753,284 782,336 797,390 797,445 L 797,534 600,530 C 515,529 451,520 408,504 364,488 330,463 307,430 284,397 272,353 272,299 272,240 288,195 320,163 351,131 396,115 455,115 Z"/>
<glyph unicode="S" horiz-adv-x="1201" d="M 1272,389 C 1272,259 1221,158 1120,87 1018,16 875,-20 690,-20 347,-20 148,99 93,338 L 278,375 C 299,290 345,228 414,189 483,149 578,129 697,129 820,129 916,150 983,193 1050,235 1083,297 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 541,675 456,699 399,724 341,749 295,776 262,807 229,837 203,872 186,913 168,954 159,1000 159,1053 159,1174 205,1267 298,1332 390,1397 522,1430 694,1430 854,1430 976,1406 1061,1357 1146,1308 1205,1224 1239,1106 L 1051,1073 C 1030,1148 991,1202 933,1236 875,1269 795,1286 692,1286 579,1286 493,1267 434,1230 375,1193 345,1137 345,1063 345,1020 357,984 380,956 403,927 436,903 479,884 522,864 609,840 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
<glyph unicode="P" horiz-adv-x="1112" d="M 1258,985 C 1258,852 1215,746 1128,667 1041,588 922,549 773,549 L 359,549 359,0 168,0 168,1409 761,1409 C 919,1409 1041,1372 1128,1298 1215,1224 1258,1120 1258,985 Z M 1066,983 C 1066,1165 957,1256 738,1256 L 359,1256 359,700 746,700 C 959,700 1066,794 1066,983 Z"/>
<glyph unicode="N" horiz-adv-x="1165" d="M 1082,0 L 328,1200 333,1103 338,936 338,0 168,0 168,1409 390,1409 1152,201 C 1144,332 1140,426 1140,485 L 1140,1409 1312,1409 1312,0 1082,0 Z"/>
<glyph unicode="I" horiz-adv-x="213" d="M 189,0 L 189,1409 380,1409 380,0 189,0 Z"/>
<glyph unicode="C" horiz-adv-x="1324" d="M 792,1274 C 636,1274 515,1224 428,1124 341,1023 298,886 298,711 298,538 343,400 434,295 524,190 646,137 800,137 997,137 1146,235 1245,430 L 1401,352 C 1343,231 1262,138 1157,75 1052,12 930,-20 791,-20 649,-20 526,10 423,69 319,128 240,212 186,322 131,431 104,561 104,711 104,936 165,1112 286,1239 407,1366 575,1430 790,1430 940,1430 1065,1401 1166,1342 1267,1283 1341,1196 1388,1081 L 1207,1021 C 1174,1103 1122,1166 1050,1209 977,1252 891,1274 792,1274 Z"/>
<glyph unicode=" " horiz-adv-x="564"/>
</font>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g class="Page">
<g class="com.sun.star.drawing.CustomShape">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="1109" y="3267" width="9689" height="926"/>
<path fill="rgb(255,255,255)" stroke="none" d="M 5953,4174 L 1127,4174 1127,3285 10779,3285 10779,4174 5953,4174 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 5953,4174 L 1127,4174 1127,3285 10779,3285 10779,4174 5953,4174 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id4">
<rect class="BoundingBox" stroke="none" fill="none" x="8240" y="4175" width="253" height="527"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 8366,4683 L 8366,4359"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 8366,4175 L 8240,4376 8492,4376 8366,4175 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id5">
<rect class="BoundingBox" stroke="none" fill="none" x="2652" y="4175" width="253" height="527"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 2778,4683 L 2778,4359"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 2778,4175 L 2652,4376 2904,4376 2778,4175 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id6">
<rect class="BoundingBox" stroke="none" fill="none" x="5192" y="4175" width="253" height="527"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 5318,4683 L 5318,4359"/>
<path fill="rgb(0,0,0)" stroke="none" d="M 5318,4175 L 5192,4376 5444,4376 5318,4175 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id7">
<rect class="BoundingBox" stroke="none" fill="none" x="2760" y="3267" width="5625" height="926"/>
<path fill="rgb(221,221,221)" stroke="none" d="M 5572,4174 L 2778,4174 2778,3285 8366,3285 8366,4174 5572,4174 Z"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 5572,4174 L 2778,4174 2778,3285 8366,3285 8366,4174 5572,4174 Z"/>
</g>
</g>
<g class="TextShape">
<g id="id8">
<rect class="BoundingBox" stroke="none" fill="none" x="7096" y="4545" width="2514" height="1362"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7346" y="5119"><tspan fill="rgb(0,0,0)" stroke="none">Producer</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7594" y="5674"><tspan fill="rgb(0,0,0)" stroke="none">pointer</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id9">
<rect class="BoundingBox" stroke="none" fill="none" x="1264" y="4545" width="2785" height="1362"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1514" y="5119"><tspan fill="rgb(0,0,0)" stroke="none">Consumer</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1897" y="5674"><tspan fill="rgb(0,0,0)" stroke="none">pointer</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id10">
<rect class="BoundingBox" stroke="none" fill="none" x="3931" y="4545" width="2679" height="1917"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4211" y="5119"><tspan fill="rgb(0,0,0)" stroke="none"></tspan><tspan fill="rgb(0,0,0)" stroke="none">Shadow”</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4181" y="5674"><tspan fill="rgb(0,0,0)" stroke="none">consumer</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4511" y="6229"><tspan fill="rgb(0,0,0)" stroke="none">pointer</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id11">
<rect class="BoundingBox" stroke="none" fill="none" x="2759" y="2632" width="2578" height="419"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 5318,3032 C 5318,2936 5223,2841 5127,2841 L 4240,2841 C 4144,2841 4048,2745 4048,2650 4048,2745 3952,2841 3856,2841 L 2969,2841 C 2873,2841 2777,2936 2777,3032"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id12">
<rect class="BoundingBox" stroke="none" fill="none" x="2759" y="1616" width="5626" height="419"/>
<path fill="none" stroke="rgb(0,0,0)" stroke-width="35" stroke-linejoin="round" d="M 8366,2016 C 8366,1920 8286,1825 8206,1825 L 5733,1825 C 5653,1825 5572,1729 5572,1634 5572,1729 5491,1825 5411,1825 L 2939,1825 C 2858,1825 2777,1920 2777,2016"/>
</g>
</g>
<g class="TextShape">
<g id="id13">
<rect class="BoundingBox" stroke="none" fill="none" x="3286" y="956" width="4415" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3536" y="1530"><tspan fill="rgb(0,0,0)" stroke="none">Controlled by NIC</tspan></tspan></tspan></text>
</g>
</g>
<g class="TextShape">
<g id="id14">
<rect class="BoundingBox" stroke="none" fill="none" x="2585" y="1972" width="2988" height="807"/>
<text class="SVGTextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="2835" y="2546"><tspan fill="rgb(0,0,0)" stroke="none">In progress</tspan></tspan></tspan></text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -0,0 +1,626 @@
.. _gettingstarted:
===============
Getting Started
===============
Join the Corundum community
===========================
To stay up to date with the latest developments and get support, consider joining the `mailing list <https://groups.google.com/d/forum/corundum-nic>`_ and `Slack workspace <https://join.slack.com/t/corundumworkspace/shared_invite/zt-tj5azsbm-V9LV8L7ugSRDBpe2JiPKMA>`_.
Obtaining the source code
=========================
The main `upstream repository for Corundum <https://github.com/corundum/corundum/>`_ is located on `GitHub <https://github.com/>`_. There are two main ways to download the source code - downloading an archive, or cloning with git.
To clone via HTTPS, run::
$ git clone https://github.com/corundum/corundum.git
To clone via SSH, run::
$ git clone git@github.com:corundum/corundum.git
Alternatively, download a zip file::
$ wget https://github.com/corundum/corundum/archive/refs/heads/master.zip
$ unzip master.zip
Or a gzipped tar archive file::
$ wget https://github.com/corundum/corundum/archive/refs/heads/master.tar.gz
$ tar xvf master.tar.gz
There is also a `mirror of the repository <https://gitee.com/alexforencich/corundum/>`_ on `gitee <https://gitee.com/>`_, here are the equivalent commands::
$ git clone https://gitee.com/alexforencich/corundum.git
$ git clone git@gitee.com:alexforencich/corundum.git
$ wget https://gitee.com/alexforencich/corundum/repository/archive/master.zip
$ wget https://gitee.com/alexforencich/corundum/repository/archive/master.tar.gz
Setting up the FPGA development environment
===========================================
Corundum currently uses `Icarus Verilog <http://iverilog.icarus.com/>`_ and `cocotb <https://github.com/cocotb/cocotb>`_ for simulation. Linux is the recommended operating system for a development environment due to the use of symlinks (which can cause problems on Windows as they are not supported by windows filesystems), however WSL may also work well.
The required system packages are:
* Python 3 (``python`` or ``python3``, depending on distribution)
* Icarus Verilog (``iverilog``)
* GTKWave (``gtkwave``)
The required python packages are:
* ``cocotb``
* ``cocotb-bus``
* ``cocotb-test``
* ``cocotbext-axi``
* ``cocotbext-eth``
* ``cocotbext-pcie``
* ``pytest``
* ``scapy``
Recommended additional python packages:
* ``tox`` (to run pytest inside a python virtual environment)
* ``pytest-xdist`` (to run tests in parallel with `pytest -n auto`)
* ``pytest-sugar`` (makes pytest output a bit nicer)
It is recommended to install the required system packages via the system package manager (``apt``, ``yum``, ``pacman``, etc.) and then install the required Python packages as user packages via ``pip`` (or ``pip3``, depending on distribution).
Running tests
=============
Once the packages are installed, you should be able to run the tests. There are several ways to do this.
First, all tests can be run by runing ``tox`` in the repo root. In this case, tox will set up a python virtual environment and install all python dependencies inside the virtual environment. Additionally, tox will run pytest as ``pytest -n auto`` so it will run tests in parallel on multiple CPUs. ::
$ cd /path/to/corundum/
$ tox
py3 create: /home/alex/Projects/corundum/.tox/py3
py3 installdeps: pytest == 6.2.5, pytest-xdist == 2.4.0, pytest-split == 0.4.0, cocotb == 1.6.1, cocotb-test == 0.2.1, cocotbext-axi == 0.1.18, cocotbext-eth == 0.1.18, cocotbext-pcie == 0.1.20, scapy == 2.4.5
py3 installed: attrs==21.4.0,cocotb==1.6.1,cocotb-bus==0.2.1,cocotb-test==0.2.1,cocotbext-axi==0.1.18,cocotbext-eth==0.1.18,cocotbext-pcie==0.1.20,execnet==1.9.0,iniconfig==1.1.1,packaging==21.3,pluggy==1.0.0,py==1.11.0,pyparsing==3.0.7,pytest==6.2.5,pytest-forked==1.4.0,pytest-split==0.4.0,pytest-xdist==2.4.0,scapy==2.4.5,toml==0.10.2
py3 run-test-pre: PYTHONHASHSEED='4023917175'
py3 run-test: commands[0] | pytest -n auto
============================= test session starts ==============================
platform linux -- Python 3.9.7, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
cachedir: .tox/py3/.pytest_cache
rootdir: /home/alex/Projects/corundum, configfile: tox.ini, testpaths: fpga, fpga/app
plugins: forked-1.4.0, split-0.4.0, cocotb-test-0.2.1, xdist-2.4.0
gw0 [69] / gw1 [69] / gw2 [69] / gw3 [69] / gw4 [69] / gw5 [69] / gw6 [69] / gw7 [69] / gw8 [69] / gw9 [69] / gw10 [69] / gw11 [69] / gw12 [69] / gw13 [69] / gw14 [69] / gw15 [69] / gw16 [69] / gw17 [69] / gw18 [69] / gw19 [69] / gw20 [69] / gw21 [69] / gw22 [69] / gw23 [69] / gw24 [69] / gw25 [69] / gw26 [69] / gw27 [69] / gw28 [69] / gw29 [69] / gw30 [69] / gw31 [69] / gw32 [69] / gw33 [69] / gw34 [69] / gw35 [69] / gw36 [69] / gw37 [69] / gw38 [69] / gw39 [69] / gw40 [69] / gw41 [69] / gw42 [69] / gw43 [69] / gw44 [69] / gw45 [69] / gw46 [69] / gw47 [69] / gw48 [69] / gw49 [69] / gw50 [69] / gw51 [69] / gw52 [69] / gw53 [69] / gw54 [69] / gw55 [69] / gw56 [69] / gw57 [69] / gw58 [69] / gw59 [69] / gw60 [69] / gw61 [69] / gw62 [69] / gw63 [69]
..................................................................... [100%]
======================= 69 passed in 1534.87s (0:25:34) ========================
___________________________________ summary ____________________________________
py3: commands succeeded
congratulations :)
Second, all tests can be run by running ``pytest`` in the repo root. Running as ``pytest -n auto`` is recommended to run multiple tests in parallel on multiple CPUs. ::
$ cd /path/to/corundum/
$ pytest -n auto
============================= test session starts ==============================
platform linux -- Python 3.9.7, pytest-6.2.5, py-1.10.0, pluggy-0.13.1
rootdir: /home/alex/Projects/corundum, configfile: tox.ini, testpaths: fpga, fpga/app
plugins: split-0.3.0, parallel-0.1.0, cocotb-test-0.2.0, forked-1.3.0, metadata-1.11.0, xdist-2.4.0, html-3.1.1, cov-2.12.1, flake8-1.0.7
gw0 [69] / gw1 [69] / gw2 [69] / gw3 [69] / gw4 [69] / gw5 [69] / gw6 [69] / gw7 [69] / gw8 [69] / gw9 [69] / gw10 [69] / gw11 [69] / gw12 [69] / gw13 [69] / gw14 [69] / gw15 [69] / gw16 [69] / gw17 [69] / gw18 [69] / gw19 [69] / gw20 [69] / gw21 [69] / gw22 [69] / gw23 [69] / gw24 [69] / gw25 [69] / gw26 [69] / gw27 [69] / gw28 [69] / gw29 [69] / gw30 [69] / gw31 [69] / gw32 [69] / gw33 [69] / gw34 [69] / gw35 [69] / gw36 [69] / gw37 [69] / gw38 [69] / gw39 [69] / gw40 [69] / gw41 [69] / gw42 [69] / gw43 [69] / gw44 [69] / gw45 [69] / gw46 [69] / gw47 [69] / gw48 [69] / gw49 [69] / gw50 [69] / gw51 [69] / gw52 [69] / gw53 [69] / gw54 [69] / gw55 [69] / gw56 [69] / gw57 [69] / gw58 [69] / gw59 [69] / gw60 [69] / gw61 [69] / gw62 [69] / gw63 [69]
..................................................................... [100%]
======================= 69 passed in in 2032.42s (0:33:52) =====================
Third, groups of tests can be run by running ``pytest`` in a subdirectory. Running as ``pytest -n auto`` is recommended to run multiple tests in parallel on multiple CPUs. ::
$ cd /path/to/corundum/fpga/common/tb/rx_hash
$ pytest -n 4
============================= test session starts ==============================
platform linux -- Python 3.9.7, pytest-6.2.5, py-1.10.0, pluggy-0.13.1
rootdir: /home/alex/Projects/corundum, configfile: tox.ini
plugins: split-0.3.0, parallel-0.1.0, cocotb-test-0.2.0, forked-1.3.0, metadata-1.11.0, xdist-2.4.0, html-3.1.1, cov-2.12.1, flake8-1.0.7
gw0 [2] / gw1 [2] / gw2 [2] / gw3 [2]
.. [100%]
============================== 2 passed in 37.49s ==============================
Finally, individual tests can be run by runing ``make``. This method provides the capability of overriding parameters and enabling waveform dumps in FST format that are viewable in gtkwave. ::
$ cd /path/to/corundum/fpga/common/tb/rx_hash
$ make WAVES=1
make -f Makefile results.xml
make[1]: Entering directory '/home/alex/Projects/corundum/fpga/common/tb/rx_hash'
echo 'module iverilog_dump();' > iverilog_dump.v
echo 'initial begin' >> iverilog_dump.v
echo ' $dumpfile("rx_hash.fst");' >> iverilog_dump.v
echo ' $dumpvars(0, rx_hash);' >> iverilog_dump.v
echo 'end' >> iverilog_dump.v
echo 'endmodule' >> iverilog_dump.v
/usr/bin/iverilog -o sim_build/sim.vvp -D COCOTB_SIM=1 -s rx_hash -P rx_hash.DATA_WIDTH=64 -P rx_hash.KEEP_WIDTH=8 -s iverilog_dump -f sim_build/cmds.f -g2012 ../../rtl/rx_hash.v iverilog_dump.v
MODULE=test_rx_hash TESTCASE= TOPLEVEL=rx_hash TOPLEVEL_LANG=verilog \
/usr/bin/vvp -M /home/alex/.local/lib/python3.9/site-packages/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp -fst
-.--ns INFO cocotb.gpi ..mbed/gpi_embed.cpp:76 in set_program_name_in_venv Did not detect Python virtual environment. Using system-wide Python interpreter
-.--ns INFO cocotb.gpi ../gpi/GpiCommon.cpp:99 in gpi_print_registered_impl VPI registered
0.00ns INFO Running on Icarus Verilog version 11.0 (stable)
0.00ns INFO Running tests with cocotb v1.7.0.dev0 from /home/alex/.local/lib/python3.9/site-packages/cocotb
0.00ns INFO Seeding Python random module with 1643529566
0.00ns INFO Found test test_rx_hash.run_test
0.00ns INFO Found test test_rx_hash.run_test
0.00ns INFO Found test test_rx_hash.run_test
0.00ns INFO Found test test_rx_hash.run_test
0.00ns INFO Found test test_rx_hash.run_test
0.00ns INFO Found test test_rx_hash.run_test
0.00ns INFO Found test test_rx_hash.run_test
0.00ns INFO Found test test_rx_hash.run_test
0.00ns INFO running run_test (1/8)
0.00ns INFO AXI stream source
0.00ns INFO cocotbext-axi version 0.1.19
0.00ns INFO Copyright (c) 2020 Alex Forencich
0.00ns INFO https://github.com/alexforencich/cocotbext-axi
0.00ns INFO AXI stream source configuration:
0.00ns INFO Byte size: 8 bits
0.00ns INFO Data width: 64 bits (8 bytes)
0.00ns INFO AXI stream source signals:
0.00ns INFO tdata width: 64 bits
0.00ns INFO tdest: not present
0.00ns INFO tid: not present
0.00ns INFO tkeep width: 8 bits
0.00ns INFO tlast width: 1 bits
0.00ns INFO tready: not present
0.00ns INFO tuser: not present
0.00ns INFO tvalid width: 1 bits
0.00ns INFO Reset de-asserted
0.00ns INFO Reset de-asserted
FST info: dumpfile rx_hash.fst opened for output.
4.00ns INFO Reset asserted
4.00ns INFO Reset asserted
12.00ns INFO Reset de-asserted
12.00ns INFO Reset de-asserted
20.00ns INFO TX frame: AxiStreamFrame(tdata=bytearray(b'\xda\xd1\xd2\xd3\xd4\xd5ZQRSTU\x90\x00\x00'), tkeep=None, tid=None, tdest=None, tuser=None, sim_time_start=20000, sim_time_end=None)
28.00ns INFO TX frame: AxiStreamFrame(tdata=bytearray(b'\xda\xd1\xd2\xd3\xd4\xd5ZQRSTU\x90\x00\x00\x01'), tkeep=None, tid=None, tdest=None, tuser=None, sim_time_start=28000, sim_time_end=None)
36.00ns INFO TX frame: AxiStreamFrame(tdata=bytearray(b'\xda\xd1\xd2\xd3\xd4\xd5ZQRSTU\x90\x00\x00\x01\x02'), tkeep=None, tid=None, tdest=None, tuser=None, sim_time_start=36000, sim_time_end=None)
40.00ns INFO RX hash: 0x00000000 (expected: 0x00000000) type: HashType.0 (expected: HashType.0)
48.00ns INFO TX frame: AxiStreamFrame(tdata=bytearray(b'\xda\xd1\xd2\xd3\xd4\xd5ZQRSTU\x90\x00\x00\x01\x02\x03'), tkeep=None, tid=None, tdest=None, tuser=None, sim_time_start=48000, sim_time_end=None)
48.00ns INFO RX hash: 0x00000000 (expected: 0x00000000) type: HashType.0 (expected: HashType.0)
56.00ns INFO RX hash: 0x00000000 (expected: 0x00000000) type: HashType.0 (expected: HashType.0)
################ skip a very large number of lines ################
252652.01ns INFO TX frame: AxiStreamFrame(tdata=bytearray(b'\xda\xd1\xd2\xd3\xd4\xd5ZQRSTU\x08\x00E\x00\x00V\x00\x8b\x00\x00@\x06d\xff\n\x01\x00\x8b\n\x02\x00\x8b\x00\x8b\x10\x8b\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00ms\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-'), tkeep=None, tid=None, tdest=None, tuser=None, sim_time_start=252652007, sim_time_end=None)
252744.01ns INFO RX hash: 0xa2a55ee3 (expected: 0xa2a55ee3) type: HashType.TCP|IPV4 (expected: HashType.TCP|IPV4)
252860.01ns INFO TX frame: AxiStreamFrame(tdata=bytearray(b'\xda\xd1\xd2\xd3\xd4\xd5ZQRSTU\x08\x00E\x00\x00V\x00\x8c\x00\x00@\x06d\xfc\n\x01\x00\x8c\n\x02\x00\x8c\x00\x8c\x10\x8c\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00mo\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-'), tkeep=None, tid=None, tdest=None, tuser=None, sim_time_start=252860007, sim_time_end=None)
252952.01ns INFO RX hash: 0x6308c813 (expected: 0x6308c813) type: HashType.TCP|IPV4 (expected: HashType.TCP|IPV4)
252960.01ns INFO run_test passed
252960.01ns INFO **************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
**************************************************************************************
** test_rx_hash.run_test PASS 11144.00 1.14 9781.95 **
** test_rx_hash.run_test PASS 44448.00 3.80 11688.88 **
** test_rx_hash.run_test PASS 12532.00 1.40 8943.27 **
** test_rx_hash.run_test PASS 49984.00 4.42 11302.44 **
** test_rx_hash.run_test PASS 13088.00 1.54 8479.38 **
** test_rx_hash.run_test PASS 52208.00 4.62 11308.18 **
** test_rx_hash.run_test PASS 13940.00 1.65 8461.27 **
** test_rx_hash.run_test PASS 55616.00 5.03 11046.45 **
**************************************************************************************
** TESTS=8 PASS=8 FAIL=0 SKIP=0 252960.01 25.11 10073.76 **
**************************************************************************************
make[1]: Leaving directory '/home/alex/Projects/corundum/fpga/common/tb/rx_hash'
Setting up the FPGA build environment (Vivado)
==============================================
Building FPGA configurations for Xilinx devices requires `Vivado <https://www.xilinx.com/products/design-tools/vivado.html>`_. Linux is the recommended operating system for a build environment due to the use of symlinks (which can cause problems on Windows) and makefiles for build automation. Additionally, Vivado uses more CPU cores for building on Linux than on Windows. It is not recommended to run Vivado inside of a virtual machine as Vivado uses a significant amount of RAM during the build process. Download and install the appropriate version of Vivado. Make sure to install device support for your target device; support for other devices can be disabled to save disk space.
Licenses may be required, depending on the target device. A bare install of Vivado without any licenses runs in "WebPACK" mode and has limited device support. If your target device is on the `WebPACK device list <https://www.xilinx.com/products/design-tools/vivado/vivado-webpack.html#architecture>`_, then no Vivado license is required. Otherwise, you will need access to a Vivado license to build the design.
Additionally, the 100G MAC IP cores on UltraScale and UltraScale+ require separate licenses. These licenses are free of charge, and can be generated for `UltraScale <https://www.xilinx.com/products/intellectual-property/cmac.html>`_ and `UltraScale+ <https://www.xilinx.com/products/intellectual-property/cmac_usplus.html>`_. If your target design uses the 100G CMAC IP, then you will need one of these licenses to build the design.
For example: if you want to build a 100G design for an Alveo U50, you will not need a Vivado license as the U50 is supported under WebPACK, but you will need to generate a (free-of-charge) license for the CMAC IP for UltraScale+.
Before building a design with Vivado, you'll have to source the appropriate settings file. For example::
$ source /opt/Xilinx/Vivado/2020.2/settings64.sh
$ make
Building the FPGA configuration
===============================
Each design contains a set of makefiles for automating the build process. To use the makefile, simply source the settings file for the required toolchain and then run ``make``. Note that the repository makes significant use of symbolic links, so it is highly recommended to build the design under Linux.
For example::
$ cd /path/to/corundum/fpga/mqnic/[board]/fpga_[variant]/fpga
$ source /opt/Xilinx/Vivado/2020.2/settings64.sh
$ make
Building the driver
===================
To build the driver, you will first need to install the required compiler and kernel source code packages. After these packages are installed, simply run ``make``. ::
$ cd /path/to/corundum/modules/mqnic
$ make
Note that the driver currently does not support RHEL, centos, and related distributions that use very old and significantly modified kernels where the reported kernel version number is not a reliable of the internal kernel API.
Building the userspace tools
============================
To build the driver, you will first need to install the required compiler packages. After these packages are installed, simply run ``make``. ::
$ cd /path/to/corundum/utils
$ make
Loading the FPGA design
=======================
There are three main ways for loading Corundum on to an FPGA board. The first is via JTAG, into volatile FPGA configuration memory. This is best for development and debugging, especially when complemented with a baseline design with the same PCIe interface configuration stored in flash. The second is via indirect JTAG, into nonvolatile on-card flash memory. This is quite slow. The third is via PCI express, into nonvolatile on-card memory. This is the fastest method of programming the flash, but it requires the board to already be running the Corundum design.
For a card that's not already running Corundum, there are two options for programming the flash. The first is to use indirect JTAG, but this is very slow. The second is to first load the design via JTAG into volatile configuration memory, then perform a warm reboot, and finally write the design into flash via PCIe with the ``mqnic-fw`` utility.
Loading the design via JTAG into volatile configuration memory with Vivado is straightforward: install the card into a host computer, attach the JTAG cable, power up the host computer, and use Vivado to connect and load the bit file into the FPGA. When using the makefile, run ``make program`` to program the device. If physical access is a problem, it is possible to run a hardware server instance on the host computer and connect to the hardware server over the network. Once the design is loaded into the FPGA, perform either a hot reset (via ``pcie_hot_reset.sh`` or ``mqnic-fw -t``, but only if the card was enumerated at boot and the PCIe configuration has not changed) or a warm reboot.
Loading the design via indirect JTAG into nonvolatile memory with Vivado requires basically the same steps as loading it into volatile configuration memory, the main difference is that the configuration flash image must first be generated by running ``make fpga.mcs`` after using make to generate the bit file. Once this file is generated, connect with the hardware manager, add the configuration memory device (check the makefile for the part number), and program the flash. After the programming operation is complete, boot the FPGA from the configuration memory, either via Vivado (right click -> boot from configuration memory) or by performing a cold reboot (full shut down, then power on). When using the makefile, run ``make flash`` to generate the flash images, program the flash via indirect JTAG, and boot the FPGA from the configuration memory. Finally, reboot the host computer to re-enumerate the PCIe bus.
Loading the design via PCI express is straightforward: use the ``mqnic-fw`` utility to load the bit file into flash, then trigger an FPGA reboot to load the new design. This does not require the kernel module to be loaded. With the kernel module loaded, point ``mqnic-fw`` either to ``/dev/mqnic<n>`` or to one of the associated network interfaces. Without the kernel module loaded, point ``mqnic-fw`` either to the raw PCIe ID, or to ``/sys/bus/pci/devices/<pcie-id>/resource0``; check ``lspci`` for the PCIe ID. Use ``-w`` to specify the bit file to load, then ``-b`` to command the FPGA to reset and reload its configuration from flash. You can also use ``-t`` to trigger a hot reset to reset the design.
Query device information with ``mqnic-fw``, with no kernel module loaded::
$ sudo ./mqnic-fw -d 81:00.0
PCIe ID (device): 0000:81:00.0
PCIe ID (upstream port): 0000:80:01.1
FPGA ID: 0x04b77093
FPGA part: XCU50
FW ID: 0x00000000
FW version: 0.0.1.0
Board ID: 0x10ee9032
Board version: 1.0.0.0
Build date: 2022-01-05 08:33:23 UTC (raw 0x61d557d3)
Git hash: ddd7e639
Release info: 00000000
Flash type: SPI
Flash format: 0x00048100
Data width: 4
Manufacturer ID: 0x20
Memory type: 0xbb
Memory capacity: 0x21
Flash size: 128 MB
Write buffer size: 256 B
Erase block size: 4096 B
Flash segment 0: start 0x00000000 length 0x01002000
Flash segment 1: start 0x01002000 length 0x06ffe000
Selected: segment 1 start 0x01002000 length 0x06ffe000
Write design into nonvolatile flash memory with ``mqnic-fw``, with no kernel module loaded::
$ sudo ./mqnic-fw -d 81:00.0 -w ../fpga/mqnic/AU50/fpga_100g/fpga/fpga.bit
PCIe ID (device): 0000:81:00.0
PCIe ID (upstream port): 0000:80:01.1
FPGA ID: 0x04b77093
FPGA part: XCU50
FW ID: 0x00000000
FW version: 0.0.1.0
Board ID: 0x10ee9032
Board version: 1.0.0.0
Build date: 2022-01-05 08:33:23 UTC (raw 0x61d557d3)
Git hash: ddd7e639
Release info: 00000000
Flash type: SPI
Flash format: 0x00048100
Data width: 4
Manufacturer ID: 0x20
Memory type: 0xbb
Memory capacity: 0x21
Flash size: 128 MB
Write buffer size: 256 B
Erase block size: 4096 B
Flash segment 0: start 0x00000000 length 0x01002000
Flash segment 1: start 0x01002000 length 0x06ffe000
Selected: segment 1 start 0x01002000 length 0x06ffe000
Erasing flash...
Start address: 0x01002000
Length: 0x01913000
Erase address 0x02910000, length 0x00005000 (99%)
Writing flash...
Start address: 0x01002000
Length: 0x01913000
Write address 0x02910000, length 0x00005000 (99%)
Verifying flash...
Start address: 0x01002000
Length: 0x01913000
Read address 0x02910000, length 0x00005000 (99%)
Programming succeeded!
Reboot FPGA to load design from flash with ``mqnic-fw``, with no kernel module loaded::
$ sudo ./mqnic-fw -d 81:00.0 -b
PCIe ID (device): 0000:81:00.0
PCIe ID (upstream port): 0000:80:01.1
FPGA ID: 0x04b77093
FPGA part: XCU50
FW ID: 0x00000000
FW version: 0.0.1.0
Board ID: 0x10ee9032
Board version: 1.0.0.0
Build date: 2022-01-05 08:33:23 UTC (raw 0x61d557d3)
Git hash: ddd7e639
Release info: 00000000
Flash type: SPI
Flash format: 0x00048100
Data width: 4
Manufacturer ID: 0x20
Memory type: 0xbb
Memory capacity: 0x21
Flash size: 128 MB
Write buffer size: 256 B
Erase block size: 4096 B
Flash segment 0: start 0x00000000 length 0x01002000
Flash segment 1: start 0x01002000 length 0x06ffe000
Selected: segment 1 start 0x01002000 length 0x06ffe000
Preparing to reset device...
Disabling PCIe fatal error reporting on port...
No driver bound
Triggering IPROG to reload FPGA...
Removing device...
Performing hot reset on upstream port...
Rescanning on upstream port...
Success, device is online!
Loading the kernel module
=========================
Once the kernel module is built, load it with ``insmod``::
$ sudo insmod mqnic.ko
When the driver loads, it will print some debug information::
[ 1502.394486] mqnic 0000:81:00.0: mqnic PCI probe
[ 1502.394494] mqnic 0000:81:00.0: Vendor: 0x1234
[ 1502.394496] mqnic 0000:81:00.0: Device: 0x1001
[ 1502.394498] mqnic 0000:81:00.0: Subsystem vendor: 0x10ee
[ 1502.394500] mqnic 0000:81:00.0: Subsystem device: 0x9032
[ 1502.394501] mqnic 0000:81:00.0: Class: 0x020000
[ 1502.394504] mqnic 0000:81:00.0: PCI ID: 0000:81:00.0
[ 1502.394511] mqnic 0000:81:00.0: Max payload size: 512 bytes
[ 1502.394513] mqnic 0000:81:00.0: Max read request size: 512 bytes
[ 1502.394515] mqnic 0000:81:00.0: Link capability: gen 3 x16
[ 1502.394516] mqnic 0000:81:00.0: Link status: gen 3 x16
[ 1502.394518] mqnic 0000:81:00.0: Relaxed ordering: enabled
[ 1502.394520] mqnic 0000:81:00.0: Phantom functions: disabled
[ 1502.394521] mqnic 0000:81:00.0: Extended tags: enabled
[ 1502.394522] mqnic 0000:81:00.0: No snoop: enabled
[ 1502.394523] mqnic 0000:81:00.0: NUMA node: 1
[ 1502.394531] mqnic 0000:81:00.0: 126.016 Gb/s available PCIe bandwidth (8.0 GT/s PCIe x16 link)
[ 1502.394554] mqnic 0000:81:00.0: enabling device (0000 -> 0002)
[ 1502.394587] mqnic 0000:81:00.0: Control BAR size: 16777216
[ 1502.396014] mqnic 0000:81:00.0: Device-level register blocks:
[ 1502.396016] mqnic 0000:81:00.0: type 0xffffffff (v 0.0.1.0)
[ 1502.396019] mqnic 0000:81:00.0: type 0x0000c000 (v 0.0.1.0)
[ 1502.396021] mqnic 0000:81:00.0: type 0x0000c004 (v 0.0.1.0)
[ 1502.396023] mqnic 0000:81:00.0: type 0x0000c080 (v 0.0.1.0)
[ 1502.396025] mqnic 0000:81:00.0: type 0x0000c120 (v 0.0.1.0)
[ 1502.396027] mqnic 0000:81:00.0: type 0x0000c140 (v 0.0.1.0)
[ 1502.396029] mqnic 0000:81:00.0: type 0x0000c150 (v 0.0.1.0)
[ 1502.396038] mqnic 0000:81:00.0: FPGA ID: 0x04b77093
[ 1502.396040] mqnic 0000:81:00.0: FW ID: 0x00000000
[ 1502.396041] mqnic 0000:81:00.0: FW version: 0.0.1.0
[ 1502.396043] mqnic 0000:81:00.0: Board ID: 0x10ee9032
[ 1502.396044] mqnic 0000:81:00.0: Board version: 1.0.0.0
[ 1502.396046] mqnic 0000:81:00.0: Build date: 2022-03-03 07:39:57 UTC (raw: 0x622070cd)
[ 1502.396049] mqnic 0000:81:00.0: Git hash: 8851b3b1
[ 1502.396051] mqnic 0000:81:00.0: Release info: 00000000
[ 1502.396056] mqnic 0000:81:00.0: IF offset: 0x00000000
[ 1502.396057] mqnic 0000:81:00.0: IF count: 1
[ 1502.396059] mqnic 0000:81:00.0: IF stride: 0x01000000
[ 1502.396060] mqnic 0000:81:00.0: IF CSR offset: 0x00080000
[ 1502.396065] mqnic 0000:81:00.0: Resetting Alveo CMS
[ 1502.613317] mqnic 0000:81:00.0: Read 4 MACs from Alveo BMC
[ 1502.624743] mqnic 0000:81:00.0: registered PHC (index 5)
[ 1502.624748] mqnic 0000:81:00.0: Creating interface 0
[ 1502.624798] mqnic 0000:81:00.0: Interface-level register blocks:
[ 1502.624799] mqnic 0000:81:00.0: type 0x0000c001 (v 0.0.2.0)
[ 1502.624801] mqnic 0000:81:00.0: type 0x0000c010 (v 0.0.1.0)
[ 1502.624803] mqnic 0000:81:00.0: type 0x0000c020 (v 0.0.1.0)
[ 1502.624804] mqnic 0000:81:00.0: type 0x0000c030 (v 0.0.1.0)
[ 1502.624805] mqnic 0000:81:00.0: type 0x0000c021 (v 0.0.1.0)
[ 1502.624806] mqnic 0000:81:00.0: type 0x0000c031 (v 0.0.1.0)
[ 1502.624807] mqnic 0000:81:00.0: type 0x0000c003 (v 0.0.1.0)
[ 1502.624811] mqnic 0000:81:00.0: IF features: 0x00000711
[ 1502.624812] mqnic 0000:81:00.0: Max TX MTU: 9214
[ 1502.624813] mqnic 0000:81:00.0: Max RX MTU: 9214
[ 1502.624816] mqnic 0000:81:00.0: Event queue offset: 0x00100000
[ 1502.624817] mqnic 0000:81:00.0: Event queue count: 32
[ 1502.624818] mqnic 0000:81:00.0: Event queue stride: 0x00000020
[ 1502.624822] mqnic 0000:81:00.0: TX queue offset: 0x00200000
[ 1502.624823] mqnic 0000:81:00.0: TX queue count: 8192
[ 1502.624824] mqnic 0000:81:00.0: TX queue stride: 0x00000020
[ 1502.624827] mqnic 0000:81:00.0: TX completion queue offset: 0x00400000
[ 1502.624828] mqnic 0000:81:00.0: TX completion queue count: 8192
[ 1502.624829] mqnic 0000:81:00.0: TX completion queue stride: 0x00000020
[ 1502.624832] mqnic 0000:81:00.0: RX queue offset: 0x00600000
[ 1502.624833] mqnic 0000:81:00.0: RX queue count: 256
[ 1502.624834] mqnic 0000:81:00.0: RX queue stride: 0x00000020
[ 1502.624838] mqnic 0000:81:00.0: RX completion queue offset: 0x00700000
[ 1502.624838] mqnic 0000:81:00.0: RX completion queue count: 256
[ 1502.624839] mqnic 0000:81:00.0: RX completion queue stride: 0x00000020
[ 1502.624841] mqnic 0000:81:00.0: Max desc block size: 8
[ 1502.632850] mqnic 0000:81:00.0: Port-level register blocks:
[ 1502.632855] mqnic 0000:81:00.0: type 0x0000c040 (v 0.0.1.0)
[ 1502.632860] mqnic 0000:81:00.0: Scheduler type: 0x0000c040
[ 1502.632861] mqnic 0000:81:00.0: Scheduler offset: 0x00800000
[ 1502.632862] mqnic 0000:81:00.0: Scheduler channel count: 8192
[ 1502.632863] mqnic 0000:81:00.0: Scheduler channel stride: 0x00000004
[ 1502.632864] mqnic 0000:81:00.0: Scheduler count: 1
[ 1502.632866] mqnic 0000:81:00.0: Port count: 1
[ 1503.217179] mqnic 0000:81:00.0: Registered device mqnic0
The driver will attempt to read MAC addresses from the card. If it fails, it will fall back on random MAC addresses. On some cards, the MAC addresses are fixed and cannot be changed, on other cards they are written to use-accessible EEPROM and as such can be changed. Some cards with EEPROM come with blank EEPROMs, so if you want a persistent MAC address, you'll have to write a base MAC address into the EEPROM. And finally, some cards do not have an EEPROM for storing MAC addresses, and persistent MAC addresses are not currently supported on these cards.
Testing the design
==================
To test the design, connect it to another NIC, either directly with a DAC cable or similar, or via a switch.
Before performing any testing, an IP address must be assigned through the Linux kernel. There are various ways to do this, depending on the distribution in question. For example, using ``iproute2``::
$ sudo ip link set dev enp129s0 up
$ sudo ip addr add 10.0.0.2/24 dev enp129s0
You can also change the MTU setting::
$ sudo ip link set mtu 9000 dev enp129s0
Note that NetworkManager can fight over the network interface configuration (depending on the linux distribution). If the IP address disappears from the interface, then this is likely the fault of NetworkManager as it attempts to dynamically configure the interface. One solution for this is simply to use NetworkManager to configure the interface instead of iproute2. Another is to statically configure the interface using configuration files in ``/etc/network/interfaces`` so that NetworkManager will leave it alone.
One the card is configured, using ``ping`` is a good first test::
$ ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.221 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.109 ms
^C
--- 10.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1052ms
rtt min/avg/max/mdev = 0.109/0.165/0.221/0.056 ms
If ``ping`` works, then try ``iperf``.
On the server::
$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 10.0.0.2, port 54316
[ 5] local 10.0.0.1 port 5201 connected to 10.0.0.2 port 54318
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 2.74 GBytes 23.6 Gbits/sec
[ 5] 1.00-2.00 sec 2.85 GBytes 24.5 Gbits/sec
[ 5] 2.00-3.00 sec 2.82 GBytes 24.2 Gbits/sec
[ 5] 3.00-4.00 sec 2.83 GBytes 24.3 Gbits/sec
[ 5] 4.00-5.00 sec 2.82 GBytes 24.2 Gbits/sec
[ 5] 5.00-6.00 sec 2.76 GBytes 23.7 Gbits/sec
[ 5] 6.00-7.00 sec 2.63 GBytes 22.6 Gbits/sec
[ 5] 7.00-8.00 sec 2.81 GBytes 24.2 Gbits/sec
[ 5] 8.00-9.00 sec 2.73 GBytes 23.5 Gbits/sec
[ 5] 9.00-10.00 sec 2.73 GBytes 23.4 Gbits/sec
[ 5] 10.00-10.00 sec 384 KBytes 7.45 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 27.7 GBytes 23.8 Gbits/sec receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
On the client::
$ iperf3 -c 10.0.0.1
Connecting to host 10.0.0.1, port 5201
[ 5] local 10.0.0.2 port 54318 connected to 10.0.0.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 2.74 GBytes 23.6 Gbits/sec 0 2.18 MBytes
[ 5] 1.00-2.00 sec 2.85 GBytes 24.5 Gbits/sec 0 2.18 MBytes
[ 5] 2.00-3.00 sec 2.82 GBytes 24.2 Gbits/sec 0 2.29 MBytes
[ 5] 3.00-4.00 sec 2.83 GBytes 24.3 Gbits/sec 0 2.40 MBytes
[ 5] 4.00-5.00 sec 2.82 GBytes 24.2 Gbits/sec 0 2.40 MBytes
[ 5] 5.00-6.00 sec 2.76 GBytes 23.7 Gbits/sec 0 2.65 MBytes
[ 5] 6.00-7.00 sec 2.63 GBytes 22.6 Gbits/sec 0 2.65 MBytes
[ 5] 7.00-8.00 sec 2.81 GBytes 24.2 Gbits/sec 0 2.65 MBytes
[ 5] 8.00-9.00 sec 2.73 GBytes 23.5 Gbits/sec 0 2.65 MBytes
[ 5] 9.00-10.00 sec 2.73 GBytes 23.4 Gbits/sec 0 2.65 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 27.7 GBytes 23.8 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 27.7 GBytes 23.8 Gbits/sec receiver
iperf Done.
Finally, test the PTP synchronization performance with ``ptp4l`` from ``linuxptp``.
On the server::
$ sudo ptp4l -i enp193s0np0 --masterOnly=1 -m --logSyncInterval=-3
ptp4l[4463.798]: selected /dev/ptp2 as PTP clock
ptp4l[4463.799]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[4463.799]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[4471.745]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
ptp4l[4471.746]: selected local clock ec0d9a.fffe.6821d4 as best master
ptp4l[4471.746]: port 1: assuming the grand master role
On the client::
$ sudo ptp4l -i enp129s0 --slaveOnly=1 -m
ptp4l[642.961]: selected /dev/ptp5 as PTP clock
ptp4l[642.962]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[642.962]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[643.477]: port 1: new foreign master ec0d9a.fffe.6821d4-1
ptp4l[647.478]: selected best master clock ec0d9a.fffe.6821d4
ptp4l[647.478]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l[648.233]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l[648.859]: rms 973559315 max 1947121298 freq -41295 +/- 15728 delay 643 +/- 0
ptp4l[649.860]: rms 698 max 1236 freq -44457 +/- 949 delay 398 +/- 0
ptp4l[650.861]: rms 1283 max 1504 freq -42099 +/- 257 delay 168 +/- 0
ptp4l[651.862]: rms 612 max 874 freq -42059 +/- 85 delay 189 +/- 1
ptp4l[652.863]: rms 127 max 245 freq -42403 +/- 85
ptp4l[653.865]: rms 58 max 81 freq -42612 +/- 36 delay 188 +/- 0
ptp4l[654.866]: rms 21 max 36 freq -42603 +/- 12 delay 181 +/- 0
ptp4l[655.867]: rms 6 max 12 freq -42584 +/- 7 delay 174 +/- 1
ptp4l[656.868]: rms 14 max 26 freq -42606 +/- 12
ptp4l[657.869]: rms 19 max 23 freq -42631 +/- 11 delay 173 +/- 0
ptp4l[658.870]: rms 24 max 35 freq -42660 +/- 12 delay 173 +/- 0
ptp4l[659.870]: rms 23 max 35 freq -42679 +/- 16 delay 173 +/- 0
ptp4l[660.872]: rms 18 max 20 freq -42696 +/- 5 delay 170 +/- 0
ptp4l[661.873]: rms 18 max 30 freq -42714 +/- 8 delay 167 +/- 1
ptp4l[662.874]: rms 26 max 36 freq -42747 +/- 10 delay 168 +/- 0
ptp4l[663.875]: rms 18 max 21 freq -42757 +/- 10 delay 167 +/- 0
ptp4l[664.876]: rms 14 max 17 freq -42767 +/- 8 delay 167 +/- 1
ptp4l[665.877]: rms 9 max 12 freq -42741 +/- 7 delay 168 +/- 2
In this case, ``ptp4l`` has converged to an offset of well under 100 ns, reporting a frequency difference of about -43 ppm.
While ``ptp4l`` is syncing the clock, the kernel module will print some debug information::
[ 642.943481] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 0
[ 642.943487] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x400000000
[ 647.860040] mqnic 0000:81:00.0: mqnic_start_xmit TX TS requested
[ 647.860084] mqnic 0000:81:00.0: mqnic_process_tx_cq TX TS requested
[ 648.090566] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 2795012
[ 648.090572] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000b2e18
[ 648.090575] mqnic 0000:81:00.0: mqnic_phc_adjtime delta: -1947115961
[ 648.215705] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 3241067
[ 648.215711] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000cf6da
[ 648.340845] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 3199401
[ 648.340851] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000ccc30
[ 648.465995] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 3161092
[ 648.466001] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000ca4f5
[ 648.591129] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 3121946
[ 648.591135] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000c7cdf
[ 648.716275] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 3082853
[ 648.716281] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000c54d7
[ 648.841425] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 3048881
[ 648.841431] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000c320e
[ 648.966550] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 3012985
[ 648.966556] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000c0d4c
[ 649.091601] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 2980479
[ 649.091607] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000bec03
[ 649.216740] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 2950457
[ 649.216746] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000bcd45
[ 649.341844] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 2922995
[ 649.341850] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000bb126
[ 649.466966] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 2897658
[ 649.466972] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000b9734
[ 649.592007] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 2875145
[ 649.592013] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000b8026
[ 649.717159] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 2854962
[ 649.717165] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000b6b7b
[ 649.776717] mqnic 0000:81:00.0: mqnic_start_xmit TX TS requested
[ 649.776761] mqnic 0000:81:00.0: mqnic_process_tx_cq TX TS requested
[ 649.842186] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 2813737
[ 649.842191] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000b4144
[ 649.967434] mqnic 0000:81:00.0: mqnic_phc_adjfine scaled_ppm: 2800052
[ 649.967440] mqnic 0000:81:00.0: mqnic_phc_adjfine adj: 0x4000b3341
In this case, the core clock frequency is slightly less than 250 MHz. You can compute the clock frequency in GHz like so::
>>> 2**32/0x4000b3341
0.24998931910318553

46
docs/source/glossary.rst Normal file
View File

@ -0,0 +1,46 @@
.. _glossary:
========
Glossary
========
.. glossary::
AXI
Advanced eXtensible Interface
BAR
Base Address Register
DMA
Direct Memory Access
FPGA
Field-Programmable Gate Array
JTAG
Joint Test Action Group
MAC
Media Access Control(ler)
MSI
Message-Signaled Interrupt
NIC
Network Interface Controller
PCI
Peripheral Component Interconnect
PCIe
PCI Express
PHY
PHYsical layer (interface)
PTP
Precision Time Protocol (IEEE 1588)
RSS
Receive Side Scaling

67
docs/source/index.rst Normal file
View File

@ -0,0 +1,67 @@
.. _intro:
============
Introduction
============
Corundum is an open-source, high-performance :term:`FPGA`-based :term:`NIC` and platform for in-network compute. Features include a high performance datapath, 10G/25G/100G Ethernet, PCI express gen 3, a custom, high performance, tightly-integrated :term:`PCIe` :term:`DMA` engine, many (1000+) transmit, receive, completion, and event queues, scatter/gather DMA, :term:`MSI`, multiple interfaces, multiple ports per interface, per-port transmit scheduling including high precision TDMA, flow hashing, :term:`RSS`, checksum offloading, and native IEEE 1588 :term:`PTP` timestamping. A Linux driver is included that integrates with the Linux networking stack. Development and debugging is facilitated by an extensive simulation framework that covers the entire system from a simulation model of the driver and PCI express interface on one side to the Ethernet interfaces on the other side.
Corundum has several unique architectural features. First, transmit, receive, completion, and event queue states are stored efficiently in block RAM or ultra RAM, enabling support for thousands of individually-controllable queues. These queues are associated with interfaces, and each interface can have multiple ports, each with its own independent scheduler. This enables extremely fine-grained control over packet transmission. Coupled with PTP time synchronization, this enables high precision TDMA.
Corundum also provides an application section for implementing custom logic. The application section has a dedicated PCIe BAR for control and a number of interfaces that provide access to the core datapath and DMA infrastructure.
The latest source code is available from the `Corundum GitHub repository <https://github.com/corundum/corundum>`_. To stay up to date with the latest developments and get support, consider joining the `mailing list <https://groups.google.com/d/forum/corundum-nic>`_ and `Slack workspace <https://join.slack.com/t/corundumworkspace/shared_invite/zt-tj5azsbm-V9LV8L7ugSRDBpe2JiPKMA>`_.
Corundum currently supports devices from both Xilinx and Intel, on boards from several different manufacturers. Designs are included for the following FPGA boards; see :ref:`device_list` for more details:
* Alpha Data ADM-PCIE-9V3 (Xilinx Virtex UltraScale+ XCVU3P)
* Exablaze ExaNIC X10/Cisco Nexus K35-S (Xilinx Kintex UltraScale XCKU035)
* Exablaze ExaNIC X25/Cisco Nexus K3P-S (Xilinx Kintex UltraScale+ XCKU3P)
* Silicom fb2CG\@KU15P (Xilinx Kintex UltraScale+ XCKU15P)
* NetFPGA SUME (Xilinx Virtex 7 XC7V690T)
* Intel Stratix 10 MX dev kit (Intel Stratix 10 MX 1SM21CHU1F53E1VG)
* Xilinx Alveo U50 (Xilinx Virtex UltraScale+ XCU50)
* Xilinx Alveo U200 (Xilinx Virtex UltraScale+ XCU200)
* Xilinx Alveo U250 (Xilinx Virtex UltraScale+ XCU250)
* Xilinx Alveo U280 (Xilinx Virtex UltraScale+ XCU280)
* Xilinx VCU108 (Xilinx Virtex UltraScale XCVU095)
* Xilinx VCU118 (Xilinx Virtex UltraScale+ XCVU9P)
* Xilinx VCU1525 (Xilinx Virtex UltraScale+ XCVU9P)
* Xilinx ZCU106 (Xilinx Zynq UltraScale+ XCZU7EV)
Publications
============
- A. Forencich, A. C. Snoeren, G. Porter, G. Papen, *Corundum: An Open-Source 100-Gbps NIC,* in FCCM'20. (`FCCM Paper <https://www.cse.ucsd.edu/~snoeren/papers/corundum-fccm20.pdf>`_, `FCCM Presentation <https://www.fccm.org/past/2020/forums/topic/corundum-an-open-source-100-gbps-nic/>`_)
- J. A. Forencich, *System-Level Considerations for Optical Switching in Data Center Networks*. (`Thesis <https://escholarship.org/uc/item/3mc9070t>`_)
Citation
========
If you use Corundum in your project, please cite one of the following papers
and/or link to the project on GitHub::
@inproceedings{forencich2020fccm,
author = {Alex Forencich and Alex C. Snoeren and George Porter and George Papen},
title = {Corundum: An Open-Source {100-Gbps} {NIC}},
booktitle = {28th IEEE International Symposium on Field-Programmable Custom Computing Machines},
year = {2020},
}
@phdthesis{forencich2020thesis,
author = {John Alexander Forencich},
title = {System-Level Considerations for Optical Switching in Data Center Networks},
school = {UC San Diego},
year = {2020},
url = {https://escholarship.org/uc/item/3mc9070t},
}
.. only:: html
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

42
docs/source/macaddr.rst Normal file
View File

@ -0,0 +1,42 @@
.. _macaddr:
========================
Persistent MAC Addresses
========================
When registering network interfaces with the operating system, the driver must provide a MAC address for each interface. Ensuring that the configured MAC addresses are unique and consistent across driver reloads requires binding the addresses to the hardware in some way, usually through the use of some form of nonvolatile memory. It is relatively common for FPGA boards to provide small I2C EEPROMs for storing this sort of information. On other boards, the MAC address can be read out from the board management controller. If the driver fails to read a valid MAC address, it will fall back to using a randomly-generated MAC address. See the :ref:`device_list` for a summary of how persistent MAC addresses are implemented on each board. Boards that have pre-programmed MAC addresses should work "out of the box". However, boards that include blank EEPROMs need to have a MAC address written into the EEPROM for this functionality to work.
Programming I2C EEPROM via kernel module
========================================
The driver registers all on-card I2C devices via the Linux I2C subsystem. Therefore, the MAC address EEPROM appears in sysfs, and a MAC address can easily be written using ``dd``. Note that accessing the EEPROM is a little bit different on each board.
After loading the driver, the device can be accessed either directly (``/sys/bus/pci/devices/0000:xx:00.0/``) or from the corresponding network interface (``/sys/class/net/eth0/device/``) or miscdev (``/sys/class/misc/mqnic0/device/``). See the table below for the sysfs paths for each board. Note that the I2C bus numbers will vary. Also note that optical module I2C interfaces are registered as EEPROMs with I2C address 0x50, so ensure you have the correct EEPROM by dumping the contents with ``xxd`` or a hex editor before programming it.
After determining the sysfs path and picking a MAC address, run a command similar to this one to program the MAC address into the EEPROM::
echo 02 aa bb 00 00 00 | xxd -r -p - | dd bs=1 count=6 of=/sys/class/net/eth0/device/i2c-4/4-0074/channel-2/7-0054/eeprom
After reloading the driver, the interfaces should use the new MAC address::
14: enp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 02:aa:bb:00:00:00 brd ff:ff:ff:ff:ff:ff
15: enp1s0d1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 02:aa:bb:00:00:01 brd ff:ff:ff:ff:ff:ff
============ =================== ========================================
Manufacturer Board sysfs path :sup:`1`
============ =================== ========================================
Alpha Data ADM-PCIE-9V3 ``i2c-X/X-0050/eeprom`` :sup:`3`
Exablaze ExaNIC X10 :sup:`2` ``i2c-X/X-0050/eeprom`` :sup:`3`
Exablaze ExaNIC X25 :sup:`2` ``i2c-X/X-0050/eeprom`` :sup:`3`
Xilinx VCU108 ``i2c-X/X-0075/channel-3/Y-0054/eeprom``
Xilinx VCU118 ``i2c-X/X-0075/channel-3/Y-0054/eeprom``
Xilinx VCU1525 ``i2c-X/X-0074/channel-2/Y-0054/eeprom``
Xilinx ZCU106 ``i2c-X/X-0074/channel-0/Y-0054/eeprom``
============ =================== ========================================
Notes:
* :sup:`1` X and Y are i2c bus numbers that will vary
* :sup:`2` Card should come pre-programmed with a base MAC address
* :sup:`3` Optical module I2C interfaces may appear exactly the same way; confirm correct EEPROM by reading the contents with ``xxd`` or a hex editor.

View File

@ -0,0 +1,7 @@
.. _mod_cpl_queue_manager:
=====================
``cpl_queue_manager``
=====================
``cpl_queue_manager`` implements

View File

@ -0,0 +1,7 @@
.. _mod_cpl_write:
=============
``cpl_write``
=============
``cpl_write`` manages operations associated with completion writeback. It is responsible for enqueuing completion and event records into the completion queue managers and writing records into host memory via DMA.

View File

@ -0,0 +1,7 @@
.. _mod_desc_fetch:
==============
``desc_fetch``
==============
``desc_fetch`` manages operations associated with fetching descriptors. It is responsible for dequeuing descriptors from the queue managers and reading descriptors from host memory via DMA.

View File

@ -0,0 +1,15 @@
.. _fpga_mod:
=======
Modules
=======
.. toctree::
:maxdepth: 1
:caption: Contents:
:glob:
overview
*

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,870 @@
.. _mod_mqnic_core:
==============
``mqnic_core``
==============
``mqnic_core`` is the core integration-level module for mqnic for all host interfaces. Contains the interfaces, asynchronous FIFOs, PTP subsystem, statistics collection subsystem, and application block.
For maximum flexibility, this module does not contain the actual host-facing DMA engine, so a wrapper is required to provide the DMA engine with the proper host-facing interface. The available wrappers are:
* :ref:`mod_mqnic_core_pcie` for PCI express
* :ref:`mod_mqnic_core_axi` for AXI
``mqnic_core`` integrates the following modules:
* ``stats_counter``: statistics aggregation
* :ref:`mod_mqnic_ptp`: PTP subsystem
* :ref:`mod_mqnic_interface`: NIC interface
* :ref:`mod_mqnic_app_block`: Application block
Parameters
==========
.. object:: FPGA_ID
FPGA JTAG ID, default is ``32'hDEADBEEF``. Reported in :ref:`rb_fw_id`.
.. object:: FW_ID
Firmware ID, default is ``32'h00000000``. Reported in :ref:`rb_fw_id`.
.. object:: FW_VER
Firmware version, default is ``32'h00_00_01_00``. Reported in :ref:`rb_fw_id`.
.. object:: BOARD_ID
Board ID, default is ``16'h1234_0000``. Reported in :ref:`rb_fw_id`.
.. object:: BOARD_VER
Board version, default is ``32'h01_00_00_00``. Reported in :ref:`rb_fw_id`.
.. object:: BUILD_DATE
Build date as a 32-bit unsigned Unix timestamp, default is ``32'd602976000``. Reported in :ref:`rb_fw_id`.
.. object:: GIT_HASH
32 bits of the git commit hash, default is ``32'hdce357bf``. Reported in :ref:`rb_fw_id`.
.. object:: RELEASE_INFO
Additional release info, default is ``32'h00000000``. Reported in :ref:`rb_fw_id`.
.. object:: IF_COUNT
Interface count, default ``1``.
.. object:: PORTS_PER_IF
Ports per interface, default ``1``.
.. object:: PORT_COUNT
Total port count, must be set to ``IF_COUNT*PORTS_PER_IF``.
.. object:: PTP_TS_WIDTH
PTP timestamp width, must be ``96``.
.. object:: PTP_TAG_WIDTH
PTP tag signal width, default ``16``.
.. object:: PTP_PERIOD_NS_WIDTH
PTP period ns field width, default ``4``.
.. object:: PTP_OFFSET_NS_WIDTH
PTP offset ns field width, default ``32``.
.. object:: PTP_FNS_WIDTH
PTP fractional ns field width, default ``32``.
.. object:: PTP_PERIOD_NS
PTP nominal period, ns portion, default ``4'd4``.
.. object:: PTP_PERIOD_FNS
PTP nominal period, fractional ns portion, default ``32'd0``.
.. object:: PTP_USE_SAMPLE_CLOCK
Use external PTP sample clock, used to synchronize the PTP clock across clock domains, default ``0``.
.. object:: PTP_SEPARATE_RX_CLOCK
Use ``rx_ptp_clk`` instead of ``rx_clk`` for providing current PTP time if set, default ``0``.
.. object:: PTP_PEROUT_ENABLE
Enable PTP period output module, default ``0``.
.. object:: PTP_PEROUT_COUNT
Number of PTP period output channels, default ``1``.
.. object:: EVENT_QUEUE_OP_TABLE_SIZE
Event queue manager operation table size, default ``32``.
.. object:: TX_QUEUE_OP_TABLE_SIZE
Transmit queue manager operation table size, default ``32``.
.. object:: RX_QUEUE_OP_TABLE_SIZE
Receive queue manager operation table size, default ``32``.
.. object:: TX_CPL_QUEUE_OP_TABLE_SIZE
Transmit completion queue operation table size, default ``TX_QUEUE_OP_TABLE_SIZE``.
.. object:: RX_CPL_QUEUE_OP_TABLE_SIZE
Receive completion queue operation table size, default ``RX_QUEUE_OP_TABLE_SIZE``.
.. object:: TX_QUEUE_INDEX_WIDTH
Transmit queue index width, default ``13``. Sets the number of transmit queues on each interfaces as ``2**TX_QUEUE_INDEX_WIDTH``.
.. object:: RX_QUEUE_INDEX_WIDTH
Receive queue index width, default ``8``. Sets the number of receive queues on each interfaces as ``2**RX_QUEUE_INDEX_WIDTH``.
.. object:: TX_CPL_QUEUE_INDEX_WIDTH
Transmit completion queue index width, default ``TX_QUEUE_INDEX_WIDTH``. Sets the number of transmit completion queues on each interfaces as ``2**TX_CPL_QUEUE_INDEX_WIDTH``.
.. object:: RX_CPL_QUEUE_INDEX_WIDTH
Receive completion queue index width, default ``RX_QUEUE_INDEX_WIDTH``. Sets the number of receive completion queues on each interfaces as ``2**RX_CPL_QUEUE_INDEX_WIDTH``.
.. object:: EVENT_QUEUE_PIPELINE
Event queue manager pipeline length, default ``3``. Tune for best usage of block RAM cascade registers for specified queue count.
.. object:: TX_QUEUE_PIPELINE
Transmit queue manager pipeline stages, default ``3+(TX_QUEUE_INDEX_WIDTH > 12 ? TX_QUEUE_INDEX_WIDTH-12 : 0)``. Tune for best usage of block RAM cascade registers for specified queue count.
.. object:: RX_QUEUE_PIPELINE
Receive queue manager pipeline stages, default ``3+(RX_QUEUE_INDEX_WIDTH > 12 ? RX_QUEUE_INDEX_WIDTH-12 : 0)``. Tune for best usage of block RAM cascade registers for specified queue count.
.. object:: TX_CPL_QUEUE_PIPELINE
Transmit completion queue manager pipeline stages, default ``TX_QUEUE_PIPELINE``. Tune for best usage of block RAM cascade registers for specified queue count.
.. object:: RX_CPL_QUEUE_PIPELINE
Receive completion queue maanger pipeline stages, default ``RX_QUEUE_PIPELINE``. Tune for best usage of block RAM cascade registers for specified queue count.
.. object:: TX_DESC_TABLE_SIZE
Transmit engine descriptor table size, default ``32``.
.. object:: RX_DESC_TABLE_SIZE
Receive engine descriptor table size, default ``32``.
.. object:: TX_SCHEDULER_OP_TABLE_SIZE
Transmit scheduler operation table size, default ``TX_DESC_TABLE_SIZE``.
.. object:: TX_SCHEDULER_PIPELINE
Transmit scheduler pipeline stages, default ``TX_QUEUE_PIPELINE``. Tune for best usage of block RAM cascade registers for specified queue count.
.. object:: TDMA_INDEX_WIDTH
TDMA index width, default ``6``. Sets the number of TDMA timeslots as ``2**TDMA_INDEX_WIDTH``.
.. object:: PTP_TS_ENABLE
Enable PTP timestamping, default ``1``.
.. object:: TX_PTP_TS_FIFO_DEPTH
Depth of TX PTP timestamp FIFO, default ``32``.
.. object:: RX_PTP_TS_FIFO_DEPTH
Depth of RX PTP timestamp FIFO, default ``32``.
.. object:: TX_CHECKSUM_ENABLE
Enable TCP/UDP checksum offloading on transmit path, default ``1``.
.. object:: RX_RSS_ENABLE
Enable receive side scaling, default ``1``. Requires ``RX_HASH_ENABLE`` to be set.
.. object:: RX_HASH_ENABLE
Enable Toeplitz flow hashing for RX traffic, default ``1``.
.. object:: RX_CHECKSUM_ENABLE
Enable TCP/UDP checksum offloading on receive path, default ``1``
.. object:: TX_FIFO_DEPTH
Transmit FIFO depth in bytes, per output port, per traffic class, default ``32768``.
.. object:: RX_FIFO_DEPTH
Receive FIFO depth in bytes, per output port, default ``32768``.
.. object:: MAX_TX_SIZE
Maximum packet size on transmit path, default ``9214``.
.. object:: MAX_RX_SIZE
Maximum packet size on receive path, default ``9214``.
.. object:: TX_RAM_SIZE
Transmit scratchpad RAM size per interface, default ``32768``.
.. object:: RX_RAM_SIZE
Receive scratchpad RAM size per interface, default ``32768``.
.. object:: APP_ENABLE
Enable application section, default ``0``.
.. object:: APP_CTRL_ENABLE
Enable application section control connection to core NIC registers, default ``1``.
.. object:: APP_DMA_ENABLE
Enable application section connection to DMA subsystem, default ``1``.
.. object:: APP_AXIS_DIRECT_ENABLE
Enable lowest-latency asynchronous streaming connection to application section, default ``1``
.. object:: APP_AXIS_SYNC_ENABLE
Enable low-latency synchronous streaming connection to application section, default ``1``
.. object:: APP_AXIS_IF_ENABLE
Enable interface-level streaming connection to application section, default ``1``
.. object:: APP_STAT_ENABLE
Enable application section connection to statistics collection subsystem, default ``1``
.. object:: APP_GPIO_IN_WIDTH
Application section GPIO input signal width, default ``32``
.. object:: APP_GPIO_OUT_WIDTH
Application section GPIO output signal width, default ``32``
.. object:: DMA_ADDR_WIDTH
DMA interface address signal width, default ``64``.
.. object:: DMA_LEN_WIDTH
DMA interface length signal width, default ``16``.
.. object:: DMA_TAG_WIDTH
DMA interface tag signal width, default ``16``.
.. object:: IF_RAM_SEL_WIDTH
Width of interface-level select signal, default ``1``.
.. object:: RAM_SEL_WIDTH
Width of select signal per segment in DMA RAM interface, default ``$clog2(IF_COUNT+(APP_ENABLE && APP_DMA_ENABLE ? 1 : 0))+IF_RAM_SEL_WIDTH+1``.
.. object:: RAM_ADDR_WIDTH
Width of address signal for DMA RAM interface, default ``$clog2(TX_RAM_SIZE > RX_RAM_SIZE ? TX_RAM_SIZE : RX_RAM_SIZE)``.
.. object:: RAM_SEG_COUNT
Number of segments in DMA RAM interface, default ``2``. Must be a power of 2, must be at least 2.
.. object:: RAM_SEG_DATA_WIDTH
Width of data signal per segment in DMA RAM interface, default ``256*2/RAM_SEG_COUNT``.
.. object:: RAM_SEG_BE_WIDTH
Width of byte enable signal per segment in DMA RAM interface, must be set to ``RAM_SEG_DATA_WIDTH/8``.
.. object:: RAM_SEG_ADDR_WIDTH
Width of address signal per segment in DMA RAM interface, default ``RAM_ADDR_WIDTH-$clog2(RAM_SEG_COUNT*RAM_SEG_BE_WIDTH)``.
.. object:: RAM_PIPELINE
Number of output pipeline stages in segmented DMA RAMs, default ``2``. Tune for best usage of block RAM cascade registers.
.. object:: MSI_COUNT
Number of interrupt channels, default ``32``.
.. object:: AXIL_CTRL_DATA_WIDTH
AXI lite control data signal width, must be set to ``32``.
.. object:: AXIL_CTRL_ADDR_WIDTH
AXI lite control address signal width, default ``16``.
.. object:: AXIL_CTRL_STRB_WIDTH
AXI lite control byte enable signal width, must be set to ``AXIL_CTRL_DATA_WIDTH/8``.
.. object:: AXIL_IF_CTRL_ADDR_WIDTH
AXI lite interface control address signal width, default ``AXIL_CTRL_ADDR_WIDTH-$clog2(IF_COUNT)``
.. object:: AXIL_CSR_ADDR_WIDTH
AXI lite interface CSR address signal width, default ``AXIL_IF_CTRL_ADDR_WIDTH-5-$clog2((PORTS_PER_IF+3)/8)``
.. object:: AXIL_CSR_PASSTHROUGH_ENABLE
Enable NIC control register space passthrough, default ``0``.
.. object:: RB_NEXT_PTR
Next pointer of last register block in the NIC-level CSR space, default ``0``.
.. object:: AXIL_APP_CTRL_DATA_WIDTH
AXI lite application control data signal width, default ``AXIL_CTRL_DATA_WIDTH``. Can be 32 or 64.
.. object:: AXIL_APP_CTRL_ADDR_WIDTH
AXI lite application control address signal width, default ``16``.
.. object:: AXIL_APP_CTRL_STRB_WIDTH
AXI lite application control byte enable signal width, must be set to ``AXIL_APP_CTRL_DATA_WIDTH/8``.
.. object:: AXIS_DATA_WIDTH
Streaming interface ``tdata`` signal width, default ``512``.
.. object:: AXIS_KEEP_WIDTH
Streaming interface ``tkeep`` signal width, must be set to ``AXIS_DATA_WIDTH/8``.
.. object:: AXIS_SYNC_DATA_WIDTH
Synchronous streaming interface ``tdata`` signal width, default ``AXIS_DATA_WIDTH``.
.. object:: AXIS_IF_DATA_WIDTH
Interface streaming interface ``tdata`` signal width, default ``AXIS_SYNC_DATA_WIDTH*2**$clog2(PORTS_PER_IF)``.
.. object:: AXIS_TX_USER_WIDTH
Transmit streaming interface ``tuser`` signal width, default ``(PTP_TS_ENABLE ? PTP_TAG_WIDTH : 0) + 1``.
.. object:: AXIS_RX_USER_WIDTH
Receive streaming interface ``tuser`` signal width, default ``(PTP_TS_ENABLE ? PTP_TS_WIDTH : 0) + 1``.
.. object:: AXIS_RX_USE_READY
Use ``tready`` signal on RX interfaces, default ``0``. If set, logic will exert backpressure with ``tready`` instead of dropping packets when RX FIFOs are full.
.. object:: AXIS_TX_PIPELINE
Number of stages in transmit path pipeline FIFO, default ``0``. Useful for SLR crossings.
.. object:: AXIS_TX_FIFO_PIPELINE
Number of output pipeline stages in transmit FIFO, default ``2``. Tune for best usage of block RAM cascade registers.
.. object:: AXIS_TX_TS_PIPELINE
Number of stages in transmit path PTP timestamp pipeline FIFO, default ``0``. Useful for SLR crossings.
.. object:: AXIS_RX_PIPELINE
Number of stages in receive path pipeline FIFO, default ``0``. Useful for SLR crossings.
.. object:: AXIS_RX_FIFO_PIPELINE
Number of output pipeline stages in receive FIFO, default ``2``. Tune for best usage of block RAM cascade registers.
.. object:: STAT_ENABLE
Enable statistics collection subsystem, default ``1``.
.. object:: STAT_INC_WIDTH
Statistics increment signal width, default ``24``.
.. object:: STAT_ID_WIDTH
Statistics ID signal width, default ``12``. Sets the number of statistics counters as ``2**STAT_ID_WIDTH``.
Ports
=====
.. object:: clk
Logic clock. Most interfaces are synchronous to this clock.
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
clk in 1 Logic clock
====== === ===== ==================
.. object:: rst
Logic reset, active high
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
rst in 1 Logic reset, active high
====== === ===== ==================
.. object:: s_axil_ctrl
AXI-Lite slave interface (control). This interface provides access to the main NIC control register space.
.. table::
=================== === ==================== ===================
Signal Dir Width Description
=================== === ==================== ===================
s_axil_ctrl_awaddr in AXIL_CTRL_ADDR_WIDTH Write address
s_axil_ctrl_awprot in 3 Write protect
s_axil_ctrl_awvalid in 1 Write address valid
s_axil_ctrl_awready out 1 Write address ready
s_axil_ctrl_wdata in AXIL_CTRL_DATA_WIDTH Write data
s_axil_ctrl_wstrb in AXIL_CTRL_STRB_WIDTH Write data strobe
s_axil_ctrl_wvalid in 1 Write data valid
s_axil_ctrl_wready out 1 Write data ready
s_axil_ctrl_bresp out 2 Write response status
s_axil_ctrl_bvalid out 1 Write response valid
s_axil_ctrl_bready in 1 Write response ready
s_axil_ctrl_araddr in AXIL_CTRL_ADDR_WIDTH Read address
s_axil_ctrl_arprot in 3 Read protect
s_axil_ctrl_arvalid in 1 Read address valid
s_axil_ctrl_arready out 1 Read address ready
s_axil_ctrl_rdata out AXIL_CTRL_DATA_WIDTH Read response data
s_axil_ctrl_rresp out 2 Read response status
s_axil_ctrl_rvalid out 1 Read response valid
s_axil_ctrl_rready in 1 Read response ready
=================== === ==================== ===================
.. object:: s_axil_app_ctrl
AXI-Lite slave interface (application control). This interface is directly passed through to the application section.
.. table::
======================= === ======================== ===================
Signal Dir Width Description
======================= === ======================== ===================
s_axil_app_ctrl_awaddr in AXIL_APP_CTRL_ADDR_WIDTH Write address
s_axil_app_ctrl_awprot in 3 Write protect
s_axil_app_ctrl_awvalid in 1 Write address valid
s_axil_app_ctrl_awready out 1 Write address ready
s_axil_app_ctrl_wdata in AXIL_APP_CTRL_DATA_WIDTH Write data
s_axil_app_ctrl_wstrb in AXIL_APP_CTRL_STRB_WIDTH Write data strobe
s_axil_app_ctrl_wvalid in 1 Write data valid
s_axil_app_ctrl_wready out 1 Write data ready
s_axil_app_ctrl_bresp out 2 Write response status
s_axil_app_ctrl_bvalid out 1 Write response valid
s_axil_app_ctrl_bready in 1 Write response ready
s_axil_app_ctrl_araddr in AXIL_APP_CTRL_ADDR_WIDTH Read address
s_axil_app_ctrl_arprot in 3 Read protect
s_axil_app_ctrl_arvalid in 1 Read address valid
s_axil_app_ctrl_arready out 1 Read address ready
s_axil_app_ctrl_rdata out AXIL_APP_CTRL_DATA_WIDTH Read response data
s_axil_app_ctrl_rresp out 2 Read response status
s_axil_app_ctrl_rvalid out 1 Read response valid
s_axil_app_ctrl_rready in 1 Read response ready
======================= === ======================== ===================
.. object:: m_axil_csr
AXI-Lite master interface (passthrough for NIC control and status). This interface can be used to implement additional components in the main NIC control register space.
.. table::
================== === ==================== ===================
Signal Dir Width Description
================== === ==================== ===================
m_axil_csr_awaddr in AXIL_CSR_ADDR_WIDTH Write address
m_axil_csr_awprot in 3 Write protect
m_axil_csr_awvalid in 1 Write address valid
m_axil_csr_awready out 1 Write address ready
m_axil_csr_wdata in AXIL_CTRL_DATA_WIDTH Write data
m_axil_csr_wstrb in AXIL_CTRL_STRB_WIDTH Write data strobe
m_axil_csr_wvalid in 1 Write data valid
m_axil_csr_wready out 1 Write data ready
m_axil_csr_bresp out 2 Write response status
m_axil_csr_bvalid out 1 Write response valid
m_axil_csr_bready in 1 Write response ready
m_axil_csr_araddr in AXIL_CTRL_ADDR_WIDTH Read address
m_axil_csr_arprot in 3 Read protect
m_axil_csr_arvalid in 1 Read address valid
m_axil_csr_arready out 1 Read address ready
m_axil_csr_rdata out AXIL_CTRL_DATA_WIDTH Read response data
m_axil_csr_rresp out 2 Read response status
m_axil_csr_rvalid out 1 Read response valid
m_axil_csr_rready in 1 Read response ready
================== === ==================== ===================
.. object:: ctrl_reg
Control register interface. This interface can be used to implement additional control registers and register blocks in the main NIC control register space.
.. table::
================= === ==================== ===================
Signal Dir Width Description
================= === ==================== ===================
ctrl_reg_wr_addr out AXIL_CSR_ADDR_WIDTH Write address
ctrl_reg_wr_data out AXIL_CTRL_DATA_WIDTH Write data
ctrl_reg_wr_strb out AXIL_CTRL_STRB_WIDTH Write strobe
ctrl_reg_wr_en out 1 Write enable
ctrl_reg_wr_wait in 1 Write wait
ctrl_reg_wr_ack in 1 Write acknowledge
ctrl_reg_rd_addr out AXIL_CSR_ADDR_WIDTH Read address
ctrl_reg_rd_en out 1 Read enable
ctrl_reg_rd_data in AXIL_CTRL_DATA_WIDTH Read data
ctrl_reg_rd_wait in 1 Read wait
ctrl_reg_rd_ack in 1 Read acknowledge
================= === ==================== ===================
.. object:: m_axis_dma_read_desc
DMA read descriptor output
.. table::
============================= === ============== ===================
Signal Dir Width Description
============================= === ============== ===================
m_axis_dma_read_desc_dma_addr out DMA_ADDR_WIDTH DMA address
m_axis_dma_read_desc_ram_sel out RAM_SEL_WIDTH RAM select
m_axis_dma_read_desc_ram_addr out RAM_ADDR_WIDTH RAM address
m_axis_dma_read_desc_len out DMA_LEN_WIDTH Transfer length
m_axis_dma_read_desc_tag out DMA_TAG_WIDTH Transfer tag
m_axis_dma_read_desc_valid out 1 Request valid
m_axis_dma_read_desc_ready in 1 Request ready
============================= === ============== ===================
.. object:: s_axis_dma_read_desc_status
DMA read descriptor status input
.. table::
================================= === ============= ===================
Signal Dir Width Description
================================= === ============= ===================
s_axis_dma_read_desc_status_tag in DMA_TAG_WIDTH Status tag
s_axis_dma_read_desc_status_error in 4 Status error code
s_axis_dma_read_desc_status_valid in 1 Status valid
================================= === ============= ===================
.. object:: m_axis_dma_write_desc
DMA write descriptor output
.. table::
============================== === ============== ===================
Signal Dir Width Description
============================== === ============== ===================
m_axis_dma_write_desc_dma_addr out DMA_ADDR_WIDTH DMA address
m_axis_dma_write_desc_ram_sel out RAM_SEL_WIDTH RAM select
m_axis_dma_write_desc_ram_addr out RAM_ADDR_WIDTH RAM address
m_axis_dma_write_desc_len out DMA_LEN_WIDTH Transfer length
m_axis_dma_write_desc_tag out DMA_TAG_WIDTH Transfer tag
m_axis_dma_write_desc_valid out 1 Request valid
m_axis_dma_write_desc_ready in 1 Request ready
============================== === ============== ===================
.. object:: s_axis_dma_write_desc_status
DMA write descriptor status input
.. table::
================================== === ============= ===================
Signal Dir Width Description
================================== === ============= ===================
s_axis_dma_write_desc_status_tag in DMA_TAG_WIDTH Status tag
s_axis_dma_write_desc_status_error in 4 Status error code
s_axis_dma_write_desc_status_valid in 1 Status valid
================================== === ============= ===================
.. object:: dma_ram
DMA RAM interface
.. table::
===================== === ================================ ===================
Signal Dir Width Description
===================== === ================================ ===================
dma_ram_wr_cmd_sel in RAM_SEG_COUNT*RAM_SEL_WIDTH Write command select
dma_ram_wr_cmd_be in RAM_SEG_COUNT*RAM_SEG_BE_WIDTH Write command byte enable
dma_ram_wr_cmd_addr in RAM_SEG_COUNT*RAM_SEG_ADDR_WIDTH Write command address
dma_ram_wr_cmd_data in RAM_SEG_COUNT*RAM_SEG_DATA_WIDTH Write command data
dma_ram_wr_cmd_valid in RAM_SEG_COUNT Write command valid
dma_ram_wr_cmd_ready out RAM_SEG_COUNT Write command ready
dma_ram_wr_done out RAM_SEG_COUNT Write done
dma_ram_rd_cmd_sel in RAM_SEG_COUNT*RAM_SEL_WIDTH Read command select
dma_ram_rd_cmd_addr in RAM_SEG_COUNT*RAM_SEG_ADDR_WIDTH Read command address
dma_ram_rd_cmd_valid in RAM_SEG_COUNT Read command valid
dma_ram_rd_cmd_ready out RAM_SEG_COUNT Read command ready
dma_ram_rd_resp_data out RAM_SEG_COUNT*RAM_SEG_DATA_WIDTH Read response data
dma_ram_rd_resp_valid out RAM_SEG_COUNT Read response valid
dma_ram_rd_resp_ready in RAM_SEG_COUNT Read response ready
===================== === ================================ ===================
.. object:: msi_irq
MSI request outputs
.. table::
======= === ========= ===================
Signal Dir Width Description
======= === ========= ===================
msi_irq out MSI_COUNT Interrupt request
======= === ========= ===================
.. object:: ptp
PTP clock connections.
.. table::
================= === ================ ===================
Signal Dir Width Description
================= === ================ ===================
ptp_sample_clk in 1 PTP sample clock
ptp_pps out 1 PTP pulse-per-second
ptp_ts_96 out PTP_TS_WIDTH current PTP time
ptp_ts_step out 1 PTP clock step
ptp_perout_locked out PTP_PEROUT_COUNT PTP period output locked
ptp_perout_error out PTP_PEROUT_COUNT PTP period output error
ptp_perout_pulse out PTP_PEROUT_COUNT PTP period output pulse
================= === ================ ===================
.. object:: tx_clk
Transmit clocks, one per port
.. table::
====== === ========== ==================
Signal Dir Width Description
====== === ========== ==================
tx_clk in PORT_COUNT Transmit clock
====== === ========== ==================
.. object:: tx_rst
Transmit resets, one per port
.. table::
====== === ========== ==================
Signal Dir Width Description
====== === ========== ==================
tx_rst in PORT_COUNT Transmit reset
====== === ========== ==================
.. object:: tx_ptp_ts
Reference PTP time for transmit timestamping synchronous to each transmit clock, one per port.
.. table::
============== === ======================= ==================
Signal Dir Width Description
============== === ======================= ==================
tx_ptp_ts_96 out PORT_COUNT*PTP_TS_WIDTH current PTP time
tx_ptp_ts_step out PORT_COUNT PTP clock step
============== === ======================= ==================
.. object:: m_axis_tx
Streaming transmit data towards network, one AXI stream interface per port.
.. table::
================ === ============================= ==================
Signal Dir Width Description
================ === ============================= ==================
m_axis_tx_tdata out PORT_COUNT*AXIS_DATA_WIDTH Streaming data
m_axis_tx_tkeep out PORT_COUNT*AXIS_KEEP_WIDTH Byte enable
m_axis_tx_tvalid out PORT_COUNT Data valid
m_axis_tx_tready in PORT_COUNT Ready for data
m_axis_tx_tlast out PORT_COUNT End of frame
m_axis_tx_tuser out PORT_COUNT*AXIS_TX_USER_WIDTH Sideband data
================ === ============================= ==================
``s_axis_tx_tuser`` bits, per port
.. table::
=============== ========= ============= =============
Bit Name Width Description
=============== ========= ============= =============
0 bad_frame 1 Invalid frame
PTP_TAG_WIDTH:1 ptp_tag PTP_TAG_WIDTH PTP tag
=============== ========= ============= =============
.. object:: s_axis_tx_ptp_ts
Transmit PTP timestamp, one AXI stream interface per port.
.. table::
====================== === ======================== ===================
Signal Dir Width Description
====================== === ======================== ===================
s_axis_tx_ptp_ts in PORT_COUNT*PTP_TS_WIDTH PTP timestamp
s_axis_tx_ptp_ts_tag in PORT_COUNT*PTP_TAG_WIDTH PTP timestamp tag
s_axis_tx_ptp_ts_valid in PORT_COUNT PTP timestamp valid
s_axis_tx_ptp_ts_ready out PORT_COUNT PTP timestamp ready
====================== === ======================== ===================
.. object:: rx_clk
Receive clocks, one per port
.. table::
====== === ========== ==================
Signal Dir Width Description
====== === ========== ==================
rx_clk in PORT_COUNT Receive clock
====== === ========== ==================
.. object:: rx_rst
Receive resets, one per port
.. table::
====== === ========== ==================
Signal Dir Width Description
====== === ========== ==================
rx_rst in PORT_COUNT Receive reset
====== === ========== ==================
.. object:: rx_ptp_ts
Reference PTP time for receive timestamping synchronous to each receive clock, one per port. Synchronous to ``rx_ptp_clk`` if ``PTP_SEPARATE_RX_CLOCK`` is set.
.. table::
============== === ======================= ==================
Signal Dir Width Description
============== === ======================= ==================
rx_ptp_clk in PORT_COUNT clock for PTP time
rx_ptp_rst in PORT_COUNT reset for PTP time
rx_ptp_ts_96 out PORT_COUNT*PTP_TS_WIDTH current PTP time
rx_ptp_ts_step out PORT_COUNT PTP clock step
============== === ======================= ==================
.. object:: s_axis_rx
Streaming receive data from network, one AXI stream interface per port.
.. table::
================ === ============================= ==================
Signal Dir Width Description
================ === ============================= ==================
s_axis_rx_tdata in PORT_COUNT*AXIS_DATA_WIDTH Streaming data
s_axis_rx_tkeep in PORT_COUNT*AXIS_KEEP_WIDTH Byte enable
s_axis_rx_tvalid in PORT_COUNT Data valid
s_axis_rx_tready out PORT_COUNT Ready for data
s_axis_rx_tlast in PORT_COUNT End of frame
s_axis_rx_tuser in PORT_COUNT*AXIS_TX_USER_WIDTH Sideband data
================ === ============================= ==================
``s_axis_rx_tuser`` bits, per port
.. table::
============== ========= ============ =============
Bit Name Width Description
============== ========= ============ =============
0 bad_frame 1 Invalid frame
PTP_TS_WIDTH:1 ptp_ts PTP_TS_WIDTH PTP timestamp
============== ========= ============ =============
.. object:: s_axis_stat
Statistics increment input
.. table::
================== === ============== ===================
Signal Dir Width Description
================== === ============== ===================
s_axis_stat_tdata in STAT_INC_WIDTH Statistic increment
s_axis_stat_tid in STAT_ID_WIDTH Statistic ID
s_axis_stat_tvalid in 1 Statistic valid
s_axis_stat_tready out 1 Statistic ready
================== === ============== ===================
.. object:: app_gpio
Application section GPIO
.. table::
============ === ================== ===================
Signal Dir Width Description
============ === ================== ===================
app_gpio_in in APP_GPIO_IN_WIDTH GPIO inputs
app_gpio_out out APP_GPIO_OUT_WIDTH GPIO outputs
============ === ================== ===================
.. object:: app_jtag
Application section JTAG scan chain
.. table::
============ === ===== ===================
Signal Dir Width Description
============ === ===== ===================
app_jtag_tdi in 1 JTAG TDI
app_jtag_tdo out 1 JTAG TDO
app_jtag_tms in 1 JTAG TMS
app_jtag_tck in 1 JTAG TCK
============ === ===== ===================

View File

@ -0,0 +1,128 @@
.. _mod_mqnic_core_axi:
==================
``mqnic_core_axi``
==================
``mqnic_core_axi`` is the core integration-level module for mqnic for the AXI host interface. Wrapper around :ref:`mod_mqnic_core`, adding the AXI DMA interface module.
``mqnic_core_axi`` integrates the following modules:
* ``dma_if_axi``: AXI DMA engine
* :ref:`mod_mqnic_core`: core logic
Parameters
==========
Only parameters implemented in the wrapper are described here, for the other parameters see :ref:`mod_mqnic_core`.
.. object:: AXI_DATA_WIDTH
AXI master interface data signal width, default ``128``.
.. object:: AXI_ADDR_WIDTH
AXI master interface address signal width, default ``32``.
.. object:: AXI_STRB_WIDTH
AXI master interface byte enable signal width, default ``(AXI_DATA_WIDTH/8)``.
.. object:: AXI_ID_WIDTH
AXI master interface ID signal width, default ``8``.
.. object:: AXI_DMA_MAX_BURST_LEN
AXI DMA maximum burst length, default ``256``.
.. object:: AXI_DMA_READ_USE_ID
Use ID field for AXI DMA reads, default ``0``.
.. object:: AXI_DMA_WRITE_USE_ID
Use ID field for AXI DMA writes, default ``1``.
.. object:: AXI_DMA_READ_OP_TABLE_SIZE
AXI read DMA operation table size, default ``2**(AXI_ID_WIDTH)``.
.. object:: AXI_DMA_WRITE_OP_TABLE_SIZE
AXI write DMA operation table size, default ``2**(AXI_ID_WIDTH)``.
.. object:: IRQ_COUNT
IRQ channel count, default ``32``.
.. object:: STAT_DMA_ENABLE
Enable DMA-related statistics, default ``1``.
.. object:: STAT_AXI_ENABLE
Enable AXI-related statistics, default ``1``.
Ports
=====
Only ports implemented in the wrapper are described here, for the other ports see :ref:`mod_mqnic_core`.
.. object:: m_axi
AXI master interface (DMA).
.. table::
============= === ============== ===================
Signal Dir Width Description
============= === ============== ===================
m_axi_awid out AXI_ID_WIDTH Write ID
m_axi_awaddr out AXI_ADDR_WIDTH Write address
m_axi_awlen out 8 Write burst length
m_axi_awsize out 3 Write burst size
m_axi_awburst out 2 Write burst type
m_axi_awlock out 1 Write lock
m_axi_awcache out 4 Write cache
m_axi_awprot out 3 Write protect
m_axi_awvalid out 1 Write valid
m_axi_awready in 1 Write ready
m_axi_wdata out AXI_DATA_WIDTH Write data data
m_axi_wstrb out AXI_STRB_WIDTH Write data strobe
m_axi_wlast out 1 Write data last
m_axi_wvalid out 1 Write data valid
m_axi_wready in 1 Write data ready
m_axi_bid in AXI_ID_WIDTH Write response ID
m_axi_bresp in 2 Write response status
m_axi_bvalid in 1 Write response valid
m_axi_bready out 1 Write response ready
m_axi_arid out AXI_ID_WIDTH Read ID
m_axi_araddr out AXI_ADDR_WIDTH Read address
m_axi_arlen out 8 Read burst length
m_axi_arsize out 3 Read burst size
m_axi_arburst out 2 Read burst type
m_axi_arlock out 1 Read lock
m_axi_arcache out 4 Read cache
m_axi_arprot out 3 Read protect
m_axi_arvalid out 1 Read address valid
m_axi_arready in 1 Read address ready
m_axi_rid in AXI_ID_WIDTH Read response ID
m_axi_rdata in AXI_DATA_WIDTH Read response data
m_axi_rresp in 2 Read response status
m_axi_rlast in 1 Read response last
m_axi_rvalid in 1 Read response valid
m_axi_rready out 1 Read response ready
============= === ============== ===================
.. object:: msi_irq
Interrupt outputs
.. table::
====== === ========= ===================
Signal Dir Width Description
====== === ========= ===================
irq out IRQ_COUNT Interrupt request
====== === ========= ===================

View File

@ -0,0 +1,289 @@
.. _mod_mqnic_core_pcie:
===================
``mqnic_core_pcie``
===================
``mqnic_core_pcie`` is the core integration-level module for mqnic for the PCIe host interface. Wrapper around :ref:`mod_mqnic_core`, adding PCIe DMA interface module and PCIe-AXI Lite masters for the NIC and application control BARs.
This module implements a generic PCIe host interface, which must be adapted to the target device with a wrapper. The available wrappers are:
* :ref:`mod_mqnic_core_pcie_us` for Xilinx Virtex 7, UltraScale, and UltraScale+
* :ref:`mod_mqnic_core_pcie_s10` for Intel Stratix 10 H-tile/L-tile
``mqnic_core_pcie`` integrates the following modules:
* ``dma_if_pcie``: PCIe DMA engine
* ``pcie_axil_master``: AXI lite master module for control registers
* ``stats_pcie_if``: statistics collection for PCIe TLP traffic
* ``stats_dma_if_pcie``: statistics collection for PCIe DMA engine
* :ref:`mod_mqnic_core`: core logic
Parameters
==========
Only parameters implemented in the wrapper are described here, for the other parameters see :ref:`mod_mqnic_core`.
.. object:: TLP_SEG_COUNT
Number of segments in the TLP interfaces, default ``1``.
.. object:: TLP_SEG_DATA_WIDTH
TLP segment data width, default ``256``.
.. object:: TLP_SEG_STRB_WIDTH
TLP segment byte enable width, must be set to ``TLP_SEG_DATA_WIDTH/32``.
.. object:: TLP_SEG_HDR_WIDTH
TLP segment header width, must be ``128``.
.. object:: TX_SEQ_NUM_COUNT
Number of transmit sequence number inputs, default ``1``.
.. object:: TX_SEQ_NUM_WIDTH
Transmit sequence number width, default ``5``.
.. object:: TX_SEQ_NUM_ENABLE
Use transmit sequence numbers, default ``0``.
.. object:: PF_COUNT
PCIe PF count, default ``1``.
.. object:: VF_COUNT
PCIe VF count, default ``0``.
.. object:: F_COUNT
PCIe function count, must be ``PF_COUNT+VF_COUNT``.
.. object:: PCIE_TAG_COUNT
PCIe tag count, default ``256``.
.. object:: PCIE_DMA_READ_OP_TABLE_SIZE
PCIe read DMA operation table size, default ``PCIE_TAG_COUNT``.
.. object:: PCIE_DMA_READ_TX_LIMIT
PCIe read DMA transmit operation limit, default ``2**TX_SEQ_NUM_WIDTH``.
.. object:: PCIE_DMA_READ_TX_FC_ENABLE
Use transmit flow control credits in PCIe read DMA, default ``0``.
.. object:: PCIE_DMA_WRITE_OP_TABLE_SIZE
PCIe write DMA operation table size, default ``2**TX_SEQ_NUM_WIDTH``.
.. object:: PCIE_DMA_WRITE_TX_LIMIT
PCIe write DMA transmit operation limit, default ``2**TX_SEQ_NUM_WIDTH``.
.. object:: PCIE_DMA_WRITE_TX_FC_ENABLE
Use transmit flow control credits in PCIe write DMA, default ``0``.
.. object:: TLP_FORCE_64_BIT_ADDR
Force 64 bit address field for all TLPs, default ``0``.
.. object:: CHECK_BUS_NUMBER
Check bus number in received TLPs, default ``1``.
.. object:: MSI_COUNT
Number of MSI channels, default ``32``.
.. object:: STAT_DMA_ENABLE
Enable DMA-related statistics, default ``1``.
.. object:: STAT_PCIE_ENABLE
Enable PCIe-related statistics, default ``1``.
Ports
=====
Only ports implemented in the wrapper are described here, for the other ports see :ref:`mod_mqnic_core`.
.. object:: pcie_rx_req_tlp
TLP input (request to BAR)
.. table::
======================== === ================================ ===================
Signal Dir Width Description
======================== === ================================ ===================
pcie_rx_req_tlp_data in TLP_SEG_COUNT*TLP_SEG_DATA_WIDTH TLP payload
pcie_rx_req_tlp_hdr in TLP_SEG_COUNT*TLP_SEG_HDR_WIDTH TLP header
pcie_rx_req_tlp_bar_id in TLP_SEG_COUNT*3 BAR ID
pcie_rx_req_tlp_func_num in TLP_SEG_COUNT*8 Function
pcie_rx_req_tlp_valid in TLP_SEG_COUNT Valid
pcie_rx_req_tlp_sop in TLP_SEG_COUNT Start of packet
pcie_rx_req_tlp_eop in TLP_SEG_COUNT End of packet
pcie_rx_req_tlp_ready out 1 Ready
======================== === ================================ ===================
.. object:: pcie_rx_cpl_tlp
TLP input (completion to DMA)
.. table::
===================== === ================================ ===================
Signal Dir Width Description
===================== === ================================ ===================
pcie_rx_cpl_tlp_data in TLP_SEG_COUNT*TLP_SEG_DATA_WIDTH TLP payload
pcie_rx_cpl_tlp_hdr in TLP_SEG_COUNT*TLP_SEG_HDR_WIDTH TLP header
pcie_rx_cpl_tlp_error in TLP_SEG_COUNT*4 Error
pcie_rx_cpl_tlp_valid in TLP_SEG_COUNT Valid
pcie_rx_cpl_tlp_sop in TLP_SEG_COUNT Start of packet
pcie_rx_cpl_tlp_eop in TLP_SEG_COUNT End of packet
pcie_rx_cpl_tlp_ready out 1 Ready
===================== === ================================ ===================
.. object:: pcie_tx_rd_req_tlp
TLP output (read request from DMA)
.. table::
======================== === =============================== ===================
Signal Dir Width Description
======================== === =============================== ===================
pcie_tx_rd_req_tlp_hdr out TLP_SEG_COUNT*TLP_SEG_HDR_WIDTH TLP header
pcie_tx_rd_req_tlp_seq out TLP_SEG_COUNT*TX_SEQ_NUM_WIDTH TX seq num
pcie_tx_rd_req_tlp_valid out TLP_SEG_COUNT Valid
pcie_tx_rd_req_tlp_sop out TLP_SEG_COUNT Start of packet
pcie_tx_rd_req_tlp_eop out TLP_SEG_COUNT End of packet
pcie_tx_rd_req_tlp_ready in 1 Ready
======================== === =============================== ===================
.. object:: s_axis_pcie_rd_req_tx_seq_num
Transmit sequence number input (DMA read request)
.. table::
=================================== === ================================= ===================
Signal Dir Width Description
=================================== === ================================= ===================
s_axis_pcie_rd_req_tx_seq_num in TX_SEQ_NUM_COUNT*TX_SEQ_NUM_WIDTH TX seq num
s_axis_pcie_rd_req_tx_seq_num_valid in TX_SEQ_NUM_COUNT Valid
=================================== === ================================= ===================
.. object:: pcie_tx_wr_req_tlp
TLP output (read request from DMA)
.. table::
======================== === ================================ ===================
Signal Dir Width Description
======================== === ================================ ===================
pcie_tx_wr_req_tlp_data out TLP_SEG_COUNT*TLP_SEG_DATA_WIDTH TLP payload
pcie_tx_wr_req_tlp_strb out TLP_SEG_COUNT*TLP_SEG_STRB_WIDTH TLP byte enable
pcie_tx_wr_req_tlp_hdr out TLP_SEG_COUNT*TLP_SEG_HDR_WIDTH TLP header
pcie_tx_wr_req_tlp_seq out TLP_SEG_COUNT*TX_SEQ_NUM_WIDTH TX seq num
pcie_tx_wr_req_tlp_valid out TLP_SEG_COUNT Valid
pcie_tx_wr_req_tlp_sop out TLP_SEG_COUNT Start of packet
pcie_tx_wr_req_tlp_eop out TLP_SEG_COUNT End of packet
pcie_tx_wr_req_tlp_ready in 1 Ready
======================== === ================================ ===================
.. object:: s_axis_pcie_wr_req_tx_seq_num
Transmit sequence number input (DMA write request)
.. table::
=================================== === ================================= ===================
Signal Dir Width Description
=================================== === ================================= ===================
s_axis_pcie_wr_req_tx_seq_num in TX_SEQ_NUM_COUNT*TX_SEQ_NUM_WIDTH TX seq num
s_axis_pcie_wr_req_tx_seq_num_valid in TX_SEQ_NUM_COUNT Valid
=================================== === ================================= ===================
.. object:: pcie_tx_cpl_tlp
TLP output (completion from BAR)
.. table::
===================== === ================================ ===================
Signal Dir Width Description
===================== === ================================ ===================
pcie_tx_cpl_tlp_data out TLP_SEG_COUNT*TLP_SEG_DATA_WIDTH TLP payload
pcie_tx_cpl_tlp_strb out TLP_SEG_COUNT*TLP_SEG_STRB_WIDTH TLP byte enable
pcie_tx_cpl_tlp_hdr out TLP_SEG_COUNT*TLP_SEG_HDR_WIDTH TLP header
pcie_tx_cpl_tlp_valid out TLP_SEG_COUNT Valid
pcie_tx_cpl_tlp_sop out TLP_SEG_COUNT Start of packet
pcie_tx_cpl_tlp_eop out TLP_SEG_COUNT End of packet
pcie_tx_cpl_tlp_ready in 1 Ready
===================== === ================================ ===================
.. object:: pcie_tx_fc
Flow control credits
.. table::
================= === ===== ===================
Signal Dir Width Description
================= === ===== ===================
pcie_tx_fc_ph_av in 8 Available posted header credits
pcie_tx_fc_pd_av in 12 Available posted data credits
pcie_tx_fc_nph_av in 8 Available non-posted header credits
================= === ===== ===================
.. object:: config
Configuration inputs
.. table::
===================== === ========= ===================
Signal Dir Width Description
===================== === ========= ===================
bus_num in 8 Bus number
ext_tag_enable in F_COUNT Extended tag enable
max_read_request_size in F_COUNT*3 Max read request size
max_payload_size in F_COUNT*3 Max payload size
===================== === ========= ===================
.. object:: pcie_error
PCIe error outputs
.. table::
================ === ===== ===================
Signal Dir Width Description
================ === ===== ===================
pcie_error_cor out 1 Correctable error
pcie_error_uncor out 1 Uncorrectable error
================ === ===== ===================
.. object:: msi_irq
MSI request outputs
.. table::
======= === ========= ===================
Signal Dir Width Description
======= === ========= ===================
msi_irq out MSI_COUNT Interrupt request
======= === ========= ===================

View File

@ -0,0 +1,135 @@
.. _mod_mqnic_core_pcie_s10:
=======================
``mqnic_core_pcie_s10``
=======================
``mqnic_core_pcie_s10`` is the core integration-level module for mqnic for the PCIe host interface on Intel Stratix 10 GX, SX, MX, and TX series devices with H-tiles or L-tiles. Wrapper around :ref:`mod_mqnic_core_pcie`, adding device-specific shims for the PCIe interface.
``mqnic_core_pcie_s10`` integrates the following modules:
* ``pcie_s10_if``: PCIe interface shim
* :ref:`mod_mqnic_core_pcie`: core logic for PCI express
Parameters
==========
Only parameters implemented in the wrapper are described here, for the other parameters see :ref:`mod_mqnic_core_pcie`.
.. object:: SEG_COUNT
TLP segment count, default ``1``.
.. object:: SEG_DATA_WIDTH
TLP segment data signal width, default ``256``.
.. object:: SEG_EMPTY_WIDTH
TLP segment empty signal width, must be set to ``$clog2(SEG_DATA_WIDTH/32)``.
.. object:: TX_SEQ_NUM_WIDTH
Transmit sequence number width, default ``6``.
.. object:: TX_SEQ_NUM_ENABLE
Transmit sequence number enable, default ``1``.
.. object:: L_TILE
Tile select, ``0`` for H-tile, ``1`` for L-tile, default ``0``.
Ports
=====
Only ports implemented in the wrapper are described here, for the other ports see :ref:`mod_mqnic_core_pcie`.
.. object:: rx_st
H-Tile/L-Tile RX AVST interface
.. table::
=============== === ========================= ===================
Signal Dir Width Description
=============== === ========================= ===================
rx_st_data in SEG_COUNT*SEG_DATA_WIDTH TLP data
rx_st_empty in SEG_COUNT*SEG_EMPTY_WIDTH Empty
rx_st_sop in SEG_COUNT Start of packet
rx_st_eop in SEG_COUNT End of packet
rx_st_valid in SEG_COUNT Valid
rx_st_ready out 1 Ready
rx_st_vf_active in SEG_COUNT VF active
rx_st_func_num in SEG_COUNT*2 Function number
rx_st_vf_num in SEG_COUNT*11 VF number
rx_st_bar_range in SEG_COUNT*3 BAR range
=============== === ========================= ===================
.. object:: tx_st
H-Tile/L-Tile TX AVST interface
.. table::
=========== === ======================== ===================
Signal Dir Width Description
=========== === ======================== ===================
tx_st_data out SEG_COUNT*SEG_DATA_WIDTH TLP data
tx_st_sop out SEG_COUNT Start of packet
tx_st_eop out SEG_COUNT End of packet
tx_st_valid out SEG_COUNT Valid
tx_st_ready in 1 Ready
tx_st_err out SEG_COUNT Error
=========== === ======================== ===================
.. object:: tx_fc
H-Tile/L-Tile TX flow control
.. table::
===================== === =========== ===================
Signal Dir Width Description
===================== === =========== ===================
tx_ph_cdts in 8 Posted header credits
tx_pd_cdts in 12 Posted data credits
tx_nph_cdts in 8 Non-posted header credits
tx_npd_cdts in 12 Non-posted data credits
tx_cplh_cdts in 8 Completion header credits
tx_cpld_cdts in 12 Completion data credits
tx_hdr_cdts_consumed in SEG_COUNT Header credits consumed
tx_data_cdts_consumed in SEG_COUNT Data credits consumed
tx_cdts_type in SEG_COUNT*2 Credit type
tx_cdts_data_value in SEG_COUNT*1 Credit data value
===================== === =========== ===================
.. object:: app_msi
H-Tile/L-Tile MSI interrupt interface
.. table::
================ === ===== ===================
Signal Dir Width Description
================ === ===== ===================
app_msi_req out 1 MSI request
app_msi_ack in 1 MSI acknowledge
app_msi_tc out 3 MSI traffic class
app_msi_num out 5 MSI number
app_msi_func_num out 2 Function number
================ === ===== ===================
.. object:: tl_cfg
H-Tile/L-Tile configuration interface
.. table::
=========== === ===== ===================
Signal Dir Width Description
=========== === ===== ===================
tl_cfg_ctl in 32 Config data
tl_cfg_add in 5 Config address
tl_cfg_func in 2 Config function
=========== === ===== ===================

View File

@ -0,0 +1,224 @@
.. _mod_mqnic_core_pcie_us:
======================
``mqnic_core_pcie_us``
======================
``mqnic_core_pcie_us`` is the core integration-level module for mqnic for the PCIe host interface on Xilinx Virtex 7, UltraScale, and UltraScale+ series devices. Wrapper around :ref:`mod_mqnic_core_pcie`, adding device-specific shims for the PCIe interface.
``mqnic_core_pcie_us`` integrates the following modules:
* ``pcie_us_if``: PCIe interface shim
* :ref:`mod_mqnic_core_pcie`: core logic for PCI express
Parameters
==========
Only parameters implemented in the wrapper are described here, for the other parameters see :ref:`mod_mqnic_core_pcie`.
.. object:: AXIS_PCIE_DATA_WIDTH
PCIe AXI stream ``tdata`` signal width, default ``256``.
.. object:: AXIS_PCIE_KEEP_WIDTH
PCIe AXI stream ``tkeep`` signal width, must be set to ``(AXIS_PCIE_DATA_WIDTH/32)``.
.. object:: AXIS_PCIE_RC_USER_WIDTH
PCIe AXI stream RC ``tuser`` signal width, default ``AXIS_PCIE_DATA_WIDTH < 512 ? 75 : 161``.
.. object:: AXIS_PCIE_RQ_USER_WIDTH
PCIe AXI stream RQ ``tuser`` signal width, default ``AXIS_PCIE_DATA_WIDTH < 512 ? 62 : 137``.
.. object:: AXIS_PCIE_CQ_USER_WIDTH
PCIe AXI stream CQ ``tuser`` signal width, default ``AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183``.
.. object:: AXIS_PCIE_CC_USER_WIDTH
PCIe AXI stream CC ``tuser`` signal width, default ``AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81``.
.. object:: RQ_SEQ_NUM_WIDTH
PCIe RQ sequence number width, default ``AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6``.
Ports
=====
Only ports implemented in the wrapper are described here, for the other ports see :ref:`mod_mqnic_core_pcie`.
.. object:: s_axis_rc
AXI input (RC)
.. table::
================ === ======================= ===================
Signal Dir Width Description
================ === ======================= ===================
s_axis_rc_tdata in AXIS_PCIE_DATA_WIDTH TLP data
s_axis_rc_tkeep in AXIS_PCIE_KEEP_WIDTH Byte enable
s_axis_rc_tvalid in 1 Valid
s_axis_rc_tready out 1 Ready
s_axis_rc_tlast in 1 End of frame
s_axis_rc_tuser in AXIS_PCIE_RC_USER_WIDTH Sideband data
================ === ======================= ===================
.. object:: m_axis_rq
AXI output (RQ)
.. table::
================ === ======================= ===================
Signal Dir Width Description
================ === ======================= ===================
m_axis_rq_tdata out AXIS_PCIE_DATA_WIDTH TLP data
m_axis_rq_tkeep out AXIS_PCIE_KEEP_WIDTH Byte enable
m_axis_rq_tvalid out 1 Valid
m_axis_rq_tready in 1 Ready
m_axis_rq_tlast out 1 End of frame
m_axis_rq_tuser out AXIS_PCIE_RQ_USER_WIDTH Sideband data
================ === ======================= ===================
.. object:: s_axis_cq
AXI input (CQ)
.. table::
================ === ======================= ===================
Signal Dir Width Description
================ === ======================= ===================
s_axis_cq_tdata in AXIS_PCIE_DATA_WIDTH TLP data
s_axis_cq_tkeep in AXIS_PCIE_KEEP_WIDTH Byte enable
s_axis_cq_tvalid in 1 Valid
s_axis_cq_tready out 1 Ready
s_axis_cq_tlast in 1 End of frame
s_axis_cq_tuser in AXIS_PCIE_CQ_USER_WIDTH Sideband data
================ === ======================= ===================
.. object:: m_axis_cc
AXI output (CC)
.. table::
================ === ======================= ===================
Signal Dir Width Description
================ === ======================= ===================
m_axis_cc_tdata out AXIS_PCIE_DATA_WIDTH TLP data
m_axis_cc_tkeep out AXIS_PCIE_KEEP_WIDTH Byte enable
m_axis_cc_tvalid out 1 Valid
m_axis_cc_tready in 1 Ready
m_axis_cc_tlast out 1 End of frame
m_axis_cc_tuser out AXIS_PCIE_CC_USER_WIDTH Sideband data
================ === ======================= ===================
.. object:: s_axis_rq_seq_num
Transmit sequence number input
.. table::
========================= === ================ ===================
Signal Dir Width Description
========================= === ================ ===================
s_axis_rq_seq_num_0 in RQ_SEQ_NUM_WIDTH Sequence number
s_axis_rq_seq_num_valid_0 in 1 Valid
s_axis_rq_seq_num_1 in RQ_SEQ_NUM_WIDTH Sequence number
s_axis_rq_seq_num_valid_1 in 1 Valid
========================= === ================ ===================
.. object:: cfg_fc_ph
Flow control
.. table::
=========== === ===== ===================
Signal Dir Width Description
=========== === ===== ===================
cfg_fc_ph in 8 Posted header credits
cfg_fc_pd in 12 Posted data credits
cfg_fc_nph in 8 Non-posted header credits
cfg_fc_npd in 12 Non-posted data credits
cfg_fc_cplh in 8 Completion header credits
cfg_fc_cpld in 12 Completion data credits
cfg_fc_sel out 3 Credit select
=========== === ===== ===================
.. object:: cfg_max_read_req
Configuration inputs
.. table::
================ === ========= ===================
Signal Dir Width Description
================ === ========= ===================
cfg_max_read_req in F_COUNT*3 Max read request
cfg_max_payload in F_COUNT*3 Max payload
================ === ========= ===================
.. object:: cfg_mgmt_addr
Configuration interface
.. table::
======================== === ===== ===================
Signal Dir Width Description
======================== === ===== ===================
cfg_mgmt_addr out 10 Address
cfg_mgmt_function_number out 8 Function number
cfg_mgmt_write out 1 Write enable
cfg_mgmt_write_data out 32 Write data
cfg_mgmt_byte_enable out 4 Byte enable
cfg_mgmt_read out 1 Read enable
cfg_mgmt_read_data in 32 Read data
cfg_mgmt_read_write_done in 1 Write done
======================== === ===== ===================
.. object:: cfg_interrupt_msi_enable
Interrupt interface
.. table::
============================================= === ===== ===================
Signal Dir Width Description
============================================= === ===== ===================
cfg_interrupt_msi_enable in 4 MSI enable
cfg_interrupt_msi_vf_enable in 8 VF enable
cfg_interrupt_msi_mmenable in 12 MM enable
cfg_interrupt_msi_mask_update in 1 Mask update
cfg_interrupt_msi_data in 32 Data
cfg_interrupt_msi_select out 4 Select
cfg_interrupt_msi_int out 32 Interrupt request
cfg_interrupt_msi_pending_status out 32 Pending status
cfg_interrupt_msi_pending_status_data_enable out 1 Pending status enable
cfg_interrupt_msi_pending_status_function_num out 4 Pending status function
cfg_interrupt_msi_sent in 1 MSI sent
cfg_interrupt_msi_fail in 1 MSI fail
cfg_interrupt_msi_attr out 3 MSI attr
cfg_interrupt_msi_tph_present out 1 TPH present
cfg_interrupt_msi_tph_type out 2 TPH type
cfg_interrupt_msi_tph_st_tag out 9 TPH ST tag
cfg_interrupt_msi_function_number out 4 MSI function number
============================================= === ===== ===================
.. object:: status_error_cor
PCIe error outputs
.. table::
================== === ===== ===================
Signal Dir Width Description
================== === ===== ===================
status_error_cor out 1 Correctable error
status_error_uncor out 1 Uncorrectable error
================== === ===== ===================

View File

@ -0,0 +1,13 @@
.. _mod_mqnic_egress:
================
``mqnic_egress``
================
``mqnic_egress`` implements egress processing on the transmit side. This consists of:
1. Transmit checksum offloading
``mqnic_egress`` integrates the following modules:
* :ref:`mod_tx_checksum`: transmit checksum offloading

View File

@ -0,0 +1,15 @@
.. _mod_mqnic_ingress:
=================
``mqnic_ingress``
=================
``mqnic_ingress`` implements ingress processing on the receive path. This consists of:
1. Receive checksum offloading
2. RSS flow hashing
``mqnic_ingress`` integrates the following modules:
* :ref:`mod_rx_checksum`: receive checksum offloading
* :ref:`mod_rx_hash`: RSS flow hash computation

View File

@ -0,0 +1,17 @@
.. _mod_mqnic_interface:
===================
``mqnic_interface``
===================
``mqnic_interface`` implements one NIC interface, including the queue management logic, descriptor, completion, and event handling, transmit scheduler, and the transmit and receive datapaths.
``mqnic_interface`` integrates the following modules:
* :ref:`mod_queue_manager`: transmit and receive queues
* :ref:`mod_cpl_queue_manager`: transmit and receive completion queues, event queues
* :ref:`mod_desc_fetch`: descriptor fetch
* :ref:`mod_cpl_write`: completion write
* :ref:`mod_mqnic_tx_scheduler_block`: transmit scheduler
* :ref:`mod_mqnic_interface_rx`: receive datapath
* :ref:`mod_mqnic_interface_tx`: transmit datapath

View File

@ -0,0 +1,13 @@
.. _mod_mqnic_interface_rx:
======================
``mqnic_interface_rx``
======================
``mqnic_interface_rx`` implements the host-side receive datapath.
``mqnic_interface_rx`` integrates the following modules:
* :ref:`mod_rx_engine`: receive engine
* :ref:`mod_mqnic_ingress`: ingress datapath
* ``dma_client_axis_sink``: internal DMA engine

View File

@ -0,0 +1,13 @@
.. _mod_mqnic_interface_tx:
======================
``mqnic_interface_tx``
======================
``mqnic_interface_tx`` implements the host-side transmit datapath.
``mqnic_interface_tx`` integrates the following modules:
* :ref:`mod_tx_engine`: transmit engine
* ``dma_client_axis_source``: internal DMA engine
* :ref:`mod_mqnic_egress`: egress datapath

View File

@ -0,0 +1,105 @@
.. _mod_mqnic_l2_egress:
===================
``mqnic_l2_egress``
===================
``mqnic_l2_egress`` contains layer 2 egress processing components, and operates synchronous to the MAC TX clock. Currently, this module is a placeholder, passing through streaming data without modification.
Parameters
==========
.. object:: AXIS_DATA_WIDTH
Streaming interface ``tdata`` signal width, default ``512``.
.. object:: AXIS_KEEP_WIDTH
Streaming interface ``tkeep`` signal width, must be set to ``AXIS_DATA_WIDTH/8``.
.. object:: AXIS_USER_WIDTH
Streaming interface ``tuser`` signal width, default ``1``.
Ports
=====
.. object:: clk
Logic clock.
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
clk in 1 Logic clock
====== === ===== ==================
.. object:: rst
Logic reset, active high
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
rst in 1 Logic reset, active high
====== === ===== ==================
.. object:: s_axis
Streaming transmit data from host
.. table::
============= === =============== ==================
Signal Dir Width Description
============= === =============== ==================
s_axis_tdata in AXIS_DATA_WIDTH Streaming data
s_axis_tkeep in AXIS_KEEP_WIDTH Byte enable
s_axis_tvalid in Data valid
s_axis_tready out Ready for data
s_axis_tlast in End of frame
s_axis_tuser in AXIS_USER_WIDTH Sideband data
============= === =============== ==================
``s_axis_tuser`` bits
.. table::
============== ========= ============ =============
Bit Name Width Description
============== ========= ============ =============
0 bad_frame 1 Invalid frame
PTP_TS_WIDTH:1 ptp_ts PTP_TS_WIDTH PTP timestamp
============== ========= ============ =============
.. object:: m_axis
Streaming transmit data towards network
.. table::
============= === =============== ==================
Signal Dir Width Description
============= === =============== ==================
m_axis_tdata out AXIS_DATA_WIDTH Streaming data
m_axis_tkeep out AXIS_KEEP_WIDTH Byte enable
m_axis_tvalid out Data valid
m_axis_tready in Ready for data
m_axis_tlast out End of frame
m_axis_tuser out AXIS_USER_WIDTH Sideband data
============= === =============== ==================
``m_axis_tuser`` bits
.. table::
============== ========= ============ =============
Bit Name Width Description
============== ========= ============ =============
0 bad_frame 1 Invalid frame
PTP_TS_WIDTH:1 ptp_ts PTP_TS_WIDTH PTP timestamp
============== ========= ============ =============

View File

@ -0,0 +1,109 @@
.. _mod_mqnic_l2_ingress:
====================
``mqnic_l2_ingress``
====================
``mqnic_l2_ingress`` contains layer 2 ingress processing components, and operates synchronous to the MAC RX clock. Currently, this module is a placeholder, passing through streaming data without modification.
Parameters
==========
.. object:: AXIS_DATA_WIDTH
Streaming interface ``tdata`` signal width, default ``512``.
.. object:: AXIS_KEEP_WIDTH
Streaming interface ``tkeep`` signal width, must be set to ``AXIS_DATA_WIDTH/8``.
.. object:: AXIS_USER_WIDTH
Streaming interface ``tuser`` signal width, default ``1``.
.. object:: AXIS_USE_READY
Use ``tready`` signal, default ``0``. If set, logic will exert backpressure with ``tready`` instead of dropping packets when RX FIFOs are full.
Ports
=====
.. object:: clk
Logic clock.
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
clk in 1 Logic clock
====== === ===== ==================
.. object:: rst
Logic reset, active high
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
rst in 1 Logic reset, active high
====== === ===== ==================
.. object:: s_axis
Streaming receive data from network
.. table::
============= === =============== ==================
Signal Dir Width Description
============= === =============== ==================
s_axis_tdata in AXIS_DATA_WIDTH Streaming data
s_axis_tkeep in AXIS_KEEP_WIDTH Byte enable
s_axis_tvalid in Data valid
s_axis_tready out Ready for data
s_axis_tlast in End of frame
s_axis_tuser in AXIS_USER_WIDTH Sideband data
============= === =============== ==================
``s_axis_tuser`` bits
.. table::
============== ========= ============ =============
Bit Name Width Description
============== ========= ============ =============
0 bad_frame 1 Invalid frame
PTP_TS_WIDTH:1 ptp_ts PTP_TS_WIDTH PTP timestamp
============== ========= ============ =============
.. object:: m_axis
Streaming receive data towards host
.. table::
============= === =============== ==================
Signal Dir Width Description
============= === =============== ==================
m_axis_tdata out AXIS_DATA_WIDTH Streaming data
m_axis_tkeep out AXIS_KEEP_WIDTH Byte enable
m_axis_tvalid out Data valid
m_axis_tready in Ready for data
m_axis_tlast out End of frame
m_axis_tuser out AXIS_USER_WIDTH Sideband data
============= === =============== ==================
``m_axis_tuser`` bits
.. table::
============== ========= ============ =============
Bit Name Width Description
============== ========= ============ =============
0 bad_frame 1 Invalid frame
PTP_TS_WIDTH:1 ptp_ts PTP_TS_WIDTH PTP timestamp
============== ========= ============ =============

View File

@ -0,0 +1,129 @@
.. _mod_mqnic_ptp:
=============
``mqnic_ptp``
=============
``mqnic_ptp`` implements the PTP subsystem, including PTP clock and period output modules.
``mqnic_ptp`` integrates the following modules:
* :ref:`mod_mqnic_ptp_clock`: PTP clock (:ref:`rb_phc`)
* :ref:`mod_mqnic_ptp_perout`: PTP period output (:ref:`rb_phc_perout`)
Parameters
==========
.. object:: PTP_PERIOD_NS_WIDTH
PTP period ns field width, default ``4``.
.. object:: PTP_OFFSET_NS_WIDTH
PTP offset ns field width, default ``32``.
.. object:: PTP_FNS_WIDTH
PTP fractional ns field width, default ``32``.
.. object:: PTP_PERIOD_NS
PTP nominal period, ns portion ``4'd4``.
.. object:: PTP_PERIOD_FNS
PTP nominal period, fractional ns portion ``32'd0``.
.. object:: PTP_PEROUT_ENABLE
Enable PTP period output module, default ``0``.
.. object:: PTP_PEROUT_COUNT
Number of PTP period output channels, default ``1``.
.. object:: REG_ADDR_WIDTH
Register interface address width, default ``7+(PTP_PEROUT_ENABLE ? $clog2((PTP_PEROUT_COUNT+1)/2) + 1 : 0)``.
.. object:: REG_DATA_WIDTH
Register interface data width, default ``32``.
.. object:: REG_STRB_WIDTH
Register interface byte enable width, must be set to ``(REG_DATA_WIDTH/8)``.
.. object:: RB_BASE_ADDR
Base address of control register block, default ``0``.
.. object:: RB_NEXT_PTR
Address of next control register block, default ``0``.
Ports
=====
.. object:: clk
Logic clock.
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
clk in 1 Logic clock
====== === ===== ==================
.. object:: rst
Logic reset, active high
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
rst in 1 Logic reset, active high
====== === ===== ==================
.. object:: reg
Control register interface
.. table::
=========== === =============== ===================
Signal Dir Width Description
=========== === =============== ===================
reg_wr_addr in REG_ADDR_WIDTH Write address
reg_wr_data in REG_DATA_WIDTH Write data
reg_wr_strb in REG_STRB_WIDTH Write byte enable
reg_wr_en in 1 Write enable
reg_wr_wait out 1 Write wait
reg_wr_ack out 1 Write acknowledge
reg_rd_addr in REG_ADDR_WIDTH Read address
reg_rd_en in 1 Read enable
reg_rd_data out REG_DATA_WIDTH Read data
reg_rd_wait out 1 Read wait
reg_rd_ack out 1 Read acknowledge
=========== === =============== ===================
.. object:: ptp
PTP signals
.. table::
================= === ================ ===================
Signal Dir Width Description
================= === ================ ===================
ptp_pps out 1 Pulse-per-second
ptp_ts_96 out 96 PTP timestamp
ptp_ts_step out 1 PTP timestamp step
ptp_perout_locked out PTP_PEROUT_COUNT Period output channel locked
ptp_perout_error out PTP_PEROUT_COUNT Period output channel error
ptp_perout_pulse out PTP_PEROUT_COUNT Period output channel pulse
================= === ================ ===================

View File

@ -0,0 +1,122 @@
.. _mod_mqnic_ptp_clock:
===================
``mqnic_ptp_clock``
===================
``mqnic_ptp_clock`` implements the PTP hardware clock. It wraps ``ptp_clock`` and provides a register interface for control, see :ref:`rb_phc`.
Parameters
==========
.. object:: PTP_PERIOD_NS_WIDTH
PTP period ns field width, default ``4``.
.. object:: PTP_OFFSET_NS_WIDTH
PTP offset ns field width, default ``32``.
.. object:: PTP_FNS_WIDTH
PTP fractional ns field width, default ``32``.
.. object:: PTP_PERIOD_NS
PTP nominal period, ns portion ``4'd4``.
.. object:: PTP_PERIOD_FNS
PTP nominal period, fractional ns portion ``32'd0``.
.. object:: PTP_PEROUT_ENABLE
Enable PTP period output module, default ``0``.
.. object:: PTP_PEROUT_COUNT
Number of PTP period output channels, default ``1``.
.. object:: REG_ADDR_WIDTH
Register interface address width, default ``7``.
.. object:: REG_DATA_WIDTH
Register interface data width, default ``32``.
.. object:: REG_STRB_WIDTH
Register interface byte enable width, must be set to ``(REG_DATA_WIDTH/8)``.
.. object:: RB_BASE_ADDR
Base address of control register block, default ``0``.
.. object:: RB_NEXT_PTR
Address of next control register block, default ``0``.
Ports
=====
.. object:: clk
Logic clock.
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
clk in 1 Logic clock
====== === ===== ==================
.. object:: rst
Logic reset, active high
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
rst in 1 Logic reset, active high
====== === ===== ==================
.. object:: reg
Control register interface
.. table::
=========== === =============== ===================
Signal Dir Width Description
=========== === =============== ===================
reg_wr_addr in REG_ADDR_WIDTH Write address
reg_wr_data in REG_DATA_WIDTH Write data
reg_wr_strb in REG_STRB_WIDTH Write byte enable
reg_wr_en in 1 Write enable
reg_wr_wait out 1 Write wait
reg_wr_ack out 1 Write acknowledge
reg_rd_addr in REG_ADDR_WIDTH Read address
reg_rd_en in 1 Read enable
reg_rd_data out REG_DATA_WIDTH Read data
reg_rd_wait out 1 Read wait
reg_rd_ack out 1 Read acknowledge
=========== === =============== ===================
.. object:: ptp
PTP signals
.. table::
================= === ===== ===================
Signal Dir Width Description
================= === ===== ===================
ptp_pps out 1 Pulse-per-second
ptp_ts_96 out 96 PTP timestamp
ptp_ts_step out 1 PTP timestamp step
================= === ===== ===================

View File

@ -0,0 +1,95 @@
.. _mod_mqnic_ptp_perout:
====================
``mqnic_ptp_perout``
====================
``mqnic_ptp_perout`` implements the PTP period output functionality. It wraps ``ptp_perout`` and provides a register interface for control, see :ref:`rb_phc_perout`.
Parameters
==========
.. object:: REG_ADDR_WIDTH
Register interface address width, default ``6``.
.. object:: REG_DATA_WIDTH
Register interface data width, default ``32``.
.. object:: REG_STRB_WIDTH
Register interface byte enable width, must be set to ``(REG_DATA_WIDTH/8)``.
.. object:: RB_BASE_ADDR
Base address of control register block, default ``0``.
.. object:: RB_NEXT_PTR
Address of next control register block, default ``0``.
Ports
=====
.. object:: clk
Logic clock.
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
clk in 1 Logic clock
====== === ===== ==================
.. object:: rst
Logic reset, active high
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
rst in 1 Logic reset, active high
====== === ===== ==================
.. object:: reg
Control register interface
.. table::
=========== === =============== ===================
Signal Dir Width Description
=========== === =============== ===================
reg_wr_addr in REG_ADDR_WIDTH Write address
reg_wr_data in REG_DATA_WIDTH Write data
reg_wr_strb in REG_STRB_WIDTH Write byte enable
reg_wr_en in 1 Write enable
reg_wr_wait out 1 Write wait
reg_wr_ack out 1 Write acknowledge
reg_rd_addr in REG_ADDR_WIDTH Read address
reg_rd_en in 1 Read enable
reg_rd_data out REG_DATA_WIDTH Read data
reg_rd_wait out 1 Read wait
reg_rd_ack out 1 Read acknowledge
=========== === =============== ===================
.. object:: ptp
PTP signals
.. table::
================= === ===== ===================
Signal Dir Width Description
================= === ===== ===================
ptp_ts_96 in 96 PTP timestamp
ptp_ts_step in 1 PTP timestamp step
ptp_perout_locked out 1 Period output locked
ptp_perout_error out 1 Period output error
ptp_perout_pulse out 1 Period output pulse
================= === ===== ===================

View File

@ -0,0 +1,242 @@
.. _mod_mqnic_tx_scheduler_block:
============================
``mqnic_tx_scheduler_block``
============================
``mqnic_tx_scheduler_block`` is the top-level block for the transmit scheduler. It is instantiated in :ref:`mod_mqnic_interface`. This is a pluggable module, intended to be replaced by a customized implementation via the build system. See .... for more details.
Two variations are provided:
* ``mqnic_tx_scheduler_block_rr``: round-robin transmit scheduler (:ref:`mod_tx_scheduler_rr`)
* ``mqnic_tx_scheduler_block_rr_tdma``: round-robin transmit scheduler (:ref:`mod_tx_scheduler_rr`) with TDMA scheduler controller
Parameters
==========
.. object:: PORTS
Number of ports, default ``1``.
.. object:: INDEX
Scheduler index, default ``0``.
.. object:: REG_ADDR_WIDTH
Width of control register interface address in bits, default ``16``.
.. object:: REG_DATA_WIDTH
Width of control register interface data in bits, default ``32``.
.. object:: REG_STRB_WIDTH
Width of control register interface strb, must be set to ``(REG_DATA_WIDTH/8)``.
.. object:: RB_BASE_ADDR
Register block base address, default ``0``.
.. object:: RB_NEXT_PTR
Register block next pointer, default ``0``.
.. object:: AXIL_DATA_WIDTH
Width of AXI lite data bus in bits, default ``32``.
.. object:: AXIL_ADDR_WIDTH
Width of AXI lite address bus in bits, default ``16``.
.. object:: AXIL_STRB_WIDTH
Width of AXI lite wstrb (width of data bus in words), must be set to ``AXIL_DATA_WIDTH/8``.
.. object:: AXIL_OFFSET
Offset to AXI lite interface, default ``0``.
.. object:: LEN_WIDTH
Length field width, default ``16``.
.. object:: REQ_TAG_WIDTH
Transmit request tag field width, default ``8``.
.. object:: OP_TABLE_SIZE
Number of outstanding operations, default ``16``.
.. object:: QUEUE_INDEX_WIDTH
Queue index width, default ``6``.
.. object:: PIPELINE
Pipeline setting, default ``3``.
.. object:: TDMA_INDEX_WIDTH
Scheduler TDMA index width, default ``8``.
.. object:: PTP_TS_WIDTH
PTP timestamp width, default ``96``.
.. object:: AXIS_TX_DEST_WIDTH
AXI stream tdest signal width, default ``$clog2(PORTS)+4``.
.. object:: MAX_TX_SIZE
Max transmit packet size, default ``2048``.
Ports
=====
.. object:: clk
Logic clock. Most interfaces are synchronous to this clock.
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
clk in 1 Logic clock
====== === ===== ==================
.. object:: rst
Logic reset, active high
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
rst in 1 Logic reset, active high
====== === ===== ==================
.. object:: ctrl_reg
Control register interface
.. table::
================ === =============== ===================
Signal Dir Width Description
================ === =============== ===================
ctrl_reg_wr_addr in REG_ADDR_WIDTH Write address
ctrl_reg_wr_data in REG_DATA_WIDTH Write data
ctrl_reg_wr_strb in REG_STRB_WIDTH Write byte enable
ctrl_reg_wr_en in 1 Write enable
ctrl_reg_wr_wait out 1 Write wait
ctrl_reg_wr_ack out 1 Write acknowledge
ctrl_reg_rd_addr in REG_ADDR_WIDTH Read address
ctrl_reg_rd_en in 1 Read enable
ctrl_reg_rd_data out REG_DATA_WIDTH Read data
ctrl_reg_rd_wait out 1 Read wait
ctrl_reg_rd_ack out 1 Read acknowledge
================ === =============== ===================
.. object:: s_axil
AXI-Lite slave interface. This interface provides access to memory-mapped per-queue control registers.
.. table::
============== === =============== ===================
Signal Dir Width Description
============== === =============== ===================
s_axil_awaddr in AXIL_ADDR_WIDTH Write address
s_axil_awprot in 3 Write protect
s_axil_awvalid in 1 Write address valid
s_axil_awready out 1 Write address ready
s_axil_wdata in AXIL_DATA_WIDTH Write data
s_axil_wstrb in AXIL_STRB_WIDTH Write data strobe
s_axil_wvalid in 1 Write data valid
s_axil_wready out 1 Write data ready
s_axil_bresp out 2 Write response status
s_axil_bvalid out 1 Write response valid
s_axil_bready in 1 Write response ready
s_axil_araddr in AXIL_ADDR_WIDTH Read address
s_axil_arprot in 3 Read protect
s_axil_arvalid in 1 Read address valid
s_axil_arready out 1 Read address ready
s_axil_rdata out AXIL_DATA_WIDTH Read response data
s_axil_rresp out 2 Read response status
s_axil_rvalid out 1 Read response valid
s_axil_rready in 1 Read response ready
============== === =============== ===================
.. object:: m_axis_tx_req
Transmit request output, for transmit requests to the transmit engine.
.. table::
=================== === ================== ===================
Signal Dir Width Description
=================== === ================== ===================
m_axis_tx_req_queue out QUEUE_INDEX_WIDTH Queue index
m_axis_tx_req_tag out REQ_TAG_WIDTH Tag
m_axis_tx_req_dest out AXIS_TX_DEST_WIDTH Destination port and TC
m_axis_tx_req_valid out 1 Valid
m_axis_tx_req_ready in 1 Ready
=================== === ================== ===================
.. object:: s_axis_tx_req_status
Transmit request status input, for responses from the transmit engine.
.. table::
========================== === ============= ===================
Signal Dir Width Description
========================== === ============= ===================
s_axis_tx_req_status_len in LEN_WIDTH Packet length
s_axis_tx_req_status_tag in REQ_TAG_WIDTH Tag
s_axis_tx_req_status_valid in 1 Valid
========================== === ============= ===================
.. object:: s_axis_doorbell
Doorbell input, for enqueue notifications from the transmit queue manager.
.. table::
===================== === ================= ===================
Signal Dir Width Description
===================== === ================= ===================
s_axis_doorbell_queue in QUEUE_INDEX_WIDTH Queue index
s_axis_doorbell_valid in 1 Valid
===================== === ================= ===================
.. object:: ptp_ts
PTP time input from PTP clock
.. table::
=========== === ============ ===================
Signal Dir Width Description
=========== === ============ ===================
ptp_ts_96 in PTP_TS_WIDTH PTP time
ptp_ts_step in 1 PTP clock step
=========== === ============ ===================
.. object:: config
Configuration signals
.. table::
=========== === ============ ===================
Signal Dir Width Description
=========== === ============ ===================
mtu in LEN_WIDTH MTU
=========== === ============ ===================

View File

@ -0,0 +1,29 @@
.. _modules_overview:
========
Overview
========
Corundum has several unique architectural features. First, hardware queue states are stored efficiently in FPGA block RAM, enabling support for thousands of individually-controllable queues. These queues are associated with interfaces, and each interface can have multiple ports, each with its own independent transmit scheduler. This enables extremely fine-grained control over packet transmission. The scheduler module is designed to be modified or swapped out completely to implement different transmit scheduling schemes, including experimental schedulers. Coupled with PTP time synchronization, this enables time-based scheduling, including high precision TDMA.
The design of Corundum is modular and highly parametrized. Many configuration and structural options can be set at synthesis time by Verilog parameters, including interface and port counts, queue counts, memory sizes, etc. These design parameters are exposed in configuration registers that the driver reads to determine the NIC configuration, enabling the same driver to support many different boards and configurations without modification.
High-level overview
===================
.. _fig_overview_block:
.. figure:: /diagrams/svg/corundum_block.svg
Block diagram of the Corundum NIC. PCIe HIP: PCIe hard IP core; AXIL M: AXI lite master; DMA IF: DMA interface; AXI M: AXI master; PHC: PTP hardware clock; TXQ: transmit queue manager; TXCQ: transmit completion queue manager; RXQ: receive queue manager; RXCQ: receive completion queue manager; EQ: event queue manager; MAC + PHY: Ethernet media access controller (MAC) and physical interface layer (PHY).
A block diagram of the Corundum NIC is shown in :numref:`fig_overview_block`. At a high level, the NIC consists of several hierarchy levels. The top-level module primarily contains support and interfacing components. These components include the PCI express hard IP core and Ethernet interface components including MACs, PHYs, and associated serializers, along with an instance of an appropriate :ref:`mod_mqnic_core` wrapper, which provides the DMA interface. This core module contains the PTP clock (:ref:`mod_mqnic_ptp`), application section (:ref:`mod_mqnic_app_block`), and one or more :ref:`mod_mqnic_interface` module instances. Each interface module corresponds to an operating-system-level network interface (e.g. ``eth0``), and contains the queue management logic, descriptor and completion handling logic, transmit schedulers, transmit and receive engines, transmit and receive datapaths, and a scratchpad RAM for temporarily storing incoming and outgoing packets during DMA operations. The queue management logic maintains the queue state for all of the NIC queues---transmit, transmit completion, receive, receive completion, and event queues.
For each interface, the transmit scheduler (:ref:`mod_mqnic_tx_scheduler_block`) in the interface module decides which queues are designated for transmission. The transmit scheduler generates commands for the transmit engine, which coordinates operations on the transmit datapath. The scheduler module is a flexible functional block that can be modified or replaced to support arbitrary schedules, which may be event driven. The default implementation of the scheduler in :ref:`mod_tx_scheduler_rr` is simple round robin. All ports associated with the same interface module share the same set of transmit queues and appear as a single, unified interface to the operating system. This enables flows to be migrated between ports or load-balanced across multiple ports by changing only the transmit scheduler settings without affecting the rest of the network stack. This dynamic, scheduler-defined mapping of queues to ports is a unique feature of Corundum that can enable research into new protocols and network architectures, including parallel networks and optically-switched networks.
In the receive direction, incoming packets pass through a flow hash module to determine the target receive queue and generate commands for the receive engine, which coordinates operations on the receive datapath. Because all ports in the same interface module share the same set of receive queues, incoming flows on different ports are merged together into the same set of queues.
An application block (:ref:`mod_mqnic_app_block`) is provided for customization, including packet processing, routing, and in-network compute applications. The application block has connections to several different subsystems.
The components on the NIC are interconnected with several different interfaces including AXI lite, AXI stream, and a custom segmented memory interface for DMA operations. AXI lite is used for the control path from the driver to the NIC. It is used to initialize and configure the NIC components and to control the queue pointers during transmit and receive operations. AXI stream interfaces are used for transferring packetized data within the NIC. The segmented memory interface serves to connect the PCIe DMA interface to the NIC datapath and to the descriptor and completion handling logic.
The majority of the NIC logic runs in the PCIe user clock domain, which is nominally 250 MHz for all of the current design variants. Asynchronous FIFOs are used to interface with the MACs, which run in the serializer transmit and receive clock domains as appropriate---156.25 MHz for 10G, 390.625 MHz for 25G, and 322.265625 MHz for 100G.

View File

@ -0,0 +1,40 @@
.. _mod_queue_manager:
=================
``queue_manager``
=================
``queue_manager`` implements the queue management logic for the transmit and receive queues. It stores host to device queue state in block RAM or ultra RAM.
Operation
=========
Communication of packet data between the Corundum NIC and the driver is mediated via descriptor and completion queues. Descriptor queues form the host-to-NIC communications channel, carrying information about where individual packets are stored in system memory. Completion queues form the NIC-to-host communications channel, carrying information about completed operations and associated metadata. The descriptor and completion queues are implemented as ring buffers that reside in DMA-accessible system memory, while the NIC hardware maintains the necessary queue state information. This state information consists of a pointer to the DMA address of the ring buffer, the size of the ring buffer, the producer and consumer pointers, and a reference to the associated completion queue. The required state for each queue fits into 128 bits.
The queue management logic for the Corundum NIC must be able to efficiently store and manage the state for thousands of queues. This means that the queue state must be completely stored in block RAM (BRAM) or ultra RAM (URAM) on the FPGA. Since a 128 bit RAM is required and URAM blocks are 72x4096, storing the state for 4096 queues requires only 2 URAM instances. Utilizing URAM instances enables scaling the queue management logic to handle at least 32,768 queues per interface.
In order to support high throughput, the NIC must be able to process multiple descriptors in parallel. Therefore, the queue management logic must track multiple in-progress operations, reporting updated queue pointers to the driver as the operations are completed. The state required to track in-process operations is much smaller than the state required to describe the queue state itself. Therefore the in-process operation state is stored in flip-flops and distributed RAM.
The NIC design uses two queue manager modules: ``queue_manager`` is used to manage host-to-NIC descriptor queues, while ``cpl_queue_manager`` is used to manage NIC-to-host completion queues. The modules are similar except for a few minor differences in terms of pointer handling, fill handling, and doorbell/event generation. Because of the similarities, this section will discuss only the operation of the ``queue_manager`` module.
The BRAM or URAM array used to store the queue state information requires several cycles of latency for each read operation, so the ``queue_manager`` is built with a pipelined architecture to facilitate multiple concurrent operations. The pipeline supports four different operations: register read, register write, dequeue/enqueue request, and dequeue/enqueue commit. Register-access operations over an AXI lite interface enable the driver to initialize the queue state and provide pointers to the allocated host memory as well as access the producer and consumer pointers during normal operation.
.. _fig_queue_manager_block:
.. figure:: /diagrams/svg/corundum_queue_manager_block.svg
Block diagram of the queue manager module, showing the queue state RAM and operation table. Ind = index, Addr = DMA address, Op = index in operation table, Act = active, LS = log base 2 of queue size, Cpl = completion queue index, Tail = tail or consumer pointer, Head = head or producer pointer, Com = committed; QI = queue index; Ptr = new queue pointer
A block diagram of the queue manager module is shown in :numref:`fig_queue_manager_block`. The BRAM or URAM array used to store the queue state information requires several cycles of latency for each read operation, so the ``queue_manager`` is built with a pipelined architecture to facilitate multiple concurrent operations. The pipeline supports four different operations: register read, register write, dequeue/enqueue request, and dequeue/enqueue commit. Register-access operations over an AXI lite interface enable the driver to initialize the queue state and provide pointers to the allocated host memory as well as access the producer and consumer pointers during normal operation.
.. _fig_queue_pointers:
.. figure:: /diagrams/svg/queue_pointers.svg
Queue pointers on software ring buffers.
Each queue has three pointers associated with it, as shown in :numref:`fig_queue_pointers`---the producer pointer, the host-facing consumer pointer, and the shadow consumer pointer. The driver has control over the producer pointer and can read the host-facing consumer pointer. Entries between the consumer pointer and the producer pointer are under the control of the NIC and must not be modified by the driver. The driver enqueues a descriptor by writing it into the ring buffer at the index indicated by the producer pointer, issuing a memory barrier, then incrementing the producer pointer in the queue manager. The NIC dequeues descriptors by reading them out of the descriptor ring via DMA and incrementing the consumer pointer. The host-facing consumer pointer must not be incremented until the descriptor read operation completes, so the queue manager maintains an internal shadow consumer pointer to keep track of read operations that have started in addition to the host-facing pointer that is updated as the read operations are completed.
The dequeue request operation on the queue manager pipeline initiates a dequeue operation on a queue. If the target queue is disabled or empty, the operation is rejected with an *empty* or *error* status. Otherwise, the shadow consumer pointer is incremented and the physical address of the queue element is returned, along with the queue element index and an operation tag. Operations on any combination of queues can be initiated until the operation table is full. The dequeue request input is stalled when the table is full. As the read operations complete, the dequeue operations are committed to free the operation table entry and update the host-facing consumer pointer. Operations can be committed in any order, simply setting the commit flag in the operation table, but the operation table entries will be freed and host-facing consumer pointer will be updated in-order to ensure descriptors being processed are not modified by the driver.
The operation table tracks in-process queue operations that have yet to be committed. Entries in the table consist of an active flag, a commit flag, the queue index, and the index of the next element in the queue. The queue state also contains a pointer to the most recent entry for that queue in the operation table. During an enqueue operation, the operation table is checked to see if there are any outstanding operations on that queue. If so, the consumer pointer for the most recent operation is incremented and stored in the new operation table entry. Otherwise, the current consumer pointer is incremented. When a dequeue commit request is received, the commit bit is set for the corresponding entry. The entries are then committed in-order, updating the host-facing consumer pointer with the pointer from the operation table and clearing the active bit in the operation table entry.
Both the queue manager and completion queue manager modules generate notifications during enqueue operations. In a queue manager, when the driver updates a producer pointer on an enabled queue, the module issues a doorbell event that is passed to the transmit schedulers for the associated ports. Similarly, completion queue managers generate events on hardware enqueue operations, which are passed to the event subsystem and ultimately generate interrupts. To reduce the number of events and interrupts, completion queues also have an *armed* status. An armed completion queue will generate a single event, disarming itself in the process. The driver must re-arm the queue after handling the event.

View File

@ -0,0 +1,7 @@
.. _mod_rx_checksum:
===============
``rx_checksum``
===============
``rx_checksum`` implements the receive checksum offloading support. It computes 16 bit checksum of Ethernet frame payload to aid in IP checksum offloading by the host network stack.

View File

@ -0,0 +1,7 @@
.. _mod_rx_engine:
=============
``rx_engine``
=============
``rx_engine`` manages receive datapath operations including descriptor dequeue and fetch via DMA, packet reception, data writeback via DMA, and completion enqueue and writeback via DMA. It also handles PTP timestamps for inclusion in completion records.

View File

@ -0,0 +1,7 @@
.. _mod_rx_hash:
===========
``rx_hash``
===========
``rx_hash`` implements flow hashing on the receive path. It extracts IP addresses and ports from packet headers and computes a 32-bit Toeplitz flow hash.

View File

@ -0,0 +1,7 @@
.. _mod_tx_checksum:
===============
``tx_checksum``
===============
``tx_checksum`` implements the transmit checksum offloading support. It computes 16 bit checksum of frame data with specified start offset, then inserts computed checksum at the position specified by the host network stack.

View File

@ -0,0 +1,7 @@
.. _mod_tx_engine:
=============
``tx_engine``
=============
``tx_engine`` manages transmit datapath operations including descriptor dequeue and fetch via DMA, packet data fetch via DMA, packet transmission, and completion enqueue and writeback via DMA. It also handles PTP timestamps for inclusion in completion records.

View File

@ -0,0 +1,196 @@
.. _mod_tx_scheduler_rr:
===================
``tx_scheduler_rr``
===================
Operation
=========
The default transmit scheduler used in the Corundum NIC is a simple round-robin scheduler implemented in the ``tx_scheduler_rr`` module. The scheduler sends commands to the transmit engine to initiate transmit operations out of the NIC transmit queues. The round-robin scheduler contains basic queue state for all queues, a FIFO to store currently-active queues and enforce the round-robin schedule, and an operation table to track in-process transmit operations.
Similar to the queue management logic, the round-robin transmit scheduler also stores queue state information in BRAM or URAM on the FPGA so that it can scale to support a large number of queues. The transmit scheduler also uses a processing pipeline to hide the memory access latency.
The transmit scheduler module has four main interfaces: an AXI lite register interface and three streaming interfaces. The AXI lite interface permits the driver to change scheduler parameters and enable/disable queues. The first streaming interface provides doorbell events from the queue management logic when the driver enqueues packets for transmission. The second streaming interface carries transmit commands generated by the scheduler to the transmit engine. Each command consists of a queue index to transmit from, along with a tag for tracking in-process operations. The final streaming interface returns transmit operation status information back to the scheduler. The status information informs the scheduler of the length of the transmitted packet, or if the transmit operation failed due to an empty or disabled queue.
The transmit scheduler module can be extended or replaced to implement arbitrary scheduling algorithms. This enables Corundum to be used as a platform to evaluate experimental scheduling algorithms. It is also possible to provide additional inputs to the transmit scheduler module, including feedback from the receive path, which can be used to implement new protocols and congestion control techniques. Connecting the scheduler to the PTP hardware clock can be used to support TDMA, which can be used to implement circuit-switched architectures.
The structure of the transmit scheduler logic is similar to the queue management logic in that it stores queue state in BRAM or URAM and uses a processing pipeline. However there are a number of significant differences. First, the scheduler logic is designed so that the scheduler does not stall when a queue is empty and a subsequent dequeue operation fails. Second, the scheduler contains a FIFO to enforce the round-robin schedule. The use of this FIFO requires an explicit reset routine to make the internal state (namely the scheduled flag bits) consistent after a reset. Third, the scheduler also contains logic to track the active state of each queue based on incoming doorbell requests and dequeue failures.
.. _fig_tx_scheduler_block:
.. figure:: /diagrams/svg/corundum_tx_scheduler_block.svg
Block diagram of the transmit scheduler module, showing queue state RAM and operation table. Ind = index, En = queue enable, GE = global enable, SE = schedule enable, Act = active, Sch = scheduled, QI = queue index, DB = doorbell, H = head, N = next, P = previous
A block diagram of the transmit scheduler module is shown in :numref:`fig_tx_scheduler_block`. The transmit scheduler is built around a *scheduled queue* FIFO. This FIFO stores the indices of the currently-scheduled queues. An active queue is one that is presumed to have at least one packet available for transmission, an enabled queue is one that has been enabled for transmission, and a scheduled queue is one that has an entry in the scheduler FIFO. A queue will be scheduled (marked as scheduled and inserted into the FIFO) if it is both active and enabled. A queue will be descheduled when it reaches the front of the schedule FIFO, but is not enabled or not active. Queue enable states are controlled via three different enable bits per queue: queue enable, global enable, and schedule enable. The queue enable and global enable bits are writable via AXI lite, while the schedule enable bit is controlled from the scheduler control module via an internal interface. A queue is enabled when the queue enable bit and either the global enable or schedule enable bits are set. Queues become active when doorbell events are received, and queues become inactive when a transmit request fails due to an empty queue.
Tracking the queue active states must be done carefully for several reasons. First, the driver can update the producer pointer after enqueuing more than one packet, so the number of generated doorbell events does not necessarily correspond to the number of packets that were enqueued. Second, because the queues are shared among all ports on the same interface, multiple ports can attempt to send packets from the same queue, and the port transmit schedulers have no visibility into what the other schedulers are doing. Therefore, the most reliable method for determining that a queue is empty is to try sending from it, and flagging the failure. Note that the cost of an error is much higher when the queue is active than when the queue is empty. Attempting to send from an empty queue costs a few clock cycles and temporarily occupies a few slots in corresponding operation tables. However, assuming a queue is empty when it is not will result in packets getting stuck in the queue. Fixing this stuck queue will not occur until the OS sends another packet on that queue and triggers another doorbell. Therefore, it is imperative to properly track doorbell events during transmit operations, as it is possible for a doorbell event to arrive after a dequeue attempt has failed, but before the failed transmit status arrives at the transmit scheduler module.
The pipeline in the transmit scheduler supports seven different operations: initialize, register read, register write, handle doorbell, transmit complete, scheduler control, and transmit request. The initialize operation is used to ensure the scheduler state is consistent after a reset. Register access operations over an AXI lite interface enable the driver to read all of the per-queue state and set the queue enable and global enable bits. The pipeline also handles incoming doorbell requests from the transmit queue manager module as well as queue enable/disable requests from the scheduler control module. Finally, the transmit request and transmit complete operations are used to generate transmit requests and handle the necessary queue state updates when the transmit operations complete.
Queues can become scheduled based on a register write that enables an active queue, a doorbell that activates an enabled queue, a scheduler operation that enables an active queue, and a transmit completion on an enabled queue that is either successful or has the doorbell bit set in the operation table. Queues can only be descheduled when the queue index advances to the front of the scheduler FIFO. If this occurs when the queue is both active and enabled, then the queue can be rescheduled and a transmit request generated. When the transmit operation completes, the transmit status response will be temporarily stored in a small FIFO and then processed by the pipeline to update the corresponding operation table entry and, if necessary, reschedule the queue.
The operation table tracks in-process transmit operations. Entries in the table consist of an active flag, the queue index, a doorbell flag, a head flag, a next pointer, and a previous pointer. The next and previous pointers form a linked list, enabling entries to be removed in any order while preserving the doorbell flag in the table. This prevents doorbells from getting 'lost' and the queue being mistakenly marked as inactive. A separate linked list is formed for each queue with active transmit operations. The operation table is implemented in such a way that it fits in distributed RAM.
Parameters
==========
.. object:: AXIL_DATA_WIDTH
Width of AXI lite data bus in bits, default ``32``.
.. object:: AXIL_ADDR_WIDTH
Width of AXI lite address bus in bits, default ``16``.
.. object:: AXIL_STRB_WIDTH
Width of AXI lite wstrb (width of data bus in words), must be set to ``AXIL_DATA_WIDTH/8``.
.. object:: LEN_WIDTH
Length field width, default ``16``.
.. object:: REQ_TAG_WIDTH
Transmit request tag field width, default ``8``.
.. object:: OP_TABLE_SIZE
Number of outstanding operations, default ``16``.
.. object:: QUEUE_INDEX_WIDTH
Queue index width, default ``6``.
.. object:: PIPELINE
Pipeline setting, default ``3``.
Ports
=====
.. object:: clk
Logic clock. Most interfaces are synchronous to this clock.
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
clk in 1 Logic clock
====== === ===== ==================
.. object:: rst
Logic reset, active high
.. table::
====== === ===== ==================
Signal Dir Width Description
====== === ===== ==================
rst in 1 Logic reset, active high
====== === ===== ==================
.. object:: m_axis_tx_req
Transmit request output, for transmit requests to the transmit engine.
.. table::
=================== === ================== ===================
Signal Dir Width Description
=================== === ================== ===================
m_axis_tx_req_queue out QUEUE_INDEX_WIDTH Queue index
m_axis_tx_req_tag out REQ_TAG_WIDTH Tag
m_axis_tx_req_dest out AXIS_TX_DEST_WIDTH Destination port and TC
m_axis_tx_req_valid out 1 Valid
m_axis_tx_req_ready in 1 Ready
=================== === ================== ===================
.. object:: s_axis_tx_req_status
Transmit request status input, for responses from the transmit engine.
.. table::
========================== === ============= ===================
Signal Dir Width Description
========================== === ============= ===================
s_axis_tx_req_status_len in LEN_WIDTH Packet length
s_axis_tx_req_status_tag in REQ_TAG_WIDTH Tag
s_axis_tx_req_status_valid in 1 Valid
========================== === ============= ===================
.. object:: s_axis_doorbell
Doorbell input, for enqueue notifications from the transmit queue manager.
.. table::
===================== === ================= ===================
Signal Dir Width Description
===================== === ================= ===================
s_axis_doorbell_queue in QUEUE_INDEX_WIDTH Queue index
s_axis_doorbell_valid in 1 Valid
===================== === ================= ===================
.. object:: s_axis_sched_ctrl
Scheduler control input, to permit user logic to dynamically enable/disable queues.
.. table::
======================== === ================= ===================
Signal Dir Width Description
======================== === ================= ===================
s_axis_sched_ctrl_queue in QUEUE_INDEX_WIDTH Queue index
s_axis_sched_ctrl_enable in 1 Queue enable
s_axis_sched_ctrl_valid in 1 Valid
s_axis_sched_ctrl_ready out 1 Ready
======================== === ================= ===================
.. object:: s_axil
AXI-Lite slave interface. This interface provides access to memory-mapped per-queue control registers.
.. table::
============== === =============== ===================
Signal Dir Width Description
============== === =============== ===================
s_axil_awaddr in AXIL_ADDR_WIDTH Write address
s_axil_awprot in 3 Write protect
s_axil_awvalid in 1 Write address valid
s_axil_awready out 1 Write address ready
s_axil_wdata in AXIL_DATA_WIDTH Write data
s_axil_wstrb in AXIL_STRB_WIDTH Write data strobe
s_axil_wvalid in 1 Write data valid
s_axil_wready out 1 Write data ready
s_axil_bresp out 2 Write response status
s_axil_bvalid out 1 Write response valid
s_axil_bready in 1 Write response ready
s_axil_araddr in AXIL_ADDR_WIDTH Read address
s_axil_arprot in 3 Read protect
s_axil_arvalid in 1 Read address valid
s_axil_arready out 1 Read address ready
s_axil_rdata out AXIL_DATA_WIDTH Read response data
s_axil_rresp out 2 Read response status
s_axil_rvalid out 1 Read response valid
s_axil_rready in 1 Read response ready
============== === =============== ===================
.. object:: control
Control and status signals
.. table::
=========== === ============ ===================
Signal Dir Width Description
=========== === ============ ===================
enable in enable Enable
active out enable Active
=========== === ============ ===================

246
docs/source/operations.rst Normal file
View File

@ -0,0 +1,246 @@
.. _operations:
==========
Operations
==========
This is a list of all of the operations involved in sending and receiving packets, across both hardware and software.
Packet transmission
===================
#. linux: The linux kernel calls ``mqnic_start_xmit()`` (via ``ndo_start_xmit()``) with an ``sk_buff`` for transmission
#. ``mqnic_start_xmit()`` (``mqnic_tx.c``): The driver determines the destination transmit queue with ``skb_get_queue_mapping``
#. ``mqnic_start_xmit()`` (``mqnic_tx.c``): The driver marks the ``sk_buff`` for timestamping, if requested
#. ``mqnic_start_xmit()`` (``mqnic_tx.c``): The driver generates the hardware IP checksum command and writes it into the descriptor
#. ``mqnic_map_skb()`` (``mqnic_tx.c``): The driver writes a reference to the ``sk_buff`` into ``ring->tx_info``
#. ``mqnic_map_skb()`` (``mqnic_tx.c``): The driver generates DMA mappings for the ``sk_buff`` (``skb_frag_dma_map()``/``dma_map_single()``) and builds the descriptor
#. ``mqnic_start_xmit()`` (``mqnic_tx.c``): The driver enqueues the packet by incrementing its local copy of the producer pointer
#. ``mqnic_start_xmit()`` (``mqnic_tx.c``): At the end of a batch of packets, the driver writes the updated producer pointer to the NIC via MMIO
#. :ref:`mod_queue_manager` ``s_axil_*``: The MMIO write arrives at the queue manager via AXI lite
#. :ref:`mod_queue_manager` ``m_axis_doorbell_*``: The queue manager updates the producer pointer and generates a doorbell event
#. :ref:`mod_tx_scheduler_rr` ``s_axis_doorbell_*``: The doorbell event arrives at the port schedulers
#. :ref:`mod_tx_scheduler_rr`: The scheduler marks the queue as active and schedules it if necessary
#. :ref:`mod_tx_scheduler_rr`: The scheduler decides to send a packet
#. :ref:`mod_tx_scheduler_rr` ``m_axis_tx_req_*``: The scheduler generates a transmit request
#. :ref:`mod_tx_engine` ``s_axis_tx_req_*``: The transmit request arrives at the transmit engine
#. :ref:`mod_tx_engine` ``m_axis_desc_req_*``: The transmit engine issues a descriptor request
#. :ref:`mod_desc_fetch` ``s_axis_desc_req_*``: The descriptor request arrives at the descriptor fetch module
#. :ref:`mod_desc_fetch` ``m_axis_desc_dequeue_req_*``: The descriptor fetch module issues a dequeue request to the queue manager
#. :ref:`mod_queue_manager` ``s_axis_dequeue_req_*``: The dequeue request arrives at the queue manager module
#. :ref:`mod_queue_manager`: If the queue is not empty, the queue manager starts a dequeue operation on the queue
#. :ref:`mod_queue_manager` ``m_axis_dequeue_resp_*``: The queue manager sends a response containing the operation status and DMA address
#. :ref:`mod_desc_fetch` ``s_axis_desc_dequeue_resp_*``: The response arrives at the descriptor fetch module
#. :ref:`mod_desc_fetch` ``m_axis_req_status_*``: The descriptor module reports the descriptor fetch status
#. :ref:`mod_desc_fetch` ``m_axis_dma_read_desc_*``: The descriptor module issues a DMA read request
#. ``dma_if_pcie_rd`` ``s_axis_read_desc_*``: The requst arrives at the DMA read interface
#. ``dma_if_pcie_rd``: The DMA read interface issues a PCIe read request
#. ``dma_if_pcie_rd``: The read data comes back in a completion packet and is written to the descriptor fetch local DMA RAM
#. ``dma_if_pcie_rd`` ``m_axis_read_desc_status_*``: The DMA read interface issues a status message
#. :ref:`mod_desc_fetch` ``m_axis_desc_dequeue_commit_*``: The descriptor fetch module issues a dequeue commit message
#. :ref:`mod_queue_manager`: The queue manager commits the dequeue operation and updates the consumer pointer
#. :ref:`mod_desc_fetch` ``dma_read_desc_*``: The descriptor fetch module issues a read request to its internal DMA module
#. :ref:`mod_desc_fetch` ``m_axis_desc_*``: The internal DMA module reads the descriptor and transfers it via AXI stream
#. :ref:`mod_tx_engine`: The descriptor arrives at the transmit engine
#. :ref:`mod_tx_engine`: The transmit engine stores the descriptor data
#. :ref:`mod_tx_engine` ``m_axis_dma_read_desc_*``: The transmit engine issues a DMA read request
#. ``dma_if_pcie_rd`` ``s_axis_read_desc_*``: The requst arrives at the DMA read interface
#. ``dma_if_pcie_rd``: The DMA read interface issues a PCIe read request
#. ``dma_if_pcie_rd``: The read data comes back in a completion packet and is written to the interface local DMA RAM
#. ``dma_if_pcie_rd`` ``m_axis_read_desc_status_*``: The DMA read interface issues a status message
#. :ref:`mod_tx_engine` ``m_axis_tx_desc_*``: The transmit engine issues a read request to the interface DMA engine
#. :ref:`mod_tx_engine` ``m_axis_tx_csum_cmd_*``: The transmit engine issues a transmit checksum command
#. :ref:`mod_mqnic_interface_tx` ``tx_axis_*``: The interface DMA module reads the packet data from interface local DMA RAM and transfers it via AXI stream
#. :ref:`mod_mqnic_egress`: egress processing
#. :ref:`mod_tx_checksum`: The transmit checksum module computes and inserts the checksum
#. :ref:`mod_mqnic_app_block` ``s_axis_if_tx``: data is presented to the application section
#. :ref:`mod_mqnic_app_block` ``m_axis_if_tx``: data is returned from the application section
#. :ref:`mod_mqnic_core`: Data passes enters per-interface transmit FIFO module and is divided into per-port, per-traffic-class FIFOs
#. :ref:`mod_mqnic_app_block` ``s_axis_sync_tx``: data is presented to the application section
#. :ref:`mod_mqnic_app_block` ``m_axis_sync_tx``: data is returned from the application section
#. :ref:`mod_mqnic_core`: Data passes through per-port transmit async FIFO module and is transferred to MAC TX clock domain
#. :ref:`mod_mqnic_app_block` ``s_axis_sync_tx``: data is presented to the application section
#. :ref:`mod_mqnic_app_block` ``m_axis_sync_tx``: data is returned from the application section
#. :ref:`mod_mqnic_l2_egress`: layer 2 egress processing
#. :ref:`mod_mqnic_core`: data leaves through transmit streaming interfaces
#. The packet arrives at the MAC
#. The MAC produces a PTP timestamp
#. :ref:`mod_tx_engine`: The PTP timestamp arrives at the transmit engine
#. :ref:`mod_tx_engine` ``m_axis_cpl_req_*``: The transmit engine issues a completion write request
#. :ref:`mod_cpl_write`: The completion write module writes the completion data into its local DMA RAM
#. :ref:`mod_cpl_write` ``m_axis_cpl_enqueue_req_*``: The completion write module issues an enqueue request to the completion queue manager
#. :ref:`mod_cpl_queue_manager` ``m_axis_enqueue_req_*``: The enqueue request arrives at the completion queue manager module
#. :ref:`mod_cpl_queue_manager`: If the queue is not full, the queue manager starts an enqueue operation on the queue
#. :ref:`mod_cpl_queue_manager` ``m_axis_enqueue_resp_*``: The completion queue manager sends a response containing the operation status and DMA address
#. :ref:`mod_cpl_write`: The response arrives at the completion write module
#. :ref:`mod_cpl_write` ``m_axis_req_status_*``: The completion write module reports the completion write status
#. :ref:`mod_desc_fetch` ``m_axis_dma_write_desc_*``: The completion write module issues a DMA write request
#. ``dma_if_pcie_wr`` ``s_axis_write_desc_*``: The requst arrives at the DMA write interface
#. ``dma_if_pcie_wr``: The DMA write interface reads the completion data from the completion write module local DMA RAM
#. ``dma_if_pcie_wr``: The DMA write interface issues a PCIe write request
#. ``dma_if_pcie_wr`` ``m_axis_write_desc_status_*``: The DMA write interface issues a status message
#. :ref:`mod_cpl_write` ``m_axis_desc_enqueue_commit_*``: The completion write module issues an enqueue commit message
#. :ref:`mod_cpl_queue_manager`: The completion queue manager commits the enqueue operation and updates the producer pointer
#. :ref:`mod_cpl_queue_manager` ``m_axis_event_*``: The completion queue manager issues an event, if armed
#. :ref:`mod_cpl_write`: The event arrives at the completion write module
#. :ref:`mod_cpl_write`: The completion write module writes the event data into its local DMA RAM
#. :ref:`mod_cpl_write` ``m_axis_cpl_enqueue_req_*``: The completion write module issues an enqueue request to the completion queue manager
#. :ref:`mod_cpl_queue_manager` ``s_axis_enqueue_req_*``: The enqueue request arrives at the completion queue manager module
#. :ref:`mod_cpl_queue_manager`: If the queue is not full, the queue manager starts an enqueue operation on the queue
#. :ref:`mod_cpl_queue_manager` ``m_axis_enqueue_resp_*``: The completion queue manager sends a response containing the operation status and DMA address
#. :ref:`mod_cpl_write` ``s_axis_cpl_enqueue_resp_*``: The response arrives at the completion write module
#. :ref:`mod_cpl_write` ``m_axis_req_status_*``: The completion write module reports the completion write status
#. :ref:`mod_desc_fetch` ``m_axis_dma_write_desc_*``: The completion write module issues a DMA write request
#. ``dma_if_pcie_wr`` ``s_axis_write_desc_*``: The requst arrives at the DMA write interface
#. ``dma_if_pcie_wr``: The DMA write interface reads the event data from the completion write module local DMA RAM
#. ``dma_if_pcie_wr``: The DMA write interface issues a PCIe write request
#. ``dma_if_pcie_wr`` ``m_axis_write_desc_status_*``: The DMA write interface issues a status message
#. :ref:`mod_cpl_write` ``m_axis_desc_enqueue_commit_*``: The completion write module issues an enqueue commit message
#. :ref:`mod_cpl_queue_manager`: The completion queue manager commits the enqueue operation and updates the producer pointer
#. :ref:`mod_cpl_queue_manager` ``m_axis_event_*``: The completion queue manager issues an interrupt, if armed
#. linux: The linux kernel calls ``mqnic_irq_handler()``
#. ``mqnic_irq_handler()`` (``mqnic_irq.c``): The driver calls the EQ handler via the notifier chain (``atomic_notifier_call_chain()``)
#. ``mqnic_eq_int()`` (``mqnic_eq.c``): The driver calls ``mqnic_process_eq()``
#. ``mqnic_process_eq()`` (``mqnic_eq.c``): The driver processes the event queue, which calls the appropriate handler (``mqnic_tx_irq()``)
#. ``mqnic_tx_irq()`` (``mqnic_tx.c``): The driver enables NAPI polling on the queue (``napi_schedule_irqoff()``)
#. ``mqnic_eq_int()`` (``mqnic_eq.c``): The driver rearms the EQ (``mqnic_arm_eq()``)
#. NAPI: The linux kernel calls ``mqnic_poll_tx_cq()``
#. ``mqnic_poll_tx_cq()`` (``mqnic_tx.c``): The driver calls ``mqnic_process_tx_cq()``
#. ``mqnic_process_tx_cq()`` (``mqnic_tx.c``): The driver reads the completion queue producer pointer from the NIC
#. ``mqnic_process_tx_cq()`` (``mqnic_tx.c``): The driver reads the completion record
#. ``mqnic_process_tx_cq()`` (``mqnic_tx.c``): The driver reads the ``sk_buff`` from ``ring->tx_info``
#. ``mqnic_process_tx_cq()`` (``mqnic_tx.c``): The driver completes the transmit timestamp operation
#. ``mqnic_process_tx_cq()`` (``mqnic_tx.c``): The driver calls ``mqnic_free_tx_desc()``
#. ``mqnic_free_tx_desc()`` (``mqnic_tx.c``): The driver unmaps the ``sk_buff`` (``dma_unmap_single()``/``dma_unmap_page()``)
#. ``mqnic_free_tx_desc()`` (``mqnic_tx.c``): The driver frees the ``sk_buff`` (``napi_consume_skb()``)
#. ``mqnic_process_tx_cq()`` (``mqnic_tx.c``): The driver dequeues the completion record by incrementing the completion queue consumer pointer
#. ``mqnic_process_tx_cq()`` (``mqnic_tx.c``): The driver writes the updated consumer pointer via MMIO
#. ``mqnic_process_tx_cq()`` (``mqnic_tx.c``): The driver reads the queue consumer pointer from the NIC
#. ``mqnic_process_tx_cq()`` (``mqnic_tx.c``): The driver increments the ring consumer pointer for in-order freed descriptors
#. ``mqnic_process_tx_cq()`` (``mqnic_tx.c``): The driver wakes the queue if it was stopped (``netif_tx_wake_queue()``)
#. ``mqnic_poll_tx_cq()`` (``mqnic_tx.c``): The driver disables NAPI polling, when idle (``napi_complete()``)
#. ``mqnic_poll_tx_cq()`` (``mqnic_tx.c``): The driver rearms the CQ (``mqnic_arm_cq()``)
Packet reception
================
init:
#. ``mqnic_activate_rx_ring()`` (``mqnic_rx.c``): The driver calls ``mqnic_refill_rx_buffers()``
#. ``mqnic_refill_rx_buffers()`` (``mqnic_rx.c``): The driver calls ``mqnic_prepare_rx_desc()`` for each empty location in the ring
#. ``mqnic_prepare_rx_desc()`` (``mqnic_rx.c``): The driver allocates memory pages (``dev_alloc_pages()``)
#. ``mqnic_prepare_rx_desc()`` (``mqnic_rx.c``): The driver maps the pages (``dev_alloc_pages()``)
#. ``mqnic_prepare_rx_desc()`` (``mqnic_rx.c``): The driver writes a pointer to the page struct in ``ring->rx_info``
#. ``mqnic_prepare_rx_desc()`` (``mqnic_rx.c``): The driver writes a descriptor with the DMA pointer and length
#. ``mqnic_refill_rx_buffers()`` (``mqnic_rx.c``): The driver enqueues the descriptor by incrementing its local copy of the producer pointer
#. ``mqnic_refill_rx_buffers()`` (``mqnic_rx.c``): At the end of the loop, the driver writes the updated producer pointer to the NIC via MMIO
receive:
#. A packet arrives at the MAC
#. The MAC produces a PTP timestamp
#. :ref:`mod_mqnic_core`: data enters through receive streaming interfaces
#. :ref:`mod_mqnic_l2_ingress`: layer 2 ingress processing
#. :ref:`mod_mqnic_app_block` ``s_axis_sync_rx``: data is presented to the application section
#. :ref:`mod_mqnic_app_block` ``m_axis_sync_rx``: data is returned from the application section
#. :ref:`mod_mqnic_core`: Data passes through per-port receive async FIFO module and is transferred to core clock domain
#. :ref:`mod_mqnic_app_block` ``s_axis_sync_rx``: data is presented to the application section
#. :ref:`mod_mqnic_app_block` ``m_axis_sync_rx``: data is returned from the application section
#. :ref:`mod_mqnic_core`: Data passes enters per-interface receive FIFO module and is placed into per-port FIFOs, then aggregated into a single stream
#. :ref:`mod_mqnic_app_block` ``s_axis_if_rx``: data is presented to the application section
#. :ref:`mod_mqnic_app_block` ``m_axis_if_rx``: data is returned from the application section
#. :ref:`mod_mqnic_ingress`: ingress processing
#. :ref:`mod_rx_hash`: The receive hash module computes the packet flow hash
#. :ref:`mod_rx_checksum`: The receive checksum module computes the packet payload checksum
#. :ref:`mod_mqnic_interface_rx`: A receive request is generated
#. :ref:`mod_rx_engine`: The receive hash arrives at the receive engine
#. :ref:`mod_rx_engine`: The receive checksum arrives at the receive engine
#. :ref:`mod_rx_engine`: The receive request arrives at the receive engine
#. :ref:`mod_rx_engine` ``m_axis_rx_desc_*``: The receive engine issues a write request to the interface DMA engine
#. :ref:`mod_mqnic_interface_rx` ``rx_axis_*``: The interface DMA module writes the packet data from AXI stream to the interface local DMA RAM
#. :ref:`mod_rx_engine` ``m_axis_desc_req_*``: The receive engine issues a descriptor request
#. :ref:`mod_desc_fetch`: The descriptor request arrives at the descriptor fetch module
#. :ref:`mod_desc_fetch` ``m_axis_desc_dequeue_req_*``: The descriptor fetch module issues a dequeue request to the queue manager
#. :ref:`mod_queue_manager` ``s_axis_dequeue_req_*``: The dequeue request arrives at the queue manager module
#. :ref:`mod_queue_manager`: If the queue is not empty, the queue manager starts a dequeue operation on the queue
#. :ref:`mod_queue_manager` ``m_axis_dequeue_resp_*``: The queue manager sends a response containing the operation status and DMA address
#. :ref:`mod_desc_fetch` ``m_axis_desc_dequeue_resp_*``: The response arrives at the descriptor fetch module
#. :ref:`mod_desc_fetch` ``m_axis_req_status_*``: The descriptor module reports the descriptor fetch status
#. :ref:`mod_desc_fetch` ``m_axis_dma_read_desc_*``: The descriptor module issues a DMA read request
#. ``dma_if_pcie_us_rd`` ``s_axis_read_desc_*``: The requst arrives at the DMA read interface
#. ``dma_if_pcie_us_rd``: The DMA read interface issues a PCIe read request
#. ``dma_if_pcie_us_rd``: The read data comes back in a completion packet and is written to the descriptor fetch local DMA RAM
#. ``dma_if_pcie_us_rd`` ``m_axis_read_desc_status_*``: The DMA read interface issues a status message
#. :ref:`mod_desc_fetch` ``m_axis_desc_dequeue_commit_*``: The descriptor fetch module issues a dequeue commit message
#. :ref:`mod_queue_manager`: The queue manager commits the dequeue operation and updates the consumer pointer
#. :ref:`mod_desc_fetch` ``dma_read_desc_*``: The descriptor fetch module issues a read request to its internal DMA module
#. :ref:`mod_desc_fetch` ``m_axis_desc_*``: The internal DMA module reads the descriptor and transfers it via AXI stream
#. :ref:`mod_rx_engine`: The descriptor arrives at the receive engine
#. :ref:`mod_rx_engine`: The receive engine stores the descriptor data
#. :ref:`mod_rx_engine` ``m_axis_dma_write_desc_*``: The receive engine issues a DMA write request
#. ``dma_if_pcie_us_wr`` ``s_axis_write_desc_*``: The requst arrives at the DMA write interface
#. ``dma_if_pcie_us_wr``: The DMA write interface reads the packet data from the interface local DMA RAM
#. ``dma_if_pcie_us_wr``: The DMA write interface issues a PCIe write request
#. ``dma_if_pcie_us_wr`` ``m_axis_write_desc_status_*``: The DMA write interface issues a status message
#. :ref:`mod_rx_engine` ``m_axis_cpl_req_*``: The receive engine issues a completion write request
#. :ref:`mod_cpl_write`: The completion write module writes the completion data into its local DMA RAM
#. :ref:`mod_cpl_write` ``m_axis_cpl_enqueue_req_*``: The completion write module issues an enqueue request to the completion queue manager
#. :ref:`mod_cpl_queue_manager` ``s_axis_enqueue_req_*``: The enqueue request arrives at the completion queue manager module
#. :ref:`mod_cpl_queue_manager`: If the queue is not full, the queue manager starts an enqueue operation on the queue
#. :ref:`mod_cpl_queue_manager` ``m_axis_enqueue_resp_*``: The completion queue manager sends a response containing the operation status and DMA address
#. :ref:`mod_cpl_write` ``s_axis_cpl_enqueue_resp_*``: The response arrives at the completion write module
#. :ref:`mod_cpl_write` ``m_axis_req_status_*``: The completion write module reports the completion write status
#. :ref:`mod_desc_fetch` ``m_axis_dma_write_desc_*``: The completion write module issues a DMA write request
#. ``dma_if_pcie_us_wr`` ``s_axis_write_desc_*``: The requst arrives at the DMA write interface
#. ``dma_if_pcie_us_wr``: The DMA write interface reads the completion data from the completion write module local DMA RAM
#. ``dma_if_pcie_us_wr``: The DMA write interface issues a PCIe write request
#. ``dma_if_pcie_us_wr`` ``m_axis_write_desc_status_*``: The DMA write interface issues a status message
#. :ref:`mod_cpl_write` ``m_axis_desc_enqueue_commit_*``: The completion write module issues an enqueue commit message
#. :ref:`mod_cpl_queue_manager`: The completion queue manager commits the enqueue operation and updates the producer pointer
#. :ref:`mod_cpl_queue_manager` ``m_axis_event_*``: The completion queue manager issues an event, if armed
#. :ref:`mod_cpl_write`: The event arrives at the completion write module
#. :ref:`mod_cpl_write`: The completion write module writes the event data into its local DMA RAM
#. :ref:`mod_cpl_write` ``m_axis_cpl_enqueue_req_*``: The completion write module issues an enqueue request to the completion queue manager
#. :ref:`mod_cpl_queue_manager` ``s_axis_enqueue_req_*``: The enqueue request arrives at the completion queue manager module
#. :ref:`mod_cpl_queue_manager`: If the queue is not full, the queue manager starts an enqueue operation on the queue
#. :ref:`mod_cpl_queue_manager` ``m_axis_enqueue_resp_*``: The completion queue manager sends a response containing the operation status and DMA address
#. :ref:`mod_cpl_write` ``s_axis_cpl_enqueue_resp_*``: The response arrives at the completion write module
#. :ref:`mod_cpl_write` ``m_axis_req_status_*``: The completion write module reports the completion write status
#. :ref:`mod_desc_fetch` ``m_axis_dma_write_desc_*``: The completion write module issues a DMA write request
#. ``dma_if_pcie_us_wr`` ``s_axis_write_desc_*``: The requst arrives at the DMA write interface
#. ``dma_if_pcie_us_wr``: The DMA write interface reads the event data from the completion write module local DMA RAM
#. ``dma_if_pcie_us_wr``: The DMA write interface issues a PCIe write request
#. ``dma_if_pcie_us_wr`` ``m_axis_write_desc_status_*``: The DMA write interface issues a status message
#. :ref:`mod_cpl_write` ``m_axis_desc_enqueue_commit_*``: The completion write module issues an enqueue commit message
#. :ref:`mod_cpl_queue_manager`: The completion queue manager commits the enqueue operation and updates the producer pointer
#. :ref:`mod_cpl_queue_manager` ``m_axis_event_*``: The completion queue manager issues an interrupt, if armed
#. linux: The linux kernel calls ``mqnic_irq_handler()``
#. ``mqnic_irq_handler()`` (``mqnic_irq.c``): The driver calls the EQ handler via the notifier chain (``atomic_notifier_call_chain()``)
#. ``mqnic_eq_int()`` (``mqnic_eq.c``): The driver calls ``mqnic_process_eq()``
#. ``mqnic_process_eq()`` (``mqnic_eq.c``): The driver processes the event queue, which calls the appropriate handler (``mqnic_rx_irq()``)
#. ``mqnic_rx_irq()`` (``mqnic_rx.c``): The driver enables NAPI polling on the queue (``napi_schedule_irqoff()``)
#. ``mqnic_eq_int()`` (``mqnic_eq.c``): The driver rearms the EQ (``mqnic_arm_eq()``)
#. NAPI: The linux kernel calls ``mqnic_poll_rx_cq()``
#. ``mqnic_poll_rx_cq()`` (``mqnic_rx.c``): The driver calls ``mqnic_process_rx_cq()``
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver reads the CQ producer pointer from the NIC
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver reads the completion record
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver fetches a fresh ``sk_buff`` (``napi_get_frags()``)
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver sets the ``sk_buff`` hardware timestamp
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver unmaps the pages (``dma_unmap_page()``)
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver associates the pages with the ``sk_buff`` (``__skb_fill_page_desc()``)
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver sets the ``sk_buff`` length
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver hands off the ``sk_buff`` to ``napi_gro_frags()``
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver dequeues the completion record by incrementing the CQ consumer pointer
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver writes the updated CQ consumer pointer via MMIO
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver reads the queue consumer pointer from the NIC
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver increments the ring consumer pointer for in-order freed descriptors
#. ``mqnic_process_rx_cq()`` (``mqnic_rx.c``): The driver calls ``mqnic_refill_rx_buffers()``
#. ``mqnic_refill_rx_buffers()`` (``mqnic_rx.c``): The driver calls ``mqnic_prepare_rx_desc()`` for each empty location in the ring
#. ``mqnic_prepare_rx_desc()`` (``mqnic_rx.c``): The driver allocates memory pages (``dev_alloc_pages()``)
#. ``mqnic_prepare_rx_desc()`` (``mqnic_rx.c``): The driver maps the pages (``dev_alloc_pages()``)
#. ``mqnic_prepare_rx_desc()`` (``mqnic_rx.c``): The driver writes a pointer to the page struct in ``ring->rx_info``
#. ``mqnic_prepare_rx_desc()`` (``mqnic_rx.c``): The driver writes a descriptor with the DMA pointer and length
#. ``mqnic_refill_rx_buffers()`` (``mqnic_rx.c``): The driver enqueues the descriptor by incrementing its local copy of the producer pointer
#. ``mqnic_refill_rx_buffers()`` (``mqnic_rx.c``): At the end of the loop, the driver writes the updated producer pointer to the NIC via MMIO
#. ``mqnic_poll_rx_cq()`` (``mqnic_rx.c``): The driver disables NAPI polling, when idle (``napi_complete()``)
#. ``mqnic_poll_rx_cq()`` (``mqnic_rx.c``): The driver rearms the CQ (``mqnic_arm_cq()``)

62
docs/source/porting.rst Normal file
View File

@ -0,0 +1,62 @@
.. _porting:
=======
Porting
=======
This guide is a high-level overview for how to port Corundum to new hardware. In general, this guide only applies to FPGA families that are already supported by Corundum, new FPGA families can require significant interfacing changes, especially for the PCI express interface as this can vary significantly between different FPGA families.
The only interfaces that the Corundum datapath requires are the PCI express interface and the Ethernet interfaces. Ancillary features such as firmware updates, persistent MAC addresses, and optical module communication are optional---the core datapath will still function if these features are not implemented. In general the PCI express and Ethernet interfaces are dependent almost completely on the FPGA family, while ancillary features tend to be much more board-dependent.
Preparation
===========
Before porting Corundum to a new board, it is recommended to create example designs for both verilog-ethernet and verilog-pcie for the target board. The verilog-ethernet design will bring up the Ethernet interfaces at 10 Gbps and ensures the transceivers, reference clocks, and module control pins are properly configured for the Ethernet interfaces to operate. Some boards may require additional code to configure clocking logic to supply the proper reference clocks to the transceivers on the FPGA, which will generally be one of 156.25 MHz, 161.1328125 MHz, 322.265625 MHz, or 644.53125 MHz. The verilog-pcie design brings up the PCI express interface, validating that all of the pin assignments and transceiver site locations are correct. Once both of these designs are working, then porting corundum is straightforward.
Porting Corundum
================
Start by making a copy of a Corundum design that targets a similar board. Priority goes to a chip in the same family, then similar ancillary interfaces.
Board ID
--------
Each board should have a unique board ID specified in ``mqnic_hw.h``. These IDs are used by the driver for any board-specific initialization and interfacing. These IDs are arbitrary, but making something relatively predictable is a good idea to reduce the possibility of collisions. Most of the current IDs are a combination of the PCIe vendor ID of the board manufacturer, combined with a board-specific portion. For example, the board IDs for ExaNICs are simply the original ExaNIC PCIe VID and PID, and the Xilinx board IDs are a combination of the Xilinx PCIe VID, the part series (7 for 7 series, 8 for UltraScale, 9 for UltraScale+, etc.) and the hex version of the board part number (VCU108 = 6c, VCU1525 = 5f5, etc.). Pick a board ID, add it to ``mqnic_hw.h``, and set the ``BOARD_ID`` parameter in fpga_core.v.
FPGA ID
-------
The FPGA ID is used by the firmware update tool as a simple sanity check to prevent firmware for a different board from being loaded accidentally. Set the FPGA_ID parameter in fpga_core.v to the JTAG ID of the FPGA on the board. The IDs are located in ``fpga_id.h``/``fpga_id.c``. If you do not want to implement the firmware update feature, ``FPGA_ID`` can be set to 0.
PCIe interface
--------------
Ensure that the PCIe hard IP core settings are correct for the target board. In many cases, the default settings are correct, but in some cases the transceiver sites need to be changed. Edit the TCL file appropriately, or generate the IP in vivado and extract the TCL commands from the Vivado journal file. If you previously ported the verilog-pcie design, then the settings can be copied over, with the PCIe IDs, BARs, and MSI settings configured appropriately.
Check that the ``BAR0_APERTURE`` setting and PCIE_AXIS settings in ``fpga.v`` and ``fpga_core.v`` match the PCIe core configuration.
Ethernet interfaces
-------------------
For 100G interfaces, use Xilinx CMAC instances. A free license can be generated on the Xilinx website. The cores must be configured for CAUI-4. Select the appropriate reference clock and transceiver sites for the interfaces on the board. It may be necessary to adjust the CMAC site selections depending on which transceiver sites are used. Implement the design, open the implemented design, check the relative positions of the transceiver sites and CMAC sites, and adjust as appropriate. You can actually look at any synthesized or implemented design for the same chip to look at the relative positions of the sites.
For 10G or 25G interfaces, you can either use the MAC modules from verilog-ethernet or Xilinx-provided MAC modules. For the included MACs, the main thing to adjust is the gtwizard instance. This needs to be set up to use the correct transceiver sites and reference clock inputs. The internal interface must be the 64 bit asynchronous gearbox. Check the connection ordering; the gtwizard instance is always in the order of the site names, but this may not match the board, and connections may need to be re-ordered to match. In particular, double check that the RX clocks are connected correctly.
Update the interfaces between ``fpga.v`` and ``fpga_core.v`` to match the module configuration. Update the code in ``fpga_core.v`` to connect the PHYs in ``fpga.v`` to the appropriate MACs in ``fpga_core.v``. Also set ``IF_COUNT`` and ``PORTS_PER_IF`` appropriately in ``fpga_core.v``.
I2C interfaces
--------------
MAC address EEPROMs and optical modules are accessed via I2C. This is highly board-dependent. On some boards, there is a single I2C interface and a number of I2C multiplexers to connect everything. On other boards, each optical module has a dedicated I2C interface. On other boards, the I2C bus sits behind a board management controller. The core datapath will work fine without setting up I2C, but having the I2C buses operational can be a useful debugging feature. If I2C access is not required, simply do not implement the registers and ensure that the selected board ID does not correspond to any I2C init code in ``mqnic_i2c.c``.
All corundum designs that directly connect I2C interfaces to the FPGA pins make use of bit-bang I2C support in the Linux kernel. There are a set of registers set aside for controlling up to four I2C buses in ``mqnic_hw.h``. These should be appropriately implemented in the NIC CSR register space in ``fpga_core.v``. Driver code also needs to be added to ``mqnic_i2c.c`` to initialize everything appropriately based on the board ID.
Flash access
------------
Firmware updates require access to the FPGA configuration flash. Depending on the flash type, this either requires connections to dedicated pins via specific device primitives, normal FPGA IO pins, or both. The flash interface is a very simple bit-bang interface that simply exposes these pins over PCIe via NIC CSR register space. The register definitions are in ``mqnic_hw.h``. Take a look at existing designs that implement QSPI or BPI flash and implement the same register configuration in ``fpga_core.v``. If firmware update support is not required, simply do not implement the flash register block.
Module control pins
-------------------
Optical modules have several low-speed control pins in addition to the I2C interface. For DAC cables, these pins have no effect, but for AOC cables or optical modules, these pins are very important. Specifically, SFP+ and SFP28 modules need to have the correct level on ``tx_disable`` in order to turn the laser on. Similarly, QSFP+ and QSFP28 modules need to have the ``reset`` and ``lpmode`` pins set correctly. These pins can be statically tied off with the modules enabled, or they can be exposed to the driver via standard registers specified in ``mqnic_hw.h`` and implemented in the NIC CSRs in ``fpga_core.v``.

View File

@ -0,0 +1,49 @@
.. _rb_bmc_alveo:
========================
Alveo BMC register block
========================
The Alveo BMC register block has a header with type 0x0000C140, version 0x00000100, and contains control registers for the `Xilinx Alveo CMS IP <https://www.xilinx.com/products/intellectual-property/cms-subsystem.html>`_.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C140
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Address Address RW 0x00000000
-------- ------------- ------------------------------ -------------
RBB+0x10 Data Data RW 0x00000000
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Address
The address field controls the address bus to the CMS IP core. Writing to this register triggers a read of the corresponding address via the AXI-lite interface to the CMS IP.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Address RW 0x00000000
======== ============================== =============
.. object:: Data
The data field controls the data bus to the CMS IP core. Writing to this register triggers a write to the address specified by the address register via the AXI-lite interface to the CMS IP.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Data RW 0x00000000
======== ============================== =============

View File

@ -0,0 +1,73 @@
.. _rb_bmc_gecko:
========================
Gecko BMC register block
========================
The Gecko BMC register block has a header with type 0x0000C141, version 0x00000100, and contains control registers for the Silicom Gecko BMC.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C141
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Status Status Read data RO 0x00000000
-------- ------------- -------------- -------------- -------------
RBB+0x10 Data Write data RW 0x00000000
-------- ------------- ------------------------------ -------------
RBB+0x14 Command Command RW 0x00000000
======== ============= ============== ============== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Status
The status field provides status information and the read data from the BMC.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Status Read data RO 0x00000000
======== ============== ============== =============
.. table::
=== ========
Bit Function
=== ========
16 Done
18 Timeout
19 Idle
=== ========
.. object:: Data
The data field provides the write data to the BMC.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Write data RW 0x00000000
======== ============================== =============
.. object:: Command
The command field provides the command to the BMC. Writing to the command field triggers an SPI transfer to the BMC.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Command RW 0x00000000
======== ============== ============== =============

View File

@ -0,0 +1,86 @@
.. _rb_cqm_event:
==================================
Event queue manager register block
==================================
The event queue manager register block has a header with type 0x0000C010, version 0x00000100, and indicates the location of the event queue manager registers and number of event queues.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C010
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Offset Offset to queue manager RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 Count Queue count RO -
-------- ------------- ------------------------------ -------------
RBB+0x14 Stride Queue control register stride RO 0x00000020
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Offset
The offset field contains the offset to the start of the event queue manager region, relative to the start of the current region.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Offset to queue manager RO -
======== ============================== =============
.. object:: Count
The count field contains the number of queues.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Queue count RO -
======== ============================== =============
.. object:: Stride
The stride field contains the size of the control registers associated with each queue.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Queue control register stride RO 0x00000020
======== ============================== =============
Event queue manager CSRs
========================
Each queue has several associated control registers, detailed in this table:
.. table::
========= ============== ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
========= ============== ====== ====== ====== ====== =============
Base+0x00 Base address L Ring base address (lower 32) RW -
--------- -------------- ------------------------------ -------------
Base+0x04 Base address H Ring base address (upper 32) RW -
--------- -------------- ------------------------------ -------------
Base+0x08 Control 1 Active Size RW -
--------- -------------- ------ ------ ------ ------ -------------
Base+0x0C Control 2 Arm Int index RW -
--------- -------------- ------ ------ -------------- -------------
Base+0x10 Head pointer Head pointer RW -
--------- -------------- -------------- -------------- -------------
Base+0x14 Tail pointer Tail pointer RW -
========= ============== ============== ============== =============

86
docs/source/rb/cqm_rx.rst Normal file
View File

@ -0,0 +1,86 @@
.. _rb_cqm_rx:
================================================
Receive completion queue manager register block
================================================
The receive completion queue manager register block has a header with type 0x0000C031, version 0x00000100, and indicates the location of the receive completion queue manager registers and number of completion queues.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C031
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Offset Offset to queue manager RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 Count Queue count RO -
-------- ------------- ------------------------------ -------------
RBB+0x14 Stride Queue control register stride RO 0x00000020
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Offset
The offset field contains the offset to the start of the receive completion queue manager region, relative to the start of the current region.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Offset to queue manager RO -
======== ============================== =============
.. object:: Count
The count field contains the number of queues.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Queue count RO -
======== ============================== =============
.. object:: Stride
The stride field contains the size of the control registers associated with each queue.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Queue control register stride RO 0x00000020
======== ============================== =============
Completion queue manager CSRs
=============================
Each queue has several associated control registers, detailed in this table:
.. table::
========= ============== ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
========= ============== ====== ====== ====== ====== =============
Base+0x00 Base address L Ring base address (lower 32) RW -
--------- -------------- ------------------------------ -------------
Base+0x04 Base address H Ring base address (upper 32) RW -
--------- -------------- ------------------------------ -------------
Base+0x08 Control 1 Active Size RW -
--------- -------------- ------ ------ ------ ------ -------------
Base+0x0C Control 2 Arm Event index RW -
--------- -------------- ------ ------ -------------- -------------
Base+0x10 Head pointer Head pointer RW -
--------- -------------- -------------- -------------- -------------
Base+0x14 Tail pointer Tail pointer RW -
========= ============== ============== ============== =============

86
docs/source/rb/cqm_tx.rst Normal file
View File

@ -0,0 +1,86 @@
.. _rb_cqm_tx:
================================================
Transmit completion queue manager register block
================================================
The transmit completion queue manager register block has a header with type 0x0000C030, version 0x00000100, and indicates the location of the transmit completion queue manager registers and number of completion queues.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C030
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Offset Offset to queue manager RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 Count Queue count RO -
-------- ------------- ------------------------------ -------------
RBB+0x14 Stride Queue control register stride RO 0x00000020
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Offset
The offset field contains the offset to the start of the transmit completion queue manager region, relative to the start of the current region.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Offset to queue manager RO -
======== ============================== =============
.. object:: Count
The count field contains the number of queues.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Queue count RO -
======== ============================== =============
.. object:: Stride
The stride field contains the size of the control registers associated with each queue.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Queue control register stride RO 0x00000020
======== ============================== =============
Completion queue manager CSRs
=============================
Each queue has several associated control registers, detailed in this table:
.. table::
========= ============== ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
========= ============== ====== ====== ====== ====== =============
Base+0x00 Base address L Ring base address (lower 32) RW -
--------- -------------- ------------------------------ -------------
Base+0x04 Base address H Ring base address (upper 32) RW -
--------- -------------- ------------------------------ -------------
Base+0x08 Control 1 Active Size RW -
--------- -------------- ------ ------ ------ ------ -------------
Base+0x0C Control 2 Arm Event index RW -
--------- -------------- ------ ------ -------------- -------------
Base+0x10 Head pointer Head pointer RW -
--------- -------------- -------------- -------------- -------------
Base+0x14 Tail pointer Tail pointer RW -
========= ============== ============== ============== =============

105
docs/source/rb/drp.rst Normal file
View File

@ -0,0 +1,105 @@
.. _rb_drp:
==================
DRP register block
==================
The DRP register block has a header with type 0x0000C150, version 0x00000100, and contains control registers for a Xilinx dynamic reconfiguration port (DRP).
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C150
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C DRP info DRP info RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 Control Control RW 0x00000000
-------- ------------- ------------------------------ -------------
RBB+0x14 Address Address RW 0x00000000
-------- ------------- ------------------------------ -------------
RBB+0x18 Write data Write data RW 0x00000000
-------- ------------- ------------------------------ -------------
RBB+0x1C Read data Read data RO 0x00000000
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: DRP info
The DRP info field contains identifying information about the component(s) accessible via the DRP interface.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C DRP info RO -
======== ============================== =============
.. object:: Control
The control field is used to trigger read and write operations on the DRP interface.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Control RW 0x00000000
======== ============================== =============
.. table::
=== ========
Bit Function
=== ========
0 Enable
1 Write
8 Busy
=== ========
To issue a read operation, set the address register and then write 0x00000001 to the control register. Wait for the enable and busy bits to self-clear, then read the data from the read data register.
To issue a write operation, set the address register and write data register appropriately, then write 0x00000003 to the control register. Wait for the enable and busy bits to self-clear.
.. object:: Address
The address field controls the address for DRP operations. This address is directly presented on the DRP interface.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Address RW 0x00000000
======== ============================== =============
.. object:: Write data
The write data field contains the data used for DRP write operations.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x18 Write data RW 0x00000000
======== ============================== =============
.. object:: Read data
The read data field contains the data returned by DRP read operations.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x1C Read data RO 0x00000000
======== ============================== =============

View File

@ -0,0 +1,102 @@
.. _rb_flash_bpi:
========================
BPI flash register block
========================
The BPI flash register block has a header with type 0x0000C121, version 0x00000100, and contains control registers for a BPI flash chip.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C121
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Format AW DW config RO -
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x10 Address Address RW 0x00000000
-------- ------------- ------------------------------ -------------
RBB+0x14 Data Data RW 0x00000000
-------- ------------- ------------------------------ -------------
RBB+0x18 Control REGION DQ_OE CTRL RW 0x0000000F
======== ============= ====== ====== ====== ====== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Format
The format field contains information about the type and layout of the flash memory. AW and DW indicate the address and data interface widths in bits, and config indicates the layout of the flash.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C AW DW config RO -
======== ====== ====== ====== ====== =============
.. table::
====== =======================
config Configuration
====== =======================
0x00 1 segment
0x01 1 segment
0x02 2 segments (even split)
0x04 4 segments (even split)
0x08 8 segments (even split)
====== =======================
.. object:: Address
The address field controls the address bus to the flash chip.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Address RW 0x00000000
======== ============================== =============
.. object:: Data
The data field controls the data bus to the flash chip.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Data RW 0x00000000
======== ============================== =============
.. object:: Control
The control field contains registers to drive all of the other flash control lines, as well as registers for output enables.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x18 REGION DQ_OE CTRL RW 0x0000000F
======== ====== ====== ====== ====== =============
.. table::
=== =========
Bit Function
=== =========
0 CE_N
1 OE_N
2 WE_N
3 ADV_N
8 DQ_OE
16 REGION_OE
=== =========

View File

@ -0,0 +1,93 @@
.. _rb_flash_spi:
========================
SPI flash register block
========================
The SPI flash register block has a header with type 0x0000C120, version 0x00000100, and contains control registers for up to two SPI or QSPI flash chips.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C120
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Format AW DW config RO -
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x10 Control 0 CS/CLK OE D RW 0x00000000
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x14 Control 1 CS/CLK OE D RW 0x00000000
======== ============= ====== ====== ====== ====== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Format
The format field contains information about the type and layout of the flash memory. AW and DW indicate the address and data interface widths in bits, and config indicates the layout of the flash.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C AW DW config RO -
======== ====== ====== ====== ====== =============
.. table::
====== ================================
config Configuration
====== ================================
0x00 1 segment
0x01 1 segment
0x02 2 segments (even split)
0x04 4 segments (even split)
0x08 8 segments (even split)
0x81 2 segments (split at 0x01002000)
====== ================================
.. table::
== ==========
DW Flash type
== ==========
1 SPI
4 QSPI
8 Dual QSPI
== ==========
.. object:: Control 0 and 1
The control 0 and 1 fields each control one SPI/QSPI flash interface. The second interface is only used in dual QSPI mode.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 CS/CLK OE D RW 0x00000000
-------- ------ ------ ------ ------ -------------
RBB+0x14 CS/CLK OE D RW 0x00000000
======== ====== ====== ====== ====== =============
.. table::
=== =========
Bit Function
=== =========
0 D0
1 D1
2 D2
3 D3
8 OE for D0
9 OE for D1
10 OE for D2
11 OE for D3
16 CLK
17 CS_N
=== =========

133
docs/source/rb/fw_id.rst Normal file
View File

@ -0,0 +1,133 @@
.. _rb_fw_id:
==========================
Firmware ID register block
==========================
The firmware ID register block has a header with type 0xFFFFFFFF, version 0x00000100, and carries several pieces of information related to the firmware version and build.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0xFFFFFFFF
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C FPGA ID JTAG ID RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 FW ID Vendor ID Firmware ID RO -
-------- ------------- -------------- -------------- -------------
RBB+0x14 FW Version Major Minor Patch Meta RO -
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x18 Board ID Vendor ID Board ID RO -
-------- ------------- -------------- -------------- -------------
RBB+0x1C Board Version Major Minor Patch Meta RO -
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x20 Build date Build date RO -
-------- ------------- ------------------------------ -------------
RBB+0x24 Git hash Commit hash RO -
-------- ------------- ------------------------------ -------------
RBB+0x28 Release info Release info RO -
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: FPGA ID
The FPGA ID field contains the JTAG ID of the target device.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C JTAG ID RO -
======== ============================== =============
.. object:: Firmware ID
The firmware ID field consists of a vendor ID in the upper 16 bits, and the firmware ID in the lower 16 bits.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Vendor ID Firmware ID RO -
======== ============== ============== =============
.. object:: Firmware version
The firmware version field consists of four fields, major, minor, patch, and meta.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Major Minor Patch Meta RO -
======== ====== ====== ====== ====== =============
.. object:: Board ID
The board ID field consists of a vendor ID in the upper 16 bits, and the board ID in the lower 16 bits.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x18 Vendor ID Board ID RO -
======== ============== ============== =============
.. object:: Board version
The board version field consists of four fields, major, minor, patch, and meta.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x1C Major Minor Patch Meta RO -
======== ====== ====== ====== ====== =============
.. object:: Build date
The build date field contains the Unix timestamp of the start of the build as an unsigned 32-bit integer.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x20 Build date RO -
======== ============================== =============
.. object:: Git hash
The git hash field contains the upper 32 bits of the git commit hash.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x24 Commit hash RO -
======== ============================== =============
.. object:: Release info
The release info field is reserved for additional release information.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x28 Release info RO -
======== ============================== =============

43
docs/source/rb/gpio.rst Normal file
View File

@ -0,0 +1,43 @@
.. _rb_gpio:
===================
GPIO register block
===================
The GPIO register block has a header with type 0x0000C100, version 0x00000100, and contains GPIO control registers.
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C100
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C GPIO in GPIO in RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 GPIO out GPIO out RW -
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: GPIO in
The GPIO in field reads the input signal states.
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C GPIO in RO -
======== ============================== =============
.. object:: GPIO out
The GPIO out field controls the output signal states.
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 GPIO out RW -
======== ============================== =============

46
docs/source/rb/i2c.rst Normal file
View File

@ -0,0 +1,46 @@
.. _rb_i2c:
===================
I2C register block
===================
The I2C register block has a header with type 0x0000C110, version 0x00000100, and contains registers to control an I2C interface.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C110
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Control Mux control SDA SCL RW 0x00000303
======== ============= ============== ====== ====== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Control
The control field has bits to control SCL, SDA, and any associated multiplexers/switches.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Mux control SDA SCL RW 0x00000303
======== ============== ====== ====== =============
.. table::
=== ========
Bit Function
=== ========
0 SCL in
1 SCL out
8 SDA in
9 SDA out
=== ========

77
docs/source/rb/if.rst Normal file
View File

@ -0,0 +1,77 @@
.. _rb_if:
========================
Interface register block
========================
The interface register block has a header with type 0x0000C000, version 0x00000100, and indicates the number of interfaces present and where they are located in the control register space.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C000
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Offset Offset to first interface RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 Count Interface count RO -
-------- ------------- ------------------------------ -------------
RBB+0x14 Stride Interface stride RO -
-------- ------------- ------------------------------ -------------
RBB+0x18 CSR offset Interface CSR offset RO -
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Offset
The offset field contains the offset to the start of the first interface region, relative to the start of the current region.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Offset to first interface RO -
======== ============================== =============
.. object:: Count
The count field contains the number of interfaces.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Interface count RO -
======== ============================== =============
.. object:: Stride
The stride field contains the size of the region for each interface.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Interface stride RO -
======== ============================== =============
.. object:: CSR offset
The CSR offset field contains the offset to the head of the register block chain inside of each interface's region.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x18 Interface CSR offset RO -
======== ============================== =============

119
docs/source/rb/if_ctrl.rst Normal file
View File

@ -0,0 +1,119 @@
.. _rb_if_ctrl:
================================
Interface control register block
================================
The interface control register block has a header with type 0x0000C001, version 0x00000200, and contains several interface-level control registers.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C001
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000200
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Features Interface feature bits RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 Max TX MTU Max TX MTU RO -
-------- ------------- ------------------------------ -------------
RBB+0x14 Max RX MTU Max RX MTU RO -
-------- ------------- ------------------------------ -------------
RBB+0x18 TX MTU TX MTU RW -
-------- ------------- ------------------------------ -------------
RBB+0x1C RX MTU RX MTU RW -
-------- ------------- ------------------------------ -------------
RBB+0x20 RSS mask RSS mask RW 0x00000000
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Features
The features field contains all of the interface-level feature bits, indicating the state of various optional features that can be enabled via Verilog parameters during synthesis.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Interface feature bits RO -
======== ============================== =============
Currently implemented feature bits:
.. table::
=== =======================
Bit Feature
=== =======================
0 RSS
4 PTP timestamping
8 TX checksum offloading
9 RX checksum offloading
10 RX flow hash offloading
=== =======================
.. object:: Max TX MTU
The max TX MTU field contains the maximum frame size on the transmit path, as configured via Verilog parameters during synthesis.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Max TX MTU RO -
======== ============================== =============
.. object:: Max RX MTU
The max RX MTU field contains the maximum frame size on the receive path, as configured via Verilog parameters during synthesis.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Max RX MTU RO -
======== ============================== =============
.. object:: TX MTU
The TX MTU field controls the maximum frame size on the transmit path.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x18 TX MTU RW -
======== ============================== =============
.. object:: RX MTU
The RX MTU field controls the maximum frame size on the receive path.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x1C RX MTU RW -
======== ============================== =============
.. object:: RSS mask
The RSS mask field controls which receive queues will be selected by the computed RSS flow hash.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x20 RSS mask RW 0x00000000
======== ============================== =============

94
docs/source/rb/index.rst Normal file
View File

@ -0,0 +1,94 @@
.. _rb_overview:
===============
Register blocks
===============
The NIC register space is constructed from a linked list of register blocks. Each block starts with a header that contains type, version, and next header fields. Blocks must be DWORD aligned in the register space. All fields must be naturally aligned. All pointers in the register blocks are relative to the start of the region. The list is terminated with a next pointer of 0x00000000. See :numref:`tbl_rb_list` for a list of all currently-defined register blocks.
.. table::
======== ============ ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============ ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO -
-------- ------------ -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO -
-------- ------------ ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
======== ============ ============================== =============
.. object:: Type
The type field consists of a vendor ID in the upper 16 bits, and the sub type in the lower 16 bits. Vendor ID 0x0000 is used for all standard register blocks used by Corundum. See :numref:`tbl_rb_list` for a list of all currently-defined register blocks.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x00 Vendor ID Type RO -
======== ============== ============== =============
.. object:: Version
The version field consists of four fields, major, minor, patch, and meta. Version numbers must be changed when backwards-incompatible changes are made to register blocks. See :numref:`tbl_rb_list` for a list of all currently-defined register blocks.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x04 Major Minor Patch Meta RO -
======== ====== ====== ====== ====== =============
.. object:: Next pointer
The next pointer field contains a block-relative offset to the start of the header of the next register block in the chain. A next pointer of 0x00000000 indicates the end of the chain.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x08 Pointer to next register block RO -
======== ============================== =============
.. _tbl_rb_list:
.. table:: List of all currently-defined register blocks
========== ========== ======================
Type Version Block
========== ========== ======================
0x00000000 \- :ref:`rb_null`
0xFFFFFFFF 0x00000100 :ref:`rb_fw_id`
0x0000C000 0x00000100 :ref:`rb_if`
0x0000C001 0x00000200 :ref:`rb_if_ctrl`
0x0000C002 0x00000200 port
0x0000C003 0x00000100 :ref:`rb_sched_block`
0x0000C004 0x00000100 stats
0x0000C010 0x00000100 :ref:`rb_cqm_event`
0x0000C020 0x00000100 :ref:`rb_qm_tx`
0x0000C021 0x00000100 :ref:`rb_qm_rx`
0x0000C030 0x00000100 :ref:`rb_cqm_tx`
0x0000C031 0x00000100 :ref:`rb_cqm_rx`
0x0000C040 0x00000100 :ref:`rb_sched_rr`
0x0000C050 0x00000100 :ref:`rb_sched_ctrl_tdma`
0x0000C060 0x00000100 :ref:`rb_tdma_sch`
0x0000C080 0x00000100 :ref:`rb_phc`
0x0000C081 0x00000100 :ref:`rb_phc_perout`
0x0000C100 0x00000100 :ref:`rb_gpio`
0x0000C110 0x00000100 :ref:`rb_i2c`
0x0000C120 0x00000100 :ref:`rb_flash_spi`
0x0000C121 0x00000100 :ref:`rb_flash_bpi`
0x0000C140 0x00000100 :ref:`rb_bmc_alveo`
0x0000C141 0x00000100 :ref:`rb_bmc_gecko`
0x0000C150 0x00000100 :ref:`rb_drp`
========== ========== ======================
.. toctree::
:maxdepth: 1
:hidden:
:glob:
*

21
docs/source/rb/null.rst Normal file
View File

@ -0,0 +1,21 @@
.. _rb_null:
===================
Null register block
===================
The null register block has a header with type 0x00000000 and no additional fields after the header.
.. table::
======== ============ ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============ ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x00000000
-------- ------------ -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO -
-------- ------------ ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
======== ============ ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.

163
docs/source/rb/phc.rst Normal file
View File

@ -0,0 +1,163 @@
.. _rb_phc:
=================================
PTP hardware clock register block
=================================
The PTP hardware clock register block has a header with type 0x0000C080, version 0x00000100, and carries several control registers for the PTP clock.
.. table::
======== ============== ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============== ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C080
-------- -------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- -------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- -------------- ------------------------------ -------------
RBB+0x0C Control Control RO -
-------- -------------- ------------------------------ -------------
RBB+0x10 Current time Current time (fractional ns) RO -
-------- -------------- ------------------------------ -------------
RBB+0x14 Current time Current time (ns) RO -
-------- -------------- ------------------------------ -------------
RBB+0x18 Current time Current time (sec, lower 32) RO -
-------- -------------- ------------------------------ -------------
RBB+0x1C Current time Current time (sec, upper 32) RO -
-------- -------------- ------------------------------ -------------
RBB+0x20 Get time Get time (fractional ns) RO -
-------- -------------- ------------------------------ -------------
RBB+0x24 Get time Get time (ns) RO -
-------- -------------- ------------------------------ -------------
RBB+0x28 Get time Get time (sec, lower 32) RO -
-------- -------------- ------------------------------ -------------
RBB+0x2C Get time Get time (sec, upper 32) RO -
-------- -------------- ------------------------------ -------------
RBB+0x30 Set time Set time (fractional ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x34 Set time Set time (ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x38 Set time Set time (sec, lower 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x3C Set time Set time (sec, upper 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x40 Period Period (fractional ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x44 Period Period (ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x48 Nominal period Nominal period (fractional ns) RO -
-------- -------------- ------------------------------ -------------
RBB+0x4C Nominal period Nominal period (ns) RO -
-------- -------------- ------------------------------ -------------
RBB+0x50 Adj time Adj time (fractional ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x54 Adj time Adj time (ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x58 Adj time count Adj time cycle count RW -
-------- -------------- ------------------------------ -------------
RBB+0x5C Adj time act Adj time active RO -
======== ============== ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Current time
The current time registers read the current time from the PTP clock, with no double-buffering.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Current time (fractional ns) RO -
-------- ------------------------------ -------------
RBB+0x14 Current time (ns) RO -
-------- ------------------------------ -------------
RBB+0x18 Current time (sec, lower 32) RO -
-------- ------------------------------ -------------
RBB+0x1C Current time (sec, upper 32) RO -
======== ============================== =============
.. object:: Get time
The get time registers read the current time from the PTP clock, with all values latched coincident with reading the fractional ns register.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x20 Get time (fractional ns) RO -
-------- ------------------------------ -------------
RBB+0x24 Get time (ns) RO -
-------- ------------------------------ -------------
RBB+0x28 Get time (sec, lower 32) RO -
-------- ------------------------------ -------------
RBB+0x2C Get time (sec, upper 32) RO -
======== ============================== =============
.. object:: Set time
The set time registers set the current time on the PTP clock, with all values latched coincident with writing the upper 32 bits of the seconds field.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x30 Set time (fractional ns) RW -
-------- ------------------------------ -------------
RBB+0x34 Set time (ns) RW -
-------- ------------------------------ -------------
RBB+0x38 Set time (sec, lower 32) RW -
-------- ------------------------------ -------------
RBB+0x3C Set time (sec, upper 32) RW -
======== ============================== =============
.. object:: Period
The period registers control the period of the PTP clock, with all values latched coincident with writing the ns field. The period value is accumulated into the PTP clock on every clock cycle.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x40 Period (fractional ns) RW -
-------- ------------------------------ -------------
RBB+0x44 Period (ns) RW -
======== ============================== =============
.. object:: Nominal period
The nominal period registers contain the nominal period of the PTP clock, which corresponds to zero frequency offset in the ideal case.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x48 Nominal period (fractional ns) RO -
-------- ------------------------------ -------------
RBB+0x4C Nominal period (ns) RO -
======== ============================== =============
.. object:: Adjust time
The adjust time registers can be used to slew the clock over some time period. An adjustment can be specified with some amount of time added every clock cycle for N cycles.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x50 Adj time (fractional ns) RW -
-------- ------------------------------ -------------
RBB+0x54 Adj time (ns) RW -
-------- ------------------------------ -------------
RBB+0x58 Adj time cycle count RW -
-------- ------------------------------ -------------
RBB+0x5C Adj time active RO -
======== ============================== =============

View File

@ -0,0 +1,134 @@
.. _rb_phc_perout:
================================
PTP period output register block
================================
The PTP period output register block has a header with type 0x0000C081, version 0x00000100, and carries several control registers for the PTP period output module.
.. table::
======== ============== ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============== ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C081
-------- -------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- -------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- -------------- ------------------------------ -------------
RBB+0x0C Control Control RW -
-------- -------------- ------------------------------ -------------
RBB+0x10 Start time Start time (fractional ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x14 Start time Start time (ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x18 Start time Start time (sec, lower 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x1C Start time Start time (sec, upper 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x20 Period Period (fractional ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x24 Period Period (ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x28 Period Period (sec, lower 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x2C Period Period (sec, upper 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x30 Width Width (fractional ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x34 Width Width (ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x38 Width Width (sec, lower 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x3C Width Width (sec, upper 32) RW -
======== ============== ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Control
The control register contains several control and status bits relating to the operation of the period output module.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Control RW -
======== ============================== =============
.. table::
=== ========
Bit Function
=== ========
0 Enable
8 Pulse
16 Locked
24 Error
=== ========
The enable bit enables/disables output of the period output module. Note that this bit does not cause the module to lose lock when clear, only to stop generating pulses.
The pulse bit reflects the current output of the PTP period output module.
The locked bit indicates that the period output module has locked on to the current PTP time and is ready to generate pulses. The output is disabled while the period output module is unlocked, so it is not necessary to wait for the module to lock before enabling the output. The module will unlock whenever the start time, period, or width setting is changed.
The error bit indicates that the period output module came out of lock due to the PTP clock being stepped. The error bit is self-clearing on either reacquisition of lock or a setting change.
The period output module keeps track of the times for the next rising edge and next falling edge. Initially, it starts with the specified start time for the rising edge, and start time plus width for the falling edge. If the computed next rising edge time is in the past, the period will be added and it will be checked again, repeating this process until the next rising edge is in the future. Note that the period is added once per clock cycle, so it is recommended to compute a start time that is close to the current time, particularly when using a small period setting, so that the period output module can lock quickly.
.. object:: Start time
The start time registers determine the absolute start time for the output waveform (rising edge), with all values latched coincident with writing the upper 32 bits of the seconds field.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Start time (fractional ns) RW -
-------- ------------------------------ -------------
RBB+0x14 Start time (ns) RW -
-------- ------------------------------ -------------
RBB+0x18 Start time (sec, lower 32) RW -
-------- ------------------------------ -------------
RBB+0x1C Start time (sec, upper 32) RW -
======== ============================== =============
.. object:: Period
The period registers control the period of the output waveform (rising edge to rising edge), with all values latched coincident with writing the upper 32 bits of the seconds field.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x20 Period (fractional ns) RW -
-------- ------------------------------ -------------
RBB+0x24 Period (ns) RW -
-------- ------------------------------ -------------
RBB+0x28 Period (sec, lower 32) RW -
-------- ------------------------------ -------------
RBB+0x2C Period (sec, upper 32) RW -
======== ============================== =============
.. object:: Width
The width registers control the width of the output waveform (rising edge to falling edge), with all values latched coincident with writing the upper 32 bits of the seconds field.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x30 Width (fractional ns) RW -
-------- ------------------------------ -------------
RBB+0x34 Width (ns) RW -
-------- ------------------------------ -------------
RBB+0x38 Width (sec, lower 32) RW -
-------- ------------------------------ -------------
RBB+0x3C Width (sec, upper 32) RW -
======== ============================== =============

86
docs/source/rb/qm_rx.rst Normal file
View File

@ -0,0 +1,86 @@
.. _rb_qm_rx:
=====================================
Receive queue manager register block
=====================================
The receive queue manager register block has a header with type 0x0000C021, version 0x00000100, and indicates the location of the receive queue manager registers and number of queues.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C021
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Offset Offset to queue manager RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 Count Queue count RO -
-------- ------------- ------------------------------ -------------
RBB+0x14 Stride Queue control register stride RO 0x00000020
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Offset
The offset field contains the offset to the start of the receive queue manager region, relative to the start of the current region.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Offset to queue manager RO -
======== ============================== =============
.. object:: Count
The count field contains the number of queues.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Queue count RO -
======== ============================== =============
.. object:: Stride
The stride field contains the size of the control registers associated with each queue.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Queue control register stride RO 0x00000020
======== ============================== =============
Queue manager CSRs
==================
Each queue has several associated control registers, detailed in this table:
.. table::
========= ============== ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
========= ============== ====== ====== ====== ====== =============
Base+0x00 Base address L Ring base address (lower 32) RW -
--------- -------------- ------------------------------ -------------
Base+0x04 Base address H Ring base address (upper 32) RW -
--------- -------------- ------------------------------ -------------
Base+0x08 Control 1 Active Size RW -
--------- -------------- ------ ------ ------ ------ -------------
Base+0x0C Control 2 CQ index RW -
--------- -------------- -------------- -------------- -------------
Base+0x10 Head pointer Head pointer RW -
--------- -------------- -------------- -------------- -------------
Base+0x14 Tail pointer Tail pointer RW -
========= ============== ============== ============== =============

86
docs/source/rb/qm_tx.rst Normal file
View File

@ -0,0 +1,86 @@
.. _rb_qm_tx:
=====================================
Transmit queue manager register block
=====================================
The transmit queue manager register block has a header with type 0x0000C020, version 0x00000100, and indicates the location of the transmit queue manager registers and number of queues.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C020
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Offset Offset to queue manager RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 Count Queue count RO -
-------- ------------- ------------------------------ -------------
RBB+0x14 Stride Queue control register stride RO 0x00000020
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Offset
The offset field contains the offset to the start of the transmit queue manager region, relative to the start of the current region.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Offset to queue manager RO -
======== ============================== =============
.. object:: Count
The count field contains the number of queues.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Queue count RO -
======== ============================== =============
.. object:: Stride
The stride field contains the size of the control registers associated with each queue.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Queue control register stride RO 0x00000020
======== ============================== =============
Queue manager CSRs
==================
Each queue has several associated control registers, detailed in this table:
.. table::
========= ============== ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
========= ============== ====== ====== ====== ====== =============
Base+0x00 Base address L Ring base address (lower 32) RW -
--------- -------------- ------------------------------ -------------
Base+0x04 Base address H Ring base address (upper 32) RW -
--------- -------------- ------------------------------ -------------
Base+0x08 Control 1 Active Size RW -
--------- -------------- ------ ------ ------ ------ -------------
Base+0x0C Control 2 CQ index RW -
--------- -------------- -------------- -------------- -------------
Base+0x10 Head pointer Head pointer RW -
--------- -------------- -------------- -------------- -------------
Base+0x14 Tail pointer Tail pointer RW -
========= ============== ============== ============== =============

View File

@ -0,0 +1,35 @@
.. _rb_sched_block:
==============================
Scheduler block register block
==============================
The scheduler block register block has a header with type 0x0000C003, version 0x00000100, and indicates the offset to the scheduler block control registers.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C003
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Offset Offset to scheduler block CSRs RO -
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Offset
The offset field contains the offset to the start of scheduler block control registers, relative to the start of the current region.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Offset to scheduler block CSRs RO -
======== ============================== =============

View File

@ -0,0 +1,127 @@
.. _rb_sched_ctrl_tdma:
========================================
TDMA scheduler controller register block
========================================
The TDMA scheduler controller register block has a header with type 0x0000C050, version 0x00000100, and indicates the location of the scheduler controller in the register space, as well as containing some control, status, and informational registers.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C050
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Offset Offset to scheduler RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 CH count Channel count RO -
-------- ------------- ------------------------------ -------------
RBB+0x14 CH stride Channel stride RO -
-------- ------------- ------------------------------ -------------
RBB+0x18 Control Control RW 0x00000000
-------- ------------- ------------------------------ -------------
RBB+0x1C TS count TS count RW -
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Offset
The offset field contains the offset to the start of the scheduler, relative to the start of the current region.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Offset to scheduler RO -
======== ============================== =============
.. object:: Channel count
The channel count field contains the number of channels.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Channel count RO -
======== ============================== =============
.. object:: Channel stride
The channel stride field contains the size of the region for each channel.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Channel stride RO -
======== ============================== =============
.. object:: Control
The control field contains scheduler-related control bits.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x18 Control RW 0x00000000
======== ============================== =============
.. object:: Timeslot count
The timeslot count register contains the number of time slots supported.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x1C Timeslot count RO -
======== ============================== =============
TDMA scheduler controller CSRs
==============================
Each scheduler control channel has several associated control registers, detailed in this table:
.. table::
========= ============== ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
========= ============== ====== ====== ====== ====== =============
Base+0x00 Enable bits Enable bits RW -
--------- -------------- ------------------------------ -------------
Base+N Enable bits Enable bits RW -
========= ============== ============================== =============
.. object:: Enable bits
The enable bits field contains per-timeslot channel enable bits.
.. table::
========= ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
========= ====== ====== ====== ====== =============
Base+0x00 Enable bits RW 0x00000000
========= ============================== =============
.. table::
=== =================
Bit Function
=== =================
0 Timeslot 0 enable
N Timeslot N enable
=== =================

136
docs/source/rb/sched_rr.rst Normal file
View File

@ -0,0 +1,136 @@
.. _rb_sched_rr:
====================================
Round-robin scheduler register block
====================================
The round-robin scheduler register block has a header with type 0x0000C040, version 0x00000100, and indicates the location of the scheduler in the register space, as well as containing some control, status, and informational registers.
.. table::
======== ============= ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============= ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C040
-------- ------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- ------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- ------------- ------------------------------ -------------
RBB+0x0C Offset Offset to scheduler RO -
-------- ------------- ------------------------------ -------------
RBB+0x10 CH count Channel count RO -
-------- ------------- ------------------------------ -------------
RBB+0x14 CH stride Channel stride RO 0x00000004
-------- ------------- ------------------------------ -------------
RBB+0x18 Control Control RW 0x00000000
-------- ------------- ------------------------------ -------------
RBB+0x1C Dest Dest RW -
======== ============= ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Offset
The offset field contains the offset to the start of the scheduler, relative to the start of the current region.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Offset to scheduler RO -
======== ============================== =============
.. object:: Channel count
The channel count field contains the number of channels.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Channel count RO -
======== ============================== =============
.. object:: Channel stride
The channel stride field contains the size of the region for each channel.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Channel stride RO 0x00000004
======== ============================== =============
.. object:: Control
The control field contains scheduler-related control bits.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x18 Control RW 0x00000000
======== ============================== =============
.. table::
=== ========
Bit Function
=== ========
0 Enable
=== ========
.. object:: Dest
The dest field controls the destination port and traffic class of the scheduler. It is initialized with the scheduler's index with traffic class 0.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x1C Dest RW -
======== ============================== =============
Round-robin scheduler CSRs
==========================
Each scheduler channel has several associated control registers, detailed in this table:
.. table::
========= ============== ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
========= ============== ====== ====== ====== ====== =============
Base+0x00 Control Control RW 0x00000000
========= ============== ============================== =============
.. object:: Control
The control field contains scheduler-related control bits.
.. table::
========= ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
========= ====== ====== ====== ====== =============
Base+0x00 Control RW 0x00000000
========= ============================== =============
.. table::
=== =============
Bit Function
=== =============
0 Enable
1 Global enable
2 Control enable
16 Active
24 Scheduled
=== =============

210
docs/source/rb/tdma_sch.rst Normal file
View File

@ -0,0 +1,210 @@
.. _rb_tdma_sch:
=============================
TDMA scheduler register block
=============================
The TDMA scheduler register block has a header with type 0x0000C060, version 0x00000100, and carries several control registers for the TDMA scheduler module.
.. table::
======== ============== ====== ====== ====== ====== =============
Address Field 31..24 23..16 15..8 7..0 Reset value
======== ============== ====== ====== ====== ====== =============
RBB+0x00 Type Vendor ID Type RO 0x0000C060
-------- -------------- -------------- -------------- -------------
RBB+0x04 Version Major Minor Patch Meta RO 0x00000100
-------- -------------- ------ ------ ------ ------ -------------
RBB+0x08 Next pointer Pointer to next register block RO -
-------- -------------- ------------------------------ -------------
RBB+0x0C TS count Timeslot count RO -
-------- -------------- ------------------------------ -------------
RBB+0x10 Control Control RW -
-------- -------------- ------------------------------ -------------
RBB+0x14 Status Status RO -
-------- -------------- ------------------------------ -------------
RBB+0x20 Sch start Sch start time (fractional ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x24 Sch start Sch start time (ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x28 Sch start Sch start time (sec, lower 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x2C Sch start Sch start time (sec, upper 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x30 Sch period Sch period (fractional ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x34 Sch period Sch period (ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x38 Sch period Sch period (sec, lower 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x3C Sch period Sch period (sec, upper 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x40 TS period TS period (fractional ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x44 TS period TS period (ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x48 TS period TS period (sec, lower 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x4C TS period TS period (sec, upper 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x50 Active period Active period (fractional ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x54 Active period Active period (ns) RW -
-------- -------------- ------------------------------ -------------
RBB+0x58 Active period Active period (sec, lower 32) RW -
-------- -------------- ------------------------------ -------------
RBB+0x5C Active period Active period (sec, upper 32) RW -
======== ============== ============================== =============
See :ref:`rb_overview` for definitions of the standard register block header fields.
.. object:: Timeslot count
The timeslot count register contains the number of time slots supported.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x0C Timeslot count RO -
======== ============================== =============
.. object:: Control
The control register contains several control bits relating to the operation of the TDMA scheduler module.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x10 Control RW -
======== ============================== =============
.. table::
=== ========
Bit Function
=== ========
0 Enable
=== ========
.. object:: Status
The control register contains several status bits relating to the operation of the TDMA scheduler module.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x14 Status RO -
======== ============================== =============
.. table::
=== ========
Bit Function
=== ========
0 Locked
1 Error
=== ========
.. object:: Schedule start time
The schedule start time registers determine the absolute start time for the schedule, with all values latched coincident with writing the upper 32 bits of the seconds field.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x20 Sch start time (fractional ns) RW -
-------- ------------------------------ -------------
RBB+0x24 Sch start time (ns) RW -
-------- ------------------------------ -------------
RBB+0x28 Sch start time (sec, lower 32) RW -
-------- ------------------------------ -------------
RBB+0x2C Sch start time (sec, upper 32) RW -
======== ============================== =============
.. object:: Schedule period
The schedule period registers control the period of the schedule, with all values latched coincident with writing the upper 32 bits of the seconds field.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x30 Sch period (fractional ns) RW -
-------- ------------------------------ -------------
RBB+0x34 Sch period (ns) RW -
-------- ------------------------------ -------------
RBB+0x38 Sch period (sec, lower 32) RW -
-------- ------------------------------ -------------
RBB+0x3C Sch period (sec, upper 32) RW -
======== ============================== =============
.. object:: Timeslot period
The timeslot period registers control the period of each time slot, with all values latched coincident with writing the upper 32 bits of the seconds field.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x40 TS period (fractional ns) RW -
-------- ------------------------------ -------------
RBB+0x44 TS period (ns) RW -
-------- ------------------------------ -------------
RBB+0x48 TS period (sec, lower 32) RW -
-------- ------------------------------ -------------
RBB+0x4C TS period (sec, upper 32) RW -
======== ============================== =============
.. object:: Active period
The active period registers control the active period of each time slot, with all values latched coincident with writing the upper 32 bits of the seconds field.
.. table::
======== ====== ====== ====== ====== =============
Address 31..24 23..16 15..8 7..0 Reset value
======== ====== ====== ====== ====== =============
RBB+0x50 Active period (fractional ns) RW -
-------- ------------------------------ -------------
RBB+0x54 Active period (ns) RW -
-------- ------------------------------ -------------
RBB+0x58 Active period (sec, lower 32) RW -
-------- ------------------------------ -------------
RBB+0x5C Active period (sec, upper 32) RW -
======== ============================== =============
TDMA timing parameters
======================
The TDMA schedule is defined by several parameters - the schedule start time, schedule period, timeslot period, and timeslot active period. This figure depicts the relationship between these parameters::
schedule
start
|
V
|<-------- schedule period -------->|
-----+--------+--------+--------+--------+--------+---
| SLOT 0 | SLOT 1 | SLOT 2 | SLOT 3 | SLOT 0 |
-----+--------+--------+--------+--------+--------+---
|<------>|
timeslot
period
|<-------- timeslot period -------->|
-----+-----------------------------------+------------
| SLOT 0 | SLOT 1
-----+-----------------------------------+------------
|<---- active period ----->|
The schedule start time is the absolute start time. Each subsequent schedule will start on a multiple of the schedule period after the start time. Each schedule starts on timeslot 0, and advances to the next timeslot each timeslot period. The timeslot active period is the active period for each timeslot, forming a guard period at the end of the timeslot. It is recommended that the timeslot period divide evenly into the schedule period, but rounding errors will not accumulate as the schedule period takes precedence over the timeslot period. Similarly, the timeslot period takes precedence over the timeslot active period.

101
docs/source/tuning.rst Normal file
View File

@ -0,0 +1,101 @@
.. _tuning:
==================
Performance Tuning
==================
Here are some tips and tricks to get the best possible performance with Corundum.
First, it's always a good idea to test with a commercial 100G NIC as a sanity check - if a commercial 100G NIC doesn't run near 100G line rate, then Corundum will definitely have issues.
Second, check the PCIe configuration with ``lspci``. You'll want to make sure that the card is actually running with the full PCIe bandwidth. Some x16 PCIe slots don't have all of the lanes physically wired, and in many cases lanes can be switched between slots depending on which slots are used---for example, two slots may share 16 lanes, if the second slot is empty, the first slot will use all 16 lanes, but if the second slot has a card installed, both slots will run with 8 lanes.
This is what ``lspci`` reports for Corundum in a gen 3 x16 configuration in a machine with an AMD EPYC 7302P CPU::
$ sudo lspci -d 1234:1001 -vvv
81:00.0 Ethernet controller: Device 1234:1001
Subsystem: Silicom Denmark Device a00e
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin ? routed to IRQ 337
NUMA node: 1
IOMMU group: 13
Region 0: Memory at 20020000000 (64-bit, prefetchable) [size=16M]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [48] MSI: Enable+ Count=32/32 Maskable+ 64bit+
Address: 00000000fee00000 Data: 0000
Masking: 00000000 Pending: 00000000
Capabilities: [70] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 1024 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset- SlotPowerLimit 75.000W
DevCtl: CorrErr+ NonFatalErr+ FatalErr+ UnsupReq-
RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+
MaxPayload 512 bytes, MaxReadReq 512 bytes
DevSta: CorrErr+ NonFatalErr- FatalErr- UnsupReq+ AuxPwr- TransPend-
LnkCap: Port #0, Speed 8GT/s, Width x16, ASPM not supported
ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 8GT/s (ok), Width x16 (ok)
TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range BC, TimeoutDis+ NROPrPrP- LTR-
10BitTagComp- 10BitTagReq- OBFF Not Supported, ExtFmt- EETLPPrefix-
EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
FRS- TPHComp- ExtTPHComp-
AtomicOpsCap: 32bit- 64bit- 128bitCAS-
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR- OBFF Disabled,
AtomicOpsCtl: ReqEn-
LnkCap2: Supported Link Speeds: 2.5-8GT/s, Crosslink- Retimer- 2Retimers- DRS-
LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+ EqualizationPhase1+
EqualizationPhase2+ EqualizationPhase3+ LinkEqualizationRequest-
Retimer- 2Retimers- CrosslinkRes: unsupported
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
AERCap: First Error Pointer: 00, ECRCGenCap- ECRCGenEn- ECRCChkCap- ECRCChkEn-
MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
HeaderLog: 00000000 00000000 00000000 00000000
Capabilities: [1c0 v1] Secondary PCI Express
LnkCtl3: LnkEquIntrruptEn- PerformEqu-
LaneErrStat: 0
Kernel driver in use: mqnic
The device driver also prints out some PCIe-related information when it attaches to the device, to save the trouble of running ``lspci``::
[ 349.460705] mqnic 0000:81:00.0: mqnic PCI probe
[ 349.460712] mqnic 0000:81:00.0: Vendor: 0x1234
[ 349.460715] mqnic 0000:81:00.0: Device: 0x1001
[ 349.460717] mqnic 0000:81:00.0: Subsystem vendor: 0x1c2c
[ 349.460719] mqnic 0000:81:00.0: Subsystem device: 0xa00e
[ 349.460721] mqnic 0000:81:00.0: Class: 0x020000
[ 349.460723] mqnic 0000:81:00.0: PCI ID: 0000:81:00.0
[ 349.460730] mqnic 0000:81:00.0: Max payload size: 512 bytes
[ 349.460733] mqnic 0000:81:00.0: Max read request size: 512 bytes
[ 349.460735] mqnic 0000:81:00.0: Link capability: gen 3 x16
[ 349.460737] mqnic 0000:81:00.0: Link status: gen 3 x16
[ 349.460739] mqnic 0000:81:00.0: Relaxed ordering: enabled
[ 349.460740] mqnic 0000:81:00.0: Phantom functions: disabled
[ 349.460742] mqnic 0000:81:00.0: Extended tags: enabled
[ 349.460744] mqnic 0000:81:00.0: No snoop: enabled
[ 349.460745] mqnic 0000:81:00.0: NUMA node: 1
[ 349.460753] mqnic 0000:81:00.0: 126.016 Gb/s available PCIe bandwidth (8.0 GT/s PCIe x16 link)
[ 349.460767] mqnic 0000:81:00.0: enabling device (0000 -> 0002)
[ 349.460802] mqnic 0000:81:00.0: Control BAR size: 16777216
[ 349.462723] mqnic 0000:81:00.0: Configured 32 IRQs
Note that ``lspci`` reports ``LnkSta: Speed 8GT/s (ok), Width x16 (ok)``, indicating that the link is running at the max supported speed and max supported link width. If one of those is reported as ``(degraded)``, then further investigation is required. If ``(ok)`` or ``(degraded)`` is not shown, then compare ``LnkSta`` with ``LnkCap`` to see if ``LnkSta`` reports lower values. In this case, ``lspci`` reports ``LnkCap: Port #0, Speed 8GT/s, Width x16``, which matches ``LnkSta``. It also reports ``MSI: Enable+ Count=32/32``, indicating that all 32 MSI channels are active. Some motherboards do not fully implement MSI and limit devices to a single channel. Eventually, Corundum will migrate to MSI-X to mitigate this issue, as well as support more interrupt channels. Also note that ``lspci`` reports ``MaxPayload 512 bytes``---this is the largest that I have seen so far (on AMD EPYC), most modern systems report 256 bytes. Obviously, the larger, the better in terms of PCIe overhead.
Any processes that access the NIC should be pinned to the NIC's NUMA node. The NUMA node is shown both in the ``lspci`` and driver output output (``NUMA node: 3``) and it can be read from sysfs (``/sys/class/net/<dev>/device/numa_node``). Use ``numactl -N <node> <command>`` to run programs on that NUMA node. For example, ``numactl -N 3 iperf3 -s``. If you're testing with ``iperf``, you'll want to run both the client and the server on the correct NUMA node.
It's also advisable to go into BIOS setup and disable any power-management features to get the system into its highest-performance state.
Notes on the performance evaluation for the FCCM paper: the servers used are Dell R540 machines with dual Intel Xeon 6138 CPUs and all memory channels populated, and ``lspci`` reports ``MaxPayload 256 bytes``. The machines have two NUMA nodes, so only one CPU is used for performance evaluation to prevent traffic from traversing the UPI link (can use Intel PCM to confirm use of the correct NUMA node). On these machines, a single ``iperf`` process would run at 20-30 Gbps with 1500 byte MTU, or 40-50 Gbps with 9000 byte MTU. The Corundum design for those tests was configured with 8192 TX queues and 256 RX queues.