From fe379be39b13b9d1110a0faf6e1cb3381ff92193 Mon Sep 17 00:00:00 2001 From: David Lenfesty Date: Sat, 18 Feb 2023 11:56:39 -0700 Subject: [PATCH] gateware: saving some state again --- gateware/docs/sampler_clock_design.md | 40 + gateware/eth.py | 51 +- gateware/gen_liteeth.sh | 2 +- gateware/liteeth/csr.csv | 45 + .../liteeth/doc/_build/doctrees/ctrl.doctree | Bin 0 -> 14349 bytes .../doc/_build/doctrees/environment.pickle | Bin 0 -> 170524 bytes .../doc/_build/doctrees/ethmac.doctree | Bin 0 -> 61485 bytes .../doc/_build/doctrees/ethphy.doctree | Bin 0 -> 24496 bytes .../liteeth/doc/_build/doctrees/index.doctree | Bin 0 -> 5101 bytes .../doc/_build/doctrees/interrupts.doctree | Bin 0 -> 4706 bytes gateware/liteeth/doc/_build/html/.buildinfo | 4 + .../doc/_build/html/_sources/ctrl.rst.txt | 78 + .../doc/_build/html/_sources/ethmac.rst.txt | 380 ++ .../doc/_build/html/_sources/ethphy.rst.txt | 138 + .../doc/_build/html/_sources/index.rst.txt | 31 + .../_build/html/_sources/interrupts.rst.txt | 18 + .../doc/_build/html/_static/WaveDrom.js | 3 + .../doc/_build/html/_static/alabaster.css | 703 +++ .../liteeth/doc/_build/html/_static/basic.css | 903 ++++ .../doc/_build/html/_static/custom.css | 1 + .../doc/_build/html/_static/default.js | 3 + .../doc/_build/html/_static/doctools.js | 156 + .../html/_static/documentation_options.js | 14 + .../liteeth/doc/_build/html/_static/file.png | Bin 0 -> 286 bytes .../doc/_build/html/_static/language_data.js | 199 + .../liteeth/doc/_build/html/_static/minus.png | Bin 0 -> 90 bytes .../liteeth/doc/_build/html/_static/plus.png | Bin 0 -> 90 bytes .../doc/_build/html/_static/pygments.css | 83 + .../doc/_build/html/_static/searchtools.js | 566 +++ .../_build/html/_static/sphinx_highlight.js | 144 + gateware/liteeth/doc/_build/html/ctrl.html | 213 + gateware/liteeth/doc/_build/html/ethmac.html | 567 +++ gateware/liteeth/doc/_build/html/ethphy.html | 320 ++ .../liteeth/doc/_build/html/genindex.html | 109 + gateware/liteeth/doc/_build/html/index.html | 144 + .../liteeth/doc/_build/html/interrupts.html | 128 + gateware/liteeth/doc/_build/html/objects.inv | Bin 0 -> 993 bytes gateware/liteeth/doc/_build/html/search.html | 128 + .../liteeth/doc/_build/html/searchindex.js | 1 + gateware/liteeth/doc/_static/WaveDrom.js | 3 + gateware/liteeth/doc/_static/default.js | 3 + gateware/liteeth/doc/conf.py | 17 + gateware/liteeth/doc/ctrl.rst | 78 + gateware/liteeth/doc/ethmac.rst | 380 ++ gateware/liteeth/doc/ethphy.rst | 138 + gateware/liteeth/doc/index.rst | 31 + gateware/liteeth/doc/interrupts.rst | 18 + .../liteeth/gateware/build_liteeth_core.sh | 5 + gateware/liteeth/gateware/liteeth_core.lpf | 132 + gateware/liteeth/gateware/liteeth_core.v | 3898 +++++++++++++++++ gateware/liteeth/gateware/liteeth_core.ys | 8 + .../liteeth/software/include/generated/csr.h | 409 ++ .../liteeth/software/include/generated/git.h | 8 + .../liteeth/software/include/generated/mem.h | 20 + .../liteeth/software/include/generated/soc.h | 56 + gateware/main.py | 4 + gateware/test.gtwk | 3 + requirements.txt | 2 + 58 files changed, 10381 insertions(+), 4 deletions(-) create mode 100644 gateware/docs/sampler_clock_design.md mode change 100644 => 100755 gateware/gen_liteeth.sh create mode 100644 gateware/liteeth/csr.csv create mode 100644 gateware/liteeth/doc/_build/doctrees/ctrl.doctree create mode 100644 gateware/liteeth/doc/_build/doctrees/environment.pickle create mode 100644 gateware/liteeth/doc/_build/doctrees/ethmac.doctree create mode 100644 gateware/liteeth/doc/_build/doctrees/ethphy.doctree create mode 100644 gateware/liteeth/doc/_build/doctrees/index.doctree create mode 100644 gateware/liteeth/doc/_build/doctrees/interrupts.doctree create mode 100644 gateware/liteeth/doc/_build/html/.buildinfo create mode 100644 gateware/liteeth/doc/_build/html/_sources/ctrl.rst.txt create mode 100644 gateware/liteeth/doc/_build/html/_sources/ethmac.rst.txt create mode 100644 gateware/liteeth/doc/_build/html/_sources/ethphy.rst.txt create mode 100644 gateware/liteeth/doc/_build/html/_sources/index.rst.txt create mode 100644 gateware/liteeth/doc/_build/html/_sources/interrupts.rst.txt create mode 100644 gateware/liteeth/doc/_build/html/_static/WaveDrom.js create mode 100644 gateware/liteeth/doc/_build/html/_static/alabaster.css create mode 100644 gateware/liteeth/doc/_build/html/_static/basic.css create mode 100644 gateware/liteeth/doc/_build/html/_static/custom.css create mode 100644 gateware/liteeth/doc/_build/html/_static/default.js create mode 100644 gateware/liteeth/doc/_build/html/_static/doctools.js create mode 100644 gateware/liteeth/doc/_build/html/_static/documentation_options.js create mode 100644 gateware/liteeth/doc/_build/html/_static/file.png create mode 100644 gateware/liteeth/doc/_build/html/_static/language_data.js create mode 100644 gateware/liteeth/doc/_build/html/_static/minus.png create mode 100644 gateware/liteeth/doc/_build/html/_static/plus.png create mode 100644 gateware/liteeth/doc/_build/html/_static/pygments.css create mode 100644 gateware/liteeth/doc/_build/html/_static/searchtools.js create mode 100644 gateware/liteeth/doc/_build/html/_static/sphinx_highlight.js create mode 100644 gateware/liteeth/doc/_build/html/ctrl.html create mode 100644 gateware/liteeth/doc/_build/html/ethmac.html create mode 100644 gateware/liteeth/doc/_build/html/ethphy.html create mode 100644 gateware/liteeth/doc/_build/html/genindex.html create mode 100644 gateware/liteeth/doc/_build/html/index.html create mode 100644 gateware/liteeth/doc/_build/html/interrupts.html create mode 100644 gateware/liteeth/doc/_build/html/objects.inv create mode 100644 gateware/liteeth/doc/_build/html/search.html create mode 100644 gateware/liteeth/doc/_build/html/searchindex.js create mode 100644 gateware/liteeth/doc/_static/WaveDrom.js create mode 100644 gateware/liteeth/doc/_static/default.js create mode 100644 gateware/liteeth/doc/conf.py create mode 100644 gateware/liteeth/doc/ctrl.rst create mode 100644 gateware/liteeth/doc/ethmac.rst create mode 100644 gateware/liteeth/doc/ethphy.rst create mode 100644 gateware/liteeth/doc/index.rst create mode 100644 gateware/liteeth/doc/interrupts.rst create mode 100644 gateware/liteeth/gateware/build_liteeth_core.sh create mode 100644 gateware/liteeth/gateware/liteeth_core.lpf create mode 100644 gateware/liteeth/gateware/liteeth_core.v create mode 100644 gateware/liteeth/gateware/liteeth_core.ys create mode 100644 gateware/liteeth/software/include/generated/csr.h create mode 100644 gateware/liteeth/software/include/generated/git.h create mode 100644 gateware/liteeth/software/include/generated/mem.h create mode 100644 gateware/liteeth/software/include/generated/soc.h create mode 100644 gateware/test.gtwk diff --git a/gateware/docs/sampler_clock_design.md b/gateware/docs/sampler_clock_design.md new file mode 100644 index 0000000..52a92fd --- /dev/null +++ b/gateware/docs/sampler_clock_design.md @@ -0,0 +1,40 @@ +# Sampler clock design and CDC considerations + +Essentially, I have to support two clock domains, one for the ADC sampling +itself and one for system clock, otherwise we'll have issues pushing the +bandwidth we need to export the data. + +Sampling speed will be 10MHz, as limited by memory resources. Ideally the system +clock will be 50MHz, but 40MHz is a decent minimum IMO. + +The sampler module itself will operate on system clock, with a wishbone +interface. It will pass the sample clock into smaller sub-modules that read the +data from the ADCs. (TODO I need to figure out how to deal with how exactly to +sample the data pins relative to the clock, make sure the signal is stable when +I clock it in. Maybe do negative edge? Idk.) + +- Control signals to the ADC (DFS, 3-STATE, REFSENSE), will be directly wired to + control registers. +- STBY will be controlled by the sampler module +- OTR will be synchronized in to sysclk with n-FF, it is clocked to 10MHz domain + +An enable signal will be synchronized in to the sample clock domain, and that +will be used by the sampler submodules to pull STBY high, and begin sampling. +The sampling submodules will be very dumb, and export the data as determined by +the enable signal, (i.e. wait 5 clocks to start/stop to manage ADC pipeline +latency). + +The data will be synchronized straight through, data connected comb, and a +toggled pin to synchronize the data into sysclk. We can export at full speed if +we latch data in on a change in the toggle pin instead of setting high and +waiting for it to go low. (Otherwise we need to implement some sort of gearing +to push multiple samples through every few sample clocks.) This is okay for CDC +because sysclk is faster than sample clock, so any transition will last long +enough to propogate through the synchronizers, and when we get a change through +the synchronyzer, we can know that the data is valid. This assumes sysclk is at +least 4x faster than the sample clock, so the toggle pin can propogate through +the synchronizer, and the data is still valid before the next sample clock edge. + +On the sysclk side, the toggle will turn into a strobe and data will feed into +circular buffers to store the ping data. It will also be exported to the peak +detector module. diff --git a/gateware/eth.py b/gateware/eth.py index 787e707..3c65008 100644 --- a/gateware/eth.py +++ b/gateware/eth.py @@ -1,27 +1,72 @@ from amaranth import * +from amaranth.lib.io import pin_layout from amaranth_soc.wishbone.bus import Interface + +__all__ = ["LiteEth", "rgmii_layout"] + + # TODO maybe this should just call liteeth_gen to close the loop? class LiteEth(Elaboratable, Interface): def __init__(self): - # TODO change ADDR width - Interface.__init__(self, addr_width=32, data_width=32) + # Addr width is 13 bits to accomodate 0x1FFF, which is well p + Interface.__init__(self, addr_width=13, data_width=32, granularity=8, features=["cti", "bte", "err"]) self.rgmii_eth_clocks_tx = Signal() + self.interrupt = Signal() + + # TODO this really shouldn't technically happen here, because we can elaborate one module multiple times, + # but since I use it once it isn't actually a problem. def elaborate(self, platform): platform.add_file("liteeth_core.v", open("liteeth/gateware/liteeth_core.v", 'r').read()) m = Module() + + # TODO I have to provide TX/RX clocks myself core = Instance( "liteeth_core", i_sys_clock=ClockSignal(), + + # RGMII signals o_rgmii_eth_clocks_tx=self.rgmii_eth_clocks_tx, + + # Wishbone all the things + i_wishbone_adr=self.adr, + i_wishbone_dat_w=self.dat_w, + o_wishbone_dat_r=self.dat_r, + i_wishbone_sel=self.sel, + i_wishbone_cyc=self.cyc, + o_wishbone_ack=self.ack, + i_wishbone_we=self.we, + i_wishbone_cti=self.cti, + i_wishbone_bte=self.bte, + o_wishbone_err=self.err, + + o_interrupt=self.interrupt, ) m.submodules.core = core - return m \ No newline at end of file + return m + + +rgmii_layout = [ + ("clocks_tx", pin_layout(1, "o")), + ("clocks_rx", pin_layout(1, "i")), + ("rst_n", pin_layout(1, "o")), + ("int_n", pin_layout(1, "i")), + + # TODO is this not IO? why does LiteEth say input? + # I think the answer is it uses a primitive, not 100% right now + ("mdio", pin_layout(1, "i")), + ("mdc", pin_layout(1, "o")), + ("rx_ctl", pin_layout(1, "i")), + ("rx_data", pin_layout(4, "i")), + ("tx_ctl", pin_layout(1, "o")), + ("tx_data", pin_layout(4, "o")), +] + diff --git a/gateware/gen_liteeth.sh b/gateware/gen_liteeth.sh old mode 100644 new mode 100755 index e6104cf..dd9e3e6 --- a/gateware/gen_liteeth.sh +++ b/gateware/gen_liteeth.sh @@ -1,3 +1,3 @@ #!/usr/bin/env sh -liteeth_gen --output-dir liteeth liteeth_config.yaml \ No newline at end of file +liteeth_gen --output-dir liteeth --doc liteeth_config.yaml \ No newline at end of file diff --git a/gateware/liteeth/csr.csv b/gateware/liteeth/csr.csv new file mode 100644 index 0000000..a245b9c --- /dev/null +++ b/gateware/liteeth/csr.csv @@ -0,0 +1,45 @@ +#-------------------------------------------------------------------------------- +# Auto-generated by LiteX (8159b5ca) on 2023-02-07 21:33:18 +#-------------------------------------------------------------------------------- +csr_base,ctrl,0x00000000,, +csr_base,ethmac,0x00000800,, +csr_base,ethphy,0x00001000,, +csr_register,ctrl_reset,0x00000000,1,rw +csr_register,ctrl_scratch,0x00000004,1,rw +csr_register,ctrl_bus_errors,0x00000008,1,ro +csr_register,ethmac_sram_writer_slot,0x00000800,1,ro +csr_register,ethmac_sram_writer_length,0x00000804,1,ro +csr_register,ethmac_sram_writer_errors,0x00000808,1,ro +csr_register,ethmac_sram_writer_ev_status,0x0000080c,1,ro +csr_register,ethmac_sram_writer_ev_pending,0x00000810,1,rw +csr_register,ethmac_sram_writer_ev_enable,0x00000814,1,rw +csr_register,ethmac_sram_reader_start,0x00000818,1,rw +csr_register,ethmac_sram_reader_ready,0x0000081c,1,ro +csr_register,ethmac_sram_reader_level,0x00000820,1,ro +csr_register,ethmac_sram_reader_slot,0x00000824,1,rw +csr_register,ethmac_sram_reader_length,0x00000828,1,rw +csr_register,ethmac_sram_reader_ev_status,0x0000082c,1,ro +csr_register,ethmac_sram_reader_ev_pending,0x00000830,1,rw +csr_register,ethmac_sram_reader_ev_enable,0x00000834,1,rw +csr_register,ethmac_preamble_crc,0x00000838,1,ro +csr_register,ethmac_rx_datapath_preamble_errors,0x0000083c,1,ro +csr_register,ethmac_rx_datapath_crc_errors,0x00000840,1,ro +csr_register,ethphy_crg_reset,0x00001000,1,rw +csr_register,ethphy_rx_inband_status,0x00001004,1,ro +csr_register,ethphy_mdio_w,0x00001008,1,rw +csr_register,ethphy_mdio_r,0x0000100c,1,ro +constant,config_clock_frequency,10000000,, +constant,config_cpu_type_none,None,, +constant,config_cpu_variant_standard,None,, +constant,config_cpu_human_name,unknown,, +constant,config_csr_data_width,32,, +constant,config_csr_alignment,32,, +constant,config_bus_standard,wishbone,, +constant,config_bus_data_width,32,, +constant,config_bus_address_width,32,, +constant,config_bus_bursting,0,, +constant,ethmac_rx_slots,2,, +constant,ethmac_tx_slots,2,, +constant,ethmac_slot_size,2048,, +memory_region,ethmac,0x00020000,8192,io +memory_region,csr,0x00000000,65536,io diff --git a/gateware/liteeth/doc/_build/doctrees/ctrl.doctree b/gateware/liteeth/doc/_build/doctrees/ctrl.doctree new file mode 100644 index 0000000000000000000000000000000000000000..649f1b74311c3436b7f972419422f39386d27c14 GIT binary patch literal 14349 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 ZDO9rP0;bR!+p`$EY&VaSsmet6{{#Li4{iVe literal 0 HcmV?d00001 diff --git a/gateware/liteeth/doc/_build/doctrees/ethphy.doctree b/gateware/liteeth/doc/_build/doctrees/ethphy.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9fdbedf96869235a1be35ce87a0c4f5987a51219 GIT binary patch literal 24496 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 | :ref:`0x00000000 ` | ++------------------------------------------+-------------------------------------+ +| :ref:`CTRL_SCRATCH ` | :ref:`0x00000004 ` | ++------------------------------------------+-------------------------------------+ +| :ref:`CTRL_BUS_ERRORS ` | :ref:`0x00000008 ` | ++------------------------------------------+-------------------------------------+ + +CTRL_RESET +^^^^^^^^^^ + +`Address: 0x00000000 + 0x0 = 0x00000000` + + + .. wavedrom:: + :caption: CTRL_RESET + + { + "reg": [ + {"name": "soc_rst", "type": 4, "bits": 1}, + {"name": "cpu_rst", "bits": 1}, + {"bits": 30} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+---------+------------------------------------------------------------------------+ +| Field | Name | Description | ++=======+=========+========================================================================+ +| [0] | SOC_RST | Write `1` to this register to reset the full SoC (Pulse Reset) | ++-------+---------+------------------------------------------------------------------------+ +| [1] | CPU_RST | Write `1` to this register to reset the CPU(s) of the SoC (Hold Reset) | ++-------+---------+------------------------------------------------------------------------+ + +CTRL_SCRATCH +^^^^^^^^^^^^ + +`Address: 0x00000000 + 0x4 = 0x00000004` + + Use this register as a scratch space to verify that software read/write accesses + to the Wishbone/CSR bus are working correctly. The initial reset value of + 0x1234578 can be used to verify endianness. + + .. wavedrom:: + :caption: CTRL_SCRATCH + + { + "reg": [ + {"name": "scratch[31:0]", "attr": 'reset: 305419896', "bits": 32} + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + +CTRL_BUS_ERRORS +^^^^^^^^^^^^^^^ + +`Address: 0x00000000 + 0x8 = 0x00000008` + + Total number of Wishbone bus errors (timeouts) since start. + + .. wavedrom:: + :caption: CTRL_BUS_ERRORS + + { + "reg": [ + {"name": "bus_errors[31:0]", "bits": 32} + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + diff --git a/gateware/liteeth/doc/_build/html/_sources/ethmac.rst.txt b/gateware/liteeth/doc/_build/html/_sources/ethmac.rst.txt new file mode 100644 index 0000000..b644a1f --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_sources/ethmac.rst.txt @@ -0,0 +1,380 @@ +ETHMAC +====== + +Register Listing for ETHMAC +--------------------------- + ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| Register | Address | ++================================================================================+========================================================+ +| :ref:`ETHMAC_SRAM_WRITER_SLOT ` | :ref:`0x00000800 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_WRITER_LENGTH ` | :ref:`0x00000804 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_WRITER_ERRORS ` | :ref:`0x00000808 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_WRITER_EV_STATUS ` | :ref:`0x0000080c ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_WRITER_EV_PENDING ` | :ref:`0x00000810 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_WRITER_EV_ENABLE ` | :ref:`0x00000814 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_START ` | :ref:`0x00000818 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_READY ` | :ref:`0x0000081c ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_LEVEL ` | :ref:`0x00000820 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_SLOT ` | :ref:`0x00000824 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_LENGTH ` | :ref:`0x00000828 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_EV_STATUS ` | :ref:`0x0000082c ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_EV_PENDING ` | :ref:`0x00000830 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_EV_ENABLE ` | :ref:`0x00000834 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_PREAMBLE_CRC ` | :ref:`0x00000838 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_RX_DATAPATH_PREAMBLE_ERRORS ` | :ref:`0x0000083c ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_RX_DATAPATH_CRC_ERRORS ` | :ref:`0x00000840 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ + +ETHMAC_SRAM_WRITER_SLOT +^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x0 = 0x00000800` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_SLOT + + { + "reg": [ + {"name": "sram_writer_slot", "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_SRAM_WRITER_LENGTH +^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x4 = 0x00000804` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_LENGTH + + { + "reg": [ + {"name": "sram_writer_length[10:0]", "bits": 11}, + {"bits": 21}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + +ETHMAC_SRAM_WRITER_ERRORS +^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x8 = 0x00000808` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_ERRORS + + { + "reg": [ + {"name": "sram_writer_errors[31:0]", "bits": 32} + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + +ETHMAC_SRAM_WRITER_EV_STATUS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0xc = 0x0000080c` + + This register contains the current raw level of the available event trigger. + Writes to this register have no effect. + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_EV_STATUS + + { + "reg": [ + {"name": "available", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+-----------+----------------------------------+ +| Field | Name | Description | ++=======+===========+==================================+ +| [0] | AVAILABLE | Level of the ``available`` event | ++-------+-----------+----------------------------------+ + +ETHMAC_SRAM_WRITER_EV_PENDING +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x10 = 0x00000810` + + When a available event occurs, the corresponding bit will be set in this + register. To clear the Event, set the corresponding bit in this register. + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_EV_PENDING + + { + "reg": [ + {"name": "available", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+-----------+---------------------------------------------------------------------------------+ +| Field | Name | Description | ++=======+===========+=================================================================================+ +| [0] | AVAILABLE | `1` if a `available` event occurred. This Event is **level triggered** when the | +| | | signal is **high**. | ++-------+-----------+---------------------------------------------------------------------------------+ + +ETHMAC_SRAM_WRITER_EV_ENABLE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x14 = 0x00000814` + + This register enables the corresponding available events. Write a ``0`` to this + register to disable individual events. + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_EV_ENABLE + + { + "reg": [ + {"name": "available", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+-----------+-------------------------------------------------+ +| Field | Name | Description | ++=======+===========+=================================================+ +| [0] | AVAILABLE | Write a ``1`` to enable the ``available`` Event | ++-------+-----------+-------------------------------------------------+ + +ETHMAC_SRAM_READER_START +^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x18 = 0x00000818` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_START + + { + "reg": [ + {"name": "sram_reader_start", "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_SRAM_READER_READY +^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x1c = 0x0000081c` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_READY + + { + "reg": [ + {"name": "sram_reader_ready", "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_SRAM_READER_LEVEL +^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x20 = 0x00000820` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_LEVEL + + { + "reg": [ + {"name": "sram_reader_level[1:0]", "bits": 2}, + {"bits": 30}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_SRAM_READER_SLOT +^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x24 = 0x00000824` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_SLOT + + { + "reg": [ + {"name": "sram_reader_slot", "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_SRAM_READER_LENGTH +^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x28 = 0x00000828` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_LENGTH + + { + "reg": [ + {"name": "sram_reader_length[10:0]", "bits": 11}, + {"bits": 21}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + +ETHMAC_SRAM_READER_EV_STATUS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x2c = 0x0000082c` + + This register contains the current raw level of the event0 event trigger. + Writes to this register have no effect. + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_EV_STATUS + + { + "reg": [ + {"name": "event0", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+--------+-------------------------------+ +| Field | Name | Description | ++=======+========+===============================+ +| [0] | EVENT0 | Level of the ``event0`` event | ++-------+--------+-------------------------------+ + +ETHMAC_SRAM_READER_EV_PENDING +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x30 = 0x00000830` + + When a event0 event occurs, the corresponding bit will be set in this register. + To clear the Event, set the corresponding bit in this register. + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_EV_PENDING + + { + "reg": [ + {"name": "event0", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+--------+----------------------------------------------------------------------------------+ +| Field | Name | Description | ++=======+========+==================================================================================+ +| [0] | EVENT0 | `1` if a this particular event occurred. This Event is triggered on a **rising** | +| | | edge. | ++-------+--------+----------------------------------------------------------------------------------+ + +ETHMAC_SRAM_READER_EV_ENABLE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x34 = 0x00000834` + + This register enables the corresponding event0 events. Write a ``0`` to this + register to disable individual events. + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_EV_ENABLE + + { + "reg": [ + {"name": "event0", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+--------+----------------------------------------------+ +| Field | Name | Description | ++=======+========+==============================================+ +| [0] | EVENT0 | Write a ``1`` to enable the ``event0`` Event | ++-------+--------+----------------------------------------------+ + +ETHMAC_PREAMBLE_CRC +^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x38 = 0x00000838` + + + .. wavedrom:: + :caption: ETHMAC_PREAMBLE_CRC + + { + "reg": [ + {"name": "preamble_crc", "attr": 'reset: 1', "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_RX_DATAPATH_PREAMBLE_ERRORS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x3c = 0x0000083c` + + + .. wavedrom:: + :caption: ETHMAC_RX_DATAPATH_PREAMBLE_ERRORS + + { + "reg": [ + {"name": "rx_datapath_preamble_errors[31:0]", "bits": 32} + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + +ETHMAC_RX_DATAPATH_CRC_ERRORS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x40 = 0x00000840` + + + .. wavedrom:: + :caption: ETHMAC_RX_DATAPATH_CRC_ERRORS + + { + "reg": [ + {"name": "rx_datapath_crc_errors[31:0]", "bits": 32} + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + diff --git a/gateware/liteeth/doc/_build/html/_sources/ethphy.rst.txt b/gateware/liteeth/doc/_build/html/_sources/ethphy.rst.txt new file mode 100644 index 0000000..49c8d6f --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_sources/ethphy.rst.txt @@ -0,0 +1,138 @@ +ETHPHY +====== + +Register Listing for ETHPHY +--------------------------- + ++----------------------------------------------------------+---------------------------------------------+ +| Register | Address | ++==========================================================+=============================================+ +| :ref:`ETHPHY_CRG_RESET ` | :ref:`0x00001000 ` | ++----------------------------------------------------------+---------------------------------------------+ +| :ref:`ETHPHY_RX_INBAND_STATUS ` | :ref:`0x00001004 ` | ++----------------------------------------------------------+---------------------------------------------+ +| :ref:`ETHPHY_MDIO_W ` | :ref:`0x00001008 ` | ++----------------------------------------------------------+---------------------------------------------+ +| :ref:`ETHPHY_MDIO_R ` | :ref:`0x0000100c ` | ++----------------------------------------------------------+---------------------------------------------+ + +ETHPHY_CRG_RESET +^^^^^^^^^^^^^^^^ + +`Address: 0x00001000 + 0x0 = 0x00001000` + + + .. wavedrom:: + :caption: ETHPHY_CRG_RESET + + { + "reg": [ + {"name": "crg_reset", "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHPHY_RX_INBAND_STATUS +^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00001000 + 0x4 = 0x00001004` + + + .. wavedrom:: + :caption: ETHPHY_RX_INBAND_STATUS + + { + "reg": [ + {"name": "link_status", "bits": 1}, + {"name": "clock_speed", "bits": 1}, + {"name": "duplex_status", "bits": 1}, + {"bits": 29} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+---------------+-----------------------------------+ +| Field | Name | Description | ++=======+===============+===================================+ +| [0] | LINK_STATUS | | +| | | | +| | | +---------+-------------+ | +| | | | Value | Description | | +| | | +=========+=============+ | +| | | | ``0b0`` | Link down. | | +| | | +---------+-------------+ | +| | | | ``0b1`` | Link up. | | +| | | +---------+-------------+ | ++-------+---------------+-----------------------------------+ +| [1] | CLOCK_SPEED | | +| | | | +| | | +----------+--------------------+ | +| | | | Value | Description | | +| | | +==========+====================+ | +| | | | ``0b00`` | 2.5MHz (10Mbps). | | +| | | +----------+--------------------+ | +| | | | ``0b01`` | 25MHz (100MBps). | | +| | | +----------+--------------------+ | +| | | | ``0b10`` | 125MHz (1000MBps). | | +| | | +----------+--------------------+ | ++-------+---------------+-----------------------------------+ +| [2] | DUPLEX_STATUS | | +| | | | +| | | +---------+--------------+ | +| | | | Value | Description | | +| | | +=========+==============+ | +| | | | ``0b0`` | Half-duplex. | | +| | | +---------+--------------+ | +| | | | ``0b1`` | Full-duplex. | | +| | | +---------+--------------+ | ++-------+---------------+-----------------------------------+ + +ETHPHY_MDIO_W +^^^^^^^^^^^^^ + +`Address: 0x00001000 + 0x8 = 0x00001008` + + + .. wavedrom:: + :caption: ETHPHY_MDIO_W + + { + "reg": [ + {"name": "mdc", "bits": 1}, + {"name": "oe", "bits": 1}, + {"name": "w", "bits": 1}, + {"bits": 29} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+------+-------------+ +| Field | Name | Description | ++=======+======+=============+ ++-------+------+-------------+ ++-------+------+-------------+ ++-------+------+-------------+ + +ETHPHY_MDIO_R +^^^^^^^^^^^^^ + +`Address: 0x00001000 + 0xc = 0x0000100c` + + + .. wavedrom:: + :caption: ETHPHY_MDIO_R + + { + "reg": [ + {"name": "r", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+------+-------------+ +| Field | Name | Description | ++=======+======+=============+ ++-------+------+-------------+ + diff --git a/gateware/liteeth/doc/_build/html/_sources/index.rst.txt b/gateware/liteeth/doc/_build/html/_sources/index.rst.txt new file mode 100644 index 0000000..6ffb5f3 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_sources/index.rst.txt @@ -0,0 +1,31 @@ + +Documentation for LiteX SoC Project +=================================== + + + +Modules +======= + +.. toctree:: + :maxdepth: 1 + + interrupts + +Register Groups +=============== + +.. toctree:: + :maxdepth: 1 + + ctrl + ethmac + ethphy + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/gateware/liteeth/doc/_build/html/_sources/interrupts.rst.txt b/gateware/liteeth/doc/_build/html/_sources/interrupts.rst.txt new file mode 100644 index 0000000..9d6df8e --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_sources/interrupts.rst.txt @@ -0,0 +1,18 @@ +Interrupt Controller +==================== + +This device has an ``EventManager``-based interrupt system. Individual modules +generate `events` which are wired into a central interrupt controller. + +When an interrupt occurs, you should look the interrupt number up in the CPU- +specific interrupt table and then call the relevant module. + +Assigned Interrupts +------------------- + +The following interrupts are assigned on this system: + ++-----------+--------+ +| Interrupt | Module | ++===========+========+ + diff --git a/gateware/liteeth/doc/_build/html/_static/WaveDrom.js b/gateware/liteeth/doc/_build/html/_static/WaveDrom.js new file mode 100644 index 0000000..b3d99a6 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_static/WaveDrom.js @@ -0,0 +1,3 @@ +/*! wavedrom 2.3.2 2020-02-10 */ + +!function o(s,i,c){function l(t,e){if(!i[t]){if(!s[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(u)return u(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var a=i[t]={exports:{}};s[t][0].call(a.exports,function(e){return l(s[t][1][e]||e)},a,a.exports,o,s,i,c)}return i[t].exports}for(var u="function"==typeof require&&require,e=0;et+u.offsetWidth||e.yr+u.offsetHeight)&&(u.parentNode.removeChild(u),document.body.removeEventListener("mousedown",f,!1))}(l=document.getElementById(c+i)).childNodes[0].addEventListener("contextmenu",function(e){var t,r,n;(u=document.createElement("div")).className="wavedromMenu",u.style.top=e.y+"px",u.style.left=e.x+"px",t=document.createElement("ul"),(r=document.createElement("li")).innerHTML="Save as PNG",t.appendChild(r),(n=document.createElement("li")).innerHTML="Save as SVG",t.appendChild(n),u.appendChild(t),document.body.appendChild(u),r.addEventListener("click",function(){var e,t,r,n,a,o,s;e="",0!==i&&(e+=(t=document.getElementById(c+0)).innerHTML.substring(166,t.innerHTML.indexOf(''))),e=[l.innerHTML.slice(0,166),e,l.innerHTML.slice(166)].join(""),r="data:image/svg+xml;base64,"+btoa(e),(n=new Image).src=r,(a=document.createElement("canvas")).width=n.width,a.height=n.height,a.getContext("2d").drawImage(n,0,0),o=a.toDataURL("image/png"),(s=document.createElement("a")).href=o,s.download="wavedrom.png",s.click(),u.parentNode.removeChild(u),document.body.removeEventListener("mousedown",f,!1)},!1),n.addEventListener("click",function(){var e,t,r,n;e="",0!==i&&(e+=(t=document.getElementById(c+0)).innerHTML.substring(166,t.innerHTML.indexOf(''))),e=[l.innerHTML.slice(0,166),e,l.innerHTML.slice(166)].join(""),r="data:image/svg+xml;base64,"+btoa(e),(n=document.createElement("a")).href=r,n.download="wavedrom.svg",n.click(),u.parentNode.removeChild(u),document.body.removeEventListener("mousedown",f,!1)},!1),u.addEventListener("contextmenu",function(e){e.preventDefault()},!1),document.body.addEventListener("mousedown",f,!1),e.preventDefault()},!1)}},{}],2:[function(e,t,r){"use strict";t.exports=function(e,t,r){var n,a,o=r.x-t.x,s=r.y-t.y,i=(t.x+r.x)/2,c=(t.y+r.y)/2;switch(e.shape){case"-":break;case"~":n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+.3*o+", "+s+" "+o+", "+s;break;case"-~":n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.75*(r.x-t.x));break;case"~-":n="M "+t.x+","+t.y+" c 0, 0 "+.3*o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.25*(r.x-t.x));break;case"-|":n="m "+t.x+","+t.y+" "+o+",0 0,"+s,e.label&&(i=r.x);break;case"|-":n="m "+t.x+","+t.y+" 0,"+s+" "+o+",0",e.label&&(i=t.x);break;case"-|-":n="m "+t.x+","+t.y+" "+o/2+",0 0,"+s+" "+o/2+",0";break;case"->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none";break;case"~>":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+.3*o+", "+s+" "+o+", "+s;break;case"-~>":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.75*(r.x-t.x));break;case"~->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c 0, 0 "+.3*o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.25*(r.x-t.x));break;case"-|>":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o+",0 0,"+s,e.label&&(i=r.x);break;case"|->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" 0,"+s+" "+o+",0",e.label&&(i=t.x);break;case"-|->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o/2+",0 0,"+s+" "+o/2+",0";break;case"<->":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none";break;case"<~>":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+.3*o+", "+s+" "+o+", "+s;break;case"<-~>":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.75*(r.x-t.x));break;case"<-|>":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o+",0 0,"+s,e.label&&(i=r.x);break;case"<-|->":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o/2+",0 0,"+s+" "+o/2+",0";break;default:a="fill:none;stroke:#F00;stroke-width:1"}return{lx:i,ly:c,d:n,style:a}}},{}],3:[function(e,t,r){t.exports={chars:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,47,74,74,118,89,25,44,44,52,78,37,44,37,37,74,74,74,74,74,74,74,74,74,74,37,37,78,78,78,74,135,89,89,96,96,89,81,103,96,37,67,89,74,109,96,103,89,103,96,89,81,96,89,127,89,87,81,37,37,37,61,74,44,74,74,67,74,74,37,74,74,30,30,67,30,112,74,74,74,74,44,67,37,74,67,95,66,65,67,44,34,44,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,43,74,74,74,74,34,74,44,98,49,74,78,0,98,73,53,73,44,44,44,77,71,37,44,44,49,74,111,111,111,81,89,89,89,89,89,89,133,96,89,89,89,89,37,37,37,37,96,96,103,103,103,103,103,78,103,96,96,96,96,87,89,81,74,74,74,74,74,74,118,67,74,74,74,74,36,36,36,36,74,74,74,74,74,74,74,73,81,74,74,74,74,65,74,65,89,74,89,74,89,74,96,67,96,67,96,67,96,67,96,82,96,74,89,74,89,74,89,74,89,74,89,74,103,74,103,74,103,74,103,74,96,74,96,74,37,36,37,36,37,36,37,30,37,36,98,59,67,30,89,67,67,74,30,74,30,74,39,74,44,74,30,96,74,96,74,96,74,80,96,74,103,74,103,74,103,74,133,126,96,44,96,44,96,44,89,67,89,67,89,67,89,67,81,38,81,50,81,37,96,74,96,74,96,74,96,74,96,74,96,74,127,95,87,65,87,81,67,81,67,81,67,30,84,97,91,84,91,84,94,92,73,104,109,91,84,81,84,100,82,76,74,103,91,131,47,40,99,77,37,79,130,100,84,104,114,87,126,101,87,84,93,84,69,84,46,52,82,52,82,114,89,102,96,100,98,91,70,88,88,77,70,85,89,77,67,84,39,65,61,39,189,173,153,111,105,61,123,123,106,89,74,37,30,103,74,96,74,96,74,96,74,96,74,96,74,81,91,81,91,81,130,131,102,84,103,84,87,78,104,81,104,81,88,76,37,189,173,153,103,84,148,90,100,84,89,74,133,118,103,81],other:114}},{}],4:[function(e,t,r){"use strict";var n=e("onml/lib/stringify.js"),a=e("./w3.js");t.exports=function(e){e[1].xmlns=a.svg,e[1]["xmlns:xlink"]=a.xlink;var t=n(e).replace(/&/g,"&");return(new DOMParser).parseFromString(t,"image/svg+xml").firstChild}},{"./w3.js":33,"onml/lib/stringify.js":36}],5:[function(e,t,r){"use strict";var n=e("./eva"),a=e("./render-wave-form");t.exports=function(){a(0,n("InputJSON_0"),"WaveDrom_Display_")}},{"./eva":6,"./render-wave-form":30}],6:[function(require,module,exports){"use strict";function eva(id){var TheTextBox,source;function erra(e){return{signal:[{name:["tspan",["tspan",{class:"error h5"},"Error: "],e.message]}]}}if(TheTextBox=document.getElementById(id),TheTextBox.type&&"textarea"===TheTextBox.type)try{source=eval("("+TheTextBox.value+")")}catch(e){return erra(e)}else try{source=eval("("+TheTextBox.innerHTML+")")}catch(e){return erra(e)}if("[object Object]"!==Object.prototype.toString.call(source))return erra({message:'[Semantic]: The root has to be an Object: "{signal:[...]}"'});if(source.signal){if("[object Array]"!==Object.prototype.toString.call(source.signal))return erra({message:'[Semantic]: "signal" object has to be an Array "signal:[]"'})}else if(source.assign){if("[object Array]"!==Object.prototype.toString.call(source.assign))return erra({message:'[Semantic]: "assign" object hasto be an Array "assign:[]"'})}else if(!source.reg)return erra({message:'[Semantic]: "signal:[...]" or "assign:[...]" property is missing inside the root Object'});return source}module.exports=eva},{}],7:[function(e,t,r){"use strict";t.exports=function(e){var t=0,r=0,n=[];return e.forEach(function(e){"vvv-2"===e||"vvv-3"===e||"vvv-4"===e||"vvv-5"===e||"vvv-6"===e||"vvv-7"===e||"vvv-8"===e||"vvv-9"===e?r+=1:0!==r&&(n.push(t-(r+1)/2),r=0),t+=1}),0!==r&&n.push(t-(r+1)/2),n}},{}],8:[function(e,t,r){"use strict";t.exports=function(e,t,r){var n,a,o=[];if(4===e.length){for(a=0;a"===o&&(i=!1,o=l.shift()),n=1;"."===l[0]||"|"===l[0];)l.shift(),n+=1;u=i?u.concat(p(a+o,0,n-r.period)):u.concat(p(a+o,t,n))}for(s=0;sdiv.wavedromMenu{position:fixed;border:solid 1pt#CCCCCC;background-color:white;box-shadow:0px 10px 20px #808080;cursor:default;margin:0px;padding:0px;}div.wavedromMenu>ul{margin:0px;padding:0px;}div.wavedromMenu>ul>li{padding:2px 10px;list-style:none;}div.wavedromMenu>ul>li:hover{background-color:#b5d5ff;}'}},{"./append-save-as-dialog":1,"./eva":6,"./render-wave-form":30}],18:[function(e,t,r){"use strict";t.exports=function e(t,r){var n,a,o={},s={x:10};for("string"!=typeof t[0]&&"number"!=typeof t[0]||(a=t[0],s.x=25),r.x+=s.x,n=0;n"===r&&(s=!1,r=a.shift()),o+=s?1:2*t.period,"|"===r&&n.push(["use",{"xlink:href":"#gap",transform:"translate("+t.xs*((o-(s?0:t.period))*t.hscale-t.phase)+")"}]);return n}t.exports=function(e,t,r){var n,a,o=[];if(e)for(n in e)r.period=e[n].period?e[n].period:1,r.phase=(e[n].phase?2*e[n].phase:0)+r.xmin_cfg,a=s(e[n].wave,r),o=o.concat([["g",{id:"wavegap_"+n+"_"+t,transform:"translate(0,"+(r.y0+n*r.yo)+")"}].concat(a)]);return["g",{id:"wavegaps_"+t}].concat(o)}},{}],23:[function(e,t,r){"use strict";var c=e("tspan");t.exports=function(e,r,n){var a,o,s,i=["g"];return e.forEach(function(e,t){i.push(["path",{id:"group_"+t+"_"+r,d:"m "+(e.x+.5)+","+(e.y*n.yo+3.5+n.yh0+n.yh1)+" c -3,0 -5,2 -5,5 l 0,"+(e.height*n.yo-16)+" c 0,3 2,5 5,5",style:"stroke:#0041c4;stroke-width:1;fill:none"}]),void 0!==e.name&&(a=e.x-10,o=n.yo*(e.y+e.height/2)+n.yh0+n.yh1,(s=c.parse(e.name)).unshift("text",{"text-anchor":"middle",class:"info","xml:space":"preserve"}),i.push(["g",{transform:"translate("+a+","+o+")"},["g",{transform:"rotate(270)"},s]]))}),i}},{tspan:37}],24:[function(e,t,r){"use strict";var n=e("tspan"),a=e("./text-width.js");t.exports=function(e,t){var r=a(t,8)+2;return["g",{transform:"translate("+e.x+","+e.y+")"},["rect",{x:-(r>>1),y:-5,width:r,height:10,style:"fill:#FFF;"}],["text",{"text-anchor":"middle",y:3,style:"font-size:8px;"}].concat(n.parse(t))]}},{"./text-width.js":32,tspan:37}],25:[function(e,t,r){"use strict";var s=e("./render-marks"),i=e("./render-arcs"),c=e("./render-gaps");t.exports=function(e,t,r,n,a,o){return[s(t,e,o,a)].concat(r.res).concat([i(n.lanes,e,a,o)]).concat([c(n.lanes,e,o)])}},{"./render-arcs":20,"./render-gaps":22,"./render-marks":26}],26:[function(e,t,r){"use strict";var m=e("tspan");function f(e,t,r){return e[t]&&e[t].text?[["text",{x:e.xmax*e.xs/2,y:r,fill:"#000","text-anchor":"middle","xml:space":"preserve"}].concat(m.parse(e[t].text))]:[]}function d(e,t,r,n,a,o,s){var i,c,l,u,f=1,d=0,p=[];if(void 0===e[t]||void 0===e[t][r])return[];if("string"==typeof(c=e[t][r]))c=c.trim().split(/\s+/);else if("number"==typeof c||"boolean"==typeof c)for(i=Number(c),c=[],u=0;u>o&1,t+n*(a/2-o-.5),r));return s}function o(e,d){var p=d.hspace/d.mod,h=["g",{transform:c(p/2,d.vspace/5)}],m=["g",{transform:c(p/2,d.vspace/2+4)}],v=["g",{transform:c(p/2,d.vspace)}],x=["g",{transform:c(0,d.vspace/4)}];return e.forEach(function(e){var t,r,n,a,o,s,i,c,l,u,f;if(t=0,r=d.mod-1,n=d.index*d.mod,a=(d.index+1)*d.mod-1,e.lsb/d.mod>>0===d.index)t=e.lsbm,n=e.lsb,e.msb/d.mod>>0===d.index&&(a=e.msb,r=e.msbm);else if(e.msb/d.mod>>0===d.index)a=e.msb,r=e.msbm;else if(!(n>e.lsb&&a");o+=">"}var n;switch(typeof t){case"string":case"number":case"boolean":case"undefined":return void(s+=t+c)}i=!1,s+=a(t)})?o+"/>"+c:i?o+(t=s.split("\n"),r=[],t.forEach(function(e){""!==e.trim()&&r.push(e)}),r.join("\n"))+""+c:o+c+l(s)+""+c}(e)}},{}],37:[function(e,t,r){"use strict";var n=e("./parse"),a=e("./reparse");r.parse=n,r.reparse=a},{"./parse":38,"./reparse":39}],38:[function(e,t,r){"use strict";var s=/||||||||<\/o>|<\/ins>|<\/s>|<\/sub>|<\/sup>|<\/b>|<\/i>|<\/tt>/;function i(r,e){e.add&&e.add.split(";").forEach(function(e){var t=e.split(" ");r[t[0]][t[1]]=!0}),e.del&&e.del.split(";").forEach(function(e){var t=e.split(" ");delete r[t[0]][t[1]]})}var c={"":{add:"text-decoration overline"},"":{del:"text-decoration overline"},"":{add:"text-decoration underline"},"":{del:"text-decoration underline"},"":{add:"text-decoration line-through"},"":{del:"text-decoration line-through"},"":{add:"font-weight bold"},"":{del:"font-weight bold"},"":{add:"font-style italic"},"":{del:"font-style italic"},"":{add:"baseline-shift sub;font-size .7em"},"":{del:"baseline-shift sub;font-size .7em"},"":{add:"baseline-shift super;font-size .7em"},"":{del:"baseline-shift super;font-size .7em"},"":{add:"font-family monospace"},"":{del:"font-family monospace"}};function l(n){return Object.keys(n).reduce(function(e,t){var r=Object.keys(n[t]);return 0 wavedrom.unpkg.js",cli:"{ echo '#!/usr/bin/env node' ; browserify --node bin/cli.js ; } > bin/wavedrom.js ; chmod +x bin/wavedrom.js",prepare:"npm run test && npm run unpkg",cover:"nyc -r=text -r=lcov mocha"},keywords:["waveform","verilog","RTL"],devDependencies:{"@drom/eslint-config":"^0.10.0",browserify:"^16.5.0",chai:"^4.2.0",eslint:"^5.16.0",grunt:"^1.0.4","grunt-browserify":"^5.0.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^2.0.0","grunt-contrib-concat":"^1.0.1","grunt-contrib-uglify":"^4.0.1","grunt-eslint":"^21.0.0","js-beautify":"^1.10.2",jsof:"^0.3.2",mocha:"^6.2.1",nyc:"^14.0.0"},dependencies:{"bit-field":"^1.2.1","fs-extra":"^8.0.1",json5:"^2.1.1",onml:"^1.2.0",tspan:"^0.3.6",yargs:"^14.2.0"},eslintConfig:{extends:"@drom/eslint-config/eslint4/node4",rules:{camelcase:0}}}},{}]},{},[34]); \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/_static/alabaster.css b/gateware/liteeth/doc/_build/html/_static/alabaster.css new file mode 100644 index 0000000..517d0b2 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_static/alabaster.css @@ -0,0 +1,703 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia, serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia, serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia, serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia, serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia, serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin-left: 0; + margin-right: 0; + margin-top: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/_static/basic.css b/gateware/liteeth/doc/_build/html/_static/basic.css new file mode 100644 index 0000000..7577acb --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_static/basic.css @@ -0,0 +1,903 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/_static/custom.css b/gateware/liteeth/doc/_build/html/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/gateware/liteeth/doc/_build/html/_static/default.js b/gateware/liteeth/doc/_build/html/_static/default.js new file mode 100644 index 0000000..1548596 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_static/default.js @@ -0,0 +1,3 @@ +var WaveSkin=WaveSkin||{};WaveSkin.default=["svg",{"id":"svg","xmlns":"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","height":"0"},["style",{"type":"text/css"},"text{font-size:11pt;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;fill-opacity:1;font-family:Helvetica}.muted{fill:#aaa}.warning{fill:#f6b900}.error{fill:#f60000}.info{fill:#0041c4}.success{fill:#00ab00}.h1{font-size:33pt;font-weight:bold}.h2{font-size:27pt;font-weight:bold}.h3{font-size:20pt;font-weight:bold}.h4{font-size:14pt;font-weight:bold}.h5{font-size:11pt;font-weight:bold}.h6{font-size:8pt;font-weight:bold}.s1{fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}.s2{fill:none;stroke:#000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}.s3{color:#000;fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s4{color:#000;fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible}.s5{fill:#fff;stroke:none}.s6{fill:#000;fill-opacity:1;stroke:none}.s7{color:#000;fill:#fff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s8{color:#000;fill:#ffffb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s9{color:#000;fill:#ffe0b9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s10{color:#000;fill:#b9e0ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s11{color:#000;fill:#ccfdfe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s12{color:#000;fill:#cdfdc5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s13{color:#000;fill:#f0c1fb;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s14{color:#000;fill:#f5c2c0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s15{fill:#0041c4;fill-opacity:1;stroke:none}.s16{fill:none;stroke:#0041c4;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}"],["defs",["g",{"id":"socket"},["rect",{"y":"15","x":"6","height":"20","width":"20"}]],["g",{"id":"pclk"},["path",{"d":"M0,20 0,0 20,0","class":"s1"}]],["g",{"id":"nclk"},["path",{"d":"m0,0 0,20 20,0","class":"s1"}]],["g",{"id":"000"},["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"0m0"},["path",{"d":"m0,20 3,0 3,-10 3,10 11,0","class":"s1"}]],["g",{"id":"0m1"},["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"0mx"},["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 5,20","class":"s2"}],["path",{"d":"M20,0 4,16","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"0md"},["path",{"d":"m8,20 10,0","class":"s3"}],["path",{"d":"m0,20 5,0","class":"s1"}]],["g",{"id":"0mu"},["path",{"d":"m0,20 3,0 C 7,10 10.107603,0 20,0","class":"s1"}]],["g",{"id":"0mz"},["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"111"},["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"1m0"},["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}]],["g",{"id":"1m1"},["path",{"d":"M0,0 3,0 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"1mx"},["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 5,5","class":"s2"}],["path",{"d":"M3.5,1.5 5,0","class":"s2"}]],["g",{"id":"1md"},["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}]],["g",{"id":"1mu"},["path",{"d":"M0,0 5,0","class":"s1"}],["path",{"d":"M8,0 18,0","class":"s3"}]],["g",{"id":"1mz"},["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}]],["g",{"id":"xxx"},["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 10,0","class":"s2"}],["path",{"d":"M0,15 15,0","class":"s2"}],["path",{"d":"M0,20 20,0","class":"s2"}],["path",{"d":"M5,20 20,5","class":"s2"}],["path",{"d":"M10,20 20,10","class":"s2"}],["path",{"d":"m15,20 5,-5","class":"s2"}]],["g",{"id":"xm0"},["path",{"d":"M0,0 4,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,5 4,1","class":"s2"}],["path",{"d":"M0,10 5,5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 7,13","class":"s2"}],["path",{"d":"M5,20 8,17","class":"s2"}]],["g",{"id":"xm1"},["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 4,20 9,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 9,1","class":"s2"}],["path",{"d":"M0,15 7,8","class":"s2"}],["path",{"d":"M0,20 5,15","class":"s2"}]],["g",{"id":"xmx"},["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 10,0","class":"s2"}],["path",{"d":"M0,15 15,0","class":"s2"}],["path",{"d":"M0,20 20,0","class":"s2"}],["path",{"d":"M5,20 20,5","class":"s2"}],["path",{"d":"M10,20 20,10","class":"s2"}],["path",{"d":"m15,20 5,-5","class":"s2"}]],["g",{"id":"xmd"},["path",{"d":"m0,0 4,0 c 3,10 6,20 16,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,5 4,1","class":"s2"}],["path",{"d":"M0,10 5.5,4.5","class":"s2"}],["path",{"d":"M0,15 6.5,8.5","class":"s2"}],["path",{"d":"M0,20 8,12","class":"s2"}],["path",{"d":"m5,20 5,-5","class":"s2"}],["path",{"d":"m10,20 2.5,-2.5","class":"s2"}]],["g",{"id":"xmu"},["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"m0,20 4,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 10,0","class":"s2"}],["path",{"d":"M0,15 10,5","class":"s2"}],["path",{"d":"M0,20 6,14","class":"s2"}]],["g",{"id":"xmz"},["path",{"d":"m0,0 4,0 c 6,10 11,10 16,10","class":"s1"}],["path",{"d":"m0,20 4,0 C 10,10 15,10 20,10","class":"s1"}],["path",{"d":"M0,5 4.5,0.5","class":"s2"}],["path",{"d":"M0,10 6.5,3.5","class":"s2"}],["path",{"d":"M0,15 8.5,6.5","class":"s2"}],["path",{"d":"M0,20 11.5,8.5","class":"s2"}]],["g",{"id":"ddd"},["path",{"d":"m0,20 20,0","class":"s3"}]],["g",{"id":"dm0"},["path",{"d":"m0,20 10,0","class":"s3"}],["path",{"d":"m12,20 8,0","class":"s1"}]],["g",{"id":"dm1"},["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"dmx"},["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 5,20","class":"s2"}],["path",{"d":"M20,0 4,16","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"dmd"},["path",{"d":"m0,20 20,0","class":"s3"}]],["g",{"id":"dmu"},["path",{"d":"m0,20 3,0 C 7,10 10.107603,0 20,0","class":"s1"}]],["g",{"id":"dmz"},["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"uuu"},["path",{"d":"M0,0 20,0","class":"s3"}]],["g",{"id":"um0"},["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}]],["g",{"id":"um1"},["path",{"d":"M0,0 10,0","class":"s3"}],["path",{"d":"m12,0 8,0","class":"s1"}]],["g",{"id":"umx"},["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 5,5","class":"s2"}],["path",{"d":"M3.5,1.5 5,0","class":"s2"}]],["g",{"id":"umd"},["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}]],["g",{"id":"umu"},["path",{"d":"M0,0 20,0","class":"s3"}]],["g",{"id":"umz"},["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s4"}]],["g",{"id":"zzz"},["path",{"d":"m0,10 20,0","class":"s1"}]],["g",{"id":"zm0"},["path",{"d":"m0,10 6,0 3,10 11,0","class":"s1"}]],["g",{"id":"zm1"},["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"zmx"},["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 6.5,8.5","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"zmd"},["path",{"d":"m0,10 7,0 c 3,5 8,10 13,10","class":"s1"}]],["g",{"id":"zmu"},["path",{"d":"m0,10 7,0 C 10,5 15,0 20,0","class":"s1"}]],["g",{"id":"zmz"},["path",{"d":"m0,10 20,0","class":"s1"}]],["g",{"id":"gap"},["path",{"d":"m7,-2 -4,0 c -5,0 -5,24 -10,24 l 4,0 C 2,22 2,-2 7,-2 z","class":"s5"}],["path",{"d":"M-7,22 C -2,22 -2,-2 3,-2","class":"s1"}],["path",{"d":"M-3,22 C 2,22 2,-2 7,-2","class":"s1"}]],["g",{"id":"Pclk"},["path",{"d":"M-3,12 0,3 3,12 C 1,11 -1,11 -3,12 z","class":"s6"}],["path",{"d":"M0,20 0,0 20,0","class":"s1"}]],["g",{"id":"Nclk"},["path",{"d":"M-3,8 0,17 3,8 C 1,9 -1,9 -3,8 z","class":"s6"}],["path",{"d":"m0,0 0,20 20,0","class":"s1"}]],["g",{"id":"0mv-2"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s7"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-2"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s7"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-2"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s7"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-2"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s7"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-2"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s7"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-2"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s7"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-2"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s7"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-2"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-2"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s7"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-2"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s7"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-2"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s7"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-3"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s8"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-3"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s8"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-3"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s8"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-3"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s8"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-3"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s8"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-3"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s8"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-3"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s8"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-3"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-3"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s8"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-3"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s8"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-3"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s8"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-4"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s9"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-4"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s9"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-4"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s9"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-4"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s9"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-4"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s9"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-4"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s9"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-4"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s9"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-4"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-4"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s9"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-4"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s9"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-4"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s9"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-5"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s10"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-5"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s10"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-5"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s10"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-5"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s10"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-5"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s10"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-5"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s10"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-5"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s10"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-5"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-5"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s10"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-5"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s10"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-5"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s10"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-6"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s11"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-6"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s11"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-6"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s11"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-6"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s11"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-6"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s11"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-6"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s11"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-6"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s11"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-6"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-6"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s11"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-6"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s11"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-6"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s11"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-7"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s12"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-7"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s12"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-7"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s12"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-7"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s12"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-7"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s12"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-7"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s12"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-7"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s12"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-7"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-7"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s12"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-7"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s12"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-7"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s12"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-8"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s13"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-8"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s13"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-8"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s13"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-8"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s13"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-8"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s13"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-8"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s13"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-8"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s13"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-8"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-8"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s13"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-8"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s13"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-8"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s13"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-9"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s14"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-9"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s14"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-9"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s14"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-9"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s14"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-9"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s14"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-9"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s14"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-9"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s14"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-9"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-9"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s14"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-9"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s14"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-9"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s14"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"vmv-2-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"arrow0"},["path",{"d":"m-12,-3 9,3 -9,3 c 1,-2 1,-4 0,-6 z","class":"s15"}],["path",{"d":"M0,0 -15,0","class":"s16"}]],["marker",{"id":"arrowhead","style":"fill:#0041c4","markerHeight":"7","markerWidth":"10","markerUnits":"strokeWidth","viewBox":"0 -4 11 8","refX":"15","refY":"0","orient":"auto"},["path",{"d":"M0 -4 11 0 0 4z"}]],["marker",{"id":"arrowtail","style":"fill:#0041c4","markerHeight":"7","markerWidth":"10","markerUnits":"strokeWidth","viewBox":"-11 -4 11 8","refX":"-15","refY":"0","orient":"auto"},["path",{"d":"M0 -4 -11 0 0 4z"}]]],["g",{"id":"waves"},["g",{"id":"lanes"}],["g",{"id":"groups"}]]]; +try { module.exports = WaveSkin; } catch(err) {} + diff --git a/gateware/liteeth/doc/_build/html/_static/doctools.js b/gateware/liteeth/doc/_build/html/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/gateware/liteeth/doc/_build/html/_static/documentation_options.js b/gateware/liteeth/doc/_build/html/_static/documentation_options.js new file mode 100644 index 0000000..b57ae3b --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/_static/file.png b/gateware/liteeth/doc/_build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/gateware/liteeth/doc/_build/html/_static/language_data.js b/gateware/liteeth/doc/_build/html/_static/language_data.js new file mode 100644 index 0000000..250f566 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/gateware/liteeth/doc/_build/html/_static/minus.png b/gateware/liteeth/doc/_build/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/gateware/liteeth/doc/_build/html/_static/plus.png b/gateware/liteeth/doc/_build/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/gateware/liteeth/doc/_build/html/_static/pygments.css b/gateware/liteeth/doc/_build/html/_static/pygments.css new file mode 100644 index 0000000..9abe04b --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_static/pygments.css @@ -0,0 +1,83 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #004461; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #582800 } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902 } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #745334 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #990000 } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #004461 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #888888 } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */ +.highlight .mb { color: #990000 } /* Literal.Number.Bin */ +.highlight .mf { color: #990000 } /* Literal.Number.Float */ +.highlight .mh { color: #990000 } /* Literal.Number.Hex */ +.highlight .mi { color: #990000 } /* Literal.Number.Integer */ +.highlight .mo { color: #990000 } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/_static/searchtools.js b/gateware/liteeth/doc/_build/html/_static/searchtools.js new file mode 100644 index 0000000..97d56a7 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_static/searchtools.js @@ -0,0 +1,566 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/gateware/liteeth/doc/_build/html/_static/sphinx_highlight.js b/gateware/liteeth/doc/_build/html/_static/sphinx_highlight.js new file mode 100644 index 0000000..aae669d --- /dev/null +++ b/gateware/liteeth/doc/_build/html/_static/sphinx_highlight.js @@ -0,0 +1,144 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(SphinxHighlight.highlightSearchWords); +_ready(SphinxHighlight.initEscapeListener); diff --git a/gateware/liteeth/doc/_build/html/ctrl.html b/gateware/liteeth/doc/_build/html/ctrl.html new file mode 100644 index 0000000..8540d10 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/ctrl.html @@ -0,0 +1,213 @@ + + + + + + + + + CTRL — LiteX SoC Project documentation + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

CTRL¶

+
+

Register Listing for CTRL¶

+ + + + + + + + + + + + + + + + + +

Register

Address

CTRL_RESET

0x00000000

CTRL_SCRATCH

0x00000004

CTRL_BUS_ERRORS

0x00000008

+
+

CTRL_RESET¶

+

Address: 0x00000000 + 0x0 = 0x00000000

+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + +

Field

Name

Description

[0]

SOC_RST

Write 1 to this register to reset the full SoC (Pulse Reset)

[1]

CPU_RST

Write 1 to this register to reset the CPU(s) of the SoC (Hold Reset)

+
+
+

CTRL_SCRATCH¶

+

Address: 0x00000000 + 0x4 = 0x00000004

+
+

Use this register as a scratch space to verify that software read/write accesses +to the Wishbone/CSR bus are working correctly. The initial reset value of +0x1234578 can be used to verify endianness.

+ +
+ +
+
+
+
+

CTRL_BUS_ERRORS¶

+

Address: 0x00000000 + 0x8 = 0x00000008

+
+

Total number of Wishbone bus errors (timeouts) since start.

+ +
+ +
+
+
+
+
+ + + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/ethmac.html b/gateware/liteeth/doc/_build/html/ethmac.html new file mode 100644 index 0000000..b6bcfb5 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/ethmac.html @@ -0,0 +1,567 @@ + + + + + + + + + ETHMAC — LiteX SoC Project documentation + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

ETHMAC¶

+
+

Register Listing for ETHMAC¶

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Register

Address

ETHMAC_SRAM_WRITER_SLOT

0x00000800

ETHMAC_SRAM_WRITER_LENGTH

0x00000804

ETHMAC_SRAM_WRITER_ERRORS

0x00000808

ETHMAC_SRAM_WRITER_EV_STATUS

0x0000080c

ETHMAC_SRAM_WRITER_EV_PENDING

0x00000810

ETHMAC_SRAM_WRITER_EV_ENABLE

0x00000814

ETHMAC_SRAM_READER_START

0x00000818

ETHMAC_SRAM_READER_READY

0x0000081c

ETHMAC_SRAM_READER_LEVEL

0x00000820

ETHMAC_SRAM_READER_SLOT

0x00000824

ETHMAC_SRAM_READER_LENGTH

0x00000828

ETHMAC_SRAM_READER_EV_STATUS

0x0000082c

ETHMAC_SRAM_READER_EV_PENDING

0x00000830

ETHMAC_SRAM_READER_EV_ENABLE

0x00000834

ETHMAC_PREAMBLE_CRC

0x00000838

ETHMAC_RX_DATAPATH_PREAMBLE_ERRORS

0x0000083c

ETHMAC_RX_DATAPATH_CRC_ERRORS

0x00000840

+
+

ETHMAC_SRAM_WRITER_SLOT¶

+

Address: 0x00000800 + 0x0 = 0x00000800

+
+
+
+ +
+
+
+
+

ETHMAC_SRAM_WRITER_LENGTH¶

+

Address: 0x00000800 + 0x4 = 0x00000804

+
+
+
+ +
+
+
+
+

ETHMAC_SRAM_WRITER_ERRORS¶

+

Address: 0x00000800 + 0x8 = 0x00000808

+
+
+
+ +
+
+
+
+

ETHMAC_SRAM_WRITER_EV_STATUS¶

+

Address: 0x00000800 + 0xc = 0x0000080c

+
+

This register contains the current raw level of the available event trigger. +Writes to this register have no effect.

+ +
+ +
+
+ + + + + + + + + + + + + +

Field

Name

Description

[0]

AVAILABLE

Level of the available event

+
+
+

ETHMAC_SRAM_WRITER_EV_PENDING¶

+

Address: 0x00000800 + 0x10 = 0x00000810

+
+

When a available event occurs, the corresponding bit will be set in this +register. To clear the Event, set the corresponding bit in this register.

+ +
+ +
+
+ + + + + + + + + + + + + +

Field

Name

Description

[0]

AVAILABLE

1 if a available event occurred. This Event is level triggered when the +signal is high.

+
+
+

ETHMAC_SRAM_WRITER_EV_ENABLE¶

+

Address: 0x00000800 + 0x14 = 0x00000814

+
+

This register enables the corresponding available events. Write a 0 to this +register to disable individual events.

+ +
+ +
+
+ + + + + + + + + + + + + +

Field

Name

Description

[0]

AVAILABLE

Write a 1 to enable the available Event

+
+
+

ETHMAC_SRAM_READER_START¶

+

Address: 0x00000800 + 0x18 = 0x00000818

+
+
+
+ +
+
+
+
+

ETHMAC_SRAM_READER_READY¶

+

Address: 0x00000800 + 0x1c = 0x0000081c

+
+
+
+ +
+
+
+
+

ETHMAC_SRAM_READER_LEVEL¶

+

Address: 0x00000800 + 0x20 = 0x00000820

+
+
+
+ +
+
+
+
+

ETHMAC_SRAM_READER_SLOT¶

+

Address: 0x00000800 + 0x24 = 0x00000824

+
+
+
+ +
+
+
+
+

ETHMAC_SRAM_READER_LENGTH¶

+

Address: 0x00000800 + 0x28 = 0x00000828

+
+
+
+ +
+
+
+
+

ETHMAC_SRAM_READER_EV_STATUS¶

+

Address: 0x00000800 + 0x2c = 0x0000082c

+
+

This register contains the current raw level of the event0 event trigger. +Writes to this register have no effect.

+ +
+ +
+
+ + + + + + + + + + + + + +

Field

Name

Description

[0]

EVENT0

Level of the event0 event

+
+
+

ETHMAC_SRAM_READER_EV_PENDING¶

+

Address: 0x00000800 + 0x30 = 0x00000830

+
+

When a event0 event occurs, the corresponding bit will be set in this register. +To clear the Event, set the corresponding bit in this register.

+ +
+ +
+
+ + + + + + + + + + + + + +

Field

Name

Description

[0]

EVENT0

1 if a this particular event occurred. This Event is triggered on a rising +edge.

+
+
+

ETHMAC_SRAM_READER_EV_ENABLE¶

+

Address: 0x00000800 + 0x34 = 0x00000834

+
+

This register enables the corresponding event0 events. Write a 0 to this +register to disable individual events.

+ +
+ +
+
+ + + + + + + + + + + + + +

Field

Name

Description

[0]

EVENT0

Write a 1 to enable the event0 Event

+
+
+

ETHMAC_PREAMBLE_CRC¶

+

Address: 0x00000800 + 0x38 = 0x00000838

+
+
+
+ +
+
+
+
+

ETHMAC_RX_DATAPATH_PREAMBLE_ERRORS¶

+

Address: 0x00000800 + 0x3c = 0x0000083c

+
+
+
+ +
+
+
+
+

ETHMAC_RX_DATAPATH_CRC_ERRORS¶

+

Address: 0x00000800 + 0x40 = 0x00000840

+
+
+
+ +
+
+
+
+
+ + + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/ethphy.html b/gateware/liteeth/doc/_build/html/ethphy.html new file mode 100644 index 0000000..d71e986 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/ethphy.html @@ -0,0 +1,320 @@ + + + + + + + + + ETHPHY — LiteX SoC Project documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

ETHPHY¶

+
+

Register Listing for ETHPHY¶

+ + + + + + + + + + + + + + + + + + + + +

Register

Address

ETHPHY_CRG_RESET

0x00001000

ETHPHY_RX_INBAND_STATUS

0x00001004

ETHPHY_MDIO_W

0x00001008

ETHPHY_MDIO_R

0x0000100c

+
+

ETHPHY_CRG_RESET¶

+

Address: 0x00001000 + 0x0 = 0x00001000

+
+
+
+ +
+
+
+
+

ETHPHY_RX_INBAND_STATUS¶

+

Address: 0x00001000 + 0x4 = 0x00001004

+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +

Field

Name

Description

[0]

LINK_STATUS

+ + + + + + + + + + + + + +

Value

Description

0b0

Link down.

0b1

Link up.

+

[1]

CLOCK_SPEED

+ + + + + + + + + + + + + + + + +

Value

Description

0b00

2.5MHz (10Mbps).

0b01

25MHz (100MBps).

0b10

125MHz (1000MBps).

+

[2]

DUPLEX_STATUS

+ + + + + + + + + + + + + +

Value

Description

0b0

Half-duplex.

0b1

Full-duplex.

+
+
+
+

ETHPHY_MDIO_W¶

+

Address: 0x00001000 + 0x8 = 0x00001008

+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +

Field

Name

Description

+
+
+

ETHPHY_MDIO_R¶

+

Address: 0x00001000 + 0xc = 0x0000100c

+
+
+
+ +
+
+ + + + + + + + + + + + + +

Field

Name

Description

+
+
+
+ + + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/genindex.html b/gateware/liteeth/doc/_build/html/genindex.html new file mode 100644 index 0000000..781e50b --- /dev/null +++ b/gateware/liteeth/doc/_build/html/genindex.html @@ -0,0 +1,109 @@ + + + + + + + + Index — LiteX SoC Project documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Index

+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/index.html b/gateware/liteeth/doc/_build/html/index.html new file mode 100644 index 0000000..8170db6 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/index.html @@ -0,0 +1,144 @@ + + + + + + + + + Documentation for LiteX SoC Project — LiteX SoC Project documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Documentation for LiteX SoC Project¶

+
+
+

Modules¶

+ +
+
+

Register Groups¶

+
+ +
+
+
+

Indices and tables¶

+ +
+ + + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/interrupts.html b/gateware/liteeth/doc/_build/html/interrupts.html new file mode 100644 index 0000000..f8e1012 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/interrupts.html @@ -0,0 +1,128 @@ + + + + + + + + + Interrupt Controller — LiteX SoC Project documentation + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Interrupt Controller¶

+

This device has an EventManager-based interrupt system. Individual modules +generate events which are wired into a central interrupt controller.

+

When an interrupt occurs, you should look the interrupt number up in the CPU- +specific interrupt table and then call the relevant module.

+
+

Assigned Interrupts¶

+

The following interrupts are assigned on this system:

+
+
+ + + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/objects.inv b/gateware/liteeth/doc/_build/html/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..10a0d73ce8e0600a236a2999ebc2d7b9e39de4a0 GIT binary patch literal 993 zcmV<710MV%AX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkRX>?^+ zAX9HcAW(8|YGq?|3L_v^WpZ8b#rNMXCQiPX<{x4c-ozpOK+nv6ovQv3Z!=Hk!IT+O;8dk zNh3pFE6V{7VZ=+e)29D^Z2SNclZ06XoO8|x*cV?gV|iAQ)XytUC_Ofu`HZJe1>Tdw z2fusczYe@C9ToEB|TS|>6`p0^49EQaguZws=5hsREW_D6<9WKG$a zS{?x*16n4%==n85A%rh5QZbY;!mlPMMQes(6voQO5{h|pxau^T)*H=W5YLvLxa(s{ zDvo(xSN@-x`bEyk$!FqeG_?Lp5`O-iQ*u(N11}I>(0YOJ0^^-uaRyBI+-v0RUADp9-Kz$gylSLY)wNR{!!B$&21Nb7LBh?j267bzxEq{9h$3)e1& z{P~&0P!0z}{(QO^tf=`UL~C#mqV-Gc1aM3z5?Y4~5eIO{_@?6RNAIoQ7NRU?W!qBT z;VPD^>#|x6W?HoxlCxS3%vr4+Z&I~(Kv%VPL|3(T$SKv@5gpaq0Ugzch<|>J09e@t!14$o@gT`SpT8Cn>sy; z7nyptWqUIIKpwT6dA*z)fZY#2h{+gmD9LgruG!CMeQd^gMhCPG8sDNl?{W(9Bj1j4 z%CCKp*g$P)d-B#`qu0Ht_Upw7xz%htLE7X*>E3({cJ;+G29u^Sn0!w$g6a7uks4D| P7pebuI3wOawizBe=}FXn literal 0 HcmV?d00001 diff --git a/gateware/liteeth/doc/_build/html/search.html b/gateware/liteeth/doc/_build/html/search.html new file mode 100644 index 0000000..41e826c --- /dev/null +++ b/gateware/liteeth/doc/_build/html/search.html @@ -0,0 +1,128 @@ + + + + + + + + Search — LiteX SoC Project documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + + +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/gateware/liteeth/doc/_build/html/searchindex.js b/gateware/liteeth/doc/_build/html/searchindex.js new file mode 100644 index 0000000..ec08e56 --- /dev/null +++ b/gateware/liteeth/doc/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["ctrl", "ethmac", "ethphy", "index", "interrupts"], "filenames": ["ctrl.rst", "ethmac.rst", "ethphy.rst", "index.rst", "interrupts.rst"], "titles": ["CTRL", "ETHMAC", "ETHPHY", "Documentation for LiteX SoC Project", "Interrupt Controller"], "terms": {"address": [0, 1, 2], "0x00000000": 0, "0x00000004": 0, "0x00000008": 0, "0x0": [0, 1, 2], "field": [0, 1, 2], "name": [0, 1, 2], "descript": [0, 1, 2], "0": [0, 1, 2], "soc_rst": 0, "write": [0, 1], "1": [0, 1, 2], "thi": [0, 1, 4], "reset": 0, "full": [0, 2], "soc": 0, "puls": 0, "cpu_rst": 0, "cpu": [0, 4], "": 0, "hold": 0, "0x4": [0, 1, 2], "us": 0, "scratch": 0, "space": 0, "verifi": 0, "softwar": 0, "read": 0, "access": 0, "wishbon": 0, "csr": 0, "bu": 0, "ar": [0, 4], "work": 0, "correctli": 0, "The": [0, 4], "initi": 0, "valu": [0, 2], "0x1234578": 0, "can": 0, "endian": 0, "0x8": [0, 1, 2], "total": 0, "number": [0, 4], "error": 0, "timeout": 0, "sinc": 0, "start": 0, "0x00000800": 1, "0x00000804": 1, "0x00000808": 1, "0x0000080c": 1, "0x00000810": 1, "0x00000814": 1, "0x00000818": 1, "0x0000081c": 1, "0x00000820": 1, "0x00000824": 1, "0x00000828": 1, "0x0000082c": 1, "0x00000830": 1, "0x00000834": 1, "0x00000838": 1, "0x0000083c": 1, "0x00000840": 1, "0xc": [1, 2], "contain": 1, "current": 1, "raw": 1, "level": 1, "avail": 1, "event": [1, 4], "trigger": 1, "have": 1, "effect": 1, "0x10": 1, "when": [1, 4], "occur": [1, 4], "correspond": 1, "bit": 1, "set": 1, "To": 1, "clear": 1, "i": 1, "signal": 1, "high": 1, "0x14": 1, "enabl": 1, "disabl": 1, "individu": [1, 4], "0x18": 1, "0x1c": 1, "0x20": 1, "0x24": 1, "0x28": 1, "0x2c": 1, "event0": 1, "0x30": 1, "particular": 1, "rise": 1, "edg": 1, "0x34": 1, "0x38": 1, "0x3c": 1, "0x40": 1, "0x00001000": 2, "0x00001004": 2, "0x00001008": 2, "0x0000100c": 2, "link_statu": 2, "0b0": 2, "link": 2, "down": 2, "0b1": 2, "up": [2, 4], "clock_spe": 2, "0b00": 2, "2": 2, "5mhz": 2, "10mbp": 2, "0b01": 2, "25mhz": 2, "100mbp": 2, "0b10": 2, "125mhz": 2, "1000mbp": 2, "duplex_statu": 2, "half": 2, "duplex": 2, "interrupt": 3, "control": 3, "ctrl": 3, "ethmac": 3, "ethphi": 3, "index": 3, "search": 3, "page": 3, "devic": 4, "ha": 4, "an": 4, "eventmanag": 4, "base": 4, "system": 4, "modul": 4, "gener": 4, "which": 4, "wire": 4, "central": 4, "you": 4, "should": 4, "look": 4, "specif": 4, "tabl": 4, "call": 4, "relev": 4, "follow": 4}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"ctrl": 0, "regist": [0, 1, 2, 3], "list": [0, 1, 2], "ctrl_reset": 0, "ctrl_scratch": 0, "ctrl_bus_error": 0, "ethmac": 1, "ethmac_sram_writer_slot": 1, "ethmac_sram_writer_length": 1, "ethmac_sram_writer_error": 1, "ethmac_sram_writer_ev_statu": 1, "ethmac_sram_writer_ev_pend": 1, "ethmac_sram_writer_ev_en": 1, "ethmac_sram_reader_start": 1, "ethmac_sram_reader_readi": 1, "ethmac_sram_reader_level": 1, "ethmac_sram_reader_slot": 1, "ethmac_sram_reader_length": 1, "ethmac_sram_reader_ev_statu": 1, "ethmac_sram_reader_ev_pend": 1, "ethmac_sram_reader_ev_en": 1, "ethmac_preamble_crc": 1, "ethmac_rx_datapath_preamble_error": 1, "ethmac_rx_datapath_crc_error": 1, "ethphi": 2, "ethphy_crg_reset": 2, "ethphy_rx_inband_statu": 2, "ethphy_mdio_w": 2, "ethphy_mdio_r": 2, "document": 3, "litex": 3, "soc": 3, "project": 3, "modul": 3, "group": 3, "indic": 3, "tabl": 3, "interrupt": 4, "control": 4, "assign": 4}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"CTRL": [[0, "ctrl"]], "Register Listing for CTRL": [[0, "register-listing-for-ctrl"]], "CTRL_RESET": [[0, "ctrl-reset"]], "CTRL_SCRATCH": [[0, "ctrl-scratch"]], "CTRL_BUS_ERRORS": [[0, "ctrl-bus-errors"]], "ETHMAC": [[1, "ethmac"]], "Register Listing for ETHMAC": [[1, "register-listing-for-ethmac"]], "ETHMAC_SRAM_WRITER_SLOT": [[1, "ethmac-sram-writer-slot"]], "ETHMAC_SRAM_WRITER_LENGTH": [[1, "ethmac-sram-writer-length"]], "ETHMAC_SRAM_WRITER_ERRORS": [[1, "ethmac-sram-writer-errors"]], "ETHMAC_SRAM_WRITER_EV_STATUS": [[1, "ethmac-sram-writer-ev-status"]], "ETHMAC_SRAM_WRITER_EV_PENDING": [[1, "ethmac-sram-writer-ev-pending"]], "ETHMAC_SRAM_WRITER_EV_ENABLE": [[1, "ethmac-sram-writer-ev-enable"]], "ETHMAC_SRAM_READER_START": [[1, "ethmac-sram-reader-start"]], "ETHMAC_SRAM_READER_READY": [[1, "ethmac-sram-reader-ready"]], "ETHMAC_SRAM_READER_LEVEL": [[1, "ethmac-sram-reader-level"]], "ETHMAC_SRAM_READER_SLOT": [[1, "ethmac-sram-reader-slot"]], "ETHMAC_SRAM_READER_LENGTH": [[1, "ethmac-sram-reader-length"]], "ETHMAC_SRAM_READER_EV_STATUS": [[1, "ethmac-sram-reader-ev-status"]], "ETHMAC_SRAM_READER_EV_PENDING": [[1, "ethmac-sram-reader-ev-pending"]], "ETHMAC_SRAM_READER_EV_ENABLE": [[1, "ethmac-sram-reader-ev-enable"]], "ETHMAC_PREAMBLE_CRC": [[1, "ethmac-preamble-crc"]], "ETHMAC_RX_DATAPATH_PREAMBLE_ERRORS": [[1, "ethmac-rx-datapath-preamble-errors"]], "ETHMAC_RX_DATAPATH_CRC_ERRORS": [[1, "ethmac-rx-datapath-crc-errors"]], "ETHPHY": [[2, "ethphy"]], "Register Listing for ETHPHY": [[2, "register-listing-for-ethphy"]], "ETHPHY_CRG_RESET": [[2, "ethphy-crg-reset"]], "ETHPHY_RX_INBAND_STATUS": [[2, "ethphy-rx-inband-status"]], "ETHPHY_MDIO_W": [[2, "ethphy-mdio-w"]], "ETHPHY_MDIO_R": [[2, "ethphy-mdio-r"]], "Documentation for LiteX SoC Project": [[3, "documentation-for-litex-soc-project"]], "Modules": [[3, "modules"]], "Register Groups": [[3, "register-groups"]], "Indices and tables": [[3, "indices-and-tables"]], "Interrupt Controller": [[4, "interrupt-controller"]], "Assigned Interrupts": [[4, "assigned-interrupts"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/gateware/liteeth/doc/_static/WaveDrom.js b/gateware/liteeth/doc/_static/WaveDrom.js new file mode 100644 index 0000000..b3d99a6 --- /dev/null +++ b/gateware/liteeth/doc/_static/WaveDrom.js @@ -0,0 +1,3 @@ +/*! wavedrom 2.3.2 2020-02-10 */ + +!function o(s,i,c){function l(t,e){if(!i[t]){if(!s[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(u)return u(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var a=i[t]={exports:{}};s[t][0].call(a.exports,function(e){return l(s[t][1][e]||e)},a,a.exports,o,s,i,c)}return i[t].exports}for(var u="function"==typeof require&&require,e=0;et+u.offsetWidth||e.yr+u.offsetHeight)&&(u.parentNode.removeChild(u),document.body.removeEventListener("mousedown",f,!1))}(l=document.getElementById(c+i)).childNodes[0].addEventListener("contextmenu",function(e){var t,r,n;(u=document.createElement("div")).className="wavedromMenu",u.style.top=e.y+"px",u.style.left=e.x+"px",t=document.createElement("ul"),(r=document.createElement("li")).innerHTML="Save as PNG",t.appendChild(r),(n=document.createElement("li")).innerHTML="Save as SVG",t.appendChild(n),u.appendChild(t),document.body.appendChild(u),r.addEventListener("click",function(){var e,t,r,n,a,o,s;e="",0!==i&&(e+=(t=document.getElementById(c+0)).innerHTML.substring(166,t.innerHTML.indexOf(''))),e=[l.innerHTML.slice(0,166),e,l.innerHTML.slice(166)].join(""),r="data:image/svg+xml;base64,"+btoa(e),(n=new Image).src=r,(a=document.createElement("canvas")).width=n.width,a.height=n.height,a.getContext("2d").drawImage(n,0,0),o=a.toDataURL("image/png"),(s=document.createElement("a")).href=o,s.download="wavedrom.png",s.click(),u.parentNode.removeChild(u),document.body.removeEventListener("mousedown",f,!1)},!1),n.addEventListener("click",function(){var e,t,r,n;e="",0!==i&&(e+=(t=document.getElementById(c+0)).innerHTML.substring(166,t.innerHTML.indexOf(''))),e=[l.innerHTML.slice(0,166),e,l.innerHTML.slice(166)].join(""),r="data:image/svg+xml;base64,"+btoa(e),(n=document.createElement("a")).href=r,n.download="wavedrom.svg",n.click(),u.parentNode.removeChild(u),document.body.removeEventListener("mousedown",f,!1)},!1),u.addEventListener("contextmenu",function(e){e.preventDefault()},!1),document.body.addEventListener("mousedown",f,!1),e.preventDefault()},!1)}},{}],2:[function(e,t,r){"use strict";t.exports=function(e,t,r){var n,a,o=r.x-t.x,s=r.y-t.y,i=(t.x+r.x)/2,c=(t.y+r.y)/2;switch(e.shape){case"-":break;case"~":n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+.3*o+", "+s+" "+o+", "+s;break;case"-~":n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.75*(r.x-t.x));break;case"~-":n="M "+t.x+","+t.y+" c 0, 0 "+.3*o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.25*(r.x-t.x));break;case"-|":n="m "+t.x+","+t.y+" "+o+",0 0,"+s,e.label&&(i=r.x);break;case"|-":n="m "+t.x+","+t.y+" 0,"+s+" "+o+",0",e.label&&(i=t.x);break;case"-|-":n="m "+t.x+","+t.y+" "+o/2+",0 0,"+s+" "+o/2+",0";break;case"->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none";break;case"~>":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+.3*o+", "+s+" "+o+", "+s;break;case"-~>":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.75*(r.x-t.x));break;case"~->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c 0, 0 "+.3*o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.25*(r.x-t.x));break;case"-|>":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o+",0 0,"+s,e.label&&(i=r.x);break;case"|->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" 0,"+s+" "+o+",0",e.label&&(i=t.x);break;case"-|->":a="marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o/2+",0 0,"+s+" "+o/2+",0";break;case"<->":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none";break;case"<~>":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+.3*o+", "+s+" "+o+", "+s;break;case"<-~>":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="M "+t.x+","+t.y+" c "+.7*o+", 0 "+o+", "+s+" "+o+", "+s,e.label&&(i=t.x+.75*(r.x-t.x));break;case"<-|>":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o+",0 0,"+s,e.label&&(i=r.x);break;case"<-|->":a="marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none",n="m "+t.x+","+t.y+" "+o/2+",0 0,"+s+" "+o/2+",0";break;default:a="fill:none;stroke:#F00;stroke-width:1"}return{lx:i,ly:c,d:n,style:a}}},{}],3:[function(e,t,r){t.exports={chars:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,47,74,74,118,89,25,44,44,52,78,37,44,37,37,74,74,74,74,74,74,74,74,74,74,37,37,78,78,78,74,135,89,89,96,96,89,81,103,96,37,67,89,74,109,96,103,89,103,96,89,81,96,89,127,89,87,81,37,37,37,61,74,44,74,74,67,74,74,37,74,74,30,30,67,30,112,74,74,74,74,44,67,37,74,67,95,66,65,67,44,34,44,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,43,74,74,74,74,34,74,44,98,49,74,78,0,98,73,53,73,44,44,44,77,71,37,44,44,49,74,111,111,111,81,89,89,89,89,89,89,133,96,89,89,89,89,37,37,37,37,96,96,103,103,103,103,103,78,103,96,96,96,96,87,89,81,74,74,74,74,74,74,118,67,74,74,74,74,36,36,36,36,74,74,74,74,74,74,74,73,81,74,74,74,74,65,74,65,89,74,89,74,89,74,96,67,96,67,96,67,96,67,96,82,96,74,89,74,89,74,89,74,89,74,89,74,103,74,103,74,103,74,103,74,96,74,96,74,37,36,37,36,37,36,37,30,37,36,98,59,67,30,89,67,67,74,30,74,30,74,39,74,44,74,30,96,74,96,74,96,74,80,96,74,103,74,103,74,103,74,133,126,96,44,96,44,96,44,89,67,89,67,89,67,89,67,81,38,81,50,81,37,96,74,96,74,96,74,96,74,96,74,96,74,127,95,87,65,87,81,67,81,67,81,67,30,84,97,91,84,91,84,94,92,73,104,109,91,84,81,84,100,82,76,74,103,91,131,47,40,99,77,37,79,130,100,84,104,114,87,126,101,87,84,93,84,69,84,46,52,82,52,82,114,89,102,96,100,98,91,70,88,88,77,70,85,89,77,67,84,39,65,61,39,189,173,153,111,105,61,123,123,106,89,74,37,30,103,74,96,74,96,74,96,74,96,74,96,74,81,91,81,91,81,130,131,102,84,103,84,87,78,104,81,104,81,88,76,37,189,173,153,103,84,148,90,100,84,89,74,133,118,103,81],other:114}},{}],4:[function(e,t,r){"use strict";var n=e("onml/lib/stringify.js"),a=e("./w3.js");t.exports=function(e){e[1].xmlns=a.svg,e[1]["xmlns:xlink"]=a.xlink;var t=n(e).replace(/&/g,"&");return(new DOMParser).parseFromString(t,"image/svg+xml").firstChild}},{"./w3.js":33,"onml/lib/stringify.js":36}],5:[function(e,t,r){"use strict";var n=e("./eva"),a=e("./render-wave-form");t.exports=function(){a(0,n("InputJSON_0"),"WaveDrom_Display_")}},{"./eva":6,"./render-wave-form":30}],6:[function(require,module,exports){"use strict";function eva(id){var TheTextBox,source;function erra(e){return{signal:[{name:["tspan",["tspan",{class:"error h5"},"Error: "],e.message]}]}}if(TheTextBox=document.getElementById(id),TheTextBox.type&&"textarea"===TheTextBox.type)try{source=eval("("+TheTextBox.value+")")}catch(e){return erra(e)}else try{source=eval("("+TheTextBox.innerHTML+")")}catch(e){return erra(e)}if("[object Object]"!==Object.prototype.toString.call(source))return erra({message:'[Semantic]: The root has to be an Object: "{signal:[...]}"'});if(source.signal){if("[object Array]"!==Object.prototype.toString.call(source.signal))return erra({message:'[Semantic]: "signal" object has to be an Array "signal:[]"'})}else if(source.assign){if("[object Array]"!==Object.prototype.toString.call(source.assign))return erra({message:'[Semantic]: "assign" object hasto be an Array "assign:[]"'})}else if(!source.reg)return erra({message:'[Semantic]: "signal:[...]" or "assign:[...]" property is missing inside the root Object'});return source}module.exports=eva},{}],7:[function(e,t,r){"use strict";t.exports=function(e){var t=0,r=0,n=[];return e.forEach(function(e){"vvv-2"===e||"vvv-3"===e||"vvv-4"===e||"vvv-5"===e||"vvv-6"===e||"vvv-7"===e||"vvv-8"===e||"vvv-9"===e?r+=1:0!==r&&(n.push(t-(r+1)/2),r=0),t+=1}),0!==r&&n.push(t-(r+1)/2),n}},{}],8:[function(e,t,r){"use strict";t.exports=function(e,t,r){var n,a,o=[];if(4===e.length){for(a=0;a"===o&&(i=!1,o=l.shift()),n=1;"."===l[0]||"|"===l[0];)l.shift(),n+=1;u=i?u.concat(p(a+o,0,n-r.period)):u.concat(p(a+o,t,n))}for(s=0;sdiv.wavedromMenu{position:fixed;border:solid 1pt#CCCCCC;background-color:white;box-shadow:0px 10px 20px #808080;cursor:default;margin:0px;padding:0px;}div.wavedromMenu>ul{margin:0px;padding:0px;}div.wavedromMenu>ul>li{padding:2px 10px;list-style:none;}div.wavedromMenu>ul>li:hover{background-color:#b5d5ff;}'}},{"./append-save-as-dialog":1,"./eva":6,"./render-wave-form":30}],18:[function(e,t,r){"use strict";t.exports=function e(t,r){var n,a,o={},s={x:10};for("string"!=typeof t[0]&&"number"!=typeof t[0]||(a=t[0],s.x=25),r.x+=s.x,n=0;n"===r&&(s=!1,r=a.shift()),o+=s?1:2*t.period,"|"===r&&n.push(["use",{"xlink:href":"#gap",transform:"translate("+t.xs*((o-(s?0:t.period))*t.hscale-t.phase)+")"}]);return n}t.exports=function(e,t,r){var n,a,o=[];if(e)for(n in e)r.period=e[n].period?e[n].period:1,r.phase=(e[n].phase?2*e[n].phase:0)+r.xmin_cfg,a=s(e[n].wave,r),o=o.concat([["g",{id:"wavegap_"+n+"_"+t,transform:"translate(0,"+(r.y0+n*r.yo)+")"}].concat(a)]);return["g",{id:"wavegaps_"+t}].concat(o)}},{}],23:[function(e,t,r){"use strict";var c=e("tspan");t.exports=function(e,r,n){var a,o,s,i=["g"];return e.forEach(function(e,t){i.push(["path",{id:"group_"+t+"_"+r,d:"m "+(e.x+.5)+","+(e.y*n.yo+3.5+n.yh0+n.yh1)+" c -3,0 -5,2 -5,5 l 0,"+(e.height*n.yo-16)+" c 0,3 2,5 5,5",style:"stroke:#0041c4;stroke-width:1;fill:none"}]),void 0!==e.name&&(a=e.x-10,o=n.yo*(e.y+e.height/2)+n.yh0+n.yh1,(s=c.parse(e.name)).unshift("text",{"text-anchor":"middle",class:"info","xml:space":"preserve"}),i.push(["g",{transform:"translate("+a+","+o+")"},["g",{transform:"rotate(270)"},s]]))}),i}},{tspan:37}],24:[function(e,t,r){"use strict";var n=e("tspan"),a=e("./text-width.js");t.exports=function(e,t){var r=a(t,8)+2;return["g",{transform:"translate("+e.x+","+e.y+")"},["rect",{x:-(r>>1),y:-5,width:r,height:10,style:"fill:#FFF;"}],["text",{"text-anchor":"middle",y:3,style:"font-size:8px;"}].concat(n.parse(t))]}},{"./text-width.js":32,tspan:37}],25:[function(e,t,r){"use strict";var s=e("./render-marks"),i=e("./render-arcs"),c=e("./render-gaps");t.exports=function(e,t,r,n,a,o){return[s(t,e,o,a)].concat(r.res).concat([i(n.lanes,e,a,o)]).concat([c(n.lanes,e,o)])}},{"./render-arcs":20,"./render-gaps":22,"./render-marks":26}],26:[function(e,t,r){"use strict";var m=e("tspan");function f(e,t,r){return e[t]&&e[t].text?[["text",{x:e.xmax*e.xs/2,y:r,fill:"#000","text-anchor":"middle","xml:space":"preserve"}].concat(m.parse(e[t].text))]:[]}function d(e,t,r,n,a,o,s){var i,c,l,u,f=1,d=0,p=[];if(void 0===e[t]||void 0===e[t][r])return[];if("string"==typeof(c=e[t][r]))c=c.trim().split(/\s+/);else if("number"==typeof c||"boolean"==typeof c)for(i=Number(c),c=[],u=0;u>o&1,t+n*(a/2-o-.5),r));return s}function o(e,d){var p=d.hspace/d.mod,h=["g",{transform:c(p/2,d.vspace/5)}],m=["g",{transform:c(p/2,d.vspace/2+4)}],v=["g",{transform:c(p/2,d.vspace)}],x=["g",{transform:c(0,d.vspace/4)}];return e.forEach(function(e){var t,r,n,a,o,s,i,c,l,u,f;if(t=0,r=d.mod-1,n=d.index*d.mod,a=(d.index+1)*d.mod-1,e.lsb/d.mod>>0===d.index)t=e.lsbm,n=e.lsb,e.msb/d.mod>>0===d.index&&(a=e.msb,r=e.msbm);else if(e.msb/d.mod>>0===d.index)a=e.msb,r=e.msbm;else if(!(n>e.lsb&&a");o+=">"}var n;switch(typeof t){case"string":case"number":case"boolean":case"undefined":return void(s+=t+c)}i=!1,s+=a(t)})?o+"/>"+c:i?o+(t=s.split("\n"),r=[],t.forEach(function(e){""!==e.trim()&&r.push(e)}),r.join("\n"))+""+c:o+c+l(s)+""+c}(e)}},{}],37:[function(e,t,r){"use strict";var n=e("./parse"),a=e("./reparse");r.parse=n,r.reparse=a},{"./parse":38,"./reparse":39}],38:[function(e,t,r){"use strict";var s=/||||||||<\/o>|<\/ins>|<\/s>|<\/sub>|<\/sup>|<\/b>|<\/i>|<\/tt>/;function i(r,e){e.add&&e.add.split(";").forEach(function(e){var t=e.split(" ");r[t[0]][t[1]]=!0}),e.del&&e.del.split(";").forEach(function(e){var t=e.split(" ");delete r[t[0]][t[1]]})}var c={"":{add:"text-decoration overline"},"":{del:"text-decoration overline"},"":{add:"text-decoration underline"},"":{del:"text-decoration underline"},"":{add:"text-decoration line-through"},"":{del:"text-decoration line-through"},"":{add:"font-weight bold"},"":{del:"font-weight bold"},"":{add:"font-style italic"},"":{del:"font-style italic"},"":{add:"baseline-shift sub;font-size .7em"},"":{del:"baseline-shift sub;font-size .7em"},"":{add:"baseline-shift super;font-size .7em"},"":{del:"baseline-shift super;font-size .7em"},"":{add:"font-family monospace"},"":{del:"font-family monospace"}};function l(n){return Object.keys(n).reduce(function(e,t){var r=Object.keys(n[t]);return 0 wavedrom.unpkg.js",cli:"{ echo '#!/usr/bin/env node' ; browserify --node bin/cli.js ; } > bin/wavedrom.js ; chmod +x bin/wavedrom.js",prepare:"npm run test && npm run unpkg",cover:"nyc -r=text -r=lcov mocha"},keywords:["waveform","verilog","RTL"],devDependencies:{"@drom/eslint-config":"^0.10.0",browserify:"^16.5.0",chai:"^4.2.0",eslint:"^5.16.0",grunt:"^1.0.4","grunt-browserify":"^5.0.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^2.0.0","grunt-contrib-concat":"^1.0.1","grunt-contrib-uglify":"^4.0.1","grunt-eslint":"^21.0.0","js-beautify":"^1.10.2",jsof:"^0.3.2",mocha:"^6.2.1",nyc:"^14.0.0"},dependencies:{"bit-field":"^1.2.1","fs-extra":"^8.0.1",json5:"^2.1.1",onml:"^1.2.0",tspan:"^0.3.6",yargs:"^14.2.0"},eslintConfig:{extends:"@drom/eslint-config/eslint4/node4",rules:{camelcase:0}}}},{}]},{},[34]); \ No newline at end of file diff --git a/gateware/liteeth/doc/_static/default.js b/gateware/liteeth/doc/_static/default.js new file mode 100644 index 0000000..1548596 --- /dev/null +++ b/gateware/liteeth/doc/_static/default.js @@ -0,0 +1,3 @@ +var WaveSkin=WaveSkin||{};WaveSkin.default=["svg",{"id":"svg","xmlns":"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","height":"0"},["style",{"type":"text/css"},"text{font-size:11pt;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;fill-opacity:1;font-family:Helvetica}.muted{fill:#aaa}.warning{fill:#f6b900}.error{fill:#f60000}.info{fill:#0041c4}.success{fill:#00ab00}.h1{font-size:33pt;font-weight:bold}.h2{font-size:27pt;font-weight:bold}.h3{font-size:20pt;font-weight:bold}.h4{font-size:14pt;font-weight:bold}.h5{font-size:11pt;font-weight:bold}.h6{font-size:8pt;font-weight:bold}.s1{fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}.s2{fill:none;stroke:#000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}.s3{color:#000;fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s4{color:#000;fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible}.s5{fill:#fff;stroke:none}.s6{fill:#000;fill-opacity:1;stroke:none}.s7{color:#000;fill:#fff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s8{color:#000;fill:#ffffb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s9{color:#000;fill:#ffe0b9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s10{color:#000;fill:#b9e0ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s11{color:#000;fill:#ccfdfe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s12{color:#000;fill:#cdfdc5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s13{color:#000;fill:#f0c1fb;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s14{color:#000;fill:#f5c2c0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s15{fill:#0041c4;fill-opacity:1;stroke:none}.s16{fill:none;stroke:#0041c4;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}"],["defs",["g",{"id":"socket"},["rect",{"y":"15","x":"6","height":"20","width":"20"}]],["g",{"id":"pclk"},["path",{"d":"M0,20 0,0 20,0","class":"s1"}]],["g",{"id":"nclk"},["path",{"d":"m0,0 0,20 20,0","class":"s1"}]],["g",{"id":"000"},["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"0m0"},["path",{"d":"m0,20 3,0 3,-10 3,10 11,0","class":"s1"}]],["g",{"id":"0m1"},["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"0mx"},["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 5,20","class":"s2"}],["path",{"d":"M20,0 4,16","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"0md"},["path",{"d":"m8,20 10,0","class":"s3"}],["path",{"d":"m0,20 5,0","class":"s1"}]],["g",{"id":"0mu"},["path",{"d":"m0,20 3,0 C 7,10 10.107603,0 20,0","class":"s1"}]],["g",{"id":"0mz"},["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"111"},["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"1m0"},["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}]],["g",{"id":"1m1"},["path",{"d":"M0,0 3,0 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"1mx"},["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 5,5","class":"s2"}],["path",{"d":"M3.5,1.5 5,0","class":"s2"}]],["g",{"id":"1md"},["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}]],["g",{"id":"1mu"},["path",{"d":"M0,0 5,0","class":"s1"}],["path",{"d":"M8,0 18,0","class":"s3"}]],["g",{"id":"1mz"},["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}]],["g",{"id":"xxx"},["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 10,0","class":"s2"}],["path",{"d":"M0,15 15,0","class":"s2"}],["path",{"d":"M0,20 20,0","class":"s2"}],["path",{"d":"M5,20 20,5","class":"s2"}],["path",{"d":"M10,20 20,10","class":"s2"}],["path",{"d":"m15,20 5,-5","class":"s2"}]],["g",{"id":"xm0"},["path",{"d":"M0,0 4,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,5 4,1","class":"s2"}],["path",{"d":"M0,10 5,5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 7,13","class":"s2"}],["path",{"d":"M5,20 8,17","class":"s2"}]],["g",{"id":"xm1"},["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 4,20 9,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 9,1","class":"s2"}],["path",{"d":"M0,15 7,8","class":"s2"}],["path",{"d":"M0,20 5,15","class":"s2"}]],["g",{"id":"xmx"},["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 10,0","class":"s2"}],["path",{"d":"M0,15 15,0","class":"s2"}],["path",{"d":"M0,20 20,0","class":"s2"}],["path",{"d":"M5,20 20,5","class":"s2"}],["path",{"d":"M10,20 20,10","class":"s2"}],["path",{"d":"m15,20 5,-5","class":"s2"}]],["g",{"id":"xmd"},["path",{"d":"m0,0 4,0 c 3,10 6,20 16,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,5 4,1","class":"s2"}],["path",{"d":"M0,10 5.5,4.5","class":"s2"}],["path",{"d":"M0,15 6.5,8.5","class":"s2"}],["path",{"d":"M0,20 8,12","class":"s2"}],["path",{"d":"m5,20 5,-5","class":"s2"}],["path",{"d":"m10,20 2.5,-2.5","class":"s2"}]],["g",{"id":"xmu"},["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"m0,20 4,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,5 5,0","class":"s2"}],["path",{"d":"M0,10 10,0","class":"s2"}],["path",{"d":"M0,15 10,5","class":"s2"}],["path",{"d":"M0,20 6,14","class":"s2"}]],["g",{"id":"xmz"},["path",{"d":"m0,0 4,0 c 6,10 11,10 16,10","class":"s1"}],["path",{"d":"m0,20 4,0 C 10,10 15,10 20,10","class":"s1"}],["path",{"d":"M0,5 4.5,0.5","class":"s2"}],["path",{"d":"M0,10 6.5,3.5","class":"s2"}],["path",{"d":"M0,15 8.5,6.5","class":"s2"}],["path",{"d":"M0,20 11.5,8.5","class":"s2"}]],["g",{"id":"ddd"},["path",{"d":"m0,20 20,0","class":"s3"}]],["g",{"id":"dm0"},["path",{"d":"m0,20 10,0","class":"s3"}],["path",{"d":"m12,20 8,0","class":"s1"}]],["g",{"id":"dm1"},["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"dmx"},["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 5,20","class":"s2"}],["path",{"d":"M20,0 4,16","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"dmd"},["path",{"d":"m0,20 20,0","class":"s3"}]],["g",{"id":"dmu"},["path",{"d":"m0,20 3,0 C 7,10 10.107603,0 20,0","class":"s1"}]],["g",{"id":"dmz"},["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"uuu"},["path",{"d":"M0,0 20,0","class":"s3"}]],["g",{"id":"um0"},["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}]],["g",{"id":"um1"},["path",{"d":"M0,0 10,0","class":"s3"}],["path",{"d":"m12,0 8,0","class":"s1"}]],["g",{"id":"umx"},["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 6,9","class":"s2"}],["path",{"d":"M10,0 5,5","class":"s2"}],["path",{"d":"M3.5,1.5 5,0","class":"s2"}]],["g",{"id":"umd"},["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}]],["g",{"id":"umu"},["path",{"d":"M0,0 20,0","class":"s3"}]],["g",{"id":"umz"},["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s4"}]],["g",{"id":"zzz"},["path",{"d":"m0,10 20,0","class":"s1"}]],["g",{"id":"zm0"},["path",{"d":"m0,10 6,0 3,10 11,0","class":"s1"}]],["g",{"id":"zm1"},["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"zmx"},["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 6.5,8.5","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"zmd"},["path",{"d":"m0,10 7,0 c 3,5 8,10 13,10","class":"s1"}]],["g",{"id":"zmu"},["path",{"d":"m0,10 7,0 C 10,5 15,0 20,0","class":"s1"}]],["g",{"id":"zmz"},["path",{"d":"m0,10 20,0","class":"s1"}]],["g",{"id":"gap"},["path",{"d":"m7,-2 -4,0 c -5,0 -5,24 -10,24 l 4,0 C 2,22 2,-2 7,-2 z","class":"s5"}],["path",{"d":"M-7,22 C -2,22 -2,-2 3,-2","class":"s1"}],["path",{"d":"M-3,22 C 2,22 2,-2 7,-2","class":"s1"}]],["g",{"id":"Pclk"},["path",{"d":"M-3,12 0,3 3,12 C 1,11 -1,11 -3,12 z","class":"s6"}],["path",{"d":"M0,20 0,0 20,0","class":"s1"}]],["g",{"id":"Nclk"},["path",{"d":"M-3,8 0,17 3,8 C 1,9 -1,9 -3,8 z","class":"s6"}],["path",{"d":"m0,0 0,20 20,0","class":"s1"}]],["g",{"id":"0mv-2"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s7"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-2"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s7"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-2"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s7"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-2"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s7"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-2"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s7"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-2"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s7"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-2"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s7"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-2"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-2"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s7"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-2"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s7"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-2"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s7"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-3"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s8"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-3"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s8"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-3"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s8"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-3"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s8"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-3"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s8"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-3"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s8"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-3"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s8"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-3"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-3"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s8"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-3"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s8"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-3"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s8"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-4"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s9"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-4"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s9"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-4"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s9"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-4"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s9"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-4"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s9"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-4"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s9"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-4"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s9"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-4"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-4"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s9"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-4"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s9"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-4"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s9"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-5"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s10"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-5"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s10"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-5"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s10"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-5"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s10"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-5"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s10"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-5"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s10"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-5"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s10"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-5"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-5"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s10"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-5"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s10"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-5"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s10"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-6"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s11"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-6"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s11"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-6"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s11"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-6"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s11"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-6"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s11"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-6"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s11"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-6"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s11"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-6"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-6"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s11"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-6"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s11"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-6"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s11"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-7"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s12"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-7"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s12"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-7"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s12"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-7"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s12"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-7"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s12"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-7"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s12"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-7"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s12"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-7"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-7"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s12"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-7"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s12"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-7"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s12"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-8"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s13"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-8"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s13"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-8"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s13"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-8"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s13"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-8"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s13"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-8"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s13"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-8"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s13"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-8"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-8"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s13"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-8"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s13"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-8"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s13"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"0mv-9"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s14"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"1mv-9"},["path",{"d":"M2.875,0 20,0 20,20 9,20 z","class":"s14"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"xmv-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,5 3.5,1.5","class":"s2"}],["path",{"d":"M0,10 4.5,5.5","class":"s2"}],["path",{"d":"M0,15 6,9","class":"s2"}],["path",{"d":"M0,20 4,16","class":"s2"}]],["g",{"id":"dmv-9"},["path",{"d":"M9,0 20,0 20,20 3,20 z","class":"s14"}],["path",{"d":"M3,20 9,0 20,0","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"umv-9"},["path",{"d":"M3,0 20,0 20,20 9,20 z","class":"s14"}],["path",{"d":"m3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"zmv-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"m6,10 3,10 11,0","class":"s1"}],["path",{"d":"M0,10 6,10 9,0 20,0","class":"s1"}]],["g",{"id":"vvv-9"},["path",{"d":"M20,20 0,20 0,0 20,0","class":"s14"}],["path",{"d":"m0,20 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vm0-9"},["path",{"d":"M0,20 0,0 3,0 9,20","class":"s14"}],["path",{"d":"M0,0 3,0 9,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vm1-9"},["path",{"d":"M0,0 0,20 3,20 9,0","class":"s14"}],["path",{"d":"M0,0 20,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0","class":"s1"}]],["g",{"id":"vmx-9"},["path",{"d":"M0,0 0,20 3,20 6,10 3,0","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}],["path",{"d":"m20,15 -5,5","class":"s2"}],["path",{"d":"M20,10 10,20","class":"s2"}],["path",{"d":"M20,5 8,17","class":"s2"}],["path",{"d":"M20,0 7,13","class":"s2"}],["path",{"d":"M15,0 7,8","class":"s2"}],["path",{"d":"M10,0 9,1","class":"s2"}]],["g",{"id":"vmd-9"},["path",{"d":"m0,0 0,20 20,0 C 10,20 7,10 3,0","class":"s14"}],["path",{"d":"m0,0 3,0 c 4,10 7,20 17,20","class":"s1"}],["path",{"d":"m0,20 20,0","class":"s1"}]],["g",{"id":"vmu-9"},["path",{"d":"m0,0 0,20 3,0 C 7,10 10,0 20,0","class":"s14"}],["path",{"d":"m0,20 3,0 C 7,10 10,0 20,0","class":"s1"}],["path",{"d":"M0,0 20,0","class":"s1"}]],["g",{"id":"vmz-9"},["path",{"d":"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20","class":"s14"}],["path",{"d":"m0,0 3,0 c 7,10 12,10 17,10","class":"s1"}],["path",{"d":"m0,20 3,0 C 10,10 15,10 20,10","class":"s1"}]],["g",{"id":"vmv-2-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-2"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s7"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-3"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s8"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-4"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s9"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-5"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s10"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-6"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s11"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-7"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s12"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-8"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s13"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-2-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s7"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-3-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s8"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-4-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s9"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-5-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s10"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-6-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s11"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-7-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s12"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-8-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s13"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"vmv-9-9"},["path",{"d":"M9,0 20,0 20,20 9,20 6,10 z","class":"s14"}],["path",{"d":"M3,0 0,0 0,20 3,20 6,10 z","class":"s14"}],["path",{"d":"m0,0 3,0 6,20 11,0","class":"s1"}],["path",{"d":"M0,20 3,20 9,0 20,0","class":"s1"}]],["g",{"id":"arrow0"},["path",{"d":"m-12,-3 9,3 -9,3 c 1,-2 1,-4 0,-6 z","class":"s15"}],["path",{"d":"M0,0 -15,0","class":"s16"}]],["marker",{"id":"arrowhead","style":"fill:#0041c4","markerHeight":"7","markerWidth":"10","markerUnits":"strokeWidth","viewBox":"0 -4 11 8","refX":"15","refY":"0","orient":"auto"},["path",{"d":"M0 -4 11 0 0 4z"}]],["marker",{"id":"arrowtail","style":"fill:#0041c4","markerHeight":"7","markerWidth":"10","markerUnits":"strokeWidth","viewBox":"-11 -4 11 8","refX":"-15","refY":"0","orient":"auto"},["path",{"d":"M0 -4 -11 0 0 4z"}]]],["g",{"id":"waves"},["g",{"id":"lanes"}],["g",{"id":"groups"}]]]; +try { module.exports = WaveSkin; } catch(err) {} + diff --git a/gateware/liteeth/doc/conf.py b/gateware/liteeth/doc/conf.py new file mode 100644 index 0000000..a0f4668 --- /dev/null +++ b/gateware/liteeth/doc/conf.py @@ -0,0 +1,17 @@ + +project = 'LiteX SoC Project' +copyright = '2023, Anonymous' +author = 'Anonymous' +extensions = [ + 'sphinx.ext.autosectionlabel', + 'sphinxcontrib.wavedrom', +] +templates_path = ['_templates'] +exclude_patterns = [] +offline_skin_js_path = "https://wavedrom.com/skins/default.js" +offline_wavedrom_js_path = "https://wavedrom.com/WaveDrom.js" +html_theme = 'alabaster' +html_static_path = ['_static'] +master_doc = 'index' + + diff --git a/gateware/liteeth/doc/ctrl.rst b/gateware/liteeth/doc/ctrl.rst new file mode 100644 index 0000000..adcb055 --- /dev/null +++ b/gateware/liteeth/doc/ctrl.rst @@ -0,0 +1,78 @@ +CTRL +==== + +Register Listing for CTRL +------------------------- + ++------------------------------------------+-------------------------------------+ +| Register | Address | ++==========================================+=====================================+ +| :ref:`CTRL_RESET ` | :ref:`0x00000000 ` | ++------------------------------------------+-------------------------------------+ +| :ref:`CTRL_SCRATCH ` | :ref:`0x00000004 ` | ++------------------------------------------+-------------------------------------+ +| :ref:`CTRL_BUS_ERRORS ` | :ref:`0x00000008 ` | ++------------------------------------------+-------------------------------------+ + +CTRL_RESET +^^^^^^^^^^ + +`Address: 0x00000000 + 0x0 = 0x00000000` + + + .. wavedrom:: + :caption: CTRL_RESET + + { + "reg": [ + {"name": "soc_rst", "type": 4, "bits": 1}, + {"name": "cpu_rst", "bits": 1}, + {"bits": 30} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+---------+------------------------------------------------------------------------+ +| Field | Name | Description | ++=======+=========+========================================================================+ +| [0] | SOC_RST | Write `1` to this register to reset the full SoC (Pulse Reset) | ++-------+---------+------------------------------------------------------------------------+ +| [1] | CPU_RST | Write `1` to this register to reset the CPU(s) of the SoC (Hold Reset) | ++-------+---------+------------------------------------------------------------------------+ + +CTRL_SCRATCH +^^^^^^^^^^^^ + +`Address: 0x00000000 + 0x4 = 0x00000004` + + Use this register as a scratch space to verify that software read/write accesses + to the Wishbone/CSR bus are working correctly. The initial reset value of + 0x1234578 can be used to verify endianness. + + .. wavedrom:: + :caption: CTRL_SCRATCH + + { + "reg": [ + {"name": "scratch[31:0]", "attr": 'reset: 305419896', "bits": 32} + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + +CTRL_BUS_ERRORS +^^^^^^^^^^^^^^^ + +`Address: 0x00000000 + 0x8 = 0x00000008` + + Total number of Wishbone bus errors (timeouts) since start. + + .. wavedrom:: + :caption: CTRL_BUS_ERRORS + + { + "reg": [ + {"name": "bus_errors[31:0]", "bits": 32} + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + diff --git a/gateware/liteeth/doc/ethmac.rst b/gateware/liteeth/doc/ethmac.rst new file mode 100644 index 0000000..b644a1f --- /dev/null +++ b/gateware/liteeth/doc/ethmac.rst @@ -0,0 +1,380 @@ +ETHMAC +====== + +Register Listing for ETHMAC +--------------------------- + ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| Register | Address | ++================================================================================+========================================================+ +| :ref:`ETHMAC_SRAM_WRITER_SLOT ` | :ref:`0x00000800 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_WRITER_LENGTH ` | :ref:`0x00000804 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_WRITER_ERRORS ` | :ref:`0x00000808 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_WRITER_EV_STATUS ` | :ref:`0x0000080c ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_WRITER_EV_PENDING ` | :ref:`0x00000810 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_WRITER_EV_ENABLE ` | :ref:`0x00000814 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_START ` | :ref:`0x00000818 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_READY ` | :ref:`0x0000081c ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_LEVEL ` | :ref:`0x00000820 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_SLOT ` | :ref:`0x00000824 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_LENGTH ` | :ref:`0x00000828 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_EV_STATUS ` | :ref:`0x0000082c ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_EV_PENDING ` | :ref:`0x00000830 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_SRAM_READER_EV_ENABLE ` | :ref:`0x00000834 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_PREAMBLE_CRC ` | :ref:`0x00000838 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_RX_DATAPATH_PREAMBLE_ERRORS ` | :ref:`0x0000083c ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ +| :ref:`ETHMAC_RX_DATAPATH_CRC_ERRORS ` | :ref:`0x00000840 ` | ++--------------------------------------------------------------------------------+--------------------------------------------------------+ + +ETHMAC_SRAM_WRITER_SLOT +^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x0 = 0x00000800` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_SLOT + + { + "reg": [ + {"name": "sram_writer_slot", "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_SRAM_WRITER_LENGTH +^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x4 = 0x00000804` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_LENGTH + + { + "reg": [ + {"name": "sram_writer_length[10:0]", "bits": 11}, + {"bits": 21}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + +ETHMAC_SRAM_WRITER_ERRORS +^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x8 = 0x00000808` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_ERRORS + + { + "reg": [ + {"name": "sram_writer_errors[31:0]", "bits": 32} + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + +ETHMAC_SRAM_WRITER_EV_STATUS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0xc = 0x0000080c` + + This register contains the current raw level of the available event trigger. + Writes to this register have no effect. + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_EV_STATUS + + { + "reg": [ + {"name": "available", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+-----------+----------------------------------+ +| Field | Name | Description | ++=======+===========+==================================+ +| [0] | AVAILABLE | Level of the ``available`` event | ++-------+-----------+----------------------------------+ + +ETHMAC_SRAM_WRITER_EV_PENDING +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x10 = 0x00000810` + + When a available event occurs, the corresponding bit will be set in this + register. To clear the Event, set the corresponding bit in this register. + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_EV_PENDING + + { + "reg": [ + {"name": "available", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+-----------+---------------------------------------------------------------------------------+ +| Field | Name | Description | ++=======+===========+=================================================================================+ +| [0] | AVAILABLE | `1` if a `available` event occurred. This Event is **level triggered** when the | +| | | signal is **high**. | ++-------+-----------+---------------------------------------------------------------------------------+ + +ETHMAC_SRAM_WRITER_EV_ENABLE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x14 = 0x00000814` + + This register enables the corresponding available events. Write a ``0`` to this + register to disable individual events. + + .. wavedrom:: + :caption: ETHMAC_SRAM_WRITER_EV_ENABLE + + { + "reg": [ + {"name": "available", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+-----------+-------------------------------------------------+ +| Field | Name | Description | ++=======+===========+=================================================+ +| [0] | AVAILABLE | Write a ``1`` to enable the ``available`` Event | ++-------+-----------+-------------------------------------------------+ + +ETHMAC_SRAM_READER_START +^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x18 = 0x00000818` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_START + + { + "reg": [ + {"name": "sram_reader_start", "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_SRAM_READER_READY +^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x1c = 0x0000081c` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_READY + + { + "reg": [ + {"name": "sram_reader_ready", "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_SRAM_READER_LEVEL +^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x20 = 0x00000820` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_LEVEL + + { + "reg": [ + {"name": "sram_reader_level[1:0]", "bits": 2}, + {"bits": 30}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_SRAM_READER_SLOT +^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x24 = 0x00000824` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_SLOT + + { + "reg": [ + {"name": "sram_reader_slot", "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_SRAM_READER_LENGTH +^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x28 = 0x00000828` + + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_LENGTH + + { + "reg": [ + {"name": "sram_reader_length[10:0]", "bits": 11}, + {"bits": 21}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + +ETHMAC_SRAM_READER_EV_STATUS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x2c = 0x0000082c` + + This register contains the current raw level of the event0 event trigger. + Writes to this register have no effect. + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_EV_STATUS + + { + "reg": [ + {"name": "event0", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+--------+-------------------------------+ +| Field | Name | Description | ++=======+========+===============================+ +| [0] | EVENT0 | Level of the ``event0`` event | ++-------+--------+-------------------------------+ + +ETHMAC_SRAM_READER_EV_PENDING +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x30 = 0x00000830` + + When a event0 event occurs, the corresponding bit will be set in this register. + To clear the Event, set the corresponding bit in this register. + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_EV_PENDING + + { + "reg": [ + {"name": "event0", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+--------+----------------------------------------------------------------------------------+ +| Field | Name | Description | ++=======+========+==================================================================================+ +| [0] | EVENT0 | `1` if a this particular event occurred. This Event is triggered on a **rising** | +| | | edge. | ++-------+--------+----------------------------------------------------------------------------------+ + +ETHMAC_SRAM_READER_EV_ENABLE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x34 = 0x00000834` + + This register enables the corresponding event0 events. Write a ``0`` to this + register to disable individual events. + + .. wavedrom:: + :caption: ETHMAC_SRAM_READER_EV_ENABLE + + { + "reg": [ + {"name": "event0", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+--------+----------------------------------------------+ +| Field | Name | Description | ++=======+========+==============================================+ +| [0] | EVENT0 | Write a ``1`` to enable the ``event0`` Event | ++-------+--------+----------------------------------------------+ + +ETHMAC_PREAMBLE_CRC +^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x38 = 0x00000838` + + + .. wavedrom:: + :caption: ETHMAC_PREAMBLE_CRC + + { + "reg": [ + {"name": "preamble_crc", "attr": 'reset: 1', "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHMAC_RX_DATAPATH_PREAMBLE_ERRORS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x3c = 0x0000083c` + + + .. wavedrom:: + :caption: ETHMAC_RX_DATAPATH_PREAMBLE_ERRORS + + { + "reg": [ + {"name": "rx_datapath_preamble_errors[31:0]", "bits": 32} + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + +ETHMAC_RX_DATAPATH_CRC_ERRORS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00000800 + 0x40 = 0x00000840` + + + .. wavedrom:: + :caption: ETHMAC_RX_DATAPATH_CRC_ERRORS + + { + "reg": [ + {"name": "rx_datapath_crc_errors[31:0]", "bits": 32} + ], "config": {"hspace": 400, "bits": 32, "lanes": 1 }, "options": {"hspace": 400, "bits": 32, "lanes": 1} + } + + diff --git a/gateware/liteeth/doc/ethphy.rst b/gateware/liteeth/doc/ethphy.rst new file mode 100644 index 0000000..49c8d6f --- /dev/null +++ b/gateware/liteeth/doc/ethphy.rst @@ -0,0 +1,138 @@ +ETHPHY +====== + +Register Listing for ETHPHY +--------------------------- + ++----------------------------------------------------------+---------------------------------------------+ +| Register | Address | ++==========================================================+=============================================+ +| :ref:`ETHPHY_CRG_RESET ` | :ref:`0x00001000 ` | ++----------------------------------------------------------+---------------------------------------------+ +| :ref:`ETHPHY_RX_INBAND_STATUS ` | :ref:`0x00001004 ` | ++----------------------------------------------------------+---------------------------------------------+ +| :ref:`ETHPHY_MDIO_W ` | :ref:`0x00001008 ` | ++----------------------------------------------------------+---------------------------------------------+ +| :ref:`ETHPHY_MDIO_R ` | :ref:`0x0000100c ` | ++----------------------------------------------------------+---------------------------------------------+ + +ETHPHY_CRG_RESET +^^^^^^^^^^^^^^^^ + +`Address: 0x00001000 + 0x0 = 0x00001000` + + + .. wavedrom:: + :caption: ETHPHY_CRG_RESET + + { + "reg": [ + {"name": "crg_reset", "bits": 1}, + {"bits": 31}, + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + +ETHPHY_RX_INBAND_STATUS +^^^^^^^^^^^^^^^^^^^^^^^ + +`Address: 0x00001000 + 0x4 = 0x00001004` + + + .. wavedrom:: + :caption: ETHPHY_RX_INBAND_STATUS + + { + "reg": [ + {"name": "link_status", "bits": 1}, + {"name": "clock_speed", "bits": 1}, + {"name": "duplex_status", "bits": 1}, + {"bits": 29} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+---------------+-----------------------------------+ +| Field | Name | Description | ++=======+===============+===================================+ +| [0] | LINK_STATUS | | +| | | | +| | | +---------+-------------+ | +| | | | Value | Description | | +| | | +=========+=============+ | +| | | | ``0b0`` | Link down. | | +| | | +---------+-------------+ | +| | | | ``0b1`` | Link up. | | +| | | +---------+-------------+ | ++-------+---------------+-----------------------------------+ +| [1] | CLOCK_SPEED | | +| | | | +| | | +----------+--------------------+ | +| | | | Value | Description | | +| | | +==========+====================+ | +| | | | ``0b00`` | 2.5MHz (10Mbps). | | +| | | +----------+--------------------+ | +| | | | ``0b01`` | 25MHz (100MBps). | | +| | | +----------+--------------------+ | +| | | | ``0b10`` | 125MHz (1000MBps). | | +| | | +----------+--------------------+ | ++-------+---------------+-----------------------------------+ +| [2] | DUPLEX_STATUS | | +| | | | +| | | +---------+--------------+ | +| | | | Value | Description | | +| | | +=========+==============+ | +| | | | ``0b0`` | Half-duplex. | | +| | | +---------+--------------+ | +| | | | ``0b1`` | Full-duplex. | | +| | | +---------+--------------+ | ++-------+---------------+-----------------------------------+ + +ETHPHY_MDIO_W +^^^^^^^^^^^^^ + +`Address: 0x00001000 + 0x8 = 0x00001008` + + + .. wavedrom:: + :caption: ETHPHY_MDIO_W + + { + "reg": [ + {"name": "mdc", "bits": 1}, + {"name": "oe", "bits": 1}, + {"name": "w", "bits": 1}, + {"bits": 29} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+------+-------------+ +| Field | Name | Description | ++=======+======+=============+ ++-------+------+-------------+ ++-------+------+-------------+ ++-------+------+-------------+ + +ETHPHY_MDIO_R +^^^^^^^^^^^^^ + +`Address: 0x00001000 + 0xc = 0x0000100c` + + + .. wavedrom:: + :caption: ETHPHY_MDIO_R + + { + "reg": [ + {"name": "r", "bits": 1}, + {"bits": 31} + ], "config": {"hspace": 400, "bits": 32, "lanes": 4 }, "options": {"hspace": 400, "bits": 32, "lanes": 4} + } + + ++-------+------+-------------+ +| Field | Name | Description | ++=======+======+=============+ ++-------+------+-------------+ + diff --git a/gateware/liteeth/doc/index.rst b/gateware/liteeth/doc/index.rst new file mode 100644 index 0000000..6ffb5f3 --- /dev/null +++ b/gateware/liteeth/doc/index.rst @@ -0,0 +1,31 @@ + +Documentation for LiteX SoC Project +=================================== + + + +Modules +======= + +.. toctree:: + :maxdepth: 1 + + interrupts + +Register Groups +=============== + +.. toctree:: + :maxdepth: 1 + + ctrl + ethmac + ethphy + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/gateware/liteeth/doc/interrupts.rst b/gateware/liteeth/doc/interrupts.rst new file mode 100644 index 0000000..9d6df8e --- /dev/null +++ b/gateware/liteeth/doc/interrupts.rst @@ -0,0 +1,18 @@ +Interrupt Controller +==================== + +This device has an ``EventManager``-based interrupt system. Individual modules +generate `events` which are wired into a central interrupt controller. + +When an interrupt occurs, you should look the interrupt number up in the CPU- +specific interrupt table and then call the relevant module. + +Assigned Interrupts +------------------- + +The following interrupts are assigned on this system: + ++-----------+--------+ +| Interrupt | Module | ++===========+========+ + diff --git a/gateware/liteeth/gateware/build_liteeth_core.sh b/gateware/liteeth/gateware/build_liteeth_core.sh new file mode 100644 index 0000000..481970e --- /dev/null +++ b/gateware/liteeth/gateware/build_liteeth_core.sh @@ -0,0 +1,5 @@ +# Autogenerated by LiteX / git: 8159b5ca +set -e +yosys -l liteeth_core.rpt liteeth_core.ys +nextpnr-ecp5 --json liteeth_core.json --lpf liteeth_core.lpf --textcfg liteeth_core.config --45k --package CABGA381 --speed 6 --timing-allow-fail --seed 1 +ecppack --bootaddr 0 --compress liteeth_core.config --svf liteeth_core.svf --bit liteeth_core.bit \ No newline at end of file diff --git a/gateware/liteeth/gateware/liteeth_core.lpf b/gateware/liteeth/gateware/liteeth_core.lpf new file mode 100644 index 0000000..8c2b356 --- /dev/null +++ b/gateware/liteeth/gateware/liteeth_core.lpf @@ -0,0 +1,132 @@ +BLOCK RESETPATHS; +BLOCK ASYNCPATHS; +LOCATE COMP "sys_clock" SITE "X"; +LOCATE COMP "sys_reset" SITE "X"; +LOCATE COMP "rgmii_eth_clocks_tx" SITE "X"; +LOCATE COMP "rgmii_eth_clocks_rx" SITE "X"; +LOCATE COMP "rgmii_eth_rst_n" SITE "X"; +LOCATE COMP "rgmii_eth_int_n" SITE "X"; +LOCATE COMP "rgmii_eth_mdio" SITE "X"; +LOCATE COMP "rgmii_eth_mdc" SITE "X"; +LOCATE COMP "rgmii_eth_rx_ctl" SITE "X"; +LOCATE COMP "rgmii_eth_rx_data[0]" SITE "X"; +LOCATE COMP "rgmii_eth_rx_data[1]" SITE "X"; +LOCATE COMP "rgmii_eth_rx_data[2]" SITE "X"; +LOCATE COMP "rgmii_eth_rx_data[3]" SITE "X"; +LOCATE COMP "rgmii_eth_tx_ctl" SITE "X"; +LOCATE COMP "rgmii_eth_tx_data[0]" SITE "X"; +LOCATE COMP "rgmii_eth_tx_data[1]" SITE "X"; +LOCATE COMP "rgmii_eth_tx_data[2]" SITE "X"; +LOCATE COMP "rgmii_eth_tx_data[3]" SITE "X"; +LOCATE COMP "wishbone_adr[0]" SITE "X"; +LOCATE COMP "wishbone_adr[1]" SITE "X"; +LOCATE COMP "wishbone_adr[2]" SITE "X"; +LOCATE COMP "wishbone_adr[3]" SITE "X"; +LOCATE COMP "wishbone_adr[4]" SITE "X"; +LOCATE COMP "wishbone_adr[5]" SITE "X"; +LOCATE COMP "wishbone_adr[6]" SITE "X"; +LOCATE COMP "wishbone_adr[7]" SITE "X"; +LOCATE COMP "wishbone_adr[8]" SITE "X"; +LOCATE COMP "wishbone_adr[9]" SITE "X"; +LOCATE COMP "wishbone_adr[10]" SITE "X"; +LOCATE COMP "wishbone_adr[11]" SITE "X"; +LOCATE COMP "wishbone_adr[12]" SITE "X"; +LOCATE COMP "wishbone_adr[13]" SITE "X"; +LOCATE COMP "wishbone_adr[14]" SITE "X"; +LOCATE COMP "wishbone_adr[15]" SITE "X"; +LOCATE COMP "wishbone_adr[16]" SITE "X"; +LOCATE COMP "wishbone_adr[17]" SITE "X"; +LOCATE COMP "wishbone_adr[18]" SITE "X"; +LOCATE COMP "wishbone_adr[19]" SITE "X"; +LOCATE COMP "wishbone_adr[20]" SITE "X"; +LOCATE COMP "wishbone_adr[21]" SITE "X"; +LOCATE COMP "wishbone_adr[22]" SITE "X"; +LOCATE COMP "wishbone_adr[23]" SITE "X"; +LOCATE COMP "wishbone_adr[24]" SITE "X"; +LOCATE COMP "wishbone_adr[25]" SITE "X"; +LOCATE COMP "wishbone_adr[26]" SITE "X"; +LOCATE COMP "wishbone_adr[27]" SITE "X"; +LOCATE COMP "wishbone_adr[28]" SITE "X"; +LOCATE COMP "wishbone_adr[29]" SITE "X"; +LOCATE COMP "wishbone_dat_w[0]" SITE "X"; +LOCATE COMP "wishbone_dat_w[1]" SITE "X"; +LOCATE COMP "wishbone_dat_w[2]" SITE "X"; +LOCATE COMP "wishbone_dat_w[3]" SITE "X"; +LOCATE COMP "wishbone_dat_w[4]" SITE "X"; +LOCATE COMP "wishbone_dat_w[5]" SITE "X"; +LOCATE COMP "wishbone_dat_w[6]" SITE "X"; +LOCATE COMP "wishbone_dat_w[7]" SITE "X"; +LOCATE COMP "wishbone_dat_w[8]" SITE "X"; +LOCATE COMP "wishbone_dat_w[9]" SITE "X"; +LOCATE COMP "wishbone_dat_w[10]" SITE "X"; +LOCATE COMP "wishbone_dat_w[11]" SITE "X"; +LOCATE COMP "wishbone_dat_w[12]" SITE "X"; +LOCATE COMP "wishbone_dat_w[13]" SITE "X"; +LOCATE COMP "wishbone_dat_w[14]" SITE "X"; +LOCATE COMP "wishbone_dat_w[15]" SITE "X"; +LOCATE COMP "wishbone_dat_w[16]" SITE "X"; +LOCATE COMP "wishbone_dat_w[17]" SITE "X"; +LOCATE COMP "wishbone_dat_w[18]" SITE "X"; +LOCATE COMP "wishbone_dat_w[19]" SITE "X"; +LOCATE COMP "wishbone_dat_w[20]" SITE "X"; +LOCATE COMP "wishbone_dat_w[21]" SITE "X"; +LOCATE COMP "wishbone_dat_w[22]" SITE "X"; +LOCATE COMP "wishbone_dat_w[23]" SITE "X"; +LOCATE COMP "wishbone_dat_w[24]" SITE "X"; +LOCATE COMP "wishbone_dat_w[25]" SITE "X"; +LOCATE COMP "wishbone_dat_w[26]" SITE "X"; +LOCATE COMP "wishbone_dat_w[27]" SITE "X"; +LOCATE COMP "wishbone_dat_w[28]" SITE "X"; +LOCATE COMP "wishbone_dat_w[29]" SITE "X"; +LOCATE COMP "wishbone_dat_w[30]" SITE "X"; +LOCATE COMP "wishbone_dat_w[31]" SITE "X"; +LOCATE COMP "wishbone_dat_r[0]" SITE "X"; +LOCATE COMP "wishbone_dat_r[1]" SITE "X"; +LOCATE COMP "wishbone_dat_r[2]" SITE "X"; +LOCATE COMP "wishbone_dat_r[3]" SITE "X"; +LOCATE COMP "wishbone_dat_r[4]" SITE "X"; +LOCATE COMP "wishbone_dat_r[5]" SITE "X"; +LOCATE COMP "wishbone_dat_r[6]" SITE "X"; +LOCATE COMP "wishbone_dat_r[7]" SITE "X"; +LOCATE COMP "wishbone_dat_r[8]" SITE "X"; +LOCATE COMP "wishbone_dat_r[9]" SITE "X"; +LOCATE COMP "wishbone_dat_r[10]" SITE "X"; +LOCATE COMP "wishbone_dat_r[11]" SITE "X"; +LOCATE COMP "wishbone_dat_r[12]" SITE "X"; +LOCATE COMP "wishbone_dat_r[13]" SITE "X"; +LOCATE COMP "wishbone_dat_r[14]" SITE "X"; +LOCATE COMP "wishbone_dat_r[15]" SITE "X"; +LOCATE COMP "wishbone_dat_r[16]" SITE "X"; +LOCATE COMP "wishbone_dat_r[17]" SITE "X"; +LOCATE COMP "wishbone_dat_r[18]" SITE "X"; +LOCATE COMP "wishbone_dat_r[19]" SITE "X"; +LOCATE COMP "wishbone_dat_r[20]" SITE "X"; +LOCATE COMP "wishbone_dat_r[21]" SITE "X"; +LOCATE COMP "wishbone_dat_r[22]" SITE "X"; +LOCATE COMP "wishbone_dat_r[23]" SITE "X"; +LOCATE COMP "wishbone_dat_r[24]" SITE "X"; +LOCATE COMP "wishbone_dat_r[25]" SITE "X"; +LOCATE COMP "wishbone_dat_r[26]" SITE "X"; +LOCATE COMP "wishbone_dat_r[27]" SITE "X"; +LOCATE COMP "wishbone_dat_r[28]" SITE "X"; +LOCATE COMP "wishbone_dat_r[29]" SITE "X"; +LOCATE COMP "wishbone_dat_r[30]" SITE "X"; +LOCATE COMP "wishbone_dat_r[31]" SITE "X"; +LOCATE COMP "wishbone_sel[0]" SITE "X"; +LOCATE COMP "wishbone_sel[1]" SITE "X"; +LOCATE COMP "wishbone_sel[2]" SITE "X"; +LOCATE COMP "wishbone_sel[3]" SITE "X"; +LOCATE COMP "wishbone_cyc" SITE "X"; +LOCATE COMP "wishbone_stb" SITE "X"; +LOCATE COMP "wishbone_ack" SITE "X"; +LOCATE COMP "wishbone_we" SITE "X"; +LOCATE COMP "wishbone_cti[0]" SITE "X"; +LOCATE COMP "wishbone_cti[1]" SITE "X"; +LOCATE COMP "wishbone_cti[2]" SITE "X"; +LOCATE COMP "wishbone_bte[0]" SITE "X"; +LOCATE COMP "wishbone_bte[1]" SITE "X"; +LOCATE COMP "wishbone_err" SITE "X"; +LOCATE COMP "interrupt" SITE "X"; +FREQUENCY PORT "eth_rx_clk" 125.0 MHz; + +FREQUENCY PORT "eth_tx_clk" 125.0 MHz; \ No newline at end of file diff --git a/gateware/liteeth/gateware/liteeth_core.v b/gateware/liteeth/gateware/liteeth_core.v new file mode 100644 index 0000000..75f580b --- /dev/null +++ b/gateware/liteeth/gateware/liteeth_core.v @@ -0,0 +1,3898 @@ +// ----------------------------------------------------------------------------- +// Auto-Generated by: __ _ __ _ __ +// / / (_) /____ | |/_/ +// / /__/ / __/ -_)> < +// /____/_/\__/\__/_/|_| +// Build your hardware, easily! +// https://github.com/enjoy-digital/litex +// +// Filename : liteeth_core.v +// Device : LFE5U-45F-6BG381C +// LiteX sha1 : 8159b5ca +// Date : 2023-02-07 21:33:18 +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +// Module +//------------------------------------------------------------------------------ + +module liteeth_core ( + input wire sys_clock, + input wire sys_reset, + output wire rgmii_eth_clocks_tx, + input wire rgmii_eth_clocks_rx, + output wire rgmii_eth_rst_n, + input wire rgmii_eth_int_n, + input wire rgmii_eth_mdio, + output wire rgmii_eth_mdc, + input wire rgmii_eth_rx_ctl, + input wire [3:0] rgmii_eth_rx_data, + output wire rgmii_eth_tx_ctl, + output wire [3:0] rgmii_eth_tx_data, + input wire [29:0] wishbone_adr, + input wire [31:0] wishbone_dat_w, + output wire [31:0] wishbone_dat_r, + input wire [3:0] wishbone_sel, + input wire wishbone_cyc, + input wire wishbone_stb, + output wire wishbone_ack, + input wire wishbone_we, + input wire [2:0] wishbone_cti, + input wire [1:0] wishbone_bte, + output wire wishbone_err, + output wire interrupt +); + + +//------------------------------------------------------------------------------ +// Signals +//------------------------------------------------------------------------------ + +reg main_maccore_maccore_soc_rst = 1'd0; +wire main_maccore_maccore_cpu_rst; +reg [1:0] main_maccore_maccore_reset_storage = 2'd0; +reg main_maccore_maccore_reset_re = 1'd0; +reg [31:0] main_maccore_maccore_scratch_storage = 32'd305419896; +reg main_maccore_maccore_scratch_re = 1'd0; +wire [31:0] main_maccore_maccore_bus_errors_status; +wire main_maccore_maccore_bus_errors_we; +reg main_maccore_maccore_bus_errors_re = 1'd0; +wire main_maccore_maccore_bus_error; +reg [31:0] main_maccore_maccore_bus_errors = 32'd0; +(* keep = "true" *) wire sys_clk; +wire sys_rst; +wire por_clk; +reg main_maccore_int_rst = 1'd1; +reg main_maccore_ethphy_reset_storage = 1'd0; +reg main_maccore_ethphy_reset_re = 1'd0; +(* keep = "true" *) wire eth_rx_clk; +wire eth_rx_rst; +(* keep = "true" *) wire eth_tx_clk; +wire eth_tx_rst; +wire main_maccore_ethphy_eth_tx_clk_o; +wire main_maccore_ethphy_reset; +wire main_maccore_ethphy_sink_valid; +wire main_maccore_ethphy_sink_ready; +wire main_maccore_ethphy_sink_first; +wire main_maccore_ethphy_sink_last; +wire [7:0] main_maccore_ethphy_sink_payload_data; +wire main_maccore_ethphy_sink_payload_last_be; +wire main_maccore_ethphy_sink_payload_error; +wire main_maccore_ethphy_tx_ctl_oddrx1f; +wire [3:0] main_maccore_ethphy_tx_data_oddrx1f; +reg main_maccore_ethphy_source_valid = 1'd0; +wire main_maccore_ethphy_source_ready; +reg main_maccore_ethphy_source_first = 1'd0; +wire main_maccore_ethphy_source_last; +reg [7:0] main_maccore_ethphy_source_payload_data = 8'd0; +reg main_maccore_ethphy_source_payload_last_be = 1'd0; +reg main_maccore_ethphy_source_payload_error = 1'd0; +reg main_maccore_ethphy_link_status = 1'd0; +reg main_maccore_ethphy_clock_speed = 1'd0; +reg main_maccore_ethphy_duplex_status = 1'd0; +reg [2:0] main_maccore_ethphy_status = 3'd0; +wire main_maccore_ethphy_we; +reg main_maccore_ethphy_re = 1'd0; +wire main_maccore_ethphy_rx_ctl_delayf; +wire [1:0] main_maccore_ethphy_rx_ctl; +reg [1:0] main_maccore_ethphy_rx_ctl_reg = 2'd0; +wire [3:0] main_maccore_ethphy_rx_data_delayf; +wire [7:0] main_maccore_ethphy_rx_data; +reg [7:0] main_maccore_ethphy_rx_data_reg = 8'd0; +reg [1:0] main_maccore_ethphy_rx_ctl_reg_d = 2'd0; +wire main_maccore_ethphy_last; +wire main_maccore_ethphy_mdc; +wire main_maccore_ethphy_oe; +wire main_maccore_ethphy_w; +reg [2:0] main_maccore_ethphy__w_storage = 3'd0; +reg main_maccore_ethphy__w_re = 1'd0; +reg main_maccore_ethphy_r = 1'd0; +reg main_maccore_ethphy__r_status = 1'd0; +wire main_maccore_ethphy__r_we; +reg main_maccore_ethphy__r_re = 1'd0; +wire main_maccore_ethphy_data_w; +wire main_maccore_ethphy_data_oe; +wire main_maccore_ethphy_data_r; +wire main_sink_valid; +wire main_sink_ready; +wire main_sink_first; +wire main_sink_last; +wire [31:0] main_sink_payload_data; +wire [3:0] main_sink_payload_last_be; +wire [3:0] main_sink_payload_error; +wire main_source_valid; +wire main_source_ready; +wire main_source_first; +wire main_source_last; +wire [31:0] main_source_payload_data; +wire [3:0] main_source_payload_last_be; +wire [3:0] main_source_payload_error; +reg main_status = 1'd1; +wire main_we; +reg main_re = 1'd0; +wire main_tx_cdc_sink_sink_valid; +wire main_tx_cdc_sink_sink_ready; +wire main_tx_cdc_sink_sink_first; +wire main_tx_cdc_sink_sink_last; +wire [31:0] main_tx_cdc_sink_sink_payload_data; +wire [3:0] main_tx_cdc_sink_sink_payload_last_be; +wire [3:0] main_tx_cdc_sink_sink_payload_error; +wire main_tx_cdc_source_source_valid; +wire main_tx_cdc_source_source_ready; +wire main_tx_cdc_source_source_first; +wire main_tx_cdc_source_source_last; +wire [31:0] main_tx_cdc_source_source_payload_data; +wire [3:0] main_tx_cdc_source_source_payload_last_be; +wire [3:0] main_tx_cdc_source_source_payload_error; +wire main_tx_cdc_cdc_sink_valid; +wire main_tx_cdc_cdc_sink_ready; +wire main_tx_cdc_cdc_sink_first; +wire main_tx_cdc_cdc_sink_last; +wire [31:0] main_tx_cdc_cdc_sink_payload_data; +wire [3:0] main_tx_cdc_cdc_sink_payload_last_be; +wire [3:0] main_tx_cdc_cdc_sink_payload_error; +wire main_tx_cdc_cdc_source_valid; +wire main_tx_cdc_cdc_source_ready; +wire main_tx_cdc_cdc_source_first; +wire main_tx_cdc_cdc_source_last; +wire [31:0] main_tx_cdc_cdc_source_payload_data; +wire [3:0] main_tx_cdc_cdc_source_payload_last_be; +wire [3:0] main_tx_cdc_cdc_source_payload_error; +wire main_tx_cdc_cdc_asyncfifo_we; +wire main_tx_cdc_cdc_asyncfifo_writable; +wire main_tx_cdc_cdc_asyncfifo_re; +wire main_tx_cdc_cdc_asyncfifo_readable; +wire [41:0] main_tx_cdc_cdc_asyncfifo_din; +wire [41:0] main_tx_cdc_cdc_asyncfifo_dout; +wire main_tx_cdc_cdc_graycounter0_ce; +reg [5:0] main_tx_cdc_cdc_graycounter0_q = 6'd0; +wire [5:0] main_tx_cdc_cdc_graycounter0_q_next; +reg [5:0] main_tx_cdc_cdc_graycounter0_q_binary = 6'd0; +reg [5:0] main_tx_cdc_cdc_graycounter0_q_next_binary = 6'd0; +wire main_tx_cdc_cdc_graycounter1_ce; +reg [5:0] main_tx_cdc_cdc_graycounter1_q = 6'd0; +wire [5:0] main_tx_cdc_cdc_graycounter1_q_next; +reg [5:0] main_tx_cdc_cdc_graycounter1_q_binary = 6'd0; +reg [5:0] main_tx_cdc_cdc_graycounter1_q_next_binary = 6'd0; +wire [5:0] main_tx_cdc_cdc_produce_rdomain; +wire [5:0] main_tx_cdc_cdc_consume_wdomain; +wire [4:0] main_tx_cdc_cdc_wrport_adr; +wire [41:0] main_tx_cdc_cdc_wrport_dat_r; +wire main_tx_cdc_cdc_wrport_we; +wire [41:0] main_tx_cdc_cdc_wrport_dat_w; +wire [4:0] main_tx_cdc_cdc_rdport_adr; +wire [41:0] main_tx_cdc_cdc_rdport_dat_r; +wire [31:0] main_tx_cdc_cdc_fifo_in_payload_data; +wire [3:0] main_tx_cdc_cdc_fifo_in_payload_last_be; +wire [3:0] main_tx_cdc_cdc_fifo_in_payload_error; +wire main_tx_cdc_cdc_fifo_in_first; +wire main_tx_cdc_cdc_fifo_in_last; +wire [31:0] main_tx_cdc_cdc_fifo_out_payload_data; +wire [3:0] main_tx_cdc_cdc_fifo_out_payload_last_be; +wire [3:0] main_tx_cdc_cdc_fifo_out_payload_error; +wire main_tx_cdc_cdc_fifo_out_first; +wire main_tx_cdc_cdc_fifo_out_last; +wire main_tx_converter_sink_valid; +wire main_tx_converter_sink_ready; +wire main_tx_converter_sink_first; +wire main_tx_converter_sink_last; +wire [31:0] main_tx_converter_sink_payload_data; +wire [3:0] main_tx_converter_sink_payload_last_be; +wire [3:0] main_tx_converter_sink_payload_error; +wire main_tx_converter_source_valid; +wire main_tx_converter_source_ready; +wire main_tx_converter_source_first; +wire main_tx_converter_source_last; +wire [7:0] main_tx_converter_source_payload_data; +wire main_tx_converter_source_payload_last_be; +wire main_tx_converter_source_payload_error; +wire main_tx_converter_converter_sink_valid; +wire main_tx_converter_converter_sink_ready; +wire main_tx_converter_converter_sink_first; +wire main_tx_converter_converter_sink_last; +reg [39:0] main_tx_converter_converter_sink_payload_data = 40'd0; +wire main_tx_converter_converter_source_valid; +wire main_tx_converter_converter_source_ready; +wire main_tx_converter_converter_source_first; +wire main_tx_converter_converter_source_last; +reg [9:0] main_tx_converter_converter_source_payload_data = 10'd0; +wire main_tx_converter_converter_source_payload_valid_token_count; +reg [1:0] main_tx_converter_converter_mux = 2'd0; +wire main_tx_converter_converter_first; +wire main_tx_converter_converter_last; +wire main_tx_converter_source_source_valid; +wire main_tx_converter_source_source_ready; +wire main_tx_converter_source_source_first; +wire main_tx_converter_source_source_last; +wire [9:0] main_tx_converter_source_source_payload_data; +wire main_tx_last_be_sink_valid; +reg main_tx_last_be_sink_ready = 1'd0; +wire main_tx_last_be_sink_first; +wire main_tx_last_be_sink_last; +wire [7:0] main_tx_last_be_sink_payload_data; +wire main_tx_last_be_sink_payload_last_be; +wire main_tx_last_be_sink_payload_error; +reg main_tx_last_be_source_valid = 1'd0; +wire main_tx_last_be_source_ready; +reg main_tx_last_be_source_first = 1'd0; +reg main_tx_last_be_source_last = 1'd0; +reg [7:0] main_tx_last_be_source_payload_data = 8'd0; +reg main_tx_last_be_source_payload_last_be = 1'd0; +reg main_tx_last_be_source_payload_error = 1'd0; +wire main_tx_padding_sink_valid; +reg main_tx_padding_sink_ready = 1'd0; +wire main_tx_padding_sink_first; +wire main_tx_padding_sink_last; +wire [7:0] main_tx_padding_sink_payload_data; +wire main_tx_padding_sink_payload_last_be; +wire main_tx_padding_sink_payload_error; +reg main_tx_padding_source_valid = 1'd0; +wire main_tx_padding_source_ready; +reg main_tx_padding_source_first = 1'd0; +reg main_tx_padding_source_last = 1'd0; +reg [7:0] main_tx_padding_source_payload_data = 8'd0; +reg main_tx_padding_source_payload_last_be = 1'd0; +reg main_tx_padding_source_payload_error = 1'd0; +reg [15:0] main_tx_padding_counter = 16'd0; +wire main_tx_padding_counter_done; +wire main_liteethmaccrc32inserter_sink_valid; +reg main_liteethmaccrc32inserter_sink_ready = 1'd0; +wire main_liteethmaccrc32inserter_sink_first; +wire main_liteethmaccrc32inserter_sink_last; +wire [7:0] main_liteethmaccrc32inserter_sink_payload_data; +wire main_liteethmaccrc32inserter_sink_payload_last_be; +wire main_liteethmaccrc32inserter_sink_payload_error; +reg main_liteethmaccrc32inserter_source_valid = 1'd0; +wire main_liteethmaccrc32inserter_source_ready; +reg main_liteethmaccrc32inserter_source_first = 1'd0; +reg main_liteethmaccrc32inserter_source_last = 1'd0; +reg [7:0] main_liteethmaccrc32inserter_source_payload_data = 8'd0; +reg main_liteethmaccrc32inserter_source_payload_last_be = 1'd0; +reg main_liteethmaccrc32inserter_source_payload_error = 1'd0; +reg [7:0] main_liteethmaccrc32inserter_data0 = 8'd0; +reg main_liteethmaccrc32inserter_last_be0 = 1'd0; +reg [31:0] main_liteethmaccrc32inserter_value = 32'd0; +reg main_liteethmaccrc32inserter_error = 1'd0; +reg main_liteethmaccrc32inserter_last_be1 = 1'd0; +wire [7:0] main_liteethmaccrc32inserter_data1; +wire [31:0] main_liteethmaccrc32inserter_last; +reg [31:0] main_liteethmaccrc32inserter_next = 32'd0; +reg [31:0] main_liteethmaccrc32inserter_reg = 32'd4294967295; +reg main_liteethmaccrc32inserter_ce = 1'd0; +reg main_liteethmaccrc32inserter_reset = 1'd0; +reg [31:0] main_liteethmaccrc32inserter_crc_packet = 32'd0; +reg main_liteethmaccrc32inserter_last_be2 = 1'd0; +reg [1:0] main_liteethmaccrc32inserter_cnt = 2'd3; +wire main_liteethmaccrc32inserter_cnt_done; +reg main_liteethmaccrc32inserter_is_ongoing0 = 1'd0; +reg main_liteethmaccrc32inserter_is_ongoing1 = 1'd0; +wire main_bufferizeendpoints_sink_valid; +wire main_bufferizeendpoints_sink_ready; +wire main_bufferizeendpoints_sink_first; +wire main_bufferizeendpoints_sink_last; +wire [7:0] main_bufferizeendpoints_sink_payload_data; +wire main_bufferizeendpoints_sink_payload_last_be; +wire main_bufferizeendpoints_sink_payload_error; +reg main_bufferizeendpoints_source_valid = 1'd0; +wire main_bufferizeendpoints_source_ready; +reg main_bufferizeendpoints_source_first = 1'd0; +reg main_bufferizeendpoints_source_last = 1'd0; +reg [7:0] main_bufferizeendpoints_source_payload_data = 8'd0; +reg main_bufferizeendpoints_source_payload_last_be = 1'd0; +reg main_bufferizeendpoints_source_payload_error = 1'd0; +wire main_tx_preamble_sink_valid; +reg main_tx_preamble_sink_ready = 1'd0; +wire main_tx_preamble_sink_first; +wire main_tx_preamble_sink_last; +wire [7:0] main_tx_preamble_sink_payload_data; +wire main_tx_preamble_sink_payload_last_be; +wire main_tx_preamble_sink_payload_error; +reg main_tx_preamble_source_valid = 1'd0; +wire main_tx_preamble_source_ready; +reg main_tx_preamble_source_first = 1'd0; +reg main_tx_preamble_source_last = 1'd0; +reg [7:0] main_tx_preamble_source_payload_data = 8'd0; +wire main_tx_preamble_source_payload_last_be; +reg main_tx_preamble_source_payload_error = 1'd0; +reg [63:0] main_tx_preamble_preamble = 64'd15372286728091293013; +reg [2:0] main_tx_preamble_count = 3'd0; +wire main_tx_gap_sink_valid; +reg main_tx_gap_sink_ready = 1'd0; +wire main_tx_gap_sink_first; +wire main_tx_gap_sink_last; +wire [7:0] main_tx_gap_sink_payload_data; +wire main_tx_gap_sink_payload_last_be; +wire main_tx_gap_sink_payload_error; +reg main_tx_gap_source_valid = 1'd0; +wire main_tx_gap_source_ready; +reg main_tx_gap_source_first = 1'd0; +reg main_tx_gap_source_last = 1'd0; +reg [7:0] main_tx_gap_source_payload_data = 8'd0; +reg main_tx_gap_source_payload_last_be = 1'd0; +reg main_tx_gap_source_payload_error = 1'd0; +reg [3:0] main_tx_gap_counter = 4'd0; +reg [31:0] main_preamble_errors_status = 32'd0; +wire main_preamble_errors_we; +reg main_preamble_errors_re = 1'd0; +reg [31:0] main_crc_errors_status = 32'd0; +wire main_crc_errors_we; +reg main_crc_errors_re = 1'd0; +wire main_rx_preamble_sink_valid; +reg main_rx_preamble_sink_ready = 1'd0; +wire main_rx_preamble_sink_first; +wire main_rx_preamble_sink_last; +wire [7:0] main_rx_preamble_sink_payload_data; +wire main_rx_preamble_sink_payload_last_be; +wire main_rx_preamble_sink_payload_error; +reg main_rx_preamble_source_valid = 1'd0; +wire main_rx_preamble_source_ready; +reg main_rx_preamble_source_first = 1'd0; +reg main_rx_preamble_source_last = 1'd0; +wire [7:0] main_rx_preamble_source_payload_data; +wire main_rx_preamble_source_payload_last_be; +reg main_rx_preamble_source_payload_error = 1'd0; +reg main_rx_preamble_error = 1'd0; +reg [63:0] main_rx_preamble_preamble = 64'd15372286728091293013; +wire main_pulsesynchronizer0_i; +wire main_pulsesynchronizer0_o; +reg main_pulsesynchronizer0_toggle_i = 1'd0; +wire main_pulsesynchronizer0_toggle_o; +reg main_pulsesynchronizer0_toggle_o_r = 1'd0; +wire main_rx_crc_sink_sink_valid; +reg main_rx_crc_sink_sink_ready = 1'd0; +wire main_rx_crc_sink_sink_first; +wire main_rx_crc_sink_sink_last; +wire [7:0] main_rx_crc_sink_sink_payload_data; +wire main_rx_crc_sink_sink_payload_last_be; +wire main_rx_crc_sink_sink_payload_error; +reg main_rx_crc_source_source_valid = 1'd0; +wire main_rx_crc_source_source_ready; +reg main_rx_crc_source_source_first = 1'd0; +reg main_rx_crc_source_source_last = 1'd0; +reg [7:0] main_rx_crc_source_source_payload_data = 8'd0; +reg main_rx_crc_source_source_payload_last_be = 1'd0; +reg main_rx_crc_source_source_payload_error = 1'd0; +reg main_rx_crc_error = 1'd0; +wire [7:0] main_rx_crc_crc_data0; +wire main_rx_crc_crc_last_be0; +reg [31:0] main_rx_crc_crc_value = 32'd0; +reg main_rx_crc_crc_error0 = 1'd0; +reg main_rx_crc_crc_last_be1 = 1'd0; +wire [7:0] main_rx_crc_crc_data1; +wire [31:0] main_rx_crc_crc_last; +reg [31:0] main_rx_crc_crc_next = 32'd0; +reg [31:0] main_rx_crc_crc_reg = 32'd4294967295; +reg main_rx_crc_crc_ce = 1'd0; +reg main_rx_crc_crc_reset = 1'd0; +reg main_rx_crc_syncfifo_sink_valid = 1'd0; +wire main_rx_crc_syncfifo_sink_ready; +wire main_rx_crc_syncfifo_sink_first; +wire main_rx_crc_syncfifo_sink_last; +wire [7:0] main_rx_crc_syncfifo_sink_payload_data; +wire main_rx_crc_syncfifo_sink_payload_last_be; +wire main_rx_crc_syncfifo_sink_payload_error; +wire main_rx_crc_syncfifo_source_valid; +reg main_rx_crc_syncfifo_source_ready = 1'd0; +wire main_rx_crc_syncfifo_source_first; +wire main_rx_crc_syncfifo_source_last; +wire [7:0] main_rx_crc_syncfifo_source_payload_data; +wire main_rx_crc_syncfifo_source_payload_last_be; +wire main_rx_crc_syncfifo_source_payload_error; +wire main_rx_crc_syncfifo_syncfifo_we; +wire main_rx_crc_syncfifo_syncfifo_writable; +wire main_rx_crc_syncfifo_syncfifo_re; +wire main_rx_crc_syncfifo_syncfifo_readable; +wire [11:0] main_rx_crc_syncfifo_syncfifo_din; +wire [11:0] main_rx_crc_syncfifo_syncfifo_dout; +reg [2:0] main_rx_crc_syncfifo_level = 3'd0; +reg main_rx_crc_syncfifo_replace = 1'd0; +reg [2:0] main_rx_crc_syncfifo_produce = 3'd0; +reg [2:0] main_rx_crc_syncfifo_consume = 3'd0; +reg [2:0] main_rx_crc_syncfifo_wrport_adr = 3'd0; +wire [11:0] main_rx_crc_syncfifo_wrport_dat_r; +wire main_rx_crc_syncfifo_wrport_we; +wire [11:0] main_rx_crc_syncfifo_wrport_dat_w; +wire main_rx_crc_syncfifo_do_read; +wire [2:0] main_rx_crc_syncfifo_rdport_adr; +wire [11:0] main_rx_crc_syncfifo_rdport_dat_r; +wire [7:0] main_rx_crc_syncfifo_fifo_in_payload_data; +wire main_rx_crc_syncfifo_fifo_in_payload_last_be; +wire main_rx_crc_syncfifo_fifo_in_payload_error; +wire main_rx_crc_syncfifo_fifo_in_first; +wire main_rx_crc_syncfifo_fifo_in_last; +wire [7:0] main_rx_crc_syncfifo_fifo_out_payload_data; +wire main_rx_crc_syncfifo_fifo_out_payload_last_be; +wire main_rx_crc_syncfifo_fifo_out_payload_error; +wire main_rx_crc_syncfifo_fifo_out_first; +wire main_rx_crc_syncfifo_fifo_out_last; +reg main_rx_crc_fifo_reset = 1'd0; +wire main_rx_crc_fifo_in; +wire main_rx_crc_fifo_out; +wire main_rx_crc_fifo_full; +reg main_rx_crc_last_be = 1'd0; +reg main_rx_crc_crc_error1 = 1'd0; +wire main_rx_crc_sink_valid; +wire main_rx_crc_sink_ready; +wire main_rx_crc_sink_first; +wire main_rx_crc_sink_last; +wire [7:0] main_rx_crc_sink_payload_data; +wire main_rx_crc_sink_payload_last_be; +wire main_rx_crc_sink_payload_error; +reg main_rx_crc_source_valid = 1'd0; +wire main_rx_crc_source_ready; +reg main_rx_crc_source_first = 1'd0; +reg main_rx_crc_source_last = 1'd0; +reg [7:0] main_rx_crc_source_payload_data = 8'd0; +reg main_rx_crc_source_payload_last_be = 1'd0; +reg main_rx_crc_source_payload_error = 1'd0; +wire main_pulsesynchronizer1_i; +wire main_pulsesynchronizer1_o; +reg main_pulsesynchronizer1_toggle_i = 1'd0; +wire main_pulsesynchronizer1_toggle_o; +reg main_pulsesynchronizer1_toggle_o_r = 1'd0; +wire main_rx_padding_sink_valid; +wire main_rx_padding_sink_ready; +wire main_rx_padding_sink_first; +wire main_rx_padding_sink_last; +wire [7:0] main_rx_padding_sink_payload_data; +wire main_rx_padding_sink_payload_last_be; +wire main_rx_padding_sink_payload_error; +wire main_rx_padding_source_valid; +wire main_rx_padding_source_ready; +wire main_rx_padding_source_first; +wire main_rx_padding_source_last; +wire [7:0] main_rx_padding_source_payload_data; +wire main_rx_padding_source_payload_last_be; +wire main_rx_padding_source_payload_error; +wire main_rx_last_be_sink_valid; +wire main_rx_last_be_sink_ready; +wire main_rx_last_be_sink_first; +wire main_rx_last_be_sink_last; +wire [7:0] main_rx_last_be_sink_payload_data; +wire main_rx_last_be_sink_payload_last_be; +wire main_rx_last_be_sink_payload_error; +wire main_rx_last_be_source_valid; +wire main_rx_last_be_source_ready; +wire main_rx_last_be_source_first; +wire main_rx_last_be_source_last; +wire [7:0] main_rx_last_be_source_payload_data; +reg main_rx_last_be_source_payload_last_be = 1'd0; +wire main_rx_last_be_source_payload_error; +wire main_rx_converter_sink_valid; +wire main_rx_converter_sink_ready; +wire main_rx_converter_sink_first; +wire main_rx_converter_sink_last; +wire [7:0] main_rx_converter_sink_payload_data; +wire main_rx_converter_sink_payload_last_be; +wire main_rx_converter_sink_payload_error; +wire main_rx_converter_source_valid; +wire main_rx_converter_source_ready; +wire main_rx_converter_source_first; +wire main_rx_converter_source_last; +reg [31:0] main_rx_converter_source_payload_data = 32'd0; +reg [3:0] main_rx_converter_source_payload_last_be = 4'd0; +reg [3:0] main_rx_converter_source_payload_error = 4'd0; +wire main_rx_converter_converter_sink_valid; +wire main_rx_converter_converter_sink_ready; +wire main_rx_converter_converter_sink_first; +wire main_rx_converter_converter_sink_last; +wire [9:0] main_rx_converter_converter_sink_payload_data; +wire main_rx_converter_converter_source_valid; +wire main_rx_converter_converter_source_ready; +reg main_rx_converter_converter_source_first = 1'd0; +reg main_rx_converter_converter_source_last = 1'd0; +reg [39:0] main_rx_converter_converter_source_payload_data = 40'd0; +reg [2:0] main_rx_converter_converter_source_payload_valid_token_count = 3'd0; +reg [1:0] main_rx_converter_converter_demux = 2'd0; +wire main_rx_converter_converter_load_part; +reg main_rx_converter_converter_strobe_all = 1'd0; +wire main_rx_converter_source_source_valid; +wire main_rx_converter_source_source_ready; +wire main_rx_converter_source_source_first; +wire main_rx_converter_source_source_last; +wire [39:0] main_rx_converter_source_source_payload_data; +wire main_rx_cdc_sink_sink_valid; +wire main_rx_cdc_sink_sink_ready; +wire main_rx_cdc_sink_sink_first; +wire main_rx_cdc_sink_sink_last; +wire [31:0] main_rx_cdc_sink_sink_payload_data; +wire [3:0] main_rx_cdc_sink_sink_payload_last_be; +wire [3:0] main_rx_cdc_sink_sink_payload_error; +wire main_rx_cdc_source_source_valid; +wire main_rx_cdc_source_source_ready; +wire main_rx_cdc_source_source_first; +wire main_rx_cdc_source_source_last; +wire [31:0] main_rx_cdc_source_source_payload_data; +wire [3:0] main_rx_cdc_source_source_payload_last_be; +wire [3:0] main_rx_cdc_source_source_payload_error; +wire main_rx_cdc_cdc_sink_valid; +wire main_rx_cdc_cdc_sink_ready; +wire main_rx_cdc_cdc_sink_first; +wire main_rx_cdc_cdc_sink_last; +wire [31:0] main_rx_cdc_cdc_sink_payload_data; +wire [3:0] main_rx_cdc_cdc_sink_payload_last_be; +wire [3:0] main_rx_cdc_cdc_sink_payload_error; +wire main_rx_cdc_cdc_source_valid; +wire main_rx_cdc_cdc_source_ready; +wire main_rx_cdc_cdc_source_first; +wire main_rx_cdc_cdc_source_last; +wire [31:0] main_rx_cdc_cdc_source_payload_data; +wire [3:0] main_rx_cdc_cdc_source_payload_last_be; +wire [3:0] main_rx_cdc_cdc_source_payload_error; +wire main_rx_cdc_cdc_asyncfifo_we; +wire main_rx_cdc_cdc_asyncfifo_writable; +wire main_rx_cdc_cdc_asyncfifo_re; +wire main_rx_cdc_cdc_asyncfifo_readable; +wire [41:0] main_rx_cdc_cdc_asyncfifo_din; +wire [41:0] main_rx_cdc_cdc_asyncfifo_dout; +wire main_rx_cdc_cdc_graycounter0_ce; +reg [5:0] main_rx_cdc_cdc_graycounter0_q = 6'd0; +wire [5:0] main_rx_cdc_cdc_graycounter0_q_next; +reg [5:0] main_rx_cdc_cdc_graycounter0_q_binary = 6'd0; +reg [5:0] main_rx_cdc_cdc_graycounter0_q_next_binary = 6'd0; +wire main_rx_cdc_cdc_graycounter1_ce; +reg [5:0] main_rx_cdc_cdc_graycounter1_q = 6'd0; +wire [5:0] main_rx_cdc_cdc_graycounter1_q_next; +reg [5:0] main_rx_cdc_cdc_graycounter1_q_binary = 6'd0; +reg [5:0] main_rx_cdc_cdc_graycounter1_q_next_binary = 6'd0; +wire [5:0] main_rx_cdc_cdc_produce_rdomain; +wire [5:0] main_rx_cdc_cdc_consume_wdomain; +wire [4:0] main_rx_cdc_cdc_wrport_adr; +wire [41:0] main_rx_cdc_cdc_wrport_dat_r; +wire main_rx_cdc_cdc_wrport_we; +wire [41:0] main_rx_cdc_cdc_wrport_dat_w; +wire [4:0] main_rx_cdc_cdc_rdport_adr; +wire [41:0] main_rx_cdc_cdc_rdport_dat_r; +wire [31:0] main_rx_cdc_cdc_fifo_in_payload_data; +wire [3:0] main_rx_cdc_cdc_fifo_in_payload_last_be; +wire [3:0] main_rx_cdc_cdc_fifo_in_payload_error; +wire main_rx_cdc_cdc_fifo_in_first; +wire main_rx_cdc_cdc_fifo_in_last; +wire [31:0] main_rx_cdc_cdc_fifo_out_payload_data; +wire [3:0] main_rx_cdc_cdc_fifo_out_payload_last_be; +wire [3:0] main_rx_cdc_cdc_fifo_out_payload_error; +wire main_rx_cdc_cdc_fifo_out_first; +wire main_rx_cdc_cdc_fifo_out_last; +wire main_sink_sink_valid; +wire main_sink_sink_ready; +wire main_sink_sink_first; +wire main_sink_sink_last; +wire [31:0] main_sink_sink_payload_data; +wire [3:0] main_sink_sink_payload_last_be; +wire [3:0] main_sink_sink_payload_error; +wire main_source_source_valid; +wire main_source_source_ready; +wire main_source_source_first; +wire main_source_source_last; +wire [31:0] main_source_source_payload_data; +wire [3:0] main_source_source_payload_last_be; +wire [3:0] main_source_source_payload_error; +wire [29:0] main_bus_adr; +wire [31:0] main_bus_dat_w; +wire [31:0] main_bus_dat_r; +wire [3:0] main_bus_sel; +wire main_bus_cyc; +wire main_bus_stb; +wire main_bus_ack; +wire main_bus_we; +wire [2:0] main_bus_cti; +wire [1:0] main_bus_bte; +wire main_bus_err; +wire main_sram0_sink_valid; +reg main_sram1_sink_ready = 1'd1; +wire main_sram2_sink_first; +wire main_sram3_sink_last; +wire [31:0] main_sram4_sink_payload_data; +wire [3:0] main_sram5_sink_payload_last_be; +wire [3:0] main_sram6_sink_payload_error; +wire main_sram7_status; +wire main_sram8_we; +reg main_sram9_re = 1'd0; +wire [10:0] main_sram10_status; +wire main_sram11_we; +reg main_sram12_re = 1'd0; +reg [31:0] main_sram13_status = 32'd0; +wire main_sram14_we; +reg main_sram15_re = 1'd0; +wire main_sram16_irq; +wire main_sram17_status; +wire main_sram18_pending; +wire main_sram19_trigger; +reg main_sram20_clear = 1'd0; +wire main_sram21_available; +wire main_sram22_status; +wire main_sram23_we; +reg main_sram24_re = 1'd0; +wire main_sram25_available; +wire main_sram26_status; +wire main_sram27_we; +reg main_sram28_re = 1'd0; +reg main_sram29_r = 1'd0; +wire main_sram30_available; +reg main_sram31_storage = 1'd0; +reg main_sram32_re = 1'd0; +reg main_write = 1'd0; +reg main_slot = 1'd0; +reg [10:0] main_sram35_length = 11'd0; +reg [3:0] main_length_inc = 4'd0; +reg main_sram37_sink_valid = 1'd0; +wire main_sram38_sink_ready; +reg main_sram39_sink_first = 1'd0; +reg main_sram40_sink_last = 1'd0; +reg main_sram41_sink_payload_slot = 1'd0; +reg [10:0] main_sram42_sink_payload_length = 11'd0; +wire main_sram43_source_valid; +wire main_sram44_source_ready; +wire main_sram45_source_first; +wire main_sram46_source_last; +wire main_sram47_source_payload_slot; +wire [10:0] main_sram48_source_payload_length; +wire main_sram49_we; +wire main_sram50_writable; +wire main_sram51_re; +wire main_sram52_readable; +wire [13:0] main_sram53_din; +wire [13:0] main_sram54_dout; +reg [1:0] main_sram55_level = 2'd0; +reg main_sram56_replace = 1'd0; +reg main_sram57_produce = 1'd0; +reg main_sram58_consume = 1'd0; +reg main_sram59_adr = 1'd0; +wire [13:0] main_sram60_dat_r; +wire main_sram61_we; +wire [13:0] main_sram62_dat_w; +wire main_sram63_do_read; +wire main_sram64_adr; +wire [13:0] main_sram65_dat_r; +wire main_sram66_fifo_in_payload_slot; +wire [10:0] main_sram67_fifo_in_payload_length; +wire main_sram68_fifo_in_first; +wire main_sram69_fifo_in_last; +wire main_sram70_fifo_out_payload_slot; +wire [10:0] main_sram71_fifo_out_payload_length; +wire main_sram72_fifo_out_first; +wire main_sram73_fifo_out_last; +wire [31:0] main_wr_data; +reg [8:0] main_sram75_adr = 9'd0; +wire [31:0] main_sram76_dat_r; +reg main_sram77_we = 1'd0; +reg [31:0] main_sram78_dat_w = 32'd0; +reg [8:0] main_sram79_adr = 9'd0; +wire [31:0] main_sram80_dat_r; +reg main_sram81_we = 1'd0; +reg [31:0] main_sram82_dat_w = 32'd0; +reg main_sram83_source_valid = 1'd0; +wire main_sram84_source_ready; +reg main_sram85_source_first = 1'd0; +reg main_sram86_source_last = 1'd0; +wire [31:0] main_sram87_source_payload_data; +reg [3:0] main_sram88_source_payload_last_be = 4'd0; +reg [3:0] main_sram89_source_payload_error = 4'd0; +reg main_start_re = 1'd0; +wire main_start_r; +reg main_start_we = 1'd0; +reg main_start_w = 1'd0; +wire main_sram94_status; +wire main_sram95_we; +reg main_sram96_re = 1'd0; +wire [1:0] main_sram97_status; +wire main_sram98_we; +reg main_sram99_re = 1'd0; +reg main_sram100_storage = 1'd0; +reg main_sram101_re = 1'd0; +reg [10:0] main_sram102_storage = 11'd0; +reg main_sram103_re = 1'd0; +wire main_sram104_irq; +wire main_sram105_status; +reg main_sram106_pending = 1'd0; +reg main_sram107_trigger = 1'd0; +reg main_sram108_clear = 1'd0; +wire main_sram109_event0; +wire main_sram110_status; +wire main_sram111_we; +reg main_sram112_re = 1'd0; +wire main_sram113_event0; +wire main_sram114_status; +wire main_sram115_we; +reg main_sram116_re = 1'd0; +reg main_sram117_r = 1'd0; +wire main_sram118_event0; +reg main_sram119_storage = 1'd0; +reg main_sram120_re = 1'd0; +reg main_read = 1'd0; +reg [10:0] main_sram122_length = 11'd0; +wire main_sram123_sink_valid; +wire main_sram124_sink_ready; +reg main_sram125_sink_first = 1'd0; +reg main_sram126_sink_last = 1'd0; +wire main_sram127_sink_payload_slot; +wire [10:0] main_sram128_sink_payload_length; +wire main_sram129_source_valid; +reg main_sram130_source_ready = 1'd0; +wire main_sram131_source_first; +wire main_sram132_source_last; +wire main_sram133_source_payload_slot; +wire [10:0] main_sram134_source_payload_length; +wire main_sram135_we; +wire main_sram136_writable; +wire main_sram137_re; +wire main_sram138_readable; +wire [13:0] main_sram139_din; +wire [13:0] main_sram140_dout; +reg [1:0] main_sram141_level = 2'd0; +reg main_sram142_replace = 1'd0; +reg main_sram143_produce = 1'd0; +reg main_sram144_consume = 1'd0; +reg main_sram145_adr = 1'd0; +wire [13:0] main_sram146_dat_r; +wire main_sram147_we; +wire [13:0] main_sram148_dat_w; +wire main_sram149_do_read; +wire main_sram150_adr; +wire [13:0] main_sram151_dat_r; +wire main_sram152_fifo_in_payload_slot; +wire [10:0] main_sram153_fifo_in_payload_length; +wire main_sram154_fifo_in_first; +wire main_sram155_fifo_in_last; +wire main_sram156_fifo_out_payload_slot; +wire [10:0] main_sram157_fifo_out_payload_length; +wire main_sram158_fifo_out_first; +wire main_sram159_fifo_out_last; +reg [31:0] main_rd_data = 32'd0; +wire [8:0] main_sram161_adr; +wire [31:0] main_sram162_dat_r; +wire main_sram163_re; +wire [8:0] main_sram164_adr; +wire [31:0] main_sram165_dat_r; +wire main_sram166_re; +wire main_sram167_irq; +wire [29:0] main_interface0_adr; +wire [31:0] main_interface0_dat_w; +wire [31:0] main_interface0_dat_r; +wire [3:0] main_interface0_sel; +wire main_interface0_cyc; +wire main_interface0_stb; +reg main_interface0_ack = 1'd0; +wire main_interface0_we; +wire [2:0] main_interface0_cti; +wire [1:0] main_interface0_bte; +reg main_interface0_err = 1'd0; +reg main_sram0_adr_burst = 1'd0; +wire [8:0] main_sram0_adr; +wire [31:0] main_sram0_dat_r; +wire [29:0] main_interface1_adr; +wire [31:0] main_interface1_dat_w; +wire [31:0] main_interface1_dat_r; +wire [3:0] main_interface1_sel; +wire main_interface1_cyc; +wire main_interface1_stb; +reg main_interface1_ack = 1'd0; +wire main_interface1_we; +wire [2:0] main_interface1_cti; +wire [1:0] main_interface1_bte; +reg main_interface1_err = 1'd0; +reg main_sram1_adr_burst = 1'd0; +wire [8:0] main_sram1_adr; +wire [31:0] main_sram1_dat_r; +wire [29:0] main_interface2_adr; +wire [31:0] main_interface2_dat_w; +wire [31:0] main_interface2_dat_r; +wire [3:0] main_interface2_sel; +wire main_interface2_cyc; +wire main_interface2_stb; +reg main_interface2_ack = 1'd0; +wire main_interface2_we; +wire [2:0] main_interface2_cti; +wire [1:0] main_interface2_bte; +reg main_interface2_err = 1'd0; +reg main_sram2_adr_burst = 1'd0; +wire [8:0] main_sram2_adr; +wire [31:0] main_sram2_dat_r; +reg [3:0] main_sram2_we = 4'd0; +wire [31:0] main_sram2_dat_w; +wire [29:0] main_interface3_adr; +wire [31:0] main_interface3_dat_w; +wire [31:0] main_interface3_dat_r; +wire [3:0] main_interface3_sel; +wire main_interface3_cyc; +wire main_interface3_stb; +reg main_interface3_ack = 1'd0; +wire main_interface3_we; +wire [2:0] main_interface3_cti; +wire [1:0] main_interface3_bte; +reg main_interface3_err = 1'd0; +reg main_sram3_adr_burst = 1'd0; +wire [8:0] main_sram3_adr; +wire [31:0] main_sram3_dat_r; +reg [3:0] main_sram3_we = 4'd0; +wire [31:0] main_sram3_dat_w; +reg [3:0] main_slave_sel = 4'd0; +reg [3:0] main_slave_sel_r = 4'd0; +wire [29:0] main_wb_bus_adr; +wire [31:0] main_wb_bus_dat_w; +wire [31:0] main_wb_bus_dat_r; +wire [3:0] main_wb_bus_sel; +wire main_wb_bus_cyc; +wire main_wb_bus_stb; +wire main_wb_bus_ack; +wire main_wb_bus_we; +wire [2:0] main_wb_bus_cti; +wire [1:0] main_wb_bus_bte; +wire main_wb_bus_err; +reg [13:0] builder_maccore_adr = 14'd0; +reg builder_maccore_we = 1'd0; +reg [31:0] builder_maccore_dat_w = 32'd0; +wire [31:0] builder_maccore_dat_r; +wire [29:0] builder_maccore_wishbone_adr; +wire [31:0] builder_maccore_wishbone_dat_w; +reg [31:0] builder_maccore_wishbone_dat_r = 32'd0; +wire [3:0] builder_maccore_wishbone_sel; +wire builder_maccore_wishbone_cyc; +wire builder_maccore_wishbone_stb; +reg builder_maccore_wishbone_ack = 1'd0; +wire builder_maccore_wishbone_we; +wire [2:0] builder_maccore_wishbone_cti; +wire [1:0] builder_maccore_wishbone_bte; +reg builder_maccore_wishbone_err = 1'd0; +wire [29:0] builder_shared_adr; +wire [31:0] builder_shared_dat_w; +reg [31:0] builder_shared_dat_r = 32'd0; +wire [3:0] builder_shared_sel; +wire builder_shared_cyc; +wire builder_shared_stb; +reg builder_shared_ack = 1'd0; +wire builder_shared_we; +wire [2:0] builder_shared_cti; +wire [1:0] builder_shared_bte; +wire builder_shared_err; +wire builder_request; +wire builder_grant; +reg [1:0] builder_slave_sel = 2'd0; +reg [1:0] builder_slave_sel_r = 2'd0; +reg builder_error = 1'd0; +wire builder_wait; +wire builder_done; +reg [19:0] builder_count = 20'd1000000; +wire [13:0] builder_interface0_bank_bus_adr; +wire builder_interface0_bank_bus_we; +wire [31:0] builder_interface0_bank_bus_dat_w; +reg [31:0] builder_interface0_bank_bus_dat_r = 32'd0; +reg builder_csrbank0_reset0_re = 1'd0; +wire [1:0] builder_csrbank0_reset0_r; +reg builder_csrbank0_reset0_we = 1'd0; +wire [1:0] builder_csrbank0_reset0_w; +reg builder_csrbank0_scratch0_re = 1'd0; +wire [31:0] builder_csrbank0_scratch0_r; +reg builder_csrbank0_scratch0_we = 1'd0; +wire [31:0] builder_csrbank0_scratch0_w; +reg builder_csrbank0_bus_errors_re = 1'd0; +wire [31:0] builder_csrbank0_bus_errors_r; +reg builder_csrbank0_bus_errors_we = 1'd0; +wire [31:0] builder_csrbank0_bus_errors_w; +wire builder_csrbank0_sel; +wire [13:0] builder_interface1_bank_bus_adr; +wire builder_interface1_bank_bus_we; +wire [31:0] builder_interface1_bank_bus_dat_w; +reg [31:0] builder_interface1_bank_bus_dat_r = 32'd0; +reg builder_csrbank1_sram_writer_slot_re = 1'd0; +wire builder_csrbank1_sram_writer_slot_r; +reg builder_csrbank1_sram_writer_slot_we = 1'd0; +wire builder_csrbank1_sram_writer_slot_w; +reg builder_csrbank1_sram_writer_length_re = 1'd0; +wire [10:0] builder_csrbank1_sram_writer_length_r; +reg builder_csrbank1_sram_writer_length_we = 1'd0; +wire [10:0] builder_csrbank1_sram_writer_length_w; +reg builder_csrbank1_sram_writer_errors_re = 1'd0; +wire [31:0] builder_csrbank1_sram_writer_errors_r; +reg builder_csrbank1_sram_writer_errors_we = 1'd0; +wire [31:0] builder_csrbank1_sram_writer_errors_w; +reg builder_csrbank1_sram_writer_ev_status_re = 1'd0; +wire builder_csrbank1_sram_writer_ev_status_r; +reg builder_csrbank1_sram_writer_ev_status_we = 1'd0; +wire builder_csrbank1_sram_writer_ev_status_w; +reg builder_csrbank1_sram_writer_ev_pending_re = 1'd0; +wire builder_csrbank1_sram_writer_ev_pending_r; +reg builder_csrbank1_sram_writer_ev_pending_we = 1'd0; +wire builder_csrbank1_sram_writer_ev_pending_w; +reg builder_csrbank1_sram_writer_ev_enable0_re = 1'd0; +wire builder_csrbank1_sram_writer_ev_enable0_r; +reg builder_csrbank1_sram_writer_ev_enable0_we = 1'd0; +wire builder_csrbank1_sram_writer_ev_enable0_w; +reg builder_csrbank1_sram_reader_ready_re = 1'd0; +wire builder_csrbank1_sram_reader_ready_r; +reg builder_csrbank1_sram_reader_ready_we = 1'd0; +wire builder_csrbank1_sram_reader_ready_w; +reg builder_csrbank1_sram_reader_level_re = 1'd0; +wire [1:0] builder_csrbank1_sram_reader_level_r; +reg builder_csrbank1_sram_reader_level_we = 1'd0; +wire [1:0] builder_csrbank1_sram_reader_level_w; +reg builder_csrbank1_sram_reader_slot0_re = 1'd0; +wire builder_csrbank1_sram_reader_slot0_r; +reg builder_csrbank1_sram_reader_slot0_we = 1'd0; +wire builder_csrbank1_sram_reader_slot0_w; +reg builder_csrbank1_sram_reader_length0_re = 1'd0; +wire [10:0] builder_csrbank1_sram_reader_length0_r; +reg builder_csrbank1_sram_reader_length0_we = 1'd0; +wire [10:0] builder_csrbank1_sram_reader_length0_w; +reg builder_csrbank1_sram_reader_ev_status_re = 1'd0; +wire builder_csrbank1_sram_reader_ev_status_r; +reg builder_csrbank1_sram_reader_ev_status_we = 1'd0; +wire builder_csrbank1_sram_reader_ev_status_w; +reg builder_csrbank1_sram_reader_ev_pending_re = 1'd0; +wire builder_csrbank1_sram_reader_ev_pending_r; +reg builder_csrbank1_sram_reader_ev_pending_we = 1'd0; +wire builder_csrbank1_sram_reader_ev_pending_w; +reg builder_csrbank1_sram_reader_ev_enable0_re = 1'd0; +wire builder_csrbank1_sram_reader_ev_enable0_r; +reg builder_csrbank1_sram_reader_ev_enable0_we = 1'd0; +wire builder_csrbank1_sram_reader_ev_enable0_w; +reg builder_csrbank1_preamble_crc_re = 1'd0; +wire builder_csrbank1_preamble_crc_r; +reg builder_csrbank1_preamble_crc_we = 1'd0; +wire builder_csrbank1_preamble_crc_w; +reg builder_csrbank1_rx_datapath_preamble_errors_re = 1'd0; +wire [31:0] builder_csrbank1_rx_datapath_preamble_errors_r; +reg builder_csrbank1_rx_datapath_preamble_errors_we = 1'd0; +wire [31:0] builder_csrbank1_rx_datapath_preamble_errors_w; +reg builder_csrbank1_rx_datapath_crc_errors_re = 1'd0; +wire [31:0] builder_csrbank1_rx_datapath_crc_errors_r; +reg builder_csrbank1_rx_datapath_crc_errors_we = 1'd0; +wire [31:0] builder_csrbank1_rx_datapath_crc_errors_w; +wire builder_csrbank1_sel; +wire [13:0] builder_interface2_bank_bus_adr; +wire builder_interface2_bank_bus_we; +wire [31:0] builder_interface2_bank_bus_dat_w; +reg [31:0] builder_interface2_bank_bus_dat_r = 32'd0; +reg builder_csrbank2_crg_reset0_re = 1'd0; +wire builder_csrbank2_crg_reset0_r; +reg builder_csrbank2_crg_reset0_we = 1'd0; +wire builder_csrbank2_crg_reset0_w; +reg builder_csrbank2_rx_inband_status_re = 1'd0; +wire [2:0] builder_csrbank2_rx_inband_status_r; +reg builder_csrbank2_rx_inband_status_we = 1'd0; +wire [2:0] builder_csrbank2_rx_inband_status_w; +reg builder_csrbank2_mdio_w0_re = 1'd0; +wire [2:0] builder_csrbank2_mdio_w0_r; +reg builder_csrbank2_mdio_w0_we = 1'd0; +wire [2:0] builder_csrbank2_mdio_w0_w; +reg builder_csrbank2_mdio_r_re = 1'd0; +wire builder_csrbank2_mdio_r_r; +reg builder_csrbank2_mdio_r_we = 1'd0; +wire builder_csrbank2_mdio_r_w; +wire builder_csrbank2_sel; +wire [13:0] builder_csr_interconnect_adr; +wire builder_csr_interconnect_we; +wire [31:0] builder_csr_interconnect_dat_w; +wire [31:0] builder_csr_interconnect_dat_r; +reg builder_maccore_txdatapath_liteethmactxlastbe_state = 1'd0; +reg builder_maccore_txdatapath_liteethmactxlastbe_next_state = 1'd0; +reg builder_maccore_txdatapath_liteethmacpaddinginserter_state = 1'd0; +reg builder_maccore_txdatapath_liteethmacpaddinginserter_next_state = 1'd0; +reg [15:0] main_tx_padding_counter_clockdomainsrenamer0_next_value = 16'd0; +reg main_tx_padding_counter_clockdomainsrenamer0_next_value_ce = 1'd0; +reg [1:0] builder_maccore_txdatapath_bufferizeendpoints_state = 2'd0; +reg [1:0] builder_maccore_txdatapath_bufferizeendpoints_next_state = 2'd0; +reg [31:0] main_liteethmaccrc32inserter_crc_packet_clockdomainsrenamer1_next_value0 = 32'd0; +reg main_liteethmaccrc32inserter_crc_packet_clockdomainsrenamer1_next_value_ce0 = 1'd0; +reg main_liteethmaccrc32inserter_last_be2_clockdomainsrenamer1_next_value1 = 1'd0; +reg main_liteethmaccrc32inserter_last_be2_clockdomainsrenamer1_next_value_ce1 = 1'd0; +reg [1:0] builder_maccore_txdatapath_liteethmacpreambleinserter_state = 2'd0; +reg [1:0] builder_maccore_txdatapath_liteethmacpreambleinserter_next_state = 2'd0; +reg [2:0] main_tx_preamble_count_clockdomainsrenamer2_next_value = 3'd0; +reg main_tx_preamble_count_clockdomainsrenamer2_next_value_ce = 1'd0; +reg builder_maccore_txdatapath_liteethmacgap_state = 1'd0; +reg builder_maccore_txdatapath_liteethmacgap_next_state = 1'd0; +reg [3:0] main_tx_gap_counter_clockdomainsrenamer3_next_value = 4'd0; +reg main_tx_gap_counter_clockdomainsrenamer3_next_value_ce = 1'd0; +reg builder_maccore_rxdatapath_liteethmacpreamblechecker_state = 1'd0; +reg builder_maccore_rxdatapath_liteethmacpreamblechecker_next_state = 1'd0; +reg [1:0] builder_maccore_rxdatapath_bufferizeendpoints_state = 2'd0; +reg [1:0] builder_maccore_rxdatapath_bufferizeendpoints_next_state = 2'd0; +reg main_rx_crc_last_be_next_value0 = 1'd0; +reg main_rx_crc_last_be_next_value_ce0 = 1'd0; +reg main_rx_crc_crc_error1_next_value1 = 1'd0; +reg main_rx_crc_crc_error1_next_value_ce1 = 1'd0; +reg [1:0] builder_maccore_liteethmacsramwriter_state = 2'd0; +reg [1:0] builder_maccore_liteethmacsramwriter_next_state = 2'd0; +reg [10:0] main_sram35_length_liteethmacsramwriter_t_next_value = 11'd0; +reg main_sram35_length_liteethmacsramwriter_t_next_value_ce = 1'd0; +reg [31:0] main_sram13_status_liteethmacsramwriter_f_next_value = 32'd0; +reg main_sram13_status_liteethmacsramwriter_f_next_value_ce = 1'd0; +reg main_slot_liteethmacsramwriter_next_value = 1'd0; +reg main_slot_liteethmacsramwriter_next_value_ce = 1'd0; +reg [1:0] builder_maccore_liteethmacsramreader_state = 2'd0; +reg [1:0] builder_maccore_liteethmacsramreader_next_state = 2'd0; +reg [10:0] main_sram122_length_liteethmacsramreader_next_value = 11'd0; +reg main_sram122_length_liteethmacsramreader_next_value_ce = 1'd0; +reg builder_maccore_state = 1'd0; +reg builder_maccore_next_state = 1'd0; +wire [31:0] builder_t_slice_proxy0; +wire [31:0] builder_t_slice_proxy1; +wire [31:0] builder_t_slice_proxy2; +wire [31:0] builder_t_slice_proxy3; +wire [31:0] builder_t_slice_proxy4; +wire [31:0] builder_t_slice_proxy5; +wire [31:0] builder_t_slice_proxy6; +wire [31:0] builder_t_slice_proxy7; +wire [31:0] builder_t_slice_proxy8; +wire [31:0] builder_t_slice_proxy9; +wire [31:0] builder_t_slice_proxy10; +wire [31:0] builder_t_slice_proxy11; +wire [31:0] builder_t_slice_proxy12; +wire [31:0] builder_t_slice_proxy13; +wire [31:0] builder_t_slice_proxy14; +wire [31:0] builder_t_slice_proxy15; +wire [31:0] builder_t_slice_proxy16; +wire [31:0] builder_t_slice_proxy17; +wire [31:0] builder_t_slice_proxy18; +wire [31:0] builder_t_slice_proxy19; +wire [31:0] builder_t_slice_proxy20; +wire [31:0] builder_t_slice_proxy21; +wire [31:0] builder_t_slice_proxy22; +wire [31:0] builder_t_slice_proxy23; +wire [31:0] builder_t_slice_proxy24; +wire [31:0] builder_t_slice_proxy25; +wire [31:0] builder_t_slice_proxy26; +wire [31:0] builder_t_slice_proxy27; +wire [31:0] builder_t_slice_proxy28; +wire [31:0] builder_t_slice_proxy29; +wire [31:0] builder_t_slice_proxy30; +wire [31:0] builder_t_slice_proxy31; +wire [39:0] builder_cases_slice_proxy; +wire [31:0] builder_t_slice_proxy32; +wire [31:0] builder_t_slice_proxy33; +wire [31:0] builder_t_slice_proxy34; +wire [31:0] builder_t_slice_proxy35; +wire [31:0] builder_t_slice_proxy36; +wire [31:0] builder_t_slice_proxy37; +wire [31:0] builder_t_slice_proxy38; +wire [31:0] builder_t_slice_proxy39; +wire [31:0] builder_t_slice_proxy40; +wire [31:0] builder_t_slice_proxy41; +wire [31:0] builder_t_slice_proxy42; +wire [31:0] builder_t_slice_proxy43; +wire [31:0] builder_t_slice_proxy44; +wire [31:0] builder_t_slice_proxy45; +wire [31:0] builder_t_slice_proxy46; +wire [31:0] builder_t_slice_proxy47; +wire [31:0] builder_t_slice_proxy48; +wire [31:0] builder_t_slice_proxy49; +wire [31:0] builder_t_slice_proxy50; +wire [31:0] builder_t_slice_proxy51; +wire [31:0] builder_t_slice_proxy52; +wire [31:0] builder_t_slice_proxy53; +wire [31:0] builder_t_slice_proxy54; +wire [31:0] builder_t_slice_proxy55; +wire [31:0] builder_t_slice_proxy56; +wire [31:0] builder_t_slice_proxy57; +wire [31:0] builder_t_slice_proxy58; +wire [31:0] builder_t_slice_proxy59; +wire [31:0] builder_t_slice_proxy60; +wire [31:0] builder_t_slice_proxy61; +wire [31:0] builder_t_slice_proxy62; +wire [31:0] builder_t_slice_proxy63; +reg [29:0] builder_array_muxed0 = 30'd0; +reg [31:0] builder_array_muxed1 = 32'd0; +reg [3:0] builder_array_muxed2 = 4'd0; +reg builder_array_muxed3 = 1'd0; +reg builder_array_muxed4 = 1'd0; +reg builder_array_muxed5 = 1'd0; +reg [2:0] builder_array_muxed6 = 3'd0; +reg [1:0] builder_array_muxed7 = 2'd0; +wire builder_rst10; +wire builder_rst11; +reg builder_multiregimpl0_regs0 = 1'd0; +reg builder_multiregimpl0_regs1 = 1'd0; +reg [5:0] builder_multiregimpl1_regs0 = 6'd0; +reg [5:0] builder_multiregimpl1_regs1 = 6'd0; +reg [5:0] builder_multiregimpl2_regs0 = 6'd0; +reg [5:0] builder_multiregimpl2_regs1 = 6'd0; +reg builder_multiregimpl3_regs0 = 1'd0; +reg builder_multiregimpl3_regs1 = 1'd0; +reg builder_multiregimpl4_regs0 = 1'd0; +reg builder_multiregimpl4_regs1 = 1'd0; +reg [5:0] builder_multiregimpl5_regs0 = 6'd0; +reg [5:0] builder_multiregimpl5_regs1 = 6'd0; +reg [5:0] builder_multiregimpl6_regs0 = 6'd0; +reg [5:0] builder_multiregimpl6_regs1 = 6'd0; + +//------------------------------------------------------------------------------ +// Combinatorial Logic +//------------------------------------------------------------------------------ + +assign main_wb_bus_adr = wishbone_adr; +assign main_wb_bus_dat_w = wishbone_dat_w; +assign wishbone_dat_r = main_wb_bus_dat_r; +assign main_wb_bus_sel = wishbone_sel; +assign main_wb_bus_cyc = wishbone_cyc; +assign main_wb_bus_stb = wishbone_stb; +assign wishbone_ack = main_wb_bus_ack; +assign main_wb_bus_we = wishbone_we; +assign main_wb_bus_cti = wishbone_cti; +assign main_wb_bus_bte = wishbone_bte; +assign wishbone_err = main_wb_bus_err; +assign interrupt = main_sram167_irq; +assign main_maccore_maccore_bus_error = builder_error; +assign main_maccore_maccore_bus_errors_status = main_maccore_maccore_bus_errors; +assign sys_clk = sys_clock; +assign por_clk = sys_clock; +assign sys_rst = main_maccore_int_rst; +assign eth_rx_clk = rgmii_eth_clocks_rx; +assign eth_tx_clk = eth_rx_clk; +assign main_maccore_ethphy_reset = main_maccore_ethphy_reset_storage; +assign rgmii_eth_rst_n = (~main_maccore_ethphy_reset); +assign main_maccore_ethphy_sink_ready = 1'd1; +assign main_maccore_ethphy_last = ((~main_maccore_ethphy_rx_ctl_reg[0]) & main_maccore_ethphy_rx_ctl_reg_d[0]); +assign main_maccore_ethphy_source_last = main_maccore_ethphy_last; +assign rgmii_eth_mdc = main_maccore_ethphy__w_storage[0]; +assign main_maccore_ethphy_data_oe = main_maccore_ethphy__w_storage[1]; +assign main_maccore_ethphy_data_w = main_maccore_ethphy__w_storage[2]; +assign main_sink_valid = main_source_source_valid; +assign main_source_source_ready = main_sink_ready; +assign main_sink_first = main_source_source_first; +assign main_sink_last = main_source_source_last; +assign main_sink_payload_data = main_source_source_payload_data; +assign main_sink_payload_last_be = main_source_source_payload_last_be; +assign main_sink_payload_error = main_source_source_payload_error; +assign main_sink_sink_valid = main_source_valid; +assign main_source_ready = main_sink_sink_ready; +assign main_sink_sink_first = main_source_first; +assign main_sink_sink_last = main_source_last; +assign main_sink_sink_payload_data = main_source_payload_data; +assign main_sink_sink_payload_last_be = main_source_payload_last_be; +assign main_sink_sink_payload_error = main_source_payload_error; +assign main_tx_cdc_cdc_sink_valid = main_tx_cdc_sink_sink_valid; +assign main_tx_cdc_sink_sink_ready = main_tx_cdc_cdc_sink_ready; +assign main_tx_cdc_cdc_sink_first = main_tx_cdc_sink_sink_first; +assign main_tx_cdc_cdc_sink_last = main_tx_cdc_sink_sink_last; +assign main_tx_cdc_cdc_sink_payload_data = main_tx_cdc_sink_sink_payload_data; +assign main_tx_cdc_cdc_sink_payload_last_be = main_tx_cdc_sink_sink_payload_last_be; +assign main_tx_cdc_cdc_sink_payload_error = main_tx_cdc_sink_sink_payload_error; +assign main_tx_cdc_source_source_valid = main_tx_cdc_cdc_source_valid; +assign main_tx_cdc_cdc_source_ready = main_tx_cdc_source_source_ready; +assign main_tx_cdc_source_source_first = main_tx_cdc_cdc_source_first; +assign main_tx_cdc_source_source_last = main_tx_cdc_cdc_source_last; +assign main_tx_cdc_source_source_payload_data = main_tx_cdc_cdc_source_payload_data; +assign main_tx_cdc_source_source_payload_last_be = main_tx_cdc_cdc_source_payload_last_be; +assign main_tx_cdc_source_source_payload_error = main_tx_cdc_cdc_source_payload_error; +assign main_tx_cdc_cdc_asyncfifo_din = {main_tx_cdc_cdc_fifo_in_last, main_tx_cdc_cdc_fifo_in_first, main_tx_cdc_cdc_fifo_in_payload_error, main_tx_cdc_cdc_fifo_in_payload_last_be, main_tx_cdc_cdc_fifo_in_payload_data}; +assign {main_tx_cdc_cdc_fifo_out_last, main_tx_cdc_cdc_fifo_out_first, main_tx_cdc_cdc_fifo_out_payload_error, main_tx_cdc_cdc_fifo_out_payload_last_be, main_tx_cdc_cdc_fifo_out_payload_data} = main_tx_cdc_cdc_asyncfifo_dout; +assign main_tx_cdc_cdc_sink_ready = main_tx_cdc_cdc_asyncfifo_writable; +assign main_tx_cdc_cdc_asyncfifo_we = main_tx_cdc_cdc_sink_valid; +assign main_tx_cdc_cdc_fifo_in_first = main_tx_cdc_cdc_sink_first; +assign main_tx_cdc_cdc_fifo_in_last = main_tx_cdc_cdc_sink_last; +assign main_tx_cdc_cdc_fifo_in_payload_data = main_tx_cdc_cdc_sink_payload_data; +assign main_tx_cdc_cdc_fifo_in_payload_last_be = main_tx_cdc_cdc_sink_payload_last_be; +assign main_tx_cdc_cdc_fifo_in_payload_error = main_tx_cdc_cdc_sink_payload_error; +assign main_tx_cdc_cdc_source_valid = main_tx_cdc_cdc_asyncfifo_readable; +assign main_tx_cdc_cdc_source_first = main_tx_cdc_cdc_fifo_out_first; +assign main_tx_cdc_cdc_source_last = main_tx_cdc_cdc_fifo_out_last; +assign main_tx_cdc_cdc_source_payload_data = main_tx_cdc_cdc_fifo_out_payload_data; +assign main_tx_cdc_cdc_source_payload_last_be = main_tx_cdc_cdc_fifo_out_payload_last_be; +assign main_tx_cdc_cdc_source_payload_error = main_tx_cdc_cdc_fifo_out_payload_error; +assign main_tx_cdc_cdc_asyncfifo_re = main_tx_cdc_cdc_source_ready; +assign main_tx_cdc_cdc_graycounter0_ce = (main_tx_cdc_cdc_asyncfifo_writable & main_tx_cdc_cdc_asyncfifo_we); +assign main_tx_cdc_cdc_graycounter1_ce = (main_tx_cdc_cdc_asyncfifo_readable & main_tx_cdc_cdc_asyncfifo_re); +assign main_tx_cdc_cdc_asyncfifo_writable = (((main_tx_cdc_cdc_graycounter0_q[5] == main_tx_cdc_cdc_consume_wdomain[5]) | (main_tx_cdc_cdc_graycounter0_q[4] == main_tx_cdc_cdc_consume_wdomain[4])) | (main_tx_cdc_cdc_graycounter0_q[3:0] != main_tx_cdc_cdc_consume_wdomain[3:0])); +assign main_tx_cdc_cdc_asyncfifo_readable = (main_tx_cdc_cdc_graycounter1_q != main_tx_cdc_cdc_produce_rdomain); +assign main_tx_cdc_cdc_wrport_adr = main_tx_cdc_cdc_graycounter0_q_binary[4:0]; +assign main_tx_cdc_cdc_wrport_dat_w = main_tx_cdc_cdc_asyncfifo_din; +assign main_tx_cdc_cdc_wrport_we = main_tx_cdc_cdc_graycounter0_ce; +assign main_tx_cdc_cdc_rdport_adr = main_tx_cdc_cdc_graycounter1_q_next_binary[4:0]; +assign main_tx_cdc_cdc_asyncfifo_dout = main_tx_cdc_cdc_rdport_dat_r; +always @(*) begin + main_tx_cdc_cdc_graycounter0_q_next_binary <= 6'd0; + if (main_tx_cdc_cdc_graycounter0_ce) begin + main_tx_cdc_cdc_graycounter0_q_next_binary <= (main_tx_cdc_cdc_graycounter0_q_binary + 1'd1); + end else begin + main_tx_cdc_cdc_graycounter0_q_next_binary <= main_tx_cdc_cdc_graycounter0_q_binary; + end +end +assign main_tx_cdc_cdc_graycounter0_q_next = (main_tx_cdc_cdc_graycounter0_q_next_binary ^ main_tx_cdc_cdc_graycounter0_q_next_binary[5:1]); +always @(*) begin + main_tx_cdc_cdc_graycounter1_q_next_binary <= 6'd0; + if (main_tx_cdc_cdc_graycounter1_ce) begin + main_tx_cdc_cdc_graycounter1_q_next_binary <= (main_tx_cdc_cdc_graycounter1_q_binary + 1'd1); + end else begin + main_tx_cdc_cdc_graycounter1_q_next_binary <= main_tx_cdc_cdc_graycounter1_q_binary; + end +end +assign main_tx_cdc_cdc_graycounter1_q_next = (main_tx_cdc_cdc_graycounter1_q_next_binary ^ main_tx_cdc_cdc_graycounter1_q_next_binary[5:1]); +assign main_tx_converter_converter_sink_valid = main_tx_converter_sink_valid; +assign main_tx_converter_converter_sink_first = main_tx_converter_sink_first; +assign main_tx_converter_converter_sink_last = main_tx_converter_sink_last; +assign main_tx_converter_sink_ready = main_tx_converter_converter_sink_ready; +always @(*) begin + main_tx_converter_converter_sink_payload_data <= 40'd0; + main_tx_converter_converter_sink_payload_data[7:0] <= main_tx_converter_sink_payload_data[7:0]; + main_tx_converter_converter_sink_payload_data[8] <= main_tx_converter_sink_payload_last_be[0]; + main_tx_converter_converter_sink_payload_data[9] <= main_tx_converter_sink_payload_error[0]; + main_tx_converter_converter_sink_payload_data[17:10] <= main_tx_converter_sink_payload_data[15:8]; + main_tx_converter_converter_sink_payload_data[18] <= main_tx_converter_sink_payload_last_be[1]; + main_tx_converter_converter_sink_payload_data[19] <= main_tx_converter_sink_payload_error[1]; + main_tx_converter_converter_sink_payload_data[27:20] <= main_tx_converter_sink_payload_data[23:16]; + main_tx_converter_converter_sink_payload_data[28] <= main_tx_converter_sink_payload_last_be[2]; + main_tx_converter_converter_sink_payload_data[29] <= main_tx_converter_sink_payload_error[2]; + main_tx_converter_converter_sink_payload_data[37:30] <= main_tx_converter_sink_payload_data[31:24]; + main_tx_converter_converter_sink_payload_data[38] <= main_tx_converter_sink_payload_last_be[3]; + main_tx_converter_converter_sink_payload_data[39] <= main_tx_converter_sink_payload_error[3]; +end +assign main_tx_converter_source_valid = main_tx_converter_source_source_valid; +assign main_tx_converter_source_first = main_tx_converter_source_source_first; +assign main_tx_converter_source_last = main_tx_converter_source_source_last; +assign main_tx_converter_source_source_ready = main_tx_converter_source_ready; +assign {main_tx_converter_source_payload_error, main_tx_converter_source_payload_last_be, main_tx_converter_source_payload_data} = main_tx_converter_source_source_payload_data; +assign main_tx_converter_source_source_valid = main_tx_converter_converter_source_valid; +assign main_tx_converter_converter_source_ready = main_tx_converter_source_source_ready; +assign main_tx_converter_source_source_first = main_tx_converter_converter_source_first; +assign main_tx_converter_source_source_last = main_tx_converter_converter_source_last; +assign main_tx_converter_source_source_payload_data = main_tx_converter_converter_source_payload_data; +assign main_tx_converter_converter_first = (main_tx_converter_converter_mux == 1'd0); +assign main_tx_converter_converter_last = (main_tx_converter_converter_mux == 2'd3); +assign main_tx_converter_converter_source_valid = main_tx_converter_converter_sink_valid; +assign main_tx_converter_converter_source_first = (main_tx_converter_converter_sink_first & main_tx_converter_converter_first); +assign main_tx_converter_converter_source_last = (main_tx_converter_converter_sink_last & main_tx_converter_converter_last); +assign main_tx_converter_converter_sink_ready = (main_tx_converter_converter_last & main_tx_converter_converter_source_ready); +always @(*) begin + main_tx_converter_converter_source_payload_data <= 10'd0; + case (main_tx_converter_converter_mux) + 1'd0: begin + main_tx_converter_converter_source_payload_data <= main_tx_converter_converter_sink_payload_data[9:0]; + end + 1'd1: begin + main_tx_converter_converter_source_payload_data <= main_tx_converter_converter_sink_payload_data[19:10]; + end + 2'd2: begin + main_tx_converter_converter_source_payload_data <= main_tx_converter_converter_sink_payload_data[29:20]; + end + default: begin + main_tx_converter_converter_source_payload_data <= main_tx_converter_converter_sink_payload_data[39:30]; + end + endcase +end +assign main_tx_converter_converter_source_payload_valid_token_count = main_tx_converter_converter_last; +always @(*) begin + main_tx_last_be_source_valid <= 1'd0; + main_tx_last_be_source_first <= 1'd0; + main_tx_last_be_source_last <= 1'd0; + main_tx_last_be_source_payload_data <= 8'd0; + builder_maccore_txdatapath_liteethmactxlastbe_next_state <= 1'd0; + main_tx_last_be_source_payload_last_be <= 1'd0; + main_tx_last_be_source_payload_error <= 1'd0; + main_tx_last_be_sink_ready <= 1'd0; + builder_maccore_txdatapath_liteethmactxlastbe_next_state <= builder_maccore_txdatapath_liteethmactxlastbe_state; + case (builder_maccore_txdatapath_liteethmactxlastbe_state) + 1'd1: begin + main_tx_last_be_sink_ready <= 1'd1; + if ((main_tx_last_be_sink_valid & main_tx_last_be_sink_last)) begin + builder_maccore_txdatapath_liteethmactxlastbe_next_state <= 1'd0; + end + end + default: begin + main_tx_last_be_source_valid <= main_tx_last_be_sink_valid; + main_tx_last_be_sink_ready <= main_tx_last_be_source_ready; + main_tx_last_be_source_first <= main_tx_last_be_sink_first; + main_tx_last_be_source_last <= main_tx_last_be_sink_last; + main_tx_last_be_source_payload_data <= main_tx_last_be_sink_payload_data; + main_tx_last_be_source_payload_last_be <= main_tx_last_be_sink_payload_last_be; + main_tx_last_be_source_payload_error <= main_tx_last_be_sink_payload_error; + main_tx_last_be_source_last <= (main_tx_last_be_sink_payload_last_be != 1'd0); + if ((main_tx_last_be_sink_valid & main_tx_last_be_sink_ready)) begin + if ((main_tx_last_be_source_last & (~main_tx_last_be_sink_last))) begin + builder_maccore_txdatapath_liteethmactxlastbe_next_state <= 1'd1; + end + end + end + endcase +end +assign main_tx_padding_counter_done = (main_tx_padding_counter >= 6'd59); +always @(*) begin + main_tx_padding_counter_clockdomainsrenamer0_next_value_ce <= 1'd0; + main_tx_padding_source_valid <= 1'd0; + main_tx_padding_source_first <= 1'd0; + main_tx_padding_source_last <= 1'd0; + main_tx_padding_source_payload_data <= 8'd0; + main_tx_padding_source_payload_last_be <= 1'd0; + main_tx_padding_source_payload_error <= 1'd0; + main_tx_padding_sink_ready <= 1'd0; + builder_maccore_txdatapath_liteethmacpaddinginserter_next_state <= 1'd0; + main_tx_padding_counter_clockdomainsrenamer0_next_value <= 16'd0; + builder_maccore_txdatapath_liteethmacpaddinginserter_next_state <= builder_maccore_txdatapath_liteethmacpaddinginserter_state; + case (builder_maccore_txdatapath_liteethmacpaddinginserter_state) + 1'd1: begin + main_tx_padding_source_valid <= 1'd1; + if (main_tx_padding_counter_done) begin + main_tx_padding_source_payload_last_be <= 1'd1; + main_tx_padding_source_last <= 1'd1; + end + main_tx_padding_source_payload_data <= 1'd0; + if ((main_tx_padding_source_valid & main_tx_padding_source_ready)) begin + main_tx_padding_counter_clockdomainsrenamer0_next_value <= (main_tx_padding_counter + 1'd1); + main_tx_padding_counter_clockdomainsrenamer0_next_value_ce <= 1'd1; + if (main_tx_padding_counter_done) begin + main_tx_padding_counter_clockdomainsrenamer0_next_value <= 1'd0; + main_tx_padding_counter_clockdomainsrenamer0_next_value_ce <= 1'd1; + builder_maccore_txdatapath_liteethmacpaddinginserter_next_state <= 1'd0; + end + end + end + default: begin + main_tx_padding_source_valid <= main_tx_padding_sink_valid; + main_tx_padding_sink_ready <= main_tx_padding_source_ready; + main_tx_padding_source_first <= main_tx_padding_sink_first; + main_tx_padding_source_last <= main_tx_padding_sink_last; + main_tx_padding_source_payload_data <= main_tx_padding_sink_payload_data; + main_tx_padding_source_payload_last_be <= main_tx_padding_sink_payload_last_be; + main_tx_padding_source_payload_error <= main_tx_padding_sink_payload_error; + if ((main_tx_padding_source_valid & main_tx_padding_source_ready)) begin + main_tx_padding_counter_clockdomainsrenamer0_next_value <= (main_tx_padding_counter + 1'd1); + main_tx_padding_counter_clockdomainsrenamer0_next_value_ce <= 1'd1; + if (main_tx_padding_sink_last) begin + if ((~main_tx_padding_counter_done)) begin + main_tx_padding_source_last <= 1'd0; + main_tx_padding_source_payload_last_be <= 1'd0; + builder_maccore_txdatapath_liteethmacpaddinginserter_next_state <= 1'd1; + end else begin + if (((main_tx_padding_counter == 6'd59) & (main_tx_padding_sink_payload_last_be < 1'd1))) begin + main_tx_padding_source_payload_last_be <= 1'd1; + end else begin + main_tx_padding_counter_clockdomainsrenamer0_next_value <= 1'd0; + main_tx_padding_counter_clockdomainsrenamer0_next_value_ce <= 1'd1; + end + end + end + end + end + endcase +end +assign main_liteethmaccrc32inserter_cnt_done = (main_liteethmaccrc32inserter_cnt == 1'd0); +assign main_liteethmaccrc32inserter_sink_valid = main_bufferizeendpoints_source_valid; +assign main_bufferizeendpoints_source_ready = main_liteethmaccrc32inserter_sink_ready; +assign main_liteethmaccrc32inserter_sink_first = main_bufferizeendpoints_source_first; +assign main_liteethmaccrc32inserter_sink_last = main_bufferizeendpoints_source_last; +assign main_liteethmaccrc32inserter_sink_payload_data = main_bufferizeendpoints_source_payload_data; +assign main_liteethmaccrc32inserter_sink_payload_last_be = main_bufferizeendpoints_source_payload_last_be; +assign main_liteethmaccrc32inserter_sink_payload_error = main_bufferizeendpoints_source_payload_error; +always @(*) begin + main_liteethmaccrc32inserter_last_be1 <= 1'd0; + if ((main_liteethmaccrc32inserter_last_be0 != 1'd0)) begin + main_liteethmaccrc32inserter_last_be1 <= main_liteethmaccrc32inserter_last_be0; + end else begin + main_liteethmaccrc32inserter_last_be1 <= 1'd1; + end +end +assign main_liteethmaccrc32inserter_data1 = main_liteethmaccrc32inserter_data0[7:0]; +assign main_liteethmaccrc32inserter_last = main_liteethmaccrc32inserter_reg; +always @(*) begin + main_liteethmaccrc32inserter_value <= 32'd0; + main_liteethmaccrc32inserter_error <= 1'd0; + if (main_liteethmaccrc32inserter_last_be1) begin + main_liteethmaccrc32inserter_value <= {builder_t_slice_proxy31[0], builder_t_slice_proxy30[1], builder_t_slice_proxy29[2], builder_t_slice_proxy28[3], builder_t_slice_proxy27[4], builder_t_slice_proxy26[5], builder_t_slice_proxy25[6], builder_t_slice_proxy24[7], builder_t_slice_proxy23[8], builder_t_slice_proxy22[9], builder_t_slice_proxy21[10], builder_t_slice_proxy20[11], builder_t_slice_proxy19[12], builder_t_slice_proxy18[13], builder_t_slice_proxy17[14], builder_t_slice_proxy16[15], builder_t_slice_proxy15[16], builder_t_slice_proxy14[17], builder_t_slice_proxy13[18], builder_t_slice_proxy12[19], builder_t_slice_proxy11[20], builder_t_slice_proxy10[21], builder_t_slice_proxy9[22], builder_t_slice_proxy8[23], builder_t_slice_proxy7[24], builder_t_slice_proxy6[25], builder_t_slice_proxy5[26], builder_t_slice_proxy4[27], builder_t_slice_proxy3[28], builder_t_slice_proxy2[29], builder_t_slice_proxy1[30], builder_t_slice_proxy0[31]}; + main_liteethmaccrc32inserter_error <= (main_liteethmaccrc32inserter_next != 32'd3338984827); + end +end +always @(*) begin + main_liteethmaccrc32inserter_next <= 32'd0; + main_liteethmaccrc32inserter_next[0] <= (((main_liteethmaccrc32inserter_last[24] ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[1] <= (((((((main_liteethmaccrc32inserter_last[25] ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_data1[6]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[2] <= (((((((((main_liteethmaccrc32inserter_last[26] ^ main_liteethmaccrc32inserter_data1[5]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_data1[6]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[3] <= (((((((main_liteethmaccrc32inserter_last[27] ^ main_liteethmaccrc32inserter_data1[4]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_data1[6]); + main_liteethmaccrc32inserter_next[4] <= (((((((((main_liteethmaccrc32inserter_last[28] ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[5] <= (((((((((((((main_liteethmaccrc32inserter_last[29] ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_data1[6]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[6] <= (((((((((((main_liteethmaccrc32inserter_last[30] ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_data1[6]); + main_liteethmaccrc32inserter_next[7] <= (((((((((main_liteethmaccrc32inserter_last[31] ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[8] <= ((((((((main_liteethmaccrc32inserter_last[0] ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_data1[6]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[9] <= ((((((((main_liteethmaccrc32inserter_last[1] ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_data1[6]); + main_liteethmaccrc32inserter_next[10] <= ((((((((main_liteethmaccrc32inserter_last[2] ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[11] <= ((((((((main_liteethmaccrc32inserter_last[3] ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_data1[6]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[12] <= ((((((((((((main_liteethmaccrc32inserter_last[4] ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_data1[6]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[13] <= ((((((((((((main_liteethmaccrc32inserter_last[5] ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_data1[6]); + main_liteethmaccrc32inserter_next[14] <= ((((((((((main_liteethmaccrc32inserter_last[6] ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]); + main_liteethmaccrc32inserter_next[15] <= ((((((((main_liteethmaccrc32inserter_last[7] ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]); + main_liteethmaccrc32inserter_next[16] <= ((((((main_liteethmaccrc32inserter_last[8] ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[17] <= ((((((main_liteethmaccrc32inserter_last[9] ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_data1[6]); + main_liteethmaccrc32inserter_next[18] <= ((((((main_liteethmaccrc32inserter_last[10] ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]); + main_liteethmaccrc32inserter_next[19] <= ((((main_liteethmaccrc32inserter_last[11] ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]); + main_liteethmaccrc32inserter_next[20] <= ((main_liteethmaccrc32inserter_last[12] ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]); + main_liteethmaccrc32inserter_next[21] <= ((main_liteethmaccrc32inserter_last[13] ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]); + main_liteethmaccrc32inserter_next[22] <= ((main_liteethmaccrc32inserter_last[14] ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[23] <= ((((((main_liteethmaccrc32inserter_last[15] ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_data1[6]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[24] <= ((((((main_liteethmaccrc32inserter_last[16] ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_data1[6]); + main_liteethmaccrc32inserter_next[25] <= ((((main_liteethmaccrc32inserter_last[17] ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]); + main_liteethmaccrc32inserter_next[26] <= ((((((((main_liteethmaccrc32inserter_last[18] ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]) ^ main_liteethmaccrc32inserter_last[24]) ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_data1[7]); + main_liteethmaccrc32inserter_next[27] <= ((((((((main_liteethmaccrc32inserter_last[19] ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]) ^ main_liteethmaccrc32inserter_last[25]) ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_data1[6]); + main_liteethmaccrc32inserter_next[28] <= ((((((main_liteethmaccrc32inserter_last[20] ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]) ^ main_liteethmaccrc32inserter_last[26]) ^ main_liteethmaccrc32inserter_data1[5]); + main_liteethmaccrc32inserter_next[29] <= ((((((main_liteethmaccrc32inserter_last[21] ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_last[30]) ^ main_liteethmaccrc32inserter_data1[1]) ^ main_liteethmaccrc32inserter_last[27]) ^ main_liteethmaccrc32inserter_data1[4]); + main_liteethmaccrc32inserter_next[30] <= ((((main_liteethmaccrc32inserter_last[22] ^ main_liteethmaccrc32inserter_last[31]) ^ main_liteethmaccrc32inserter_data1[0]) ^ main_liteethmaccrc32inserter_last[28]) ^ main_liteethmaccrc32inserter_data1[3]); + main_liteethmaccrc32inserter_next[31] <= ((main_liteethmaccrc32inserter_last[23] ^ main_liteethmaccrc32inserter_last[29]) ^ main_liteethmaccrc32inserter_data1[2]); +end +always @(*) begin + main_liteethmaccrc32inserter_source_last <= 1'd0; + main_liteethmaccrc32inserter_source_payload_data <= 8'd0; + main_liteethmaccrc32inserter_source_payload_last_be <= 1'd0; + main_liteethmaccrc32inserter_source_payload_error <= 1'd0; + main_liteethmaccrc32inserter_data0 <= 8'd0; + main_liteethmaccrc32inserter_last_be0 <= 1'd0; + builder_maccore_txdatapath_bufferizeendpoints_next_state <= 2'd0; + main_liteethmaccrc32inserter_crc_packet_clockdomainsrenamer1_next_value0 <= 32'd0; + main_liteethmaccrc32inserter_crc_packet_clockdomainsrenamer1_next_value_ce0 <= 1'd0; + main_liteethmaccrc32inserter_last_be2_clockdomainsrenamer1_next_value1 <= 1'd0; + main_liteethmaccrc32inserter_last_be2_clockdomainsrenamer1_next_value_ce1 <= 1'd0; + main_liteethmaccrc32inserter_sink_ready <= 1'd0; + main_liteethmaccrc32inserter_is_ongoing0 <= 1'd0; + main_liteethmaccrc32inserter_is_ongoing1 <= 1'd0; + main_liteethmaccrc32inserter_source_valid <= 1'd0; + main_liteethmaccrc32inserter_ce <= 1'd0; + main_liteethmaccrc32inserter_reset <= 1'd0; + main_liteethmaccrc32inserter_source_first <= 1'd0; + builder_maccore_txdatapath_bufferizeendpoints_next_state <= builder_maccore_txdatapath_bufferizeendpoints_state; + case (builder_maccore_txdatapath_bufferizeendpoints_state) + 1'd1: begin + main_liteethmaccrc32inserter_ce <= (main_liteethmaccrc32inserter_sink_valid & main_liteethmaccrc32inserter_source_ready); + main_liteethmaccrc32inserter_data0 <= main_liteethmaccrc32inserter_sink_payload_data; + main_liteethmaccrc32inserter_last_be0 <= main_liteethmaccrc32inserter_sink_payload_last_be; + main_liteethmaccrc32inserter_source_valid <= main_liteethmaccrc32inserter_sink_valid; + main_liteethmaccrc32inserter_sink_ready <= main_liteethmaccrc32inserter_source_ready; + main_liteethmaccrc32inserter_source_first <= main_liteethmaccrc32inserter_sink_first; + main_liteethmaccrc32inserter_source_last <= main_liteethmaccrc32inserter_sink_last; + main_liteethmaccrc32inserter_source_payload_data <= main_liteethmaccrc32inserter_sink_payload_data; + main_liteethmaccrc32inserter_source_payload_last_be <= main_liteethmaccrc32inserter_sink_payload_last_be; + main_liteethmaccrc32inserter_source_payload_error <= main_liteethmaccrc32inserter_sink_payload_error; + main_liteethmaccrc32inserter_source_last <= 1'd0; + main_liteethmaccrc32inserter_source_payload_last_be <= 1'd0; + if (main_liteethmaccrc32inserter_sink_last) begin + if (main_liteethmaccrc32inserter_sink_payload_last_be) begin + main_liteethmaccrc32inserter_source_payload_data <= builder_cases_slice_proxy[7:0]; + end + if ((1'd0 & (main_liteethmaccrc32inserter_sink_payload_last_be <= 4'd15))) begin + main_liteethmaccrc32inserter_source_last <= 1'd1; + main_liteethmaccrc32inserter_source_payload_last_be <= (main_liteethmaccrc32inserter_sink_payload_last_be <<< -3'd3); + end + end else begin + main_liteethmaccrc32inserter_ce <= (main_liteethmaccrc32inserter_sink_valid & main_liteethmaccrc32inserter_source_ready); + end + if (((main_liteethmaccrc32inserter_sink_valid & main_liteethmaccrc32inserter_sink_last) & main_liteethmaccrc32inserter_source_ready)) begin + if ((1'd0 & (main_liteethmaccrc32inserter_sink_payload_last_be <= 4'd15))) begin + builder_maccore_txdatapath_bufferizeendpoints_next_state <= 1'd0; + end else begin + main_liteethmaccrc32inserter_crc_packet_clockdomainsrenamer1_next_value0 <= main_liteethmaccrc32inserter_value; + main_liteethmaccrc32inserter_crc_packet_clockdomainsrenamer1_next_value_ce0 <= 1'd1; + if (1'd0) begin + main_liteethmaccrc32inserter_last_be2_clockdomainsrenamer1_next_value1 <= (main_liteethmaccrc32inserter_sink_payload_last_be >>> 3'd4); + main_liteethmaccrc32inserter_last_be2_clockdomainsrenamer1_next_value_ce1 <= 1'd1; + end else begin + main_liteethmaccrc32inserter_last_be2_clockdomainsrenamer1_next_value1 <= main_liteethmaccrc32inserter_sink_payload_last_be; + main_liteethmaccrc32inserter_last_be2_clockdomainsrenamer1_next_value_ce1 <= 1'd1; + end + builder_maccore_txdatapath_bufferizeendpoints_next_state <= 2'd2; + end + end + end + 2'd2: begin + main_liteethmaccrc32inserter_source_valid <= 1'd1; + case (main_liteethmaccrc32inserter_cnt) + 1'd0: begin + main_liteethmaccrc32inserter_source_payload_data <= main_liteethmaccrc32inserter_crc_packet[31:24]; + end + 1'd1: begin + main_liteethmaccrc32inserter_source_payload_data <= main_liteethmaccrc32inserter_crc_packet[23:16]; + end + 2'd2: begin + main_liteethmaccrc32inserter_source_payload_data <= main_liteethmaccrc32inserter_crc_packet[15:8]; + end + default: begin + main_liteethmaccrc32inserter_source_payload_data <= main_liteethmaccrc32inserter_crc_packet[7:0]; + end + endcase + if (main_liteethmaccrc32inserter_cnt_done) begin + main_liteethmaccrc32inserter_source_last <= 1'd1; + if (main_liteethmaccrc32inserter_source_ready) begin + builder_maccore_txdatapath_bufferizeendpoints_next_state <= 1'd0; + end + end + main_liteethmaccrc32inserter_is_ongoing1 <= 1'd1; + end + default: begin + main_liteethmaccrc32inserter_reset <= 1'd1; + main_liteethmaccrc32inserter_sink_ready <= 1'd1; + if (main_liteethmaccrc32inserter_sink_valid) begin + main_liteethmaccrc32inserter_sink_ready <= 1'd0; + builder_maccore_txdatapath_bufferizeendpoints_next_state <= 1'd1; + end + main_liteethmaccrc32inserter_is_ongoing0 <= 1'd1; + end + endcase +end +assign main_bufferizeendpoints_sink_ready = ((~main_bufferizeendpoints_source_valid) | main_bufferizeendpoints_source_ready); +assign main_tx_preamble_source_payload_last_be = main_tx_preamble_sink_payload_last_be; +always @(*) begin + builder_maccore_txdatapath_liteethmacpreambleinserter_next_state <= 2'd0; + main_tx_preamble_count_clockdomainsrenamer2_next_value <= 3'd0; + main_tx_preamble_count_clockdomainsrenamer2_next_value_ce <= 1'd0; + main_tx_preamble_source_valid <= 1'd0; + main_tx_preamble_source_first <= 1'd0; + main_tx_preamble_source_last <= 1'd0; + main_tx_preamble_source_payload_data <= 8'd0; + main_tx_preamble_source_payload_error <= 1'd0; + main_tx_preamble_sink_ready <= 1'd0; + main_tx_preamble_source_payload_data <= main_tx_preamble_sink_payload_data; + builder_maccore_txdatapath_liteethmacpreambleinserter_next_state <= builder_maccore_txdatapath_liteethmacpreambleinserter_state; + case (builder_maccore_txdatapath_liteethmacpreambleinserter_state) + 1'd1: begin + main_tx_preamble_source_valid <= 1'd1; + case (main_tx_preamble_count) + 1'd0: begin + main_tx_preamble_source_payload_data <= main_tx_preamble_preamble[7:0]; + end + 1'd1: begin + main_tx_preamble_source_payload_data <= main_tx_preamble_preamble[15:8]; + end + 2'd2: begin + main_tx_preamble_source_payload_data <= main_tx_preamble_preamble[23:16]; + end + 2'd3: begin + main_tx_preamble_source_payload_data <= main_tx_preamble_preamble[31:24]; + end + 3'd4: begin + main_tx_preamble_source_payload_data <= main_tx_preamble_preamble[39:32]; + end + 3'd5: begin + main_tx_preamble_source_payload_data <= main_tx_preamble_preamble[47:40]; + end + 3'd6: begin + main_tx_preamble_source_payload_data <= main_tx_preamble_preamble[55:48]; + end + default: begin + main_tx_preamble_source_payload_data <= main_tx_preamble_preamble[63:56]; + end + endcase + if (main_tx_preamble_source_ready) begin + if ((main_tx_preamble_count == 3'd7)) begin + builder_maccore_txdatapath_liteethmacpreambleinserter_next_state <= 2'd2; + end else begin + main_tx_preamble_count_clockdomainsrenamer2_next_value <= (main_tx_preamble_count + 1'd1); + main_tx_preamble_count_clockdomainsrenamer2_next_value_ce <= 1'd1; + end + end + end + 2'd2: begin + main_tx_preamble_source_valid <= main_tx_preamble_sink_valid; + main_tx_preamble_sink_ready <= main_tx_preamble_source_ready; + main_tx_preamble_source_first <= main_tx_preamble_sink_first; + main_tx_preamble_source_last <= main_tx_preamble_sink_last; + main_tx_preamble_source_payload_error <= main_tx_preamble_sink_payload_error; + if (((main_tx_preamble_sink_valid & main_tx_preamble_sink_last) & main_tx_preamble_source_ready)) begin + builder_maccore_txdatapath_liteethmacpreambleinserter_next_state <= 1'd0; + end + end + default: begin + main_tx_preamble_sink_ready <= 1'd1; + main_tx_preamble_count_clockdomainsrenamer2_next_value <= 1'd0; + main_tx_preamble_count_clockdomainsrenamer2_next_value_ce <= 1'd1; + if (main_tx_preamble_sink_valid) begin + main_tx_preamble_sink_ready <= 1'd0; + builder_maccore_txdatapath_liteethmacpreambleinserter_next_state <= 1'd1; + end + end + endcase +end +always @(*) begin + main_tx_gap_counter_clockdomainsrenamer3_next_value <= 4'd0; + main_tx_gap_source_valid <= 1'd0; + main_tx_gap_counter_clockdomainsrenamer3_next_value_ce <= 1'd0; + main_tx_gap_source_first <= 1'd0; + main_tx_gap_source_last <= 1'd0; + main_tx_gap_source_payload_data <= 8'd0; + main_tx_gap_source_payload_last_be <= 1'd0; + main_tx_gap_source_payload_error <= 1'd0; + main_tx_gap_sink_ready <= 1'd0; + builder_maccore_txdatapath_liteethmacgap_next_state <= 1'd0; + builder_maccore_txdatapath_liteethmacgap_next_state <= builder_maccore_txdatapath_liteethmacgap_state; + case (builder_maccore_txdatapath_liteethmacgap_state) + 1'd1: begin + main_tx_gap_counter_clockdomainsrenamer3_next_value <= (main_tx_gap_counter + 1'd1); + main_tx_gap_counter_clockdomainsrenamer3_next_value_ce <= 1'd1; + if ((main_tx_gap_counter == 4'd11)) begin + builder_maccore_txdatapath_liteethmacgap_next_state <= 1'd0; + end + end + default: begin + main_tx_gap_counter_clockdomainsrenamer3_next_value <= 1'd0; + main_tx_gap_counter_clockdomainsrenamer3_next_value_ce <= 1'd1; + main_tx_gap_source_valid <= main_tx_gap_sink_valid; + main_tx_gap_sink_ready <= main_tx_gap_source_ready; + main_tx_gap_source_first <= main_tx_gap_sink_first; + main_tx_gap_source_last <= main_tx_gap_sink_last; + main_tx_gap_source_payload_data <= main_tx_gap_sink_payload_data; + main_tx_gap_source_payload_last_be <= main_tx_gap_sink_payload_last_be; + main_tx_gap_source_payload_error <= main_tx_gap_sink_payload_error; + if (((main_tx_gap_sink_valid & main_tx_gap_sink_last) & main_tx_gap_sink_ready)) begin + builder_maccore_txdatapath_liteethmacgap_next_state <= 1'd1; + end + end + endcase +end +assign main_tx_cdc_sink_sink_valid = main_sink_valid; +assign main_sink_ready = main_tx_cdc_sink_sink_ready; +assign main_tx_cdc_sink_sink_first = main_sink_first; +assign main_tx_cdc_sink_sink_last = main_sink_last; +assign main_tx_cdc_sink_sink_payload_data = main_sink_payload_data; +assign main_tx_cdc_sink_sink_payload_last_be = main_sink_payload_last_be; +assign main_tx_cdc_sink_sink_payload_error = main_sink_payload_error; +assign main_tx_converter_sink_valid = main_tx_cdc_source_source_valid; +assign main_tx_cdc_source_source_ready = main_tx_converter_sink_ready; +assign main_tx_converter_sink_first = main_tx_cdc_source_source_first; +assign main_tx_converter_sink_last = main_tx_cdc_source_source_last; +assign main_tx_converter_sink_payload_data = main_tx_cdc_source_source_payload_data; +assign main_tx_converter_sink_payload_last_be = main_tx_cdc_source_source_payload_last_be; +assign main_tx_converter_sink_payload_error = main_tx_cdc_source_source_payload_error; +assign main_tx_last_be_sink_valid = main_tx_converter_source_valid; +assign main_tx_converter_source_ready = main_tx_last_be_sink_ready; +assign main_tx_last_be_sink_first = main_tx_converter_source_first; +assign main_tx_last_be_sink_last = main_tx_converter_source_last; +assign main_tx_last_be_sink_payload_data = main_tx_converter_source_payload_data; +assign main_tx_last_be_sink_payload_last_be = main_tx_converter_source_payload_last_be; +assign main_tx_last_be_sink_payload_error = main_tx_converter_source_payload_error; +assign main_tx_padding_sink_valid = main_tx_last_be_source_valid; +assign main_tx_last_be_source_ready = main_tx_padding_sink_ready; +assign main_tx_padding_sink_first = main_tx_last_be_source_first; +assign main_tx_padding_sink_last = main_tx_last_be_source_last; +assign main_tx_padding_sink_payload_data = main_tx_last_be_source_payload_data; +assign main_tx_padding_sink_payload_last_be = main_tx_last_be_source_payload_last_be; +assign main_tx_padding_sink_payload_error = main_tx_last_be_source_payload_error; +assign main_bufferizeendpoints_sink_valid = main_tx_padding_source_valid; +assign main_tx_padding_source_ready = main_bufferizeendpoints_sink_ready; +assign main_bufferizeendpoints_sink_first = main_tx_padding_source_first; +assign main_bufferizeendpoints_sink_last = main_tx_padding_source_last; +assign main_bufferizeendpoints_sink_payload_data = main_tx_padding_source_payload_data; +assign main_bufferizeendpoints_sink_payload_last_be = main_tx_padding_source_payload_last_be; +assign main_bufferizeendpoints_sink_payload_error = main_tx_padding_source_payload_error; +assign main_tx_preamble_sink_valid = main_liteethmaccrc32inserter_source_valid; +assign main_liteethmaccrc32inserter_source_ready = main_tx_preamble_sink_ready; +assign main_tx_preamble_sink_first = main_liteethmaccrc32inserter_source_first; +assign main_tx_preamble_sink_last = main_liteethmaccrc32inserter_source_last; +assign main_tx_preamble_sink_payload_data = main_liteethmaccrc32inserter_source_payload_data; +assign main_tx_preamble_sink_payload_last_be = main_liteethmaccrc32inserter_source_payload_last_be; +assign main_tx_preamble_sink_payload_error = main_liteethmaccrc32inserter_source_payload_error; +assign main_tx_gap_sink_valid = main_tx_preamble_source_valid; +assign main_tx_preamble_source_ready = main_tx_gap_sink_ready; +assign main_tx_gap_sink_first = main_tx_preamble_source_first; +assign main_tx_gap_sink_last = main_tx_preamble_source_last; +assign main_tx_gap_sink_payload_data = main_tx_preamble_source_payload_data; +assign main_tx_gap_sink_payload_last_be = main_tx_preamble_source_payload_last_be; +assign main_tx_gap_sink_payload_error = main_tx_preamble_source_payload_error; +assign main_maccore_ethphy_sink_valid = main_tx_gap_source_valid; +assign main_tx_gap_source_ready = main_maccore_ethphy_sink_ready; +assign main_maccore_ethphy_sink_first = main_tx_gap_source_first; +assign main_maccore_ethphy_sink_last = main_tx_gap_source_last; +assign main_maccore_ethphy_sink_payload_data = main_tx_gap_source_payload_data; +assign main_maccore_ethphy_sink_payload_last_be = main_tx_gap_source_payload_last_be; +assign main_maccore_ethphy_sink_payload_error = main_tx_gap_source_payload_error; +assign main_pulsesynchronizer0_i = main_rx_preamble_error; +assign main_pulsesynchronizer1_i = main_rx_crc_error; +assign main_rx_preamble_source_payload_data = main_rx_preamble_sink_payload_data; +assign main_rx_preamble_source_payload_last_be = main_rx_preamble_sink_payload_last_be; +always @(*) begin + main_rx_preamble_error <= 1'd0; + main_rx_preamble_source_first <= 1'd0; + main_rx_preamble_source_valid <= 1'd0; + builder_maccore_rxdatapath_liteethmacpreamblechecker_next_state <= 1'd0; + main_rx_preamble_sink_ready <= 1'd0; + main_rx_preamble_source_last <= 1'd0; + main_rx_preamble_source_payload_error <= 1'd0; + builder_maccore_rxdatapath_liteethmacpreamblechecker_next_state <= builder_maccore_rxdatapath_liteethmacpreamblechecker_state; + case (builder_maccore_rxdatapath_liteethmacpreamblechecker_state) + 1'd1: begin + main_rx_preamble_source_valid <= main_rx_preamble_sink_valid; + main_rx_preamble_sink_ready <= main_rx_preamble_source_ready; + main_rx_preamble_source_first <= main_rx_preamble_sink_first; + main_rx_preamble_source_last <= main_rx_preamble_sink_last; + main_rx_preamble_source_payload_error <= main_rx_preamble_sink_payload_error; + if (((main_rx_preamble_source_valid & main_rx_preamble_source_last) & main_rx_preamble_source_ready)) begin + builder_maccore_rxdatapath_liteethmacpreamblechecker_next_state <= 1'd0; + end + end + default: begin + main_rx_preamble_sink_ready <= 1'd1; + if (((main_rx_preamble_sink_valid & (~main_rx_preamble_sink_last)) & (main_rx_preamble_sink_payload_data == main_rx_preamble_preamble[63:56]))) begin + builder_maccore_rxdatapath_liteethmacpreamblechecker_next_state <= 1'd1; + end + if ((main_rx_preamble_sink_valid & main_rx_preamble_sink_last)) begin + main_rx_preamble_error <= 1'd1; + end + end + endcase +end +assign main_pulsesynchronizer0_o = (main_pulsesynchronizer0_toggle_o ^ main_pulsesynchronizer0_toggle_o_r); +assign main_rx_crc_fifo_full = (main_rx_crc_syncfifo_level == 3'd4); +assign main_rx_crc_fifo_in = (main_rx_crc_sink_sink_valid & ((~main_rx_crc_fifo_full) | main_rx_crc_fifo_out)); +assign main_rx_crc_fifo_out = (main_rx_crc_source_source_valid & main_rx_crc_source_source_ready); +assign main_rx_crc_syncfifo_sink_first = main_rx_crc_sink_sink_first; +assign main_rx_crc_syncfifo_sink_last = main_rx_crc_sink_sink_last; +assign main_rx_crc_syncfifo_sink_payload_data = main_rx_crc_sink_sink_payload_data; +assign main_rx_crc_syncfifo_sink_payload_last_be = main_rx_crc_sink_sink_payload_last_be; +assign main_rx_crc_syncfifo_sink_payload_error = main_rx_crc_sink_sink_payload_error; +always @(*) begin + main_rx_crc_syncfifo_sink_valid <= 1'd0; + main_rx_crc_syncfifo_sink_valid <= main_rx_crc_sink_sink_valid; + main_rx_crc_syncfifo_sink_valid <= main_rx_crc_fifo_in; +end +always @(*) begin + main_rx_crc_sink_sink_ready <= 1'd0; + main_rx_crc_sink_sink_ready <= main_rx_crc_syncfifo_sink_ready; + main_rx_crc_sink_sink_ready <= main_rx_crc_fifo_in; +end +assign main_rx_crc_crc_data0 = main_rx_crc_sink_sink_payload_data; +assign main_rx_crc_crc_last_be0 = main_rx_crc_sink_sink_payload_last_be; +assign main_rx_crc_sink_sink_valid = main_rx_crc_source_valid; +assign main_rx_crc_source_ready = main_rx_crc_sink_sink_ready; +assign main_rx_crc_sink_sink_first = main_rx_crc_source_first; +assign main_rx_crc_sink_sink_last = main_rx_crc_source_last; +assign main_rx_crc_sink_sink_payload_data = main_rx_crc_source_payload_data; +assign main_rx_crc_sink_sink_payload_last_be = main_rx_crc_source_payload_last_be; +assign main_rx_crc_sink_sink_payload_error = main_rx_crc_source_payload_error; +always @(*) begin + main_rx_crc_crc_last_be1 <= 1'd0; + if ((main_rx_crc_crc_last_be0 != 1'd0)) begin + main_rx_crc_crc_last_be1 <= main_rx_crc_crc_last_be0; + end else begin + main_rx_crc_crc_last_be1 <= 1'd1; + end +end +assign main_rx_crc_crc_data1 = main_rx_crc_crc_data0[7:0]; +assign main_rx_crc_crc_last = main_rx_crc_crc_reg; +always @(*) begin + main_rx_crc_crc_value <= 32'd0; + main_rx_crc_crc_error0 <= 1'd0; + if (main_rx_crc_crc_last_be1) begin + main_rx_crc_crc_value <= {builder_t_slice_proxy63[0], builder_t_slice_proxy62[1], builder_t_slice_proxy61[2], builder_t_slice_proxy60[3], builder_t_slice_proxy59[4], builder_t_slice_proxy58[5], builder_t_slice_proxy57[6], builder_t_slice_proxy56[7], builder_t_slice_proxy55[8], builder_t_slice_proxy54[9], builder_t_slice_proxy53[10], builder_t_slice_proxy52[11], builder_t_slice_proxy51[12], builder_t_slice_proxy50[13], builder_t_slice_proxy49[14], builder_t_slice_proxy48[15], builder_t_slice_proxy47[16], builder_t_slice_proxy46[17], builder_t_slice_proxy45[18], builder_t_slice_proxy44[19], builder_t_slice_proxy43[20], builder_t_slice_proxy42[21], builder_t_slice_proxy41[22], builder_t_slice_proxy40[23], builder_t_slice_proxy39[24], builder_t_slice_proxy38[25], builder_t_slice_proxy37[26], builder_t_slice_proxy36[27], builder_t_slice_proxy35[28], builder_t_slice_proxy34[29], builder_t_slice_proxy33[30], builder_t_slice_proxy32[31]}; + main_rx_crc_crc_error0 <= (main_rx_crc_crc_next != 32'd3338984827); + end +end +always @(*) begin + main_rx_crc_crc_next <= 32'd0; + main_rx_crc_crc_next[0] <= (((main_rx_crc_crc_last[24] ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[1] <= (((((((main_rx_crc_crc_last[25] ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_data1[6]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[2] <= (((((((((main_rx_crc_crc_last[26] ^ main_rx_crc_crc_data1[5]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_data1[6]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[3] <= (((((((main_rx_crc_crc_last[27] ^ main_rx_crc_crc_data1[4]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_data1[6]); + main_rx_crc_crc_next[4] <= (((((((((main_rx_crc_crc_last[28] ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[5] <= (((((((((((((main_rx_crc_crc_last[29] ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_data1[6]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[6] <= (((((((((((main_rx_crc_crc_last[30] ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_data1[6]); + main_rx_crc_crc_next[7] <= (((((((((main_rx_crc_crc_last[31] ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[8] <= ((((((((main_rx_crc_crc_last[0] ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_data1[6]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[9] <= ((((((((main_rx_crc_crc_last[1] ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_data1[6]); + main_rx_crc_crc_next[10] <= ((((((((main_rx_crc_crc_last[2] ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[11] <= ((((((((main_rx_crc_crc_last[3] ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_data1[6]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[12] <= ((((((((((((main_rx_crc_crc_last[4] ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_data1[6]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[13] <= ((((((((((((main_rx_crc_crc_last[5] ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_data1[6]); + main_rx_crc_crc_next[14] <= ((((((((((main_rx_crc_crc_last[6] ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]); + main_rx_crc_crc_next[15] <= ((((((((main_rx_crc_crc_last[7] ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]); + main_rx_crc_crc_next[16] <= ((((((main_rx_crc_crc_last[8] ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[17] <= ((((((main_rx_crc_crc_last[9] ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_data1[6]); + main_rx_crc_crc_next[18] <= ((((((main_rx_crc_crc_last[10] ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]); + main_rx_crc_crc_next[19] <= ((((main_rx_crc_crc_last[11] ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]); + main_rx_crc_crc_next[20] <= ((main_rx_crc_crc_last[12] ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]); + main_rx_crc_crc_next[21] <= ((main_rx_crc_crc_last[13] ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]); + main_rx_crc_crc_next[22] <= ((main_rx_crc_crc_last[14] ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[23] <= ((((((main_rx_crc_crc_last[15] ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_data1[6]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[24] <= ((((((main_rx_crc_crc_last[16] ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_data1[6]); + main_rx_crc_crc_next[25] <= ((((main_rx_crc_crc_last[17] ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]); + main_rx_crc_crc_next[26] <= ((((((((main_rx_crc_crc_last[18] ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]) ^ main_rx_crc_crc_last[24]) ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_data1[7]); + main_rx_crc_crc_next[27] <= ((((((((main_rx_crc_crc_last[19] ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]) ^ main_rx_crc_crc_last[25]) ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_data1[6]); + main_rx_crc_crc_next[28] <= ((((((main_rx_crc_crc_last[20] ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]) ^ main_rx_crc_crc_last[26]) ^ main_rx_crc_crc_data1[5]); + main_rx_crc_crc_next[29] <= ((((((main_rx_crc_crc_last[21] ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_last[30]) ^ main_rx_crc_crc_data1[1]) ^ main_rx_crc_crc_last[27]) ^ main_rx_crc_crc_data1[4]); + main_rx_crc_crc_next[30] <= ((((main_rx_crc_crc_last[22] ^ main_rx_crc_crc_last[31]) ^ main_rx_crc_crc_data1[0]) ^ main_rx_crc_crc_last[28]) ^ main_rx_crc_crc_data1[3]); + main_rx_crc_crc_next[31] <= ((main_rx_crc_crc_last[23] ^ main_rx_crc_crc_last[29]) ^ main_rx_crc_crc_data1[2]); +end +assign main_rx_crc_syncfifo_syncfifo_din = {main_rx_crc_syncfifo_fifo_in_last, main_rx_crc_syncfifo_fifo_in_first, main_rx_crc_syncfifo_fifo_in_payload_error, main_rx_crc_syncfifo_fifo_in_payload_last_be, main_rx_crc_syncfifo_fifo_in_payload_data}; +assign {main_rx_crc_syncfifo_fifo_out_last, main_rx_crc_syncfifo_fifo_out_first, main_rx_crc_syncfifo_fifo_out_payload_error, main_rx_crc_syncfifo_fifo_out_payload_last_be, main_rx_crc_syncfifo_fifo_out_payload_data} = main_rx_crc_syncfifo_syncfifo_dout; +assign main_rx_crc_syncfifo_sink_ready = main_rx_crc_syncfifo_syncfifo_writable; +assign main_rx_crc_syncfifo_syncfifo_we = main_rx_crc_syncfifo_sink_valid; +assign main_rx_crc_syncfifo_fifo_in_first = main_rx_crc_syncfifo_sink_first; +assign main_rx_crc_syncfifo_fifo_in_last = main_rx_crc_syncfifo_sink_last; +assign main_rx_crc_syncfifo_fifo_in_payload_data = main_rx_crc_syncfifo_sink_payload_data; +assign main_rx_crc_syncfifo_fifo_in_payload_last_be = main_rx_crc_syncfifo_sink_payload_last_be; +assign main_rx_crc_syncfifo_fifo_in_payload_error = main_rx_crc_syncfifo_sink_payload_error; +assign main_rx_crc_syncfifo_source_valid = main_rx_crc_syncfifo_syncfifo_readable; +assign main_rx_crc_syncfifo_source_first = main_rx_crc_syncfifo_fifo_out_first; +assign main_rx_crc_syncfifo_source_last = main_rx_crc_syncfifo_fifo_out_last; +assign main_rx_crc_syncfifo_source_payload_data = main_rx_crc_syncfifo_fifo_out_payload_data; +assign main_rx_crc_syncfifo_source_payload_last_be = main_rx_crc_syncfifo_fifo_out_payload_last_be; +assign main_rx_crc_syncfifo_source_payload_error = main_rx_crc_syncfifo_fifo_out_payload_error; +assign main_rx_crc_syncfifo_syncfifo_re = main_rx_crc_syncfifo_source_ready; +always @(*) begin + main_rx_crc_syncfifo_wrport_adr <= 3'd0; + if (main_rx_crc_syncfifo_replace) begin + main_rx_crc_syncfifo_wrport_adr <= (main_rx_crc_syncfifo_produce - 1'd1); + end else begin + main_rx_crc_syncfifo_wrport_adr <= main_rx_crc_syncfifo_produce; + end +end +assign main_rx_crc_syncfifo_wrport_dat_w = main_rx_crc_syncfifo_syncfifo_din; +assign main_rx_crc_syncfifo_wrport_we = (main_rx_crc_syncfifo_syncfifo_we & (main_rx_crc_syncfifo_syncfifo_writable | main_rx_crc_syncfifo_replace)); +assign main_rx_crc_syncfifo_do_read = (main_rx_crc_syncfifo_syncfifo_readable & main_rx_crc_syncfifo_syncfifo_re); +assign main_rx_crc_syncfifo_rdport_adr = main_rx_crc_syncfifo_consume; +assign main_rx_crc_syncfifo_syncfifo_dout = main_rx_crc_syncfifo_rdport_dat_r; +assign main_rx_crc_syncfifo_syncfifo_writable = (main_rx_crc_syncfifo_level != 3'd5); +assign main_rx_crc_syncfifo_syncfifo_readable = (main_rx_crc_syncfifo_level != 1'd0); +always @(*) begin + builder_maccore_rxdatapath_bufferizeendpoints_next_state <= 2'd0; + main_rx_crc_fifo_reset <= 1'd0; + main_rx_crc_source_source_valid <= 1'd0; + main_rx_crc_crc_ce <= 1'd0; + main_rx_crc_last_be_next_value0 <= 1'd0; + main_rx_crc_crc_reset <= 1'd0; + main_rx_crc_source_source_last <= 1'd0; + main_rx_crc_last_be_next_value_ce0 <= 1'd0; + main_rx_crc_source_source_payload_data <= 8'd0; + main_rx_crc_crc_error1_next_value1 <= 1'd0; + main_rx_crc_source_source_payload_last_be <= 1'd0; + main_rx_crc_crc_error1_next_value_ce1 <= 1'd0; + main_rx_crc_source_source_payload_error <= 1'd0; + main_rx_crc_source_source_first <= 1'd0; + main_rx_crc_error <= 1'd0; + main_rx_crc_syncfifo_source_ready <= 1'd0; + builder_maccore_rxdatapath_bufferizeendpoints_next_state <= builder_maccore_rxdatapath_bufferizeendpoints_state; + case (builder_maccore_rxdatapath_bufferizeendpoints_state) + 1'd1: begin + if ((main_rx_crc_sink_sink_valid & main_rx_crc_sink_sink_ready)) begin + main_rx_crc_crc_ce <= 1'd1; + builder_maccore_rxdatapath_bufferizeendpoints_next_state <= 2'd2; + end + end + 2'd2: begin + main_rx_crc_syncfifo_source_ready <= main_rx_crc_fifo_out; + main_rx_crc_source_source_valid <= (main_rx_crc_sink_sink_valid & main_rx_crc_fifo_full); + main_rx_crc_source_source_payload_data <= main_rx_crc_syncfifo_source_payload_data; + main_rx_crc_source_source_payload_last_be <= main_rx_crc_syncfifo_source_payload_last_be; + main_rx_crc_source_source_payload_error <= main_rx_crc_syncfifo_source_payload_error; + if (1'd1) begin + main_rx_crc_source_source_last <= main_rx_crc_sink_sink_last; + main_rx_crc_source_source_payload_last_be <= main_rx_crc_sink_sink_payload_last_be; + end else begin + if ((main_rx_crc_sink_sink_payload_last_be & 4'd15)) begin + main_rx_crc_source_source_last <= main_rx_crc_sink_sink_last; + main_rx_crc_source_source_payload_last_be <= (main_rx_crc_sink_sink_payload_last_be <<< -3'd3); + end else begin + main_rx_crc_last_be_next_value0 <= (main_rx_crc_sink_sink_payload_last_be >>> 3'd4); + main_rx_crc_last_be_next_value_ce0 <= 1'd1; + main_rx_crc_crc_error1_next_value1 <= main_rx_crc_crc_error0; + main_rx_crc_crc_error1_next_value_ce1 <= 1'd1; + end + end + main_rx_crc_source_source_payload_error <= (main_rx_crc_sink_sink_payload_error | {1{(main_rx_crc_crc_error0 & main_rx_crc_sink_sink_last)}}); + main_rx_crc_error <= ((main_rx_crc_sink_sink_valid & main_rx_crc_sink_sink_last) & main_rx_crc_crc_error0); + if ((main_rx_crc_sink_sink_valid & main_rx_crc_sink_sink_ready)) begin + main_rx_crc_crc_ce <= 1'd1; + if ((main_rx_crc_sink_sink_last & (main_rx_crc_sink_sink_payload_last_be > 4'd15))) begin + builder_maccore_rxdatapath_bufferizeendpoints_next_state <= 2'd3; + end else begin + if (main_rx_crc_sink_sink_last) begin + builder_maccore_rxdatapath_bufferizeendpoints_next_state <= 1'd0; + end + end + end + end + 2'd3: begin + main_rx_crc_source_source_valid <= main_rx_crc_syncfifo_source_valid; + main_rx_crc_syncfifo_source_ready <= main_rx_crc_source_source_ready; + main_rx_crc_source_source_first <= main_rx_crc_syncfifo_source_first; + main_rx_crc_source_source_last <= main_rx_crc_syncfifo_source_last; + main_rx_crc_source_source_payload_data <= main_rx_crc_syncfifo_source_payload_data; + main_rx_crc_source_source_payload_last_be <= main_rx_crc_syncfifo_source_payload_last_be; + main_rx_crc_source_source_payload_error <= main_rx_crc_syncfifo_source_payload_error; + main_rx_crc_source_source_payload_error <= (main_rx_crc_syncfifo_source_payload_error | {1{main_rx_crc_crc_error1}}); + main_rx_crc_source_source_payload_last_be <= main_rx_crc_last_be; + if ((main_rx_crc_source_source_valid & main_rx_crc_source_source_ready)) begin + builder_maccore_rxdatapath_bufferizeendpoints_next_state <= 1'd0; + end + end + default: begin + main_rx_crc_crc_reset <= 1'd1; + main_rx_crc_fifo_reset <= 1'd1; + builder_maccore_rxdatapath_bufferizeendpoints_next_state <= 1'd1; + end + endcase +end +assign main_rx_crc_sink_ready = ((~main_rx_crc_source_valid) | main_rx_crc_source_ready); +assign main_pulsesynchronizer1_o = (main_pulsesynchronizer1_toggle_o ^ main_pulsesynchronizer1_toggle_o_r); +assign main_rx_padding_source_valid = main_rx_padding_sink_valid; +assign main_rx_padding_sink_ready = main_rx_padding_source_ready; +assign main_rx_padding_source_first = main_rx_padding_sink_first; +assign main_rx_padding_source_last = main_rx_padding_sink_last; +assign main_rx_padding_source_payload_data = main_rx_padding_sink_payload_data; +assign main_rx_padding_source_payload_last_be = main_rx_padding_sink_payload_last_be; +assign main_rx_padding_source_payload_error = main_rx_padding_sink_payload_error; +assign main_rx_last_be_source_valid = main_rx_last_be_sink_valid; +assign main_rx_last_be_sink_ready = main_rx_last_be_source_ready; +assign main_rx_last_be_source_first = main_rx_last_be_sink_first; +assign main_rx_last_be_source_last = main_rx_last_be_sink_last; +assign main_rx_last_be_source_payload_data = main_rx_last_be_sink_payload_data; +assign main_rx_last_be_source_payload_error = main_rx_last_be_sink_payload_error; +always @(*) begin + main_rx_last_be_source_payload_last_be <= 1'd0; + main_rx_last_be_source_payload_last_be <= main_rx_last_be_sink_payload_last_be; + if (1'd1) begin + main_rx_last_be_source_payload_last_be <= main_rx_last_be_sink_last; + end +end +assign main_rx_converter_converter_sink_valid = main_rx_converter_sink_valid; +assign main_rx_converter_converter_sink_first = main_rx_converter_sink_first; +assign main_rx_converter_converter_sink_last = main_rx_converter_sink_last; +assign main_rx_converter_sink_ready = main_rx_converter_converter_sink_ready; +assign main_rx_converter_converter_sink_payload_data = {main_rx_converter_sink_payload_error, main_rx_converter_sink_payload_last_be, main_rx_converter_sink_payload_data}; +assign main_rx_converter_source_valid = main_rx_converter_source_source_valid; +assign main_rx_converter_source_first = main_rx_converter_source_source_first; +assign main_rx_converter_source_last = main_rx_converter_source_source_last; +assign main_rx_converter_source_source_ready = main_rx_converter_source_ready; +always @(*) begin + main_rx_converter_source_payload_data <= 32'd0; + main_rx_converter_source_payload_data[7:0] <= main_rx_converter_source_source_payload_data[7:0]; + main_rx_converter_source_payload_data[15:8] <= main_rx_converter_source_source_payload_data[17:10]; + main_rx_converter_source_payload_data[23:16] <= main_rx_converter_source_source_payload_data[27:20]; + main_rx_converter_source_payload_data[31:24] <= main_rx_converter_source_source_payload_data[37:30]; +end +always @(*) begin + main_rx_converter_source_payload_last_be <= 4'd0; + main_rx_converter_source_payload_last_be[0] <= main_rx_converter_source_source_payload_data[8]; + main_rx_converter_source_payload_last_be[1] <= main_rx_converter_source_source_payload_data[18]; + main_rx_converter_source_payload_last_be[2] <= main_rx_converter_source_source_payload_data[28]; + main_rx_converter_source_payload_last_be[3] <= main_rx_converter_source_source_payload_data[38]; +end +always @(*) begin + main_rx_converter_source_payload_error <= 4'd0; + main_rx_converter_source_payload_error[0] <= main_rx_converter_source_source_payload_data[9]; + main_rx_converter_source_payload_error[1] <= main_rx_converter_source_source_payload_data[19]; + main_rx_converter_source_payload_error[2] <= main_rx_converter_source_source_payload_data[29]; + main_rx_converter_source_payload_error[3] <= main_rx_converter_source_source_payload_data[39]; +end +assign main_rx_converter_source_source_valid = main_rx_converter_converter_source_valid; +assign main_rx_converter_converter_source_ready = main_rx_converter_source_source_ready; +assign main_rx_converter_source_source_first = main_rx_converter_converter_source_first; +assign main_rx_converter_source_source_last = main_rx_converter_converter_source_last; +assign main_rx_converter_source_source_payload_data = main_rx_converter_converter_source_payload_data; +assign main_rx_converter_converter_sink_ready = ((~main_rx_converter_converter_strobe_all) | main_rx_converter_converter_source_ready); +assign main_rx_converter_converter_source_valid = main_rx_converter_converter_strobe_all; +assign main_rx_converter_converter_load_part = (main_rx_converter_converter_sink_valid & main_rx_converter_converter_sink_ready); +assign main_rx_cdc_cdc_sink_valid = main_rx_cdc_sink_sink_valid; +assign main_rx_cdc_sink_sink_ready = main_rx_cdc_cdc_sink_ready; +assign main_rx_cdc_cdc_sink_first = main_rx_cdc_sink_sink_first; +assign main_rx_cdc_cdc_sink_last = main_rx_cdc_sink_sink_last; +assign main_rx_cdc_cdc_sink_payload_data = main_rx_cdc_sink_sink_payload_data; +assign main_rx_cdc_cdc_sink_payload_last_be = main_rx_cdc_sink_sink_payload_last_be; +assign main_rx_cdc_cdc_sink_payload_error = main_rx_cdc_sink_sink_payload_error; +assign main_rx_cdc_source_source_valid = main_rx_cdc_cdc_source_valid; +assign main_rx_cdc_cdc_source_ready = main_rx_cdc_source_source_ready; +assign main_rx_cdc_source_source_first = main_rx_cdc_cdc_source_first; +assign main_rx_cdc_source_source_last = main_rx_cdc_cdc_source_last; +assign main_rx_cdc_source_source_payload_data = main_rx_cdc_cdc_source_payload_data; +assign main_rx_cdc_source_source_payload_last_be = main_rx_cdc_cdc_source_payload_last_be; +assign main_rx_cdc_source_source_payload_error = main_rx_cdc_cdc_source_payload_error; +assign main_rx_cdc_cdc_asyncfifo_din = {main_rx_cdc_cdc_fifo_in_last, main_rx_cdc_cdc_fifo_in_first, main_rx_cdc_cdc_fifo_in_payload_error, main_rx_cdc_cdc_fifo_in_payload_last_be, main_rx_cdc_cdc_fifo_in_payload_data}; +assign {main_rx_cdc_cdc_fifo_out_last, main_rx_cdc_cdc_fifo_out_first, main_rx_cdc_cdc_fifo_out_payload_error, main_rx_cdc_cdc_fifo_out_payload_last_be, main_rx_cdc_cdc_fifo_out_payload_data} = main_rx_cdc_cdc_asyncfifo_dout; +assign main_rx_cdc_cdc_sink_ready = main_rx_cdc_cdc_asyncfifo_writable; +assign main_rx_cdc_cdc_asyncfifo_we = main_rx_cdc_cdc_sink_valid; +assign main_rx_cdc_cdc_fifo_in_first = main_rx_cdc_cdc_sink_first; +assign main_rx_cdc_cdc_fifo_in_last = main_rx_cdc_cdc_sink_last; +assign main_rx_cdc_cdc_fifo_in_payload_data = main_rx_cdc_cdc_sink_payload_data; +assign main_rx_cdc_cdc_fifo_in_payload_last_be = main_rx_cdc_cdc_sink_payload_last_be; +assign main_rx_cdc_cdc_fifo_in_payload_error = main_rx_cdc_cdc_sink_payload_error; +assign main_rx_cdc_cdc_source_valid = main_rx_cdc_cdc_asyncfifo_readable; +assign main_rx_cdc_cdc_source_first = main_rx_cdc_cdc_fifo_out_first; +assign main_rx_cdc_cdc_source_last = main_rx_cdc_cdc_fifo_out_last; +assign main_rx_cdc_cdc_source_payload_data = main_rx_cdc_cdc_fifo_out_payload_data; +assign main_rx_cdc_cdc_source_payload_last_be = main_rx_cdc_cdc_fifo_out_payload_last_be; +assign main_rx_cdc_cdc_source_payload_error = main_rx_cdc_cdc_fifo_out_payload_error; +assign main_rx_cdc_cdc_asyncfifo_re = main_rx_cdc_cdc_source_ready; +assign main_rx_cdc_cdc_graycounter0_ce = (main_rx_cdc_cdc_asyncfifo_writable & main_rx_cdc_cdc_asyncfifo_we); +assign main_rx_cdc_cdc_graycounter1_ce = (main_rx_cdc_cdc_asyncfifo_readable & main_rx_cdc_cdc_asyncfifo_re); +assign main_rx_cdc_cdc_asyncfifo_writable = (((main_rx_cdc_cdc_graycounter0_q[5] == main_rx_cdc_cdc_consume_wdomain[5]) | (main_rx_cdc_cdc_graycounter0_q[4] == main_rx_cdc_cdc_consume_wdomain[4])) | (main_rx_cdc_cdc_graycounter0_q[3:0] != main_rx_cdc_cdc_consume_wdomain[3:0])); +assign main_rx_cdc_cdc_asyncfifo_readable = (main_rx_cdc_cdc_graycounter1_q != main_rx_cdc_cdc_produce_rdomain); +assign main_rx_cdc_cdc_wrport_adr = main_rx_cdc_cdc_graycounter0_q_binary[4:0]; +assign main_rx_cdc_cdc_wrport_dat_w = main_rx_cdc_cdc_asyncfifo_din; +assign main_rx_cdc_cdc_wrport_we = main_rx_cdc_cdc_graycounter0_ce; +assign main_rx_cdc_cdc_rdport_adr = main_rx_cdc_cdc_graycounter1_q_next_binary[4:0]; +assign main_rx_cdc_cdc_asyncfifo_dout = main_rx_cdc_cdc_rdport_dat_r; +always @(*) begin + main_rx_cdc_cdc_graycounter0_q_next_binary <= 6'd0; + if (main_rx_cdc_cdc_graycounter0_ce) begin + main_rx_cdc_cdc_graycounter0_q_next_binary <= (main_rx_cdc_cdc_graycounter0_q_binary + 1'd1); + end else begin + main_rx_cdc_cdc_graycounter0_q_next_binary <= main_rx_cdc_cdc_graycounter0_q_binary; + end +end +assign main_rx_cdc_cdc_graycounter0_q_next = (main_rx_cdc_cdc_graycounter0_q_next_binary ^ main_rx_cdc_cdc_graycounter0_q_next_binary[5:1]); +always @(*) begin + main_rx_cdc_cdc_graycounter1_q_next_binary <= 6'd0; + if (main_rx_cdc_cdc_graycounter1_ce) begin + main_rx_cdc_cdc_graycounter1_q_next_binary <= (main_rx_cdc_cdc_graycounter1_q_binary + 1'd1); + end else begin + main_rx_cdc_cdc_graycounter1_q_next_binary <= main_rx_cdc_cdc_graycounter1_q_binary; + end +end +assign main_rx_cdc_cdc_graycounter1_q_next = (main_rx_cdc_cdc_graycounter1_q_next_binary ^ main_rx_cdc_cdc_graycounter1_q_next_binary[5:1]); +assign main_rx_preamble_sink_valid = main_maccore_ethphy_source_valid; +assign main_maccore_ethphy_source_ready = main_rx_preamble_sink_ready; +assign main_rx_preamble_sink_first = main_maccore_ethphy_source_first; +assign main_rx_preamble_sink_last = main_maccore_ethphy_source_last; +assign main_rx_preamble_sink_payload_data = main_maccore_ethphy_source_payload_data; +assign main_rx_preamble_sink_payload_last_be = main_maccore_ethphy_source_payload_last_be; +assign main_rx_preamble_sink_payload_error = main_maccore_ethphy_source_payload_error; +assign main_rx_crc_sink_valid = main_rx_preamble_source_valid; +assign main_rx_preamble_source_ready = main_rx_crc_sink_ready; +assign main_rx_crc_sink_first = main_rx_preamble_source_first; +assign main_rx_crc_sink_last = main_rx_preamble_source_last; +assign main_rx_crc_sink_payload_data = main_rx_preamble_source_payload_data; +assign main_rx_crc_sink_payload_last_be = main_rx_preamble_source_payload_last_be; +assign main_rx_crc_sink_payload_error = main_rx_preamble_source_payload_error; +assign main_rx_padding_sink_valid = main_rx_crc_source_source_valid; +assign main_rx_crc_source_source_ready = main_rx_padding_sink_ready; +assign main_rx_padding_sink_first = main_rx_crc_source_source_first; +assign main_rx_padding_sink_last = main_rx_crc_source_source_last; +assign main_rx_padding_sink_payload_data = main_rx_crc_source_source_payload_data; +assign main_rx_padding_sink_payload_last_be = main_rx_crc_source_source_payload_last_be; +assign main_rx_padding_sink_payload_error = main_rx_crc_source_source_payload_error; +assign main_rx_last_be_sink_valid = main_rx_padding_source_valid; +assign main_rx_padding_source_ready = main_rx_last_be_sink_ready; +assign main_rx_last_be_sink_first = main_rx_padding_source_first; +assign main_rx_last_be_sink_last = main_rx_padding_source_last; +assign main_rx_last_be_sink_payload_data = main_rx_padding_source_payload_data; +assign main_rx_last_be_sink_payload_last_be = main_rx_padding_source_payload_last_be; +assign main_rx_last_be_sink_payload_error = main_rx_padding_source_payload_error; +assign main_rx_converter_sink_valid = main_rx_last_be_source_valid; +assign main_rx_last_be_source_ready = main_rx_converter_sink_ready; +assign main_rx_converter_sink_first = main_rx_last_be_source_first; +assign main_rx_converter_sink_last = main_rx_last_be_source_last; +assign main_rx_converter_sink_payload_data = main_rx_last_be_source_payload_data; +assign main_rx_converter_sink_payload_last_be = main_rx_last_be_source_payload_last_be; +assign main_rx_converter_sink_payload_error = main_rx_last_be_source_payload_error; +assign main_rx_cdc_sink_sink_valid = main_rx_converter_source_valid; +assign main_rx_converter_source_ready = main_rx_cdc_sink_sink_ready; +assign main_rx_cdc_sink_sink_first = main_rx_converter_source_first; +assign main_rx_cdc_sink_sink_last = main_rx_converter_source_last; +assign main_rx_cdc_sink_sink_payload_data = main_rx_converter_source_payload_data; +assign main_rx_cdc_sink_sink_payload_last_be = main_rx_converter_source_payload_last_be; +assign main_rx_cdc_sink_sink_payload_error = main_rx_converter_source_payload_error; +assign main_source_valid = main_rx_cdc_source_source_valid; +assign main_rx_cdc_source_source_ready = main_source_ready; +assign main_source_first = main_rx_cdc_source_source_first; +assign main_source_last = main_rx_cdc_source_source_last; +assign main_source_payload_data = main_rx_cdc_source_source_payload_data; +assign main_source_payload_last_be = main_rx_cdc_source_source_payload_last_be; +assign main_source_payload_error = main_rx_cdc_source_source_payload_error; +assign main_sram0_sink_valid = main_sink_sink_valid; +assign main_sink_sink_ready = main_sram1_sink_ready; +assign main_sram2_sink_first = main_sink_sink_first; +assign main_sram3_sink_last = main_sink_sink_last; +assign main_sram4_sink_payload_data = main_sink_sink_payload_data; +assign main_sram5_sink_payload_last_be = main_sink_sink_payload_last_be; +assign main_sram6_sink_payload_error = main_sink_sink_payload_error; +assign main_source_source_valid = main_sram83_source_valid; +assign main_sram84_source_ready = main_source_source_ready; +assign main_source_source_first = main_sram85_source_first; +assign main_source_source_last = main_sram86_source_last; +assign main_source_source_payload_data = main_sram87_source_payload_data; +assign main_source_source_payload_last_be = main_sram88_source_payload_last_be; +assign main_source_source_payload_error = main_sram89_source_payload_error; +always @(*) begin + main_length_inc <= 4'd0; + case (main_sram5_sink_payload_last_be) + 1'd1: begin + main_length_inc <= 1'd1; + end + 2'd2: begin + main_length_inc <= 2'd2; + end + 3'd4: begin + main_length_inc <= 2'd3; + end + 4'd8: begin + main_length_inc <= 3'd4; + end + 5'd16: begin + main_length_inc <= 3'd5; + end + 6'd32: begin + main_length_inc <= 3'd6; + end + 7'd64: begin + main_length_inc <= 3'd7; + end + default: begin + main_length_inc <= 3'd4; + end + endcase +end +assign main_sram44_source_ready = main_sram20_clear; +assign main_sram19_trigger = main_sram43_source_valid; +assign main_sram7_status = main_sram47_source_payload_slot; +assign main_sram10_status = main_sram48_source_payload_length; +assign main_wr_data = main_sram4_sink_payload_data; +always @(*) begin + main_sram79_adr <= 9'd0; + main_sram81_we <= 1'd0; + main_sram75_adr <= 9'd0; + main_sram82_dat_w <= 32'd0; + main_sram77_we <= 1'd0; + main_sram78_dat_w <= 32'd0; + case (main_slot) + 1'd0: begin + main_sram75_adr <= main_sram35_length[10:2]; + main_sram78_dat_w <= main_wr_data; + if ((main_sram0_sink_valid & main_write)) begin + main_sram77_we <= 1'd1; + end + end + 1'd1: begin + main_sram79_adr <= main_sram35_length[10:2]; + main_sram82_dat_w <= main_wr_data; + if ((main_sram0_sink_valid & main_write)) begin + main_sram81_we <= 1'd1; + end + end + endcase +end +assign main_sram21_available = main_sram17_status; +assign main_sram25_available = main_sram18_pending; +always @(*) begin + main_sram20_clear <= 1'd0; + if ((main_sram28_re & main_sram29_r)) begin + main_sram20_clear <= 1'd1; + end +end +assign main_sram16_irq = (main_sram26_status & main_sram31_storage); +assign main_sram17_status = main_sram19_trigger; +assign main_sram18_pending = main_sram19_trigger; +assign main_sram53_din = {main_sram69_fifo_in_last, main_sram68_fifo_in_first, main_sram67_fifo_in_payload_length, main_sram66_fifo_in_payload_slot}; +assign {main_sram73_fifo_out_last, main_sram72_fifo_out_first, main_sram71_fifo_out_payload_length, main_sram70_fifo_out_payload_slot} = main_sram54_dout; +assign main_sram38_sink_ready = main_sram50_writable; +assign main_sram49_we = main_sram37_sink_valid; +assign main_sram68_fifo_in_first = main_sram39_sink_first; +assign main_sram69_fifo_in_last = main_sram40_sink_last; +assign main_sram66_fifo_in_payload_slot = main_sram41_sink_payload_slot; +assign main_sram67_fifo_in_payload_length = main_sram42_sink_payload_length; +assign main_sram43_source_valid = main_sram52_readable; +assign main_sram45_source_first = main_sram72_fifo_out_first; +assign main_sram46_source_last = main_sram73_fifo_out_last; +assign main_sram47_source_payload_slot = main_sram70_fifo_out_payload_slot; +assign main_sram48_source_payload_length = main_sram71_fifo_out_payload_length; +assign main_sram51_re = main_sram44_source_ready; +always @(*) begin + main_sram59_adr <= 1'd0; + if (main_sram56_replace) begin + main_sram59_adr <= (main_sram57_produce - 1'd1); + end else begin + main_sram59_adr <= main_sram57_produce; + end +end +assign main_sram62_dat_w = main_sram53_din; +assign main_sram61_we = (main_sram49_we & (main_sram50_writable | main_sram56_replace)); +assign main_sram63_do_read = (main_sram52_readable & main_sram51_re); +assign main_sram64_adr = main_sram58_consume; +assign main_sram54_dout = main_sram65_dat_r; +assign main_sram50_writable = (main_sram55_level != 2'd2); +assign main_sram52_readable = (main_sram55_level != 1'd0); +always @(*) begin + main_write <= 1'd0; + main_sram41_sink_payload_slot <= 1'd0; + main_sram42_sink_payload_length <= 11'd0; + main_slot_liteethmacsramwriter_next_value <= 1'd0; + main_slot_liteethmacsramwriter_next_value_ce <= 1'd0; + builder_maccore_liteethmacsramwriter_next_state <= 2'd0; + main_sram35_length_liteethmacsramwriter_t_next_value <= 11'd0; + main_sram35_length_liteethmacsramwriter_t_next_value_ce <= 1'd0; + main_sram37_sink_valid <= 1'd0; + main_sram13_status_liteethmacsramwriter_f_next_value <= 32'd0; + main_sram13_status_liteethmacsramwriter_f_next_value_ce <= 1'd0; + builder_maccore_liteethmacsramwriter_next_state <= builder_maccore_liteethmacsramwriter_state; + case (builder_maccore_liteethmacsramwriter_state) + 1'd1: begin + if ((main_sram0_sink_valid & main_sram3_sink_last)) begin + if (((main_sram6_sink_payload_error & main_sram5_sink_payload_last_be) != 1'd0)) begin + builder_maccore_liteethmacsramwriter_next_state <= 2'd2; + end else begin + builder_maccore_liteethmacsramwriter_next_state <= 2'd3; + end + end + end + 2'd2: begin + main_sram35_length_liteethmacsramwriter_t_next_value <= 1'd0; + main_sram35_length_liteethmacsramwriter_t_next_value_ce <= 1'd1; + builder_maccore_liteethmacsramwriter_next_state <= 1'd0; + end + 2'd3: begin + main_sram37_sink_valid <= 1'd1; + main_sram41_sink_payload_slot <= main_slot; + main_sram42_sink_payload_length <= main_sram35_length; + main_sram35_length_liteethmacsramwriter_t_next_value <= 1'd0; + main_sram35_length_liteethmacsramwriter_t_next_value_ce <= 1'd1; + main_slot_liteethmacsramwriter_next_value <= (main_slot + 1'd1); + main_slot_liteethmacsramwriter_next_value_ce <= 1'd1; + builder_maccore_liteethmacsramwriter_next_state <= 1'd0; + end + default: begin + if (main_sram0_sink_valid) begin + if (main_sram38_sink_ready) begin + main_write <= 1'd1; + main_sram35_length_liteethmacsramwriter_t_next_value <= (main_sram35_length + main_length_inc); + main_sram35_length_liteethmacsramwriter_t_next_value_ce <= 1'd1; + if ((main_sram35_length >= 11'd1530)) begin + builder_maccore_liteethmacsramwriter_next_state <= 1'd1; + end + if (main_sram3_sink_last) begin + if (((main_sram6_sink_payload_error & main_sram5_sink_payload_last_be) != 1'd0)) begin + builder_maccore_liteethmacsramwriter_next_state <= 2'd2; + end else begin + builder_maccore_liteethmacsramwriter_next_state <= 2'd3; + end + end + end else begin + main_sram13_status_liteethmacsramwriter_f_next_value <= (main_sram13_status + 1'd1); + main_sram13_status_liteethmacsramwriter_f_next_value_ce <= 1'd1; + builder_maccore_liteethmacsramwriter_next_state <= 1'd1; + end + end + end + endcase +end +assign main_sram123_sink_valid = main_start_re; +assign main_sram127_sink_payload_slot = main_sram100_storage; +assign main_sram128_sink_payload_length = main_sram102_storage; +assign main_sram94_status = main_sram124_sink_ready; +assign main_sram97_status = main_sram141_level; +always @(*) begin + main_sram88_source_payload_last_be <= 4'd0; + if (main_sram86_source_last) begin + case (main_sram134_source_payload_length[1:0]) + 1'd1: begin + main_sram88_source_payload_last_be <= 1'd1; + end + 2'd2: begin + main_sram88_source_payload_last_be <= 2'd2; + end + 2'd3: begin + main_sram88_source_payload_last_be <= 3'd4; + end + 3'd4: begin + main_sram88_source_payload_last_be <= 4'd8; + end + 3'd5: begin + main_sram88_source_payload_last_be <= 5'd16; + end + 3'd6: begin + main_sram88_source_payload_last_be <= 6'd32; + end + 3'd7: begin + main_sram88_source_payload_last_be <= 7'd64; + end + default: begin + main_sram88_source_payload_last_be <= 4'd8; + end + endcase + end +end +assign main_sram163_re = main_read; +assign main_sram161_adr = main_sram122_length[10:2]; +assign main_sram166_re = main_read; +assign main_sram164_adr = main_sram122_length[10:2]; +always @(*) begin + main_rd_data <= 32'd0; + case (main_sram133_source_payload_slot) + 1'd0: begin + main_rd_data <= main_sram162_dat_r; + end + 1'd1: begin + main_rd_data <= main_sram165_dat_r; + end + endcase +end +assign main_sram87_source_payload_data = main_rd_data; +assign main_sram109_event0 = main_sram105_status; +assign main_sram113_event0 = main_sram106_pending; +always @(*) begin + main_sram108_clear <= 1'd0; + if ((main_sram116_re & main_sram117_r)) begin + main_sram108_clear <= 1'd1; + end +end +assign main_sram104_irq = (main_sram114_status & main_sram119_storage); +assign main_sram105_status = 1'd0; +assign main_sram139_din = {main_sram155_fifo_in_last, main_sram154_fifo_in_first, main_sram153_fifo_in_payload_length, main_sram152_fifo_in_payload_slot}; +assign {main_sram159_fifo_out_last, main_sram158_fifo_out_first, main_sram157_fifo_out_payload_length, main_sram156_fifo_out_payload_slot} = main_sram140_dout; +assign main_sram124_sink_ready = main_sram136_writable; +assign main_sram135_we = main_sram123_sink_valid; +assign main_sram154_fifo_in_first = main_sram125_sink_first; +assign main_sram155_fifo_in_last = main_sram126_sink_last; +assign main_sram152_fifo_in_payload_slot = main_sram127_sink_payload_slot; +assign main_sram153_fifo_in_payload_length = main_sram128_sink_payload_length; +assign main_sram129_source_valid = main_sram138_readable; +assign main_sram131_source_first = main_sram158_fifo_out_first; +assign main_sram132_source_last = main_sram159_fifo_out_last; +assign main_sram133_source_payload_slot = main_sram156_fifo_out_payload_slot; +assign main_sram134_source_payload_length = main_sram157_fifo_out_payload_length; +assign main_sram137_re = main_sram130_source_ready; +always @(*) begin + main_sram145_adr <= 1'd0; + if (main_sram142_replace) begin + main_sram145_adr <= (main_sram143_produce - 1'd1); + end else begin + main_sram145_adr <= main_sram143_produce; + end +end +assign main_sram148_dat_w = main_sram139_din; +assign main_sram147_we = (main_sram135_we & (main_sram136_writable | main_sram142_replace)); +assign main_sram149_do_read = (main_sram138_readable & main_sram137_re); +assign main_sram150_adr = main_sram144_consume; +assign main_sram140_dout = main_sram151_dat_r; +assign main_sram136_writable = (main_sram141_level != 2'd2); +assign main_sram138_readable = (main_sram141_level != 1'd0); +always @(*) begin + main_sram122_length_liteethmacsramreader_next_value_ce <= 1'd0; + main_sram130_source_ready <= 1'd0; + main_sram86_source_last <= 1'd0; + main_sram107_trigger <= 1'd0; + main_sram83_source_valid <= 1'd0; + main_read <= 1'd0; + builder_maccore_liteethmacsramreader_next_state <= 2'd0; + main_sram122_length_liteethmacsramreader_next_value <= 11'd0; + builder_maccore_liteethmacsramreader_next_state <= builder_maccore_liteethmacsramreader_state; + case (builder_maccore_liteethmacsramreader_state) + 1'd1: begin + main_sram83_source_valid <= 1'd1; + main_sram86_source_last <= (main_sram122_length >= main_sram134_source_payload_length); + if (main_sram84_source_ready) begin + main_read <= 1'd1; + main_sram122_length_liteethmacsramreader_next_value <= (main_sram122_length + 3'd4); + main_sram122_length_liteethmacsramreader_next_value_ce <= 1'd1; + if (main_sram86_source_last) begin + builder_maccore_liteethmacsramreader_next_state <= 2'd2; + end + end + end + 2'd2: begin + main_sram122_length_liteethmacsramreader_next_value <= 1'd0; + main_sram122_length_liteethmacsramreader_next_value_ce <= 1'd1; + main_sram107_trigger <= 1'd1; + main_sram130_source_ready <= 1'd1; + builder_maccore_liteethmacsramreader_next_state <= 1'd0; + end + default: begin + if (main_sram129_source_valid) begin + main_read <= 1'd1; + main_sram122_length_liteethmacsramreader_next_value <= 3'd4; + main_sram122_length_liteethmacsramreader_next_value_ce <= 1'd1; + builder_maccore_liteethmacsramreader_next_state <= 1'd1; + end + end + endcase +end +assign main_sram167_irq = (main_sram16_irq | main_sram104_irq); +assign main_sram0_adr = main_interface0_adr[8:0]; +assign main_interface0_dat_r = main_sram0_dat_r; +assign main_sram1_adr = main_interface1_adr[8:0]; +assign main_interface1_dat_r = main_sram1_dat_r; +always @(*) begin + main_sram2_we <= 4'd0; + main_sram2_we[0] <= (((main_interface2_cyc & main_interface2_stb) & main_interface2_we) & main_interface2_sel[0]); + main_sram2_we[1] <= (((main_interface2_cyc & main_interface2_stb) & main_interface2_we) & main_interface2_sel[1]); + main_sram2_we[2] <= (((main_interface2_cyc & main_interface2_stb) & main_interface2_we) & main_interface2_sel[2]); + main_sram2_we[3] <= (((main_interface2_cyc & main_interface2_stb) & main_interface2_we) & main_interface2_sel[3]); +end +assign main_sram2_adr = main_interface2_adr[8:0]; +assign main_interface2_dat_r = main_sram2_dat_r; +assign main_sram2_dat_w = main_interface2_dat_w; +always @(*) begin + main_sram3_we <= 4'd0; + main_sram3_we[0] <= (((main_interface3_cyc & main_interface3_stb) & main_interface3_we) & main_interface3_sel[0]); + main_sram3_we[1] <= (((main_interface3_cyc & main_interface3_stb) & main_interface3_we) & main_interface3_sel[1]); + main_sram3_we[2] <= (((main_interface3_cyc & main_interface3_stb) & main_interface3_we) & main_interface3_sel[2]); + main_sram3_we[3] <= (((main_interface3_cyc & main_interface3_stb) & main_interface3_we) & main_interface3_sel[3]); +end +assign main_sram3_adr = main_interface3_adr[8:0]; +assign main_interface3_dat_r = main_sram3_dat_r; +assign main_sram3_dat_w = main_interface3_dat_w; +always @(*) begin + main_slave_sel <= 4'd0; + main_slave_sel[0] <= (main_bus_adr[10:9] == 1'd0); + main_slave_sel[1] <= (main_bus_adr[10:9] == 1'd1); + main_slave_sel[2] <= (main_bus_adr[10:9] == 2'd2); + main_slave_sel[3] <= (main_bus_adr[10:9] == 2'd3); +end +assign main_interface0_adr = main_bus_adr; +assign main_interface0_dat_w = main_bus_dat_w; +assign main_interface0_sel = main_bus_sel; +assign main_interface0_stb = main_bus_stb; +assign main_interface0_we = main_bus_we; +assign main_interface0_cti = main_bus_cti; +assign main_interface0_bte = main_bus_bte; +assign main_interface1_adr = main_bus_adr; +assign main_interface1_dat_w = main_bus_dat_w; +assign main_interface1_sel = main_bus_sel; +assign main_interface1_stb = main_bus_stb; +assign main_interface1_we = main_bus_we; +assign main_interface1_cti = main_bus_cti; +assign main_interface1_bte = main_bus_bte; +assign main_interface2_adr = main_bus_adr; +assign main_interface2_dat_w = main_bus_dat_w; +assign main_interface2_sel = main_bus_sel; +assign main_interface2_stb = main_bus_stb; +assign main_interface2_we = main_bus_we; +assign main_interface2_cti = main_bus_cti; +assign main_interface2_bte = main_bus_bte; +assign main_interface3_adr = main_bus_adr; +assign main_interface3_dat_w = main_bus_dat_w; +assign main_interface3_sel = main_bus_sel; +assign main_interface3_stb = main_bus_stb; +assign main_interface3_we = main_bus_we; +assign main_interface3_cti = main_bus_cti; +assign main_interface3_bte = main_bus_bte; +assign main_interface0_cyc = (main_bus_cyc & main_slave_sel[0]); +assign main_interface1_cyc = (main_bus_cyc & main_slave_sel[1]); +assign main_interface2_cyc = (main_bus_cyc & main_slave_sel[2]); +assign main_interface3_cyc = (main_bus_cyc & main_slave_sel[3]); +assign main_bus_ack = (((main_interface0_ack | main_interface1_ack) | main_interface2_ack) | main_interface3_ack); +assign main_bus_err = (((main_interface0_err | main_interface1_err) | main_interface2_err) | main_interface3_err); +assign main_bus_dat_r = (((({32{main_slave_sel_r[0]}} & main_interface0_dat_r) | ({32{main_slave_sel_r[1]}} & main_interface1_dat_r)) | ({32{main_slave_sel_r[2]}} & main_interface2_dat_r)) | ({32{main_slave_sel_r[3]}} & main_interface3_dat_r)); +always @(*) begin + builder_maccore_adr <= 14'd0; + builder_maccore_we <= 1'd0; + builder_maccore_next_state <= 1'd0; + builder_maccore_dat_w <= 32'd0; + builder_maccore_wishbone_ack <= 1'd0; + builder_maccore_wishbone_dat_r <= 32'd0; + builder_maccore_next_state <= builder_maccore_state; + case (builder_maccore_state) + 1'd1: begin + builder_maccore_wishbone_ack <= 1'd1; + builder_maccore_wishbone_dat_r <= builder_maccore_dat_r; + builder_maccore_next_state <= 1'd0; + end + default: begin + builder_maccore_dat_w <= builder_maccore_wishbone_dat_w; + if ((builder_maccore_wishbone_cyc & builder_maccore_wishbone_stb)) begin + builder_maccore_adr <= builder_maccore_wishbone_adr; + builder_maccore_we <= (builder_maccore_wishbone_we & (builder_maccore_wishbone_sel != 1'd0)); + builder_maccore_next_state <= 1'd1; + end + end + endcase +end +assign builder_shared_adr = builder_array_muxed0; +assign builder_shared_dat_w = builder_array_muxed1; +assign builder_shared_sel = builder_array_muxed2; +assign builder_shared_cyc = builder_array_muxed3; +assign builder_shared_stb = builder_array_muxed4; +assign builder_shared_we = builder_array_muxed5; +assign builder_shared_cti = builder_array_muxed6; +assign builder_shared_bte = builder_array_muxed7; +assign main_wb_bus_dat_r = builder_shared_dat_r; +assign main_wb_bus_ack = (builder_shared_ack & (builder_grant == 1'd0)); +assign main_wb_bus_err = (builder_shared_err & (builder_grant == 1'd0)); +assign builder_request = {main_wb_bus_cyc}; +assign builder_grant = 1'd0; +always @(*) begin + builder_slave_sel <= 2'd0; + builder_slave_sel[0] <= (builder_shared_adr[29:11] == 5'd16); + builder_slave_sel[1] <= (builder_shared_adr[29:14] == 1'd0); +end +assign main_bus_adr = builder_shared_adr; +assign main_bus_dat_w = builder_shared_dat_w; +assign main_bus_sel = builder_shared_sel; +assign main_bus_stb = builder_shared_stb; +assign main_bus_we = builder_shared_we; +assign main_bus_cti = builder_shared_cti; +assign main_bus_bte = builder_shared_bte; +assign builder_maccore_wishbone_adr = builder_shared_adr; +assign builder_maccore_wishbone_dat_w = builder_shared_dat_w; +assign builder_maccore_wishbone_sel = builder_shared_sel; +assign builder_maccore_wishbone_stb = builder_shared_stb; +assign builder_maccore_wishbone_we = builder_shared_we; +assign builder_maccore_wishbone_cti = builder_shared_cti; +assign builder_maccore_wishbone_bte = builder_shared_bte; +assign main_bus_cyc = (builder_shared_cyc & builder_slave_sel[0]); +assign builder_maccore_wishbone_cyc = (builder_shared_cyc & builder_slave_sel[1]); +assign builder_shared_err = (main_bus_err | builder_maccore_wishbone_err); +assign builder_wait = ((builder_shared_stb & builder_shared_cyc) & (~builder_shared_ack)); +always @(*) begin + builder_shared_dat_r <= 32'd0; + builder_shared_ack <= 1'd0; + builder_error <= 1'd0; + builder_shared_ack <= (main_bus_ack | builder_maccore_wishbone_ack); + builder_shared_dat_r <= (({32{builder_slave_sel_r[0]}} & main_bus_dat_r) | ({32{builder_slave_sel_r[1]}} & builder_maccore_wishbone_dat_r)); + if (builder_done) begin + builder_shared_dat_r <= 32'd4294967295; + builder_shared_ack <= 1'd1; + builder_error <= 1'd1; + end +end +assign builder_done = (builder_count == 1'd0); +assign builder_csrbank0_sel = (builder_interface0_bank_bus_adr[13:9] == 1'd0); +assign builder_csrbank0_reset0_r = builder_interface0_bank_bus_dat_w[1:0]; +always @(*) begin + builder_csrbank0_reset0_re <= 1'd0; + builder_csrbank0_reset0_we <= 1'd0; + if ((builder_csrbank0_sel & (builder_interface0_bank_bus_adr[8:0] == 1'd0))) begin + builder_csrbank0_reset0_re <= builder_interface0_bank_bus_we; + builder_csrbank0_reset0_we <= (~builder_interface0_bank_bus_we); + end +end +assign builder_csrbank0_scratch0_r = builder_interface0_bank_bus_dat_w[31:0]; +always @(*) begin + builder_csrbank0_scratch0_we <= 1'd0; + builder_csrbank0_scratch0_re <= 1'd0; + if ((builder_csrbank0_sel & (builder_interface0_bank_bus_adr[8:0] == 1'd1))) begin + builder_csrbank0_scratch0_re <= builder_interface0_bank_bus_we; + builder_csrbank0_scratch0_we <= (~builder_interface0_bank_bus_we); + end +end +assign builder_csrbank0_bus_errors_r = builder_interface0_bank_bus_dat_w[31:0]; +always @(*) begin + builder_csrbank0_bus_errors_re <= 1'd0; + builder_csrbank0_bus_errors_we <= 1'd0; + if ((builder_csrbank0_sel & (builder_interface0_bank_bus_adr[8:0] == 2'd2))) begin + builder_csrbank0_bus_errors_re <= builder_interface0_bank_bus_we; + builder_csrbank0_bus_errors_we <= (~builder_interface0_bank_bus_we); + end +end +always @(*) begin + main_maccore_maccore_soc_rst <= 1'd0; + if (main_maccore_maccore_reset_re) begin + main_maccore_maccore_soc_rst <= main_maccore_maccore_reset_storage[0]; + end +end +assign main_maccore_maccore_cpu_rst = main_maccore_maccore_reset_storage[1]; +assign builder_csrbank0_reset0_w = main_maccore_maccore_reset_storage[1:0]; +assign builder_csrbank0_scratch0_w = main_maccore_maccore_scratch_storage[31:0]; +assign builder_csrbank0_bus_errors_w = main_maccore_maccore_bus_errors_status[31:0]; +assign main_maccore_maccore_bus_errors_we = builder_csrbank0_bus_errors_we; +assign builder_csrbank1_sel = (builder_interface1_bank_bus_adr[13:9] == 1'd1); +assign builder_csrbank1_sram_writer_slot_r = builder_interface1_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank1_sram_writer_slot_we <= 1'd0; + builder_csrbank1_sram_writer_slot_re <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 1'd0))) begin + builder_csrbank1_sram_writer_slot_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_writer_slot_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_writer_length_r = builder_interface1_bank_bus_dat_w[10:0]; +always @(*) begin + builder_csrbank1_sram_writer_length_re <= 1'd0; + builder_csrbank1_sram_writer_length_we <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 1'd1))) begin + builder_csrbank1_sram_writer_length_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_writer_length_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_writer_errors_r = builder_interface1_bank_bus_dat_w[31:0]; +always @(*) begin + builder_csrbank1_sram_writer_errors_re <= 1'd0; + builder_csrbank1_sram_writer_errors_we <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 2'd2))) begin + builder_csrbank1_sram_writer_errors_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_writer_errors_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_writer_ev_status_r = builder_interface1_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank1_sram_writer_ev_status_we <= 1'd0; + builder_csrbank1_sram_writer_ev_status_re <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 2'd3))) begin + builder_csrbank1_sram_writer_ev_status_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_writer_ev_status_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_writer_ev_pending_r = builder_interface1_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank1_sram_writer_ev_pending_we <= 1'd0; + builder_csrbank1_sram_writer_ev_pending_re <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 3'd4))) begin + builder_csrbank1_sram_writer_ev_pending_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_writer_ev_pending_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_writer_ev_enable0_r = builder_interface1_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank1_sram_writer_ev_enable0_re <= 1'd0; + builder_csrbank1_sram_writer_ev_enable0_we <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 3'd5))) begin + builder_csrbank1_sram_writer_ev_enable0_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_writer_ev_enable0_we <= (~builder_interface1_bank_bus_we); + end +end +assign main_start_r = builder_interface1_bank_bus_dat_w[0]; +always @(*) begin + main_start_we <= 1'd0; + main_start_re <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 3'd6))) begin + main_start_re <= builder_interface1_bank_bus_we; + main_start_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_reader_ready_r = builder_interface1_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank1_sram_reader_ready_we <= 1'd0; + builder_csrbank1_sram_reader_ready_re <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 3'd7))) begin + builder_csrbank1_sram_reader_ready_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_reader_ready_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_reader_level_r = builder_interface1_bank_bus_dat_w[1:0]; +always @(*) begin + builder_csrbank1_sram_reader_level_we <= 1'd0; + builder_csrbank1_sram_reader_level_re <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 4'd8))) begin + builder_csrbank1_sram_reader_level_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_reader_level_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_reader_slot0_r = builder_interface1_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank1_sram_reader_slot0_re <= 1'd0; + builder_csrbank1_sram_reader_slot0_we <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 4'd9))) begin + builder_csrbank1_sram_reader_slot0_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_reader_slot0_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_reader_length0_r = builder_interface1_bank_bus_dat_w[10:0]; +always @(*) begin + builder_csrbank1_sram_reader_length0_we <= 1'd0; + builder_csrbank1_sram_reader_length0_re <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 4'd10))) begin + builder_csrbank1_sram_reader_length0_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_reader_length0_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_reader_ev_status_r = builder_interface1_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank1_sram_reader_ev_status_we <= 1'd0; + builder_csrbank1_sram_reader_ev_status_re <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 4'd11))) begin + builder_csrbank1_sram_reader_ev_status_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_reader_ev_status_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_reader_ev_pending_r = builder_interface1_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank1_sram_reader_ev_pending_re <= 1'd0; + builder_csrbank1_sram_reader_ev_pending_we <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 4'd12))) begin + builder_csrbank1_sram_reader_ev_pending_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_reader_ev_pending_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_reader_ev_enable0_r = builder_interface1_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank1_sram_reader_ev_enable0_we <= 1'd0; + builder_csrbank1_sram_reader_ev_enable0_re <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 4'd13))) begin + builder_csrbank1_sram_reader_ev_enable0_re <= builder_interface1_bank_bus_we; + builder_csrbank1_sram_reader_ev_enable0_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_preamble_crc_r = builder_interface1_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank1_preamble_crc_we <= 1'd0; + builder_csrbank1_preamble_crc_re <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 4'd14))) begin + builder_csrbank1_preamble_crc_re <= builder_interface1_bank_bus_we; + builder_csrbank1_preamble_crc_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_rx_datapath_preamble_errors_r = builder_interface1_bank_bus_dat_w[31:0]; +always @(*) begin + builder_csrbank1_rx_datapath_preamble_errors_re <= 1'd0; + builder_csrbank1_rx_datapath_preamble_errors_we <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 4'd15))) begin + builder_csrbank1_rx_datapath_preamble_errors_re <= builder_interface1_bank_bus_we; + builder_csrbank1_rx_datapath_preamble_errors_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_rx_datapath_crc_errors_r = builder_interface1_bank_bus_dat_w[31:0]; +always @(*) begin + builder_csrbank1_rx_datapath_crc_errors_re <= 1'd0; + builder_csrbank1_rx_datapath_crc_errors_we <= 1'd0; + if ((builder_csrbank1_sel & (builder_interface1_bank_bus_adr[8:0] == 5'd16))) begin + builder_csrbank1_rx_datapath_crc_errors_re <= builder_interface1_bank_bus_we; + builder_csrbank1_rx_datapath_crc_errors_we <= (~builder_interface1_bank_bus_we); + end +end +assign builder_csrbank1_sram_writer_slot_w = main_sram7_status; +assign main_sram8_we = builder_csrbank1_sram_writer_slot_we; +assign builder_csrbank1_sram_writer_length_w = main_sram10_status[10:0]; +assign main_sram11_we = builder_csrbank1_sram_writer_length_we; +assign builder_csrbank1_sram_writer_errors_w = main_sram13_status[31:0]; +assign main_sram14_we = builder_csrbank1_sram_writer_errors_we; +assign main_sram22_status = main_sram21_available; +assign builder_csrbank1_sram_writer_ev_status_w = main_sram22_status; +assign main_sram23_we = builder_csrbank1_sram_writer_ev_status_we; +assign main_sram26_status = main_sram25_available; +assign builder_csrbank1_sram_writer_ev_pending_w = main_sram26_status; +assign main_sram27_we = builder_csrbank1_sram_writer_ev_pending_we; +assign main_sram30_available = main_sram31_storage; +assign builder_csrbank1_sram_writer_ev_enable0_w = main_sram31_storage; +assign builder_csrbank1_sram_reader_ready_w = main_sram94_status; +assign main_sram95_we = builder_csrbank1_sram_reader_ready_we; +assign builder_csrbank1_sram_reader_level_w = main_sram97_status[1:0]; +assign main_sram98_we = builder_csrbank1_sram_reader_level_we; +assign builder_csrbank1_sram_reader_slot0_w = main_sram100_storage; +assign builder_csrbank1_sram_reader_length0_w = main_sram102_storage[10:0]; +assign main_sram110_status = main_sram109_event0; +assign builder_csrbank1_sram_reader_ev_status_w = main_sram110_status; +assign main_sram111_we = builder_csrbank1_sram_reader_ev_status_we; +assign main_sram114_status = main_sram113_event0; +assign builder_csrbank1_sram_reader_ev_pending_w = main_sram114_status; +assign main_sram115_we = builder_csrbank1_sram_reader_ev_pending_we; +assign main_sram118_event0 = main_sram119_storage; +assign builder_csrbank1_sram_reader_ev_enable0_w = main_sram119_storage; +assign builder_csrbank1_preamble_crc_w = main_status; +assign main_we = builder_csrbank1_preamble_crc_we; +assign builder_csrbank1_rx_datapath_preamble_errors_w = main_preamble_errors_status[31:0]; +assign main_preamble_errors_we = builder_csrbank1_rx_datapath_preamble_errors_we; +assign builder_csrbank1_rx_datapath_crc_errors_w = main_crc_errors_status[31:0]; +assign main_crc_errors_we = builder_csrbank1_rx_datapath_crc_errors_we; +assign builder_csrbank2_sel = (builder_interface2_bank_bus_adr[13:9] == 2'd2); +assign builder_csrbank2_crg_reset0_r = builder_interface2_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank2_crg_reset0_re <= 1'd0; + builder_csrbank2_crg_reset0_we <= 1'd0; + if ((builder_csrbank2_sel & (builder_interface2_bank_bus_adr[8:0] == 1'd0))) begin + builder_csrbank2_crg_reset0_re <= builder_interface2_bank_bus_we; + builder_csrbank2_crg_reset0_we <= (~builder_interface2_bank_bus_we); + end +end +assign builder_csrbank2_rx_inband_status_r = builder_interface2_bank_bus_dat_w[2:0]; +always @(*) begin + builder_csrbank2_rx_inband_status_we <= 1'd0; + builder_csrbank2_rx_inband_status_re <= 1'd0; + if ((builder_csrbank2_sel & (builder_interface2_bank_bus_adr[8:0] == 1'd1))) begin + builder_csrbank2_rx_inband_status_re <= builder_interface2_bank_bus_we; + builder_csrbank2_rx_inband_status_we <= (~builder_interface2_bank_bus_we); + end +end +assign builder_csrbank2_mdio_w0_r = builder_interface2_bank_bus_dat_w[2:0]; +always @(*) begin + builder_csrbank2_mdio_w0_re <= 1'd0; + builder_csrbank2_mdio_w0_we <= 1'd0; + if ((builder_csrbank2_sel & (builder_interface2_bank_bus_adr[8:0] == 2'd2))) begin + builder_csrbank2_mdio_w0_re <= builder_interface2_bank_bus_we; + builder_csrbank2_mdio_w0_we <= (~builder_interface2_bank_bus_we); + end +end +assign builder_csrbank2_mdio_r_r = builder_interface2_bank_bus_dat_w[0]; +always @(*) begin + builder_csrbank2_mdio_r_re <= 1'd0; + builder_csrbank2_mdio_r_we <= 1'd0; + if ((builder_csrbank2_sel & (builder_interface2_bank_bus_adr[8:0] == 2'd3))) begin + builder_csrbank2_mdio_r_re <= builder_interface2_bank_bus_we; + builder_csrbank2_mdio_r_we <= (~builder_interface2_bank_bus_we); + end +end +assign builder_csrbank2_crg_reset0_w = main_maccore_ethphy_reset_storage; +always @(*) begin + main_maccore_ethphy_status <= 3'd0; + main_maccore_ethphy_status[0] <= main_maccore_ethphy_link_status; + main_maccore_ethphy_status[1] <= main_maccore_ethphy_clock_speed; + main_maccore_ethphy_status[2] <= main_maccore_ethphy_duplex_status; +end +assign builder_csrbank2_rx_inband_status_w = main_maccore_ethphy_status[2:0]; +assign main_maccore_ethphy_we = builder_csrbank2_rx_inband_status_we; +assign main_maccore_ethphy_mdc = main_maccore_ethphy__w_storage[0]; +assign main_maccore_ethphy_oe = main_maccore_ethphy__w_storage[1]; +assign main_maccore_ethphy_w = main_maccore_ethphy__w_storage[2]; +assign builder_csrbank2_mdio_w0_w = main_maccore_ethphy__w_storage[2:0]; +assign builder_csrbank2_mdio_r_w = main_maccore_ethphy__r_status; +assign main_maccore_ethphy__r_we = builder_csrbank2_mdio_r_we; +assign builder_csr_interconnect_adr = builder_maccore_adr; +assign builder_csr_interconnect_we = builder_maccore_we; +assign builder_csr_interconnect_dat_w = builder_maccore_dat_w; +assign builder_maccore_dat_r = builder_csr_interconnect_dat_r; +assign builder_interface0_bank_bus_adr = builder_csr_interconnect_adr; +assign builder_interface1_bank_bus_adr = builder_csr_interconnect_adr; +assign builder_interface2_bank_bus_adr = builder_csr_interconnect_adr; +assign builder_interface0_bank_bus_we = builder_csr_interconnect_we; +assign builder_interface1_bank_bus_we = builder_csr_interconnect_we; +assign builder_interface2_bank_bus_we = builder_csr_interconnect_we; +assign builder_interface0_bank_bus_dat_w = builder_csr_interconnect_dat_w; +assign builder_interface1_bank_bus_dat_w = builder_csr_interconnect_dat_w; +assign builder_interface2_bank_bus_dat_w = builder_csr_interconnect_dat_w; +assign builder_csr_interconnect_dat_r = ((builder_interface0_bank_bus_dat_r | builder_interface1_bank_bus_dat_r) | builder_interface2_bank_bus_dat_r); +assign builder_t_slice_proxy0 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy1 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy2 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy3 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy4 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy5 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy6 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy7 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy8 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy9 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy10 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy11 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy12 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy13 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy14 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy15 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy16 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy17 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy18 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy19 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy20 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy21 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy22 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy23 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy24 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy25 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy26 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy27 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy28 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy29 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy30 = (~main_liteethmaccrc32inserter_next); +assign builder_t_slice_proxy31 = (~main_liteethmaccrc32inserter_next); +assign builder_cases_slice_proxy = {main_liteethmaccrc32inserter_value, main_liteethmaccrc32inserter_sink_payload_data[7:0]}; +assign builder_t_slice_proxy32 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy33 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy34 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy35 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy36 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy37 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy38 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy39 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy40 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy41 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy42 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy43 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy44 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy45 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy46 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy47 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy48 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy49 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy50 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy51 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy52 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy53 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy54 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy55 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy56 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy57 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy58 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy59 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy60 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy61 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy62 = (~main_rx_crc_crc_next); +assign builder_t_slice_proxy63 = (~main_rx_crc_crc_next); +always @(*) begin + builder_array_muxed0 <= 30'd0; + case (builder_grant) + default: begin + builder_array_muxed0 <= main_wb_bus_adr; + end + endcase +end +always @(*) begin + builder_array_muxed1 <= 32'd0; + case (builder_grant) + default: begin + builder_array_muxed1 <= main_wb_bus_dat_w; + end + endcase +end +always @(*) begin + builder_array_muxed2 <= 4'd0; + case (builder_grant) + default: begin + builder_array_muxed2 <= main_wb_bus_sel; + end + endcase +end +always @(*) begin + builder_array_muxed3 <= 1'd0; + case (builder_grant) + default: begin + builder_array_muxed3 <= main_wb_bus_cyc; + end + endcase +end +always @(*) begin + builder_array_muxed4 <= 1'd0; + case (builder_grant) + default: begin + builder_array_muxed4 <= main_wb_bus_stb; + end + endcase +end +always @(*) begin + builder_array_muxed5 <= 1'd0; + case (builder_grant) + default: begin + builder_array_muxed5 <= main_wb_bus_we; + end + endcase +end +always @(*) begin + builder_array_muxed6 <= 3'd0; + case (builder_grant) + default: begin + builder_array_muxed6 <= main_wb_bus_cti; + end + endcase +end +always @(*) begin + builder_array_muxed7 <= 2'd0; + case (builder_grant) + default: begin + builder_array_muxed7 <= main_wb_bus_bte; + end + endcase +end +always @(*) begin + main_maccore_ethphy__r_status <= 1'd0; + main_maccore_ethphy__r_status <= main_maccore_ethphy_r; + main_maccore_ethphy__r_status <= builder_multiregimpl0_regs1; +end +assign main_tx_cdc_cdc_produce_rdomain = builder_multiregimpl1_regs1; +assign main_tx_cdc_cdc_consume_wdomain = builder_multiregimpl2_regs1; +assign main_pulsesynchronizer0_toggle_o = builder_multiregimpl3_regs1; +assign main_pulsesynchronizer1_toggle_o = builder_multiregimpl4_regs1; +assign main_rx_cdc_cdc_produce_rdomain = builder_multiregimpl5_regs1; +assign main_rx_cdc_cdc_consume_wdomain = builder_multiregimpl6_regs1; + + +//------------------------------------------------------------------------------ +// Synchronous Logic +//------------------------------------------------------------------------------ + +always @(posedge eth_rx_clk) begin + main_maccore_ethphy_rx_ctl_reg <= main_maccore_ethphy_rx_ctl; + main_maccore_ethphy_rx_data_reg <= main_maccore_ethphy_rx_data; + main_maccore_ethphy_rx_ctl_reg_d <= main_maccore_ethphy_rx_ctl_reg; + main_maccore_ethphy_source_valid <= main_maccore_ethphy_rx_ctl_reg[0]; + main_maccore_ethphy_source_payload_data <= main_maccore_ethphy_rx_data_reg; + if ((main_maccore_ethphy_rx_ctl == 1'd0)) begin + main_maccore_ethphy_link_status <= main_maccore_ethphy_rx_data[0]; + main_maccore_ethphy_clock_speed <= main_maccore_ethphy_rx_data[2:1]; + main_maccore_ethphy_duplex_status <= main_maccore_ethphy_rx_data[3]; + end + builder_maccore_rxdatapath_liteethmacpreamblechecker_state <= builder_maccore_rxdatapath_liteethmacpreamblechecker_next_state; + if (main_pulsesynchronizer0_i) begin + main_pulsesynchronizer0_toggle_i <= (~main_pulsesynchronizer0_toggle_i); + end + if (main_rx_crc_crc_ce) begin + main_rx_crc_crc_reg <= main_rx_crc_crc_next; + end + if (main_rx_crc_crc_reset) begin + main_rx_crc_crc_reg <= 32'd4294967295; + end + if (((main_rx_crc_syncfifo_syncfifo_we & main_rx_crc_syncfifo_syncfifo_writable) & (~main_rx_crc_syncfifo_replace))) begin + if ((main_rx_crc_syncfifo_produce == 3'd4)) begin + main_rx_crc_syncfifo_produce <= 1'd0; + end else begin + main_rx_crc_syncfifo_produce <= (main_rx_crc_syncfifo_produce + 1'd1); + end + end + if (main_rx_crc_syncfifo_do_read) begin + if ((main_rx_crc_syncfifo_consume == 3'd4)) begin + main_rx_crc_syncfifo_consume <= 1'd0; + end else begin + main_rx_crc_syncfifo_consume <= (main_rx_crc_syncfifo_consume + 1'd1); + end + end + if (((main_rx_crc_syncfifo_syncfifo_we & main_rx_crc_syncfifo_syncfifo_writable) & (~main_rx_crc_syncfifo_replace))) begin + if ((~main_rx_crc_syncfifo_do_read)) begin + main_rx_crc_syncfifo_level <= (main_rx_crc_syncfifo_level + 1'd1); + end + end else begin + if (main_rx_crc_syncfifo_do_read) begin + main_rx_crc_syncfifo_level <= (main_rx_crc_syncfifo_level - 1'd1); + end + end + if (main_rx_crc_fifo_reset) begin + main_rx_crc_syncfifo_level <= 3'd0; + main_rx_crc_syncfifo_produce <= 3'd0; + main_rx_crc_syncfifo_consume <= 3'd0; + end + builder_maccore_rxdatapath_bufferizeendpoints_state <= builder_maccore_rxdatapath_bufferizeendpoints_next_state; + if (main_rx_crc_last_be_next_value_ce0) begin + main_rx_crc_last_be <= main_rx_crc_last_be_next_value0; + end + if (main_rx_crc_crc_error1_next_value_ce1) begin + main_rx_crc_crc_error1 <= main_rx_crc_crc_error1_next_value1; + end + if (((~main_rx_crc_source_valid) | main_rx_crc_source_ready)) begin + main_rx_crc_source_valid <= main_rx_crc_sink_valid; + main_rx_crc_source_first <= main_rx_crc_sink_first; + main_rx_crc_source_last <= main_rx_crc_sink_last; + main_rx_crc_source_payload_data <= main_rx_crc_sink_payload_data; + main_rx_crc_source_payload_last_be <= main_rx_crc_sink_payload_last_be; + main_rx_crc_source_payload_error <= main_rx_crc_sink_payload_error; + end + if (main_pulsesynchronizer1_i) begin + main_pulsesynchronizer1_toggle_i <= (~main_pulsesynchronizer1_toggle_i); + end + if (main_rx_converter_converter_source_ready) begin + main_rx_converter_converter_strobe_all <= 1'd0; + end + if (main_rx_converter_converter_load_part) begin + if (((main_rx_converter_converter_demux == 2'd3) | main_rx_converter_converter_sink_last)) begin + main_rx_converter_converter_demux <= 1'd0; + main_rx_converter_converter_strobe_all <= 1'd1; + end else begin + main_rx_converter_converter_demux <= (main_rx_converter_converter_demux + 1'd1); + end + end + if ((main_rx_converter_converter_source_valid & main_rx_converter_converter_source_ready)) begin + if ((main_rx_converter_converter_sink_valid & main_rx_converter_converter_sink_ready)) begin + main_rx_converter_converter_source_first <= main_rx_converter_converter_sink_first; + main_rx_converter_converter_source_last <= main_rx_converter_converter_sink_last; + end else begin + main_rx_converter_converter_source_first <= 1'd0; + main_rx_converter_converter_source_last <= 1'd0; + end + end else begin + if ((main_rx_converter_converter_sink_valid & main_rx_converter_converter_sink_ready)) begin + main_rx_converter_converter_source_first <= (main_rx_converter_converter_sink_first | main_rx_converter_converter_source_first); + main_rx_converter_converter_source_last <= (main_rx_converter_converter_sink_last | main_rx_converter_converter_source_last); + end + end + if (main_rx_converter_converter_load_part) begin + case (main_rx_converter_converter_demux) + 1'd0: begin + main_rx_converter_converter_source_payload_data[9:0] <= main_rx_converter_converter_sink_payload_data; + end + 1'd1: begin + main_rx_converter_converter_source_payload_data[19:10] <= main_rx_converter_converter_sink_payload_data; + end + 2'd2: begin + main_rx_converter_converter_source_payload_data[29:20] <= main_rx_converter_converter_sink_payload_data; + end + 2'd3: begin + main_rx_converter_converter_source_payload_data[39:30] <= main_rx_converter_converter_sink_payload_data; + end + endcase + end + if (main_rx_converter_converter_load_part) begin + main_rx_converter_converter_source_payload_valid_token_count <= (main_rx_converter_converter_demux + 1'd1); + end + main_rx_cdc_cdc_graycounter0_q_binary <= main_rx_cdc_cdc_graycounter0_q_next_binary; + main_rx_cdc_cdc_graycounter0_q <= main_rx_cdc_cdc_graycounter0_q_next; + if (eth_rx_rst) begin + main_maccore_ethphy_source_valid <= 1'd0; + main_maccore_ethphy_source_payload_data <= 8'd0; + main_maccore_ethphy_link_status <= 1'd0; + main_maccore_ethphy_clock_speed <= 1'd0; + main_maccore_ethphy_duplex_status <= 1'd0; + main_maccore_ethphy_rx_ctl_reg <= 2'd0; + main_maccore_ethphy_rx_data_reg <= 8'd0; + main_maccore_ethphy_rx_ctl_reg_d <= 2'd0; + main_rx_crc_crc_reg <= 32'd4294967295; + main_rx_crc_syncfifo_level <= 3'd0; + main_rx_crc_syncfifo_produce <= 3'd0; + main_rx_crc_syncfifo_consume <= 3'd0; + main_rx_crc_last_be <= 1'd0; + main_rx_crc_crc_error1 <= 1'd0; + main_rx_crc_source_valid <= 1'd0; + main_rx_crc_source_payload_data <= 8'd0; + main_rx_crc_source_payload_last_be <= 1'd0; + main_rx_crc_source_payload_error <= 1'd0; + main_rx_converter_converter_source_payload_data <= 40'd0; + main_rx_converter_converter_source_payload_valid_token_count <= 3'd0; + main_rx_converter_converter_demux <= 2'd0; + main_rx_converter_converter_strobe_all <= 1'd0; + main_rx_cdc_cdc_graycounter0_q <= 6'd0; + main_rx_cdc_cdc_graycounter0_q_binary <= 6'd0; + builder_maccore_rxdatapath_liteethmacpreamblechecker_state <= 1'd0; + builder_maccore_rxdatapath_bufferizeendpoints_state <= 2'd0; + end + builder_multiregimpl6_regs0 <= main_rx_cdc_cdc_graycounter1_q; + builder_multiregimpl6_regs1 <= builder_multiregimpl6_regs0; +end + +always @(posedge eth_tx_clk) begin + main_tx_cdc_cdc_graycounter1_q_binary <= main_tx_cdc_cdc_graycounter1_q_next_binary; + main_tx_cdc_cdc_graycounter1_q <= main_tx_cdc_cdc_graycounter1_q_next; + if ((main_tx_converter_converter_source_valid & main_tx_converter_converter_source_ready)) begin + if (main_tx_converter_converter_last) begin + main_tx_converter_converter_mux <= 1'd0; + end else begin + main_tx_converter_converter_mux <= (main_tx_converter_converter_mux + 1'd1); + end + end + builder_maccore_txdatapath_liteethmactxlastbe_state <= builder_maccore_txdatapath_liteethmactxlastbe_next_state; + builder_maccore_txdatapath_liteethmacpaddinginserter_state <= builder_maccore_txdatapath_liteethmacpaddinginserter_next_state; + if (main_tx_padding_counter_clockdomainsrenamer0_next_value_ce) begin + main_tx_padding_counter <= main_tx_padding_counter_clockdomainsrenamer0_next_value; + end + if (main_liteethmaccrc32inserter_is_ongoing0) begin + main_liteethmaccrc32inserter_cnt <= 2'd3; + end else begin + if ((main_liteethmaccrc32inserter_is_ongoing1 & (~main_liteethmaccrc32inserter_cnt_done))) begin + main_liteethmaccrc32inserter_cnt <= (main_liteethmaccrc32inserter_cnt - main_liteethmaccrc32inserter_source_ready); + end + end + if (main_liteethmaccrc32inserter_ce) begin + main_liteethmaccrc32inserter_reg <= main_liteethmaccrc32inserter_next; + end + if (main_liteethmaccrc32inserter_reset) begin + main_liteethmaccrc32inserter_reg <= 32'd4294967295; + end + builder_maccore_txdatapath_bufferizeendpoints_state <= builder_maccore_txdatapath_bufferizeendpoints_next_state; + if (main_liteethmaccrc32inserter_crc_packet_clockdomainsrenamer1_next_value_ce0) begin + main_liteethmaccrc32inserter_crc_packet <= main_liteethmaccrc32inserter_crc_packet_clockdomainsrenamer1_next_value0; + end + if (main_liteethmaccrc32inserter_last_be2_clockdomainsrenamer1_next_value_ce1) begin + main_liteethmaccrc32inserter_last_be2 <= main_liteethmaccrc32inserter_last_be2_clockdomainsrenamer1_next_value1; + end + if (((~main_bufferizeendpoints_source_valid) | main_bufferizeendpoints_source_ready)) begin + main_bufferizeendpoints_source_valid <= main_bufferizeendpoints_sink_valid; + main_bufferizeendpoints_source_first <= main_bufferizeendpoints_sink_first; + main_bufferizeendpoints_source_last <= main_bufferizeendpoints_sink_last; + main_bufferizeendpoints_source_payload_data <= main_bufferizeendpoints_sink_payload_data; + main_bufferizeendpoints_source_payload_last_be <= main_bufferizeendpoints_sink_payload_last_be; + main_bufferizeendpoints_source_payload_error <= main_bufferizeendpoints_sink_payload_error; + end + builder_maccore_txdatapath_liteethmacpreambleinserter_state <= builder_maccore_txdatapath_liteethmacpreambleinserter_next_state; + if (main_tx_preamble_count_clockdomainsrenamer2_next_value_ce) begin + main_tx_preamble_count <= main_tx_preamble_count_clockdomainsrenamer2_next_value; + end + builder_maccore_txdatapath_liteethmacgap_state <= builder_maccore_txdatapath_liteethmacgap_next_state; + if (main_tx_gap_counter_clockdomainsrenamer3_next_value_ce) begin + main_tx_gap_counter <= main_tx_gap_counter_clockdomainsrenamer3_next_value; + end + if (eth_tx_rst) begin + main_tx_cdc_cdc_graycounter1_q <= 6'd0; + main_tx_cdc_cdc_graycounter1_q_binary <= 6'd0; + main_tx_converter_converter_mux <= 2'd0; + main_tx_padding_counter <= 16'd0; + main_liteethmaccrc32inserter_reg <= 32'd4294967295; + main_liteethmaccrc32inserter_crc_packet <= 32'd0; + main_liteethmaccrc32inserter_last_be2 <= 1'd0; + main_liteethmaccrc32inserter_cnt <= 2'd3; + main_bufferizeendpoints_source_valid <= 1'd0; + main_bufferizeendpoints_source_payload_data <= 8'd0; + main_bufferizeendpoints_source_payload_last_be <= 1'd0; + main_bufferizeendpoints_source_payload_error <= 1'd0; + builder_maccore_txdatapath_liteethmactxlastbe_state <= 1'd0; + builder_maccore_txdatapath_liteethmacpaddinginserter_state <= 1'd0; + builder_maccore_txdatapath_bufferizeendpoints_state <= 2'd0; + builder_maccore_txdatapath_liteethmacpreambleinserter_state <= 2'd0; + builder_maccore_txdatapath_liteethmacgap_state <= 1'd0; + end + builder_multiregimpl1_regs0 <= main_tx_cdc_cdc_graycounter0_q; + builder_multiregimpl1_regs1 <= builder_multiregimpl1_regs0; +end + +always @(posedge por_clk) begin + main_maccore_int_rst <= sys_reset; +end + +always @(posedge sys_clk) begin + if ((main_maccore_maccore_bus_errors != 32'd4294967295)) begin + if (main_maccore_maccore_bus_error) begin + main_maccore_maccore_bus_errors <= (main_maccore_maccore_bus_errors + 1'd1); + end + end + main_tx_cdc_cdc_graycounter0_q_binary <= main_tx_cdc_cdc_graycounter0_q_next_binary; + main_tx_cdc_cdc_graycounter0_q <= main_tx_cdc_cdc_graycounter0_q_next; + if (main_pulsesynchronizer0_o) begin + main_preamble_errors_status <= (main_preamble_errors_status + 1'd1); + end + if (main_pulsesynchronizer1_o) begin + main_crc_errors_status <= (main_crc_errors_status + 1'd1); + end + main_pulsesynchronizer0_toggle_o_r <= main_pulsesynchronizer0_toggle_o; + main_pulsesynchronizer1_toggle_o_r <= main_pulsesynchronizer1_toggle_o; + main_rx_cdc_cdc_graycounter1_q_binary <= main_rx_cdc_cdc_graycounter1_q_next_binary; + main_rx_cdc_cdc_graycounter1_q <= main_rx_cdc_cdc_graycounter1_q_next; + if (((main_sram49_we & main_sram50_writable) & (~main_sram56_replace))) begin + main_sram57_produce <= (main_sram57_produce + 1'd1); + end + if (main_sram63_do_read) begin + main_sram58_consume <= (main_sram58_consume + 1'd1); + end + if (((main_sram49_we & main_sram50_writable) & (~main_sram56_replace))) begin + if ((~main_sram63_do_read)) begin + main_sram55_level <= (main_sram55_level + 1'd1); + end + end else begin + if (main_sram63_do_read) begin + main_sram55_level <= (main_sram55_level - 1'd1); + end + end + builder_maccore_liteethmacsramwriter_state <= builder_maccore_liteethmacsramwriter_next_state; + if (main_sram35_length_liteethmacsramwriter_t_next_value_ce) begin + main_sram35_length <= main_sram35_length_liteethmacsramwriter_t_next_value; + end + if (main_sram13_status_liteethmacsramwriter_f_next_value_ce) begin + main_sram13_status <= main_sram13_status_liteethmacsramwriter_f_next_value; + end + if (main_slot_liteethmacsramwriter_next_value_ce) begin + main_slot <= main_slot_liteethmacsramwriter_next_value; + end + if (main_sram108_clear) begin + main_sram106_pending <= 1'd0; + end + if (main_sram107_trigger) begin + main_sram106_pending <= 1'd1; + end + if (((main_sram135_we & main_sram136_writable) & (~main_sram142_replace))) begin + main_sram143_produce <= (main_sram143_produce + 1'd1); + end + if (main_sram149_do_read) begin + main_sram144_consume <= (main_sram144_consume + 1'd1); + end + if (((main_sram135_we & main_sram136_writable) & (~main_sram142_replace))) begin + if ((~main_sram149_do_read)) begin + main_sram141_level <= (main_sram141_level + 1'd1); + end + end else begin + if (main_sram149_do_read) begin + main_sram141_level <= (main_sram141_level - 1'd1); + end + end + builder_maccore_liteethmacsramreader_state <= builder_maccore_liteethmacsramreader_next_state; + if (main_sram122_length_liteethmacsramreader_next_value_ce) begin + main_sram122_length <= main_sram122_length_liteethmacsramreader_next_value; + end + main_interface0_ack <= 1'd0; + if (((main_interface0_cyc & main_interface0_stb) & ((~main_interface0_ack) | main_sram0_adr_burst))) begin + main_interface0_ack <= 1'd1; + end + main_interface1_ack <= 1'd0; + if (((main_interface1_cyc & main_interface1_stb) & ((~main_interface1_ack) | main_sram1_adr_burst))) begin + main_interface1_ack <= 1'd1; + end + main_interface2_ack <= 1'd0; + if (((main_interface2_cyc & main_interface2_stb) & ((~main_interface2_ack) | main_sram2_adr_burst))) begin + main_interface2_ack <= 1'd1; + end + main_interface3_ack <= 1'd0; + if (((main_interface3_cyc & main_interface3_stb) & ((~main_interface3_ack) | main_sram3_adr_burst))) begin + main_interface3_ack <= 1'd1; + end + main_slave_sel_r <= main_slave_sel; + builder_maccore_state <= builder_maccore_next_state; + builder_slave_sel_r <= builder_slave_sel; + if (builder_wait) begin + if ((~builder_done)) begin + builder_count <= (builder_count - 1'd1); + end + end else begin + builder_count <= 20'd1000000; + end + builder_interface0_bank_bus_dat_r <= 1'd0; + if (builder_csrbank0_sel) begin + case (builder_interface0_bank_bus_adr[8:0]) + 1'd0: begin + builder_interface0_bank_bus_dat_r <= builder_csrbank0_reset0_w; + end + 1'd1: begin + builder_interface0_bank_bus_dat_r <= builder_csrbank0_scratch0_w; + end + 2'd2: begin + builder_interface0_bank_bus_dat_r <= builder_csrbank0_bus_errors_w; + end + endcase + end + if (builder_csrbank0_reset0_re) begin + main_maccore_maccore_reset_storage[1:0] <= builder_csrbank0_reset0_r; + end + main_maccore_maccore_reset_re <= builder_csrbank0_reset0_re; + if (builder_csrbank0_scratch0_re) begin + main_maccore_maccore_scratch_storage[31:0] <= builder_csrbank0_scratch0_r; + end + main_maccore_maccore_scratch_re <= builder_csrbank0_scratch0_re; + main_maccore_maccore_bus_errors_re <= builder_csrbank0_bus_errors_re; + builder_interface1_bank_bus_dat_r <= 1'd0; + if (builder_csrbank1_sel) begin + case (builder_interface1_bank_bus_adr[8:0]) + 1'd0: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_writer_slot_w; + end + 1'd1: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_writer_length_w; + end + 2'd2: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_writer_errors_w; + end + 2'd3: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_writer_ev_status_w; + end + 3'd4: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_writer_ev_pending_w; + end + 3'd5: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_writer_ev_enable0_w; + end + 3'd6: begin + builder_interface1_bank_bus_dat_r <= main_start_w; + end + 3'd7: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_reader_ready_w; + end + 4'd8: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_reader_level_w; + end + 4'd9: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_reader_slot0_w; + end + 4'd10: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_reader_length0_w; + end + 4'd11: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_reader_ev_status_w; + end + 4'd12: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_reader_ev_pending_w; + end + 4'd13: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_sram_reader_ev_enable0_w; + end + 4'd14: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_preamble_crc_w; + end + 4'd15: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_rx_datapath_preamble_errors_w; + end + 5'd16: begin + builder_interface1_bank_bus_dat_r <= builder_csrbank1_rx_datapath_crc_errors_w; + end + endcase + end + main_sram9_re <= builder_csrbank1_sram_writer_slot_re; + main_sram12_re <= builder_csrbank1_sram_writer_length_re; + main_sram15_re <= builder_csrbank1_sram_writer_errors_re; + main_sram24_re <= builder_csrbank1_sram_writer_ev_status_re; + if (builder_csrbank1_sram_writer_ev_pending_re) begin + main_sram29_r <= builder_csrbank1_sram_writer_ev_pending_r; + end + main_sram28_re <= builder_csrbank1_sram_writer_ev_pending_re; + if (builder_csrbank1_sram_writer_ev_enable0_re) begin + main_sram31_storage <= builder_csrbank1_sram_writer_ev_enable0_r; + end + main_sram32_re <= builder_csrbank1_sram_writer_ev_enable0_re; + main_sram96_re <= builder_csrbank1_sram_reader_ready_re; + main_sram99_re <= builder_csrbank1_sram_reader_level_re; + if (builder_csrbank1_sram_reader_slot0_re) begin + main_sram100_storage <= builder_csrbank1_sram_reader_slot0_r; + end + main_sram101_re <= builder_csrbank1_sram_reader_slot0_re; + if (builder_csrbank1_sram_reader_length0_re) begin + main_sram102_storage[10:0] <= builder_csrbank1_sram_reader_length0_r; + end + main_sram103_re <= builder_csrbank1_sram_reader_length0_re; + main_sram112_re <= builder_csrbank1_sram_reader_ev_status_re; + if (builder_csrbank1_sram_reader_ev_pending_re) begin + main_sram117_r <= builder_csrbank1_sram_reader_ev_pending_r; + end + main_sram116_re <= builder_csrbank1_sram_reader_ev_pending_re; + if (builder_csrbank1_sram_reader_ev_enable0_re) begin + main_sram119_storage <= builder_csrbank1_sram_reader_ev_enable0_r; + end + main_sram120_re <= builder_csrbank1_sram_reader_ev_enable0_re; + main_re <= builder_csrbank1_preamble_crc_re; + main_preamble_errors_re <= builder_csrbank1_rx_datapath_preamble_errors_re; + main_crc_errors_re <= builder_csrbank1_rx_datapath_crc_errors_re; + builder_interface2_bank_bus_dat_r <= 1'd0; + if (builder_csrbank2_sel) begin + case (builder_interface2_bank_bus_adr[8:0]) + 1'd0: begin + builder_interface2_bank_bus_dat_r <= builder_csrbank2_crg_reset0_w; + end + 1'd1: begin + builder_interface2_bank_bus_dat_r <= builder_csrbank2_rx_inband_status_w; + end + 2'd2: begin + builder_interface2_bank_bus_dat_r <= builder_csrbank2_mdio_w0_w; + end + 2'd3: begin + builder_interface2_bank_bus_dat_r <= builder_csrbank2_mdio_r_w; + end + endcase + end + if (builder_csrbank2_crg_reset0_re) begin + main_maccore_ethphy_reset_storage <= builder_csrbank2_crg_reset0_r; + end + main_maccore_ethphy_reset_re <= builder_csrbank2_crg_reset0_re; + main_maccore_ethphy_re <= builder_csrbank2_rx_inband_status_re; + if (builder_csrbank2_mdio_w0_re) begin + main_maccore_ethphy__w_storage[2:0] <= builder_csrbank2_mdio_w0_r; + end + main_maccore_ethphy__w_re <= builder_csrbank2_mdio_w0_re; + main_maccore_ethphy__r_re <= builder_csrbank2_mdio_r_re; + if (sys_rst) begin + main_maccore_maccore_reset_storage <= 2'd0; + main_maccore_maccore_reset_re <= 1'd0; + main_maccore_maccore_scratch_storage <= 32'd305419896; + main_maccore_maccore_scratch_re <= 1'd0; + main_maccore_maccore_bus_errors_re <= 1'd0; + main_maccore_maccore_bus_errors <= 32'd0; + main_maccore_ethphy_reset_storage <= 1'd0; + main_maccore_ethphy_reset_re <= 1'd0; + main_maccore_ethphy_re <= 1'd0; + main_maccore_ethphy__w_storage <= 3'd0; + main_maccore_ethphy__w_re <= 1'd0; + main_maccore_ethphy__r_re <= 1'd0; + main_re <= 1'd0; + main_tx_cdc_cdc_graycounter0_q <= 6'd0; + main_tx_cdc_cdc_graycounter0_q_binary <= 6'd0; + main_preamble_errors_status <= 32'd0; + main_preamble_errors_re <= 1'd0; + main_crc_errors_status <= 32'd0; + main_crc_errors_re <= 1'd0; + main_rx_cdc_cdc_graycounter1_q <= 6'd0; + main_rx_cdc_cdc_graycounter1_q_binary <= 6'd0; + main_sram9_re <= 1'd0; + main_sram12_re <= 1'd0; + main_sram13_status <= 32'd0; + main_sram15_re <= 1'd0; + main_sram24_re <= 1'd0; + main_sram28_re <= 1'd0; + main_sram29_r <= 1'd0; + main_sram31_storage <= 1'd0; + main_sram32_re <= 1'd0; + main_slot <= 1'd0; + main_sram35_length <= 11'd0; + main_sram55_level <= 2'd0; + main_sram57_produce <= 1'd0; + main_sram58_consume <= 1'd0; + main_sram96_re <= 1'd0; + main_sram99_re <= 1'd0; + main_sram101_re <= 1'd0; + main_sram103_re <= 1'd0; + main_sram106_pending <= 1'd0; + main_sram112_re <= 1'd0; + main_sram116_re <= 1'd0; + main_sram117_r <= 1'd0; + main_sram119_storage <= 1'd0; + main_sram120_re <= 1'd0; + main_sram122_length <= 11'd0; + main_sram141_level <= 2'd0; + main_sram143_produce <= 1'd0; + main_sram144_consume <= 1'd0; + main_interface0_ack <= 1'd0; + main_interface1_ack <= 1'd0; + main_interface2_ack <= 1'd0; + main_interface3_ack <= 1'd0; + main_slave_sel_r <= 4'd0; + builder_slave_sel_r <= 2'd0; + builder_count <= 20'd1000000; + builder_maccore_liteethmacsramwriter_state <= 2'd0; + builder_maccore_liteethmacsramreader_state <= 2'd0; + builder_maccore_state <= 1'd0; + end + builder_multiregimpl0_regs0 <= main_maccore_ethphy_data_r; + builder_multiregimpl0_regs1 <= builder_multiregimpl0_regs0; + builder_multiregimpl2_regs0 <= main_tx_cdc_cdc_graycounter1_q; + builder_multiregimpl2_regs1 <= builder_multiregimpl2_regs0; + builder_multiregimpl3_regs0 <= main_pulsesynchronizer0_toggle_i; + builder_multiregimpl3_regs1 <= builder_multiregimpl3_regs0; + builder_multiregimpl4_regs0 <= main_pulsesynchronizer1_toggle_i; + builder_multiregimpl4_regs1 <= builder_multiregimpl4_regs0; + builder_multiregimpl5_regs0 <= main_rx_cdc_cdc_graycounter0_q; + builder_multiregimpl5_regs1 <= builder_multiregimpl5_regs0; +end + + +//------------------------------------------------------------------------------ +// Specialized Logic +//------------------------------------------------------------------------------ + +DELAYG #( + .DEL_MODE("SCLK_ALIGNED"), + .DEL_VALUE(7'd80) +) DELAYG ( + .A(main_maccore_ethphy_eth_tx_clk_o), + .Z(rgmii_eth_clocks_tx) +); + +DELAYG #( + .DEL_MODE("SCLK_ALIGNED"), + .DEL_VALUE(1'd0) +) DELAYG_1 ( + .A(main_maccore_ethphy_tx_ctl_oddrx1f), + .Z(rgmii_eth_tx_ctl) +); + +DELAYG #( + .DEL_MODE("SCLK_ALIGNED"), + .DEL_VALUE(1'd0) +) DELAYG_2 ( + .A(main_maccore_ethphy_tx_data_oddrx1f[0]), + .Z(rgmii_eth_tx_data[0]) +); + +DELAYG #( + .DEL_MODE("SCLK_ALIGNED"), + .DEL_VALUE(1'd0) +) DELAYG_3 ( + .A(main_maccore_ethphy_tx_data_oddrx1f[1]), + .Z(rgmii_eth_tx_data[1]) +); + +DELAYG #( + .DEL_MODE("SCLK_ALIGNED"), + .DEL_VALUE(1'd0) +) DELAYG_4 ( + .A(main_maccore_ethphy_tx_data_oddrx1f[2]), + .Z(rgmii_eth_tx_data[2]) +); + +DELAYG #( + .DEL_MODE("SCLK_ALIGNED"), + .DEL_VALUE(1'd0) +) DELAYG_5 ( + .A(main_maccore_ethphy_tx_data_oddrx1f[3]), + .Z(rgmii_eth_tx_data[3]) +); + +DELAYG #( + .DEL_MODE("SCLK_ALIGNED"), + .DEL_VALUE(7'd80) +) DELAYG_6 ( + .A(rgmii_eth_rx_ctl), + .Z(main_maccore_ethphy_rx_ctl_delayf) +); + +DELAYG #( + .DEL_MODE("SCLK_ALIGNED"), + .DEL_VALUE(7'd80) +) DELAYG_7 ( + .A(rgmii_eth_rx_data[0]), + .Z(main_maccore_ethphy_rx_data_delayf[0]) +); + +DELAYG #( + .DEL_MODE("SCLK_ALIGNED"), + .DEL_VALUE(7'd80) +) DELAYG_8 ( + .A(rgmii_eth_rx_data[1]), + .Z(main_maccore_ethphy_rx_data_delayf[1]) +); + +DELAYG #( + .DEL_MODE("SCLK_ALIGNED"), + .DEL_VALUE(7'd80) +) DELAYG_9 ( + .A(rgmii_eth_rx_data[2]), + .Z(main_maccore_ethphy_rx_data_delayf[2]) +); + +DELAYG #( + .DEL_MODE("SCLK_ALIGNED"), + .DEL_VALUE(7'd80) +) DELAYG_10 ( + .A(rgmii_eth_rx_data[3]), + .Z(main_maccore_ethphy_rx_data_delayf[3]) +); + +//------------------------------------------------------------------------------ +// Memory storage: 32-words x 42-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: Sync | Mode: Read-First | Write-Granularity: 42 +// Port 1 | Read: Sync | Write: ---- | +reg [41:0] storage[0:31]; +reg [41:0] storage_dat0; +reg [41:0] storage_dat1; +always @(posedge sys_clk) begin + if (main_tx_cdc_cdc_wrport_we) + storage[main_tx_cdc_cdc_wrport_adr] <= main_tx_cdc_cdc_wrport_dat_w; + storage_dat0 <= storage[main_tx_cdc_cdc_wrport_adr]; +end +always @(posedge eth_tx_clk) begin + storage_dat1 <= storage[main_tx_cdc_cdc_rdport_adr]; +end +assign main_tx_cdc_cdc_wrport_dat_r = storage_dat0; +assign main_tx_cdc_cdc_rdport_dat_r = storage_dat1; + + +//------------------------------------------------------------------------------ +// Memory storage_1: 5-words x 12-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: Sync | Mode: Read-First | Write-Granularity: 12 +// Port 1 | Read: Async | Write: ---- | +reg [11:0] storage_1[0:4]; +reg [11:0] storage_1_dat0; +always @(posedge eth_rx_clk) begin + if (main_rx_crc_syncfifo_wrport_we) + storage_1[main_rx_crc_syncfifo_wrport_adr] <= main_rx_crc_syncfifo_wrport_dat_w; + storage_1_dat0 <= storage_1[main_rx_crc_syncfifo_wrport_adr]; +end +always @(posedge eth_rx_clk) begin +end +assign main_rx_crc_syncfifo_wrport_dat_r = storage_1_dat0; +assign main_rx_crc_syncfifo_rdport_dat_r = storage_1[main_rx_crc_syncfifo_rdport_adr]; + + +//------------------------------------------------------------------------------ +// Memory storage_2: 32-words x 42-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: Sync | Mode: Read-First | Write-Granularity: 42 +// Port 1 | Read: Sync | Write: ---- | +reg [41:0] storage_2[0:31]; +reg [41:0] storage_2_dat0; +reg [41:0] storage_2_dat1; +always @(posedge eth_rx_clk) begin + if (main_rx_cdc_cdc_wrport_we) + storage_2[main_rx_cdc_cdc_wrport_adr] <= main_rx_cdc_cdc_wrport_dat_w; + storage_2_dat0 <= storage_2[main_rx_cdc_cdc_wrport_adr]; +end +always @(posedge sys_clk) begin + storage_2_dat1 <= storage_2[main_rx_cdc_cdc_rdport_adr]; +end +assign main_rx_cdc_cdc_wrport_dat_r = storage_2_dat0; +assign main_rx_cdc_cdc_rdport_dat_r = storage_2_dat1; + + +//------------------------------------------------------------------------------ +// Memory storage_3: 2-words x 14-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: Sync | Mode: Read-First | Write-Granularity: 14 +// Port 1 | Read: Async | Write: ---- | +reg [13:0] storage_3[0:1]; +reg [13:0] storage_3_dat0; +always @(posedge sys_clk) begin + if (main_sram61_we) + storage_3[main_sram59_adr] <= main_sram62_dat_w; + storage_3_dat0 <= storage_3[main_sram59_adr]; +end +always @(posedge sys_clk) begin +end +assign main_sram60_dat_r = storage_3_dat0; +assign main_sram65_dat_r = storage_3[main_sram64_adr]; + + +//------------------------------------------------------------------------------ +// Memory mem: 383-words x 32-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: Sync | Mode: Write-First | Write-Granularity: 32 +// Port 1 | Read: Sync | Write: ---- | +reg [31:0] mem[0:382]; +reg [8:0] mem_adr0; +reg [31:0] mem_dat1; +always @(posedge sys_clk) begin + if (main_sram77_we) + mem[main_sram75_adr] <= main_sram78_dat_w; + mem_adr0 <= main_sram75_adr; +end +always @(posedge sys_clk) begin + mem_dat1 <= mem[main_sram0_adr]; +end +assign main_sram76_dat_r = mem[mem_adr0]; +assign main_sram0_dat_r = mem_dat1; + + +//------------------------------------------------------------------------------ +// Memory mem_1: 383-words x 32-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: Sync | Mode: Write-First | Write-Granularity: 32 +// Port 1 | Read: Sync | Write: ---- | +reg [31:0] mem_1[0:382]; +reg [8:0] mem_1_adr0; +reg [31:0] mem_1_dat1; +always @(posedge sys_clk) begin + if (main_sram81_we) + mem_1[main_sram79_adr] <= main_sram82_dat_w; + mem_1_adr0 <= main_sram79_adr; +end +always @(posedge sys_clk) begin + mem_1_dat1 <= mem_1[main_sram1_adr]; +end +assign main_sram80_dat_r = mem_1[mem_1_adr0]; +assign main_sram1_dat_r = mem_1_dat1; + + +//------------------------------------------------------------------------------ +// Memory storage_4: 2-words x 14-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: Sync | Mode: Read-First | Write-Granularity: 14 +// Port 1 | Read: Async | Write: ---- | +reg [13:0] storage_4[0:1]; +reg [13:0] storage_4_dat0; +always @(posedge sys_clk) begin + if (main_sram147_we) + storage_4[main_sram145_adr] <= main_sram148_dat_w; + storage_4_dat0 <= storage_4[main_sram145_adr]; +end +always @(posedge sys_clk) begin +end +assign main_sram146_dat_r = storage_4_dat0; +assign main_sram151_dat_r = storage_4[main_sram150_adr]; + + +//------------------------------------------------------------------------------ +// Memory mem_2: 383-words x 32-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: ---- | +// Port 1 | Read: Sync | Write: Sync | Mode: Write-First | Write-Granularity: 8 +reg [31:0] mem_2[0:382]; +reg [8:0] mem_2_adr0; +reg [8:0] mem_2_adr1; +always @(posedge sys_clk) begin + if (main_sram163_re) + mem_2_adr0 <= main_sram161_adr; +end +always @(posedge sys_clk) begin + if (main_sram2_we[0]) + mem_2[main_sram2_adr][7:0] <= main_sram2_dat_w[7:0]; + if (main_sram2_we[1]) + mem_2[main_sram2_adr][15:8] <= main_sram2_dat_w[15:8]; + if (main_sram2_we[2]) + mem_2[main_sram2_adr][23:16] <= main_sram2_dat_w[23:16]; + if (main_sram2_we[3]) + mem_2[main_sram2_adr][31:24] <= main_sram2_dat_w[31:24]; + mem_2_adr1 <= main_sram2_adr; +end +assign main_sram162_dat_r = mem_2[mem_2_adr0]; +assign main_sram2_dat_r = mem_2[mem_2_adr1]; + + +//------------------------------------------------------------------------------ +// Memory mem_3: 383-words x 32-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: ---- | +// Port 1 | Read: Sync | Write: Sync | Mode: Write-First | Write-Granularity: 8 +reg [31:0] mem_3[0:382]; +reg [8:0] mem_3_adr0; +reg [8:0] mem_3_adr1; +always @(posedge sys_clk) begin + if (main_sram166_re) + mem_3_adr0 <= main_sram164_adr; +end +always @(posedge sys_clk) begin + if (main_sram3_we[0]) + mem_3[main_sram3_adr][7:0] <= main_sram3_dat_w[7:0]; + if (main_sram3_we[1]) + mem_3[main_sram3_adr][15:8] <= main_sram3_dat_w[15:8]; + if (main_sram3_we[2]) + mem_3[main_sram3_adr][23:16] <= main_sram3_dat_w[23:16]; + if (main_sram3_we[3]) + mem_3[main_sram3_adr][31:24] <= main_sram3_dat_w[31:24]; + mem_3_adr1 <= main_sram3_adr; +end +assign main_sram165_dat_r = mem_3[mem_3_adr0]; +assign main_sram3_dat_r = mem_3[mem_3_adr1]; + + +ODDRX1F ODDRX1F( + .D0(1'd1), + .D1(1'd0), + .SCLK(eth_tx_clk), + .Q(main_maccore_ethphy_eth_tx_clk_o) +); + +FD1S3BX FD1S3BX( + .CK(eth_tx_clk), + .D(1'd0), + .PD(main_maccore_ethphy_reset), + .Q(builder_rst10) +); + +FD1S3BX FD1S3BX_1( + .CK(eth_tx_clk), + .D(builder_rst10), + .PD(main_maccore_ethphy_reset), + .Q(eth_tx_rst) +); + +FD1S3BX FD1S3BX_2( + .CK(eth_rx_clk), + .D(1'd0), + .PD(main_maccore_ethphy_reset), + .Q(builder_rst11) +); + +FD1S3BX FD1S3BX_3( + .CK(eth_rx_clk), + .D(builder_rst11), + .PD(main_maccore_ethphy_reset), + .Q(eth_rx_rst) +); + +ODDRX1F ODDRX1F_1( + .D0(main_maccore_ethphy_sink_valid), + .D1(main_maccore_ethphy_sink_valid), + .SCLK(eth_tx_clk), + .Q(main_maccore_ethphy_tx_ctl_oddrx1f) +); + +ODDRX1F ODDRX1F_2( + .D0(main_maccore_ethphy_sink_payload_data[0]), + .D1(main_maccore_ethphy_sink_payload_data[4]), + .SCLK(eth_tx_clk), + .Q(main_maccore_ethphy_tx_data_oddrx1f[0]) +); + +ODDRX1F ODDRX1F_3( + .D0(main_maccore_ethphy_sink_payload_data[1]), + .D1(main_maccore_ethphy_sink_payload_data[5]), + .SCLK(eth_tx_clk), + .Q(main_maccore_ethphy_tx_data_oddrx1f[1]) +); + +ODDRX1F ODDRX1F_4( + .D0(main_maccore_ethphy_sink_payload_data[2]), + .D1(main_maccore_ethphy_sink_payload_data[6]), + .SCLK(eth_tx_clk), + .Q(main_maccore_ethphy_tx_data_oddrx1f[2]) +); + +ODDRX1F ODDRX1F_5( + .D0(main_maccore_ethphy_sink_payload_data[3]), + .D1(main_maccore_ethphy_sink_payload_data[7]), + .SCLK(eth_tx_clk), + .Q(main_maccore_ethphy_tx_data_oddrx1f[3]) +); + +IDDRX1F IDDRX1F( + .D(main_maccore_ethphy_rx_ctl_delayf), + .SCLK(eth_rx_clk), + .Q0(main_maccore_ethphy_rx_ctl[0]), + .Q1(main_maccore_ethphy_rx_ctl[1]) +); + +IDDRX1F IDDRX1F_1( + .D(main_maccore_ethphy_rx_data_delayf[0]), + .SCLK(eth_rx_clk), + .Q0(main_maccore_ethphy_rx_data[0]), + .Q1(main_maccore_ethphy_rx_data[4]) +); + +IDDRX1F IDDRX1F_2( + .D(main_maccore_ethphy_rx_data_delayf[1]), + .SCLK(eth_rx_clk), + .Q0(main_maccore_ethphy_rx_data[1]), + .Q1(main_maccore_ethphy_rx_data[5]) +); + +IDDRX1F IDDRX1F_3( + .D(main_maccore_ethphy_rx_data_delayf[2]), + .SCLK(eth_rx_clk), + .Q0(main_maccore_ethphy_rx_data[2]), + .Q1(main_maccore_ethphy_rx_data[6]) +); + +IDDRX1F IDDRX1F_4( + .D(main_maccore_ethphy_rx_data_delayf[3]), + .SCLK(eth_rx_clk), + .Q0(main_maccore_ethphy_rx_data[3]), + .Q1(main_maccore_ethphy_rx_data[7]) +); + +TRELLIS_IO #( + .DIR("BIDIR") +) TRELLIS_IO ( + .B(rgmii_eth_mdio), + .I(main_maccore_ethphy_data_w), + .T((~main_maccore_ethphy_data_oe)), + .O(main_maccore_ethphy_data_r) +); + +endmodule + +// ----------------------------------------------------------------------------- +// Auto-Generated by LiteX on 2023-02-07 21:33:18. +//------------------------------------------------------------------------------ diff --git a/gateware/liteeth/gateware/liteeth_core.ys b/gateware/liteeth/gateware/liteeth_core.ys new file mode 100644 index 0000000..bd2033a --- /dev/null +++ b/gateware/liteeth/gateware/liteeth_core.ys @@ -0,0 +1,8 @@ +verilog_defaults -push +verilog_defaults -add -defer +read_verilog /home/david/ARVP/sonar_fpga/gateware/liteeth/gateware/liteeth_core.v +verilog_defaults -pop +attrmap -tocase keep -imap keep="true" keep=1 -imap keep="false" keep=0 -remove keep=0 + +synth_ecp5 -top liteeth_core +write_json liteeth_core.json \ No newline at end of file diff --git a/gateware/liteeth/software/include/generated/csr.h b/gateware/liteeth/software/include/generated/csr.h new file mode 100644 index 0000000..81afd86 --- /dev/null +++ b/gateware/liteeth/software/include/generated/csr.h @@ -0,0 +1,409 @@ +//-------------------------------------------------------------------------------- +// Auto-generated by LiteX (8159b5ca) on 2023-02-07 21:33:18 +//-------------------------------------------------------------------------------- +#include +#ifndef __GENERATED_CSR_H +#define __GENERATED_CSR_H +#include +#include +#ifndef CSR_ACCESSORS_DEFINED +#include +#endif /* ! CSR_ACCESSORS_DEFINED */ +#ifndef CSR_BASE +#define CSR_BASE 0x0L +#endif + +/* ctrl */ +#define CSR_CTRL_BASE (CSR_BASE + 0x0L) +#define CSR_CTRL_RESET_ADDR (CSR_BASE + 0x0L) +#define CSR_CTRL_RESET_SIZE 1 +static inline uint32_t ctrl_reset_read(void) { + return csr_read_simple((CSR_BASE + 0x0L)); +} +static inline void ctrl_reset_write(uint32_t v) { + csr_write_simple(v, (CSR_BASE + 0x0L)); +} +#define CSR_CTRL_RESET_SOC_RST_OFFSET 0 +#define CSR_CTRL_RESET_SOC_RST_SIZE 1 +static inline uint32_t ctrl_reset_soc_rst_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 0) & mask ); +} +static inline uint32_t ctrl_reset_soc_rst_read(void) { + uint32_t word = ctrl_reset_read(); + return ctrl_reset_soc_rst_extract(word); +} +static inline uint32_t ctrl_reset_soc_rst_replace(uint32_t oldword, uint32_t plain_value) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return (oldword & (~(mask << 0))) | (mask & plain_value)<< 0 ; +} +static inline void ctrl_reset_soc_rst_write(uint32_t plain_value) { + uint32_t oldword = ctrl_reset_read(); + uint32_t newword = ctrl_reset_soc_rst_replace(oldword, plain_value); + ctrl_reset_write(newword); +} +#define CSR_CTRL_RESET_CPU_RST_OFFSET 1 +#define CSR_CTRL_RESET_CPU_RST_SIZE 1 +static inline uint32_t ctrl_reset_cpu_rst_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 1) & mask ); +} +static inline uint32_t ctrl_reset_cpu_rst_read(void) { + uint32_t word = ctrl_reset_read(); + return ctrl_reset_cpu_rst_extract(word); +} +static inline uint32_t ctrl_reset_cpu_rst_replace(uint32_t oldword, uint32_t plain_value) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return (oldword & (~(mask << 1))) | (mask & plain_value)<< 1 ; +} +static inline void ctrl_reset_cpu_rst_write(uint32_t plain_value) { + uint32_t oldword = ctrl_reset_read(); + uint32_t newword = ctrl_reset_cpu_rst_replace(oldword, plain_value); + ctrl_reset_write(newword); +} +#define CSR_CTRL_SCRATCH_ADDR (CSR_BASE + 0x4L) +#define CSR_CTRL_SCRATCH_SIZE 1 +static inline uint32_t ctrl_scratch_read(void) { + return csr_read_simple((CSR_BASE + 0x4L)); +} +static inline void ctrl_scratch_write(uint32_t v) { + csr_write_simple(v, (CSR_BASE + 0x4L)); +} +#define CSR_CTRL_BUS_ERRORS_ADDR (CSR_BASE + 0x8L) +#define CSR_CTRL_BUS_ERRORS_SIZE 1 +static inline uint32_t ctrl_bus_errors_read(void) { + return csr_read_simple((CSR_BASE + 0x8L)); +} + +/* ethmac */ +#define CSR_ETHMAC_BASE (CSR_BASE + 0x800L) +#define CSR_ETHMAC_SRAM_WRITER_SLOT_ADDR (CSR_BASE + 0x800L) +#define CSR_ETHMAC_SRAM_WRITER_SLOT_SIZE 1 +static inline uint32_t ethmac_sram_writer_slot_read(void) { + return csr_read_simple((CSR_BASE + 0x800L)); +} +#define CSR_ETHMAC_SRAM_WRITER_LENGTH_ADDR (CSR_BASE + 0x804L) +#define CSR_ETHMAC_SRAM_WRITER_LENGTH_SIZE 1 +static inline uint32_t ethmac_sram_writer_length_read(void) { + return csr_read_simple((CSR_BASE + 0x804L)); +} +#define CSR_ETHMAC_SRAM_WRITER_ERRORS_ADDR (CSR_BASE + 0x808L) +#define CSR_ETHMAC_SRAM_WRITER_ERRORS_SIZE 1 +static inline uint32_t ethmac_sram_writer_errors_read(void) { + return csr_read_simple((CSR_BASE + 0x808L)); +} +#define CSR_ETHMAC_SRAM_WRITER_EV_STATUS_ADDR (CSR_BASE + 0x80cL) +#define CSR_ETHMAC_SRAM_WRITER_EV_STATUS_SIZE 1 +static inline uint32_t ethmac_sram_writer_ev_status_read(void) { + return csr_read_simple((CSR_BASE + 0x80cL)); +} +#define CSR_ETHMAC_SRAM_WRITER_EV_STATUS_AVAILABLE_OFFSET 0 +#define CSR_ETHMAC_SRAM_WRITER_EV_STATUS_AVAILABLE_SIZE 1 +static inline uint32_t ethmac_sram_writer_ev_status_available_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 0) & mask ); +} +static inline uint32_t ethmac_sram_writer_ev_status_available_read(void) { + uint32_t word = ethmac_sram_writer_ev_status_read(); + return ethmac_sram_writer_ev_status_available_extract(word); +} +#define CSR_ETHMAC_SRAM_WRITER_EV_PENDING_ADDR (CSR_BASE + 0x810L) +#define CSR_ETHMAC_SRAM_WRITER_EV_PENDING_SIZE 1 +static inline uint32_t ethmac_sram_writer_ev_pending_read(void) { + return csr_read_simple((CSR_BASE + 0x810L)); +} +static inline void ethmac_sram_writer_ev_pending_write(uint32_t v) { + csr_write_simple(v, (CSR_BASE + 0x810L)); +} +#define CSR_ETHMAC_SRAM_WRITER_EV_PENDING_AVAILABLE_OFFSET 0 +#define CSR_ETHMAC_SRAM_WRITER_EV_PENDING_AVAILABLE_SIZE 1 +static inline uint32_t ethmac_sram_writer_ev_pending_available_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 0) & mask ); +} +static inline uint32_t ethmac_sram_writer_ev_pending_available_read(void) { + uint32_t word = ethmac_sram_writer_ev_pending_read(); + return ethmac_sram_writer_ev_pending_available_extract(word); +} +static inline uint32_t ethmac_sram_writer_ev_pending_available_replace(uint32_t oldword, uint32_t plain_value) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return (oldword & (~(mask << 0))) | (mask & plain_value)<< 0 ; +} +static inline void ethmac_sram_writer_ev_pending_available_write(uint32_t plain_value) { + uint32_t oldword = ethmac_sram_writer_ev_pending_read(); + uint32_t newword = ethmac_sram_writer_ev_pending_available_replace(oldword, plain_value); + ethmac_sram_writer_ev_pending_write(newword); +} +#define CSR_ETHMAC_SRAM_WRITER_EV_ENABLE_ADDR (CSR_BASE + 0x814L) +#define CSR_ETHMAC_SRAM_WRITER_EV_ENABLE_SIZE 1 +static inline uint32_t ethmac_sram_writer_ev_enable_read(void) { + return csr_read_simple((CSR_BASE + 0x814L)); +} +static inline void ethmac_sram_writer_ev_enable_write(uint32_t v) { + csr_write_simple(v, (CSR_BASE + 0x814L)); +} +#define CSR_ETHMAC_SRAM_WRITER_EV_ENABLE_AVAILABLE_OFFSET 0 +#define CSR_ETHMAC_SRAM_WRITER_EV_ENABLE_AVAILABLE_SIZE 1 +static inline uint32_t ethmac_sram_writer_ev_enable_available_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 0) & mask ); +} +static inline uint32_t ethmac_sram_writer_ev_enable_available_read(void) { + uint32_t word = ethmac_sram_writer_ev_enable_read(); + return ethmac_sram_writer_ev_enable_available_extract(word); +} +static inline uint32_t ethmac_sram_writer_ev_enable_available_replace(uint32_t oldword, uint32_t plain_value) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return (oldword & (~(mask << 0))) | (mask & plain_value)<< 0 ; +} +static inline void ethmac_sram_writer_ev_enable_available_write(uint32_t plain_value) { + uint32_t oldword = ethmac_sram_writer_ev_enable_read(); + uint32_t newword = ethmac_sram_writer_ev_enable_available_replace(oldword, plain_value); + ethmac_sram_writer_ev_enable_write(newword); +} +#define CSR_ETHMAC_SRAM_READER_START_ADDR (CSR_BASE + 0x818L) +#define CSR_ETHMAC_SRAM_READER_START_SIZE 1 +static inline uint32_t ethmac_sram_reader_start_read(void) { + return csr_read_simple((CSR_BASE + 0x818L)); +} +static inline void ethmac_sram_reader_start_write(uint32_t v) { + csr_write_simple(v, (CSR_BASE + 0x818L)); +} +#define CSR_ETHMAC_SRAM_READER_READY_ADDR (CSR_BASE + 0x81cL) +#define CSR_ETHMAC_SRAM_READER_READY_SIZE 1 +static inline uint32_t ethmac_sram_reader_ready_read(void) { + return csr_read_simple((CSR_BASE + 0x81cL)); +} +#define CSR_ETHMAC_SRAM_READER_LEVEL_ADDR (CSR_BASE + 0x820L) +#define CSR_ETHMAC_SRAM_READER_LEVEL_SIZE 1 +static inline uint32_t ethmac_sram_reader_level_read(void) { + return csr_read_simple((CSR_BASE + 0x820L)); +} +#define CSR_ETHMAC_SRAM_READER_SLOT_ADDR (CSR_BASE + 0x824L) +#define CSR_ETHMAC_SRAM_READER_SLOT_SIZE 1 +static inline uint32_t ethmac_sram_reader_slot_read(void) { + return csr_read_simple((CSR_BASE + 0x824L)); +} +static inline void ethmac_sram_reader_slot_write(uint32_t v) { + csr_write_simple(v, (CSR_BASE + 0x824L)); +} +#define CSR_ETHMAC_SRAM_READER_LENGTH_ADDR (CSR_BASE + 0x828L) +#define CSR_ETHMAC_SRAM_READER_LENGTH_SIZE 1 +static inline uint32_t ethmac_sram_reader_length_read(void) { + return csr_read_simple((CSR_BASE + 0x828L)); +} +static inline void ethmac_sram_reader_length_write(uint32_t v) { + csr_write_simple(v, (CSR_BASE + 0x828L)); +} +#define CSR_ETHMAC_SRAM_READER_EV_STATUS_ADDR (CSR_BASE + 0x82cL) +#define CSR_ETHMAC_SRAM_READER_EV_STATUS_SIZE 1 +static inline uint32_t ethmac_sram_reader_ev_status_read(void) { + return csr_read_simple((CSR_BASE + 0x82cL)); +} +#define CSR_ETHMAC_SRAM_READER_EV_STATUS_EVENT0_OFFSET 0 +#define CSR_ETHMAC_SRAM_READER_EV_STATUS_EVENT0_SIZE 1 +static inline uint32_t ethmac_sram_reader_ev_status_event0_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 0) & mask ); +} +static inline uint32_t ethmac_sram_reader_ev_status_event0_read(void) { + uint32_t word = ethmac_sram_reader_ev_status_read(); + return ethmac_sram_reader_ev_status_event0_extract(word); +} +#define CSR_ETHMAC_SRAM_READER_EV_PENDING_ADDR (CSR_BASE + 0x830L) +#define CSR_ETHMAC_SRAM_READER_EV_PENDING_SIZE 1 +static inline uint32_t ethmac_sram_reader_ev_pending_read(void) { + return csr_read_simple((CSR_BASE + 0x830L)); +} +static inline void ethmac_sram_reader_ev_pending_write(uint32_t v) { + csr_write_simple(v, (CSR_BASE + 0x830L)); +} +#define CSR_ETHMAC_SRAM_READER_EV_PENDING_EVENT0_OFFSET 0 +#define CSR_ETHMAC_SRAM_READER_EV_PENDING_EVENT0_SIZE 1 +static inline uint32_t ethmac_sram_reader_ev_pending_event0_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 0) & mask ); +} +static inline uint32_t ethmac_sram_reader_ev_pending_event0_read(void) { + uint32_t word = ethmac_sram_reader_ev_pending_read(); + return ethmac_sram_reader_ev_pending_event0_extract(word); +} +static inline uint32_t ethmac_sram_reader_ev_pending_event0_replace(uint32_t oldword, uint32_t plain_value) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return (oldword & (~(mask << 0))) | (mask & plain_value)<< 0 ; +} +static inline void ethmac_sram_reader_ev_pending_event0_write(uint32_t plain_value) { + uint32_t oldword = ethmac_sram_reader_ev_pending_read(); + uint32_t newword = ethmac_sram_reader_ev_pending_event0_replace(oldword, plain_value); + ethmac_sram_reader_ev_pending_write(newword); +} +#define CSR_ETHMAC_SRAM_READER_EV_ENABLE_ADDR (CSR_BASE + 0x834L) +#define CSR_ETHMAC_SRAM_READER_EV_ENABLE_SIZE 1 +static inline uint32_t ethmac_sram_reader_ev_enable_read(void) { + return csr_read_simple((CSR_BASE + 0x834L)); +} +static inline void ethmac_sram_reader_ev_enable_write(uint32_t v) { + csr_write_simple(v, (CSR_BASE + 0x834L)); +} +#define CSR_ETHMAC_SRAM_READER_EV_ENABLE_EVENT0_OFFSET 0 +#define CSR_ETHMAC_SRAM_READER_EV_ENABLE_EVENT0_SIZE 1 +static inline uint32_t ethmac_sram_reader_ev_enable_event0_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 0) & mask ); +} +static inline uint32_t ethmac_sram_reader_ev_enable_event0_read(void) { + uint32_t word = ethmac_sram_reader_ev_enable_read(); + return ethmac_sram_reader_ev_enable_event0_extract(word); +} +static inline uint32_t ethmac_sram_reader_ev_enable_event0_replace(uint32_t oldword, uint32_t plain_value) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return (oldword & (~(mask << 0))) | (mask & plain_value)<< 0 ; +} +static inline void ethmac_sram_reader_ev_enable_event0_write(uint32_t plain_value) { + uint32_t oldword = ethmac_sram_reader_ev_enable_read(); + uint32_t newword = ethmac_sram_reader_ev_enable_event0_replace(oldword, plain_value); + ethmac_sram_reader_ev_enable_write(newword); +} +#define CSR_ETHMAC_PREAMBLE_CRC_ADDR (CSR_BASE + 0x838L) +#define CSR_ETHMAC_PREAMBLE_CRC_SIZE 1 +static inline uint32_t ethmac_preamble_crc_read(void) { + return csr_read_simple((CSR_BASE + 0x838L)); +} +#define CSR_ETHMAC_RX_DATAPATH_PREAMBLE_ERRORS_ADDR (CSR_BASE + 0x83cL) +#define CSR_ETHMAC_RX_DATAPATH_PREAMBLE_ERRORS_SIZE 1 +static inline uint32_t ethmac_rx_datapath_preamble_errors_read(void) { + return csr_read_simple((CSR_BASE + 0x83cL)); +} +#define CSR_ETHMAC_RX_DATAPATH_CRC_ERRORS_ADDR (CSR_BASE + 0x840L) +#define CSR_ETHMAC_RX_DATAPATH_CRC_ERRORS_SIZE 1 +static inline uint32_t ethmac_rx_datapath_crc_errors_read(void) { + return csr_read_simple((CSR_BASE + 0x840L)); +} + +/* ethphy */ +#define CSR_ETHPHY_BASE (CSR_BASE + 0x1000L) +#define CSR_ETHPHY_CRG_RESET_ADDR (CSR_BASE + 0x1000L) +#define CSR_ETHPHY_CRG_RESET_SIZE 1 +static inline uint32_t ethphy_crg_reset_read(void) { + return csr_read_simple((CSR_BASE + 0x1000L)); +} +static inline void ethphy_crg_reset_write(uint32_t v) { + csr_write_simple(v, (CSR_BASE + 0x1000L)); +} +#define CSR_ETHPHY_RX_INBAND_STATUS_ADDR (CSR_BASE + 0x1004L) +#define CSR_ETHPHY_RX_INBAND_STATUS_SIZE 1 +static inline uint32_t ethphy_rx_inband_status_read(void) { + return csr_read_simple((CSR_BASE + 0x1004L)); +} +#define CSR_ETHPHY_RX_INBAND_STATUS_LINK_STATUS_OFFSET 0 +#define CSR_ETHPHY_RX_INBAND_STATUS_LINK_STATUS_SIZE 1 +static inline uint32_t ethphy_rx_inband_status_link_status_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 0) & mask ); +} +static inline uint32_t ethphy_rx_inband_status_link_status_read(void) { + uint32_t word = ethphy_rx_inband_status_read(); + return ethphy_rx_inband_status_link_status_extract(word); +} +#define CSR_ETHPHY_RX_INBAND_STATUS_CLOCK_SPEED_OFFSET 1 +#define CSR_ETHPHY_RX_INBAND_STATUS_CLOCK_SPEED_SIZE 1 +static inline uint32_t ethphy_rx_inband_status_clock_speed_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 1) & mask ); +} +static inline uint32_t ethphy_rx_inband_status_clock_speed_read(void) { + uint32_t word = ethphy_rx_inband_status_read(); + return ethphy_rx_inband_status_clock_speed_extract(word); +} +#define CSR_ETHPHY_RX_INBAND_STATUS_DUPLEX_STATUS_OFFSET 2 +#define CSR_ETHPHY_RX_INBAND_STATUS_DUPLEX_STATUS_SIZE 1 +static inline uint32_t ethphy_rx_inband_status_duplex_status_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 2) & mask ); +} +static inline uint32_t ethphy_rx_inband_status_duplex_status_read(void) { + uint32_t word = ethphy_rx_inband_status_read(); + return ethphy_rx_inband_status_duplex_status_extract(word); +} +#define CSR_ETHPHY_MDIO_W_ADDR (CSR_BASE + 0x1008L) +#define CSR_ETHPHY_MDIO_W_SIZE 1 +static inline uint32_t ethphy_mdio_w_read(void) { + return csr_read_simple((CSR_BASE + 0x1008L)); +} +static inline void ethphy_mdio_w_write(uint32_t v) { + csr_write_simple(v, (CSR_BASE + 0x1008L)); +} +#define CSR_ETHPHY_MDIO_W_MDC_OFFSET 0 +#define CSR_ETHPHY_MDIO_W_MDC_SIZE 1 +static inline uint32_t ethphy_mdio_w_mdc_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 0) & mask ); +} +static inline uint32_t ethphy_mdio_w_mdc_read(void) { + uint32_t word = ethphy_mdio_w_read(); + return ethphy_mdio_w_mdc_extract(word); +} +static inline uint32_t ethphy_mdio_w_mdc_replace(uint32_t oldword, uint32_t plain_value) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return (oldword & (~(mask << 0))) | (mask & plain_value)<< 0 ; +} +static inline void ethphy_mdio_w_mdc_write(uint32_t plain_value) { + uint32_t oldword = ethphy_mdio_w_read(); + uint32_t newword = ethphy_mdio_w_mdc_replace(oldword, plain_value); + ethphy_mdio_w_write(newword); +} +#define CSR_ETHPHY_MDIO_W_OE_OFFSET 1 +#define CSR_ETHPHY_MDIO_W_OE_SIZE 1 +static inline uint32_t ethphy_mdio_w_oe_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 1) & mask ); +} +static inline uint32_t ethphy_mdio_w_oe_read(void) { + uint32_t word = ethphy_mdio_w_read(); + return ethphy_mdio_w_oe_extract(word); +} +static inline uint32_t ethphy_mdio_w_oe_replace(uint32_t oldword, uint32_t plain_value) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return (oldword & (~(mask << 1))) | (mask & plain_value)<< 1 ; +} +static inline void ethphy_mdio_w_oe_write(uint32_t plain_value) { + uint32_t oldword = ethphy_mdio_w_read(); + uint32_t newword = ethphy_mdio_w_oe_replace(oldword, plain_value); + ethphy_mdio_w_write(newword); +} +#define CSR_ETHPHY_MDIO_W_W_OFFSET 2 +#define CSR_ETHPHY_MDIO_W_W_SIZE 1 +static inline uint32_t ethphy_mdio_w_w_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 2) & mask ); +} +static inline uint32_t ethphy_mdio_w_w_read(void) { + uint32_t word = ethphy_mdio_w_read(); + return ethphy_mdio_w_w_extract(word); +} +static inline uint32_t ethphy_mdio_w_w_replace(uint32_t oldword, uint32_t plain_value) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return (oldword & (~(mask << 2))) | (mask & plain_value)<< 2 ; +} +static inline void ethphy_mdio_w_w_write(uint32_t plain_value) { + uint32_t oldword = ethphy_mdio_w_read(); + uint32_t newword = ethphy_mdio_w_w_replace(oldword, plain_value); + ethphy_mdio_w_write(newword); +} +#define CSR_ETHPHY_MDIO_R_ADDR (CSR_BASE + 0x100cL) +#define CSR_ETHPHY_MDIO_R_SIZE 1 +static inline uint32_t ethphy_mdio_r_read(void) { + return csr_read_simple((CSR_BASE + 0x100cL)); +} +#define CSR_ETHPHY_MDIO_R_R_OFFSET 0 +#define CSR_ETHPHY_MDIO_R_R_SIZE 1 +static inline uint32_t ethphy_mdio_r_r_extract(uint32_t oldword) { + uint32_t mask = ((uint32_t)(1 << 1)-1); + return ( (oldword >> 0) & mask ); +} +static inline uint32_t ethphy_mdio_r_r_read(void) { + uint32_t word = ethphy_mdio_r_read(); + return ethphy_mdio_r_r_extract(word); +} + +#endif diff --git a/gateware/liteeth/software/include/generated/git.h b/gateware/liteeth/software/include/generated/git.h new file mode 100644 index 0000000..7e521a3 --- /dev/null +++ b/gateware/liteeth/software/include/generated/git.h @@ -0,0 +1,8 @@ +//-------------------------------------------------------------------------------- +// Auto-generated by LiteX (8159b5ca) on 2023-02-07 21:33:18 +//-------------------------------------------------------------------------------- +#ifndef __GENERATED_GIT_H +#define __GENERATED_GIT_H + +#define LITEX_GIT_SHA1 "8159b5ca" +#endif diff --git a/gateware/liteeth/software/include/generated/mem.h b/gateware/liteeth/software/include/generated/mem.h new file mode 100644 index 0000000..5996c5e --- /dev/null +++ b/gateware/liteeth/software/include/generated/mem.h @@ -0,0 +1,20 @@ +//-------------------------------------------------------------------------------- +// Auto-generated by LiteX (8159b5ca) on 2023-02-07 21:33:18 +//-------------------------------------------------------------------------------- +#ifndef __GENERATED_MEM_H +#define __GENERATED_MEM_H + +#ifndef ETHMAC_BASE +#define ETHMAC_BASE 0x00020000L +#define ETHMAC_SIZE 0x00002000 +#endif + +#ifndef CSR_BASE +#define CSR_BASE 0x00000000L +#define CSR_SIZE 0x00010000 +#endif + +#ifndef MEM_REGIONS +#define MEM_REGIONS "ETHMAC 0x00020000 0x2000 \nCSR 0x00000000 0x10000 " +#endif +#endif diff --git a/gateware/liteeth/software/include/generated/soc.h b/gateware/liteeth/software/include/generated/soc.h new file mode 100644 index 0000000..b2f186a --- /dev/null +++ b/gateware/liteeth/software/include/generated/soc.h @@ -0,0 +1,56 @@ +//-------------------------------------------------------------------------------- +// Auto-generated by LiteX (8159b5ca) on 2023-02-07 21:33:18 +//-------------------------------------------------------------------------------- +#ifndef __GENERATED_SOC_H +#define __GENERATED_SOC_H +#define CONFIG_CLOCK_FREQUENCY 10000000 +#define CONFIG_CPU_TYPE_NONE +#define CONFIG_CPU_VARIANT_STANDARD +#define CONFIG_CPU_HUMAN_NAME "Unknown" +#define CONFIG_CSR_DATA_WIDTH 32 +#define CONFIG_CSR_ALIGNMENT 32 +#define CONFIG_BUS_STANDARD "WISHBONE" +#define CONFIG_BUS_DATA_WIDTH 32 +#define CONFIG_BUS_ADDRESS_WIDTH 32 +#define CONFIG_BUS_BURSTING 0 +#define ETHMAC_RX_SLOTS 2 +#define ETHMAC_TX_SLOTS 2 +#define ETHMAC_SLOT_SIZE 2048 + +#ifndef __ASSEMBLER__ +static inline int config_clock_frequency_read(void) { + return 10000000; +} +static inline const char * config_cpu_human_name_read(void) { + return "Unknown"; +} +static inline int config_csr_data_width_read(void) { + return 32; +} +static inline int config_csr_alignment_read(void) { + return 32; +} +static inline const char * config_bus_standard_read(void) { + return "WISHBONE"; +} +static inline int config_bus_data_width_read(void) { + return 32; +} +static inline int config_bus_address_width_read(void) { + return 32; +} +static inline int config_bus_bursting_read(void) { + return 0; +} +static inline int ethmac_rx_slots_read(void) { + return 2; +} +static inline int ethmac_tx_slots_read(void) { + return 2; +} +static inline int ethmac_slot_size_read(void) { + return 2048; +} +#endif // !__ASSEMBLER__ + +#endif diff --git a/gateware/main.py b/gateware/main.py index 1280d5f..5b1884c 100644 --- a/gateware/main.py +++ b/gateware/main.py @@ -16,6 +16,7 @@ import os from memory import * from led import * +from eth import * import i2c import test_i2c @@ -103,6 +104,9 @@ class Core(Elaboratable): m.submodules.uart = uart.UART(10e6) + # Ethernet + m.submodules.eth = LiteEth() + # Counter #m.d.sync += self.count.eq(self.count + 1) #with m.If(self.count >= 50000000): diff --git a/gateware/test.gtwk b/gateware/test.gtwk new file mode 100644 index 0000000..8f63491 --- /dev/null +++ b/gateware/test.gtwk @@ -0,0 +1,3 @@ +[dumpfile] "/home/david/ARVP/sonar_fpga/gateware/test.vcd" +[dumpfile_size] 33226 +[treeopen] top. diff --git a/requirements.txt b/requirements.txt index ac0c1f0..f879280 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,5 @@ git+https://github.com/amaranth-lang/amaranth git+https://github.com/amaranth-lang/amaranth-soc git+https://github.com/minerva-cpu/minerva git+https://github.com/amaranth-community-unofficial/amlib +sphinx +sphinxcontrib-wavedrom