Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
en:verilog:ethernet:readme [2014/11/20 02:25] alex created |
en:verilog:ethernet:readme [2019/04/04 07:34] (current) alex |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Verilog Ethernet Components Readme ====== | ====== Verilog Ethernet Components Readme ====== | ||
+ | |||
+ | For more information and updates: http://alexforencich.com/wiki/en/verilog/ethernet/start | ||
+ | |||
+ | GitHub repository: https://github.com/alexforencich/verilog-ethernet | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | Collection of Ethernet-related components for both gigabit and 10G packet processing (8 bit and 64 bit datapaths). Includes modules for handling Ethernet frames as well as IP, UDP, and ARP and the components for constructing a complete UDP/IP stack. Includes full MyHDL testbench with intelligent bus cosimulation endpoints. | + | Collection of Ethernet-related components for both gigabit and 10G packet |
+ | processing (8 bit and 64 bit datapaths). Includes modules for handling | ||
+ | Ethernet frames as well as IP, UDP, and ARP and the components for | ||
+ | constructing a complete UDP/IP stack. Includes MAC modules for gigabit and | ||
+ | 10G, a 10G PCS/PMA PHY module, and a 10G combination MAC/PCS/PMA module. Also | ||
+ | includes full MyHDL testbench with intelligent bus cosimulation endpoints. | ||
+ | |||
+ | For IP and ARP support only, use ip_complete (1G) or ip_complete_64 (10G). | ||
+ | |||
+ | For UDP, IP, and ARP support, use udp_complete (1G) or udp_complete_64 (10G). | ||
+ | |||
+ | Top level gigabit and 10G MAC modules are eth_mac_*, with various interfaces | ||
+ | and with/without FIFOs. Top level 10G PCS/PMA PHY module is eth_phy_10g. Top | ||
+ | level 10G MAC/PCS/PMA combination module is eth_mac_phy_10g. | ||
===== Documentation ===== | ===== Documentation ===== | ||
+ | |||
+ | ==== arp module ==== | ||
+ | |||
+ | ARP handling logic with parametrizable retry timeout parameters. | ||
+ | |||
+ | ==== arp_64 module ==== | ||
+ | |||
+ | ARP handling logic with parametrizable retry timeout parameters and 64 bit | ||
+ | datapath for 10G Ethernet. | ||
+ | |||
+ | ==== arp_cache module ==== | ||
+ | |||
+ | Basic hash-based cache for ARP entries. Parametrizable depth. | ||
==== arp_eth_rx module ==== | ==== arp_eth_rx module ==== | ||
Line 23: | Line 53: | ||
ARP frame transmitter with 64 bit datapath for 10G Ethernet. | ARP frame transmitter with 64 bit datapath for 10G Ethernet. | ||
- | ==== eth_arb_mux_N module ==== | + | ==== axis_eth_fcs module ==== |
+ | |||
+ | Ethernet frame check sequence calculator. | ||
+ | |||
+ | ==== axis_eth_fcs_64 module ==== | ||
+ | |||
+ | Ethernet frame check sequence calculator with 64 bit datapath for 10G Ethernet. | ||
+ | |||
+ | ==== axis_eth_fcs_check module ==== | ||
+ | |||
+ | Ethernet frame check sequence checker. | ||
+ | |||
+ | ==== axis_eth_fcs_insert module ==== | ||
+ | |||
+ | Ethernet frame check sequence inserter. | ||
+ | |||
+ | ==== axis_gmii_rx module ==== | ||
+ | |||
+ | AXI stream GMII/MII frame receiver with clock enable and MII select. | ||
+ | |||
+ | ==== axis_gmii_tx module ==== | ||
+ | |||
+ | AXI stream GMII/MII frame transmitter with clock enable and MII select. | ||
+ | |||
+ | ==== axis_xgmii_rx_32 module ==== | ||
+ | |||
+ | AXI stream XGMII frame receiver with 32 bit datapath. | ||
+ | |||
+ | ==== axis_xgmii_rx_64 module ==== | ||
+ | |||
+ | AXI stream XGMII frame receiver with 64 bit datapath. | ||
+ | |||
+ | ==== axis_xgmii_tx_32 module ==== | ||
- | Ethernet frame arbitrated muliplexer with 8 bit data width for gigabit Ethernet. Supports priority and round-robin arbitration. | + | AXI stream XGMII frame transmitter with 32 bit datapath. |
- | Can be generated with arbitrary port counts with eth_arb_mux.py. | + | ==== axis_xgmii_tx_64 module ==== |
- | ==== eth_arb_mux_64_N module ==== | + | AXI stream XGMII frame transmitter with 64 bit datapath. |
- | Ethernet frame arbitrated muliplexer with 8 bit data width for 10G Ethernet. Supports priority and round-robin arbitration. | + | ==== eth_arb_mux module ==== |
- | Can be generated with arbitrary port counts with eth_arb_mux_64.py. | + | Ethernet frame arbitrated muliplexer with parametrizable data width and port |
+ | count. Supports priority and round-robin arbitration. | ||
==== eth_axis_rx module ==== | ==== eth_axis_rx module ==== | ||
Line 51: | Line 114: | ||
Ethernet frame transmitter with 64 bit datapath for 10G Ethernet. | Ethernet frame transmitter with 64 bit datapath for 10G Ethernet. | ||
- | ==== eth_demux_N module ==== | + | ==== eth_demux module ==== |
- | Ethernet frame demuliplexer with 8 bit data width for gigabit Ethernet. Supports priority and round-robin arbitration. | + | Ethernet frame demuliplexer with parametrizable data width and port count. |
+ | Supports priority and round-robin arbitration. | ||
- | Can be generated with arbitrary port counts with eth_demux.py. | + | ==== eth_mac_1g module ==== |
- | ==== eth_demux_64_N module ==== | + | Gigabit Ethernet MAC with GMII interface. |
- | Ethernet frame demuliplexer with 64 bit data width for 10G Ethernet. Supports priority and round-robin arbitration. | + | ==== eth_mac_1g_fifo module ==== |
- | Can be generated with arbitrary port counts with eth_demux_64.py. | + | Gigabit Ethernet MAC with GMII interface and FIFOs. |
- | ==== eth_mux_N module ==== | + | ==== eth_mac_1g_gmii module ==== |
- | Ethernet frame muliplexer with 8 bit data width for gigabit Ethernet. Supports priority and round-robin arbitration. | + | Tri-mode Ethernet MAC with GMII/MII interface and automatic PHY rate |
+ | adaptation logic. | ||
- | Can be generated with arbitrary port counts with eth_mux.py. | + | ==== eth_mac_1g_gmii_fifo module ==== |
- | ==== eth_mux_64_N module ==== | + | Tri-mode Ethernet MAC with GMII/MII interface, FIFOs, and automatic PHY rate |
+ | adaptation logic. | ||
- | Ethernet frame muliplexer with 64 bit data width for 10G Ethernet. Supports priority and round-robin arbitration. | + | ==== eth_mac_1g_rgmii module ==== |
- | Can be generated with arbitrary port counts with eth_mux_64.py. | + | Tri-mode Ethernet MAC with RGMII interface and automatic PHY rate adaptation |
+ | logic. | ||
+ | |||
+ | ==== eth_mac_1g_rgmii_fifo module ==== | ||
+ | |||
+ | Tri-mode Ethernet MAC with RGMII interface, FIFOs, and automatic PHY rate | ||
+ | adaptation logic. | ||
+ | |||
+ | ==== eth_mac_10g module ==== | ||
+ | |||
+ | 10G Ethernet MAC with XGMII interface. Datapath selectable between 32 and 64 | ||
+ | bits. | ||
+ | |||
+ | ==== eth_mac_10g_fifo module ==== | ||
+ | |||
+ | 10G Ethernet MAC with XGMII interface and FIFOs. Datapath selectable between | ||
+ | 32 and 64 bits. | ||
+ | |||
+ | ==== eth_mac_mii module ==== | ||
+ | |||
+ | Ethernet MAC with MII interface. | ||
+ | |||
+ | ==== eth_mac_mii_fifo module ==== | ||
+ | |||
+ | Ethernet MAC with MII interface and FIFOs. | ||
+ | |||
+ | ==== eth_mac_phy_10g module ==== | ||
+ | |||
+ | 10G Ethernet MAC/PHY combination module with SERDES interface. | ||
+ | |||
+ | ==== eth_mac_phy_10g_fifo module ==== | ||
+ | |||
+ | 10G Ethernet MAC/PHY combination module with SERDES interface and FIFOs. | ||
+ | |||
+ | ==== eth_mac_phy_10g_rx module ==== | ||
+ | |||
+ | 10G Ethernet MAC/PHY combination module with SERDES interface, RX path. | ||
+ | |||
+ | ==== eth_mac_phy_10g_tx module ==== | ||
+ | |||
+ | 10G Ethernet MAC/PHY combination module with SERDES interface, TX path. | ||
+ | |||
+ | ==== eth_mux module ==== | ||
+ | |||
+ | Ethernet frame muliplexer with parametrizable data width and port count. | ||
+ | Supports priority and round-robin arbitration. | ||
+ | |||
+ | ==== eth_phy_10g module ==== | ||
+ | |||
+ | 10G Ethernet PCS/PMA PHY. | ||
+ | |||
+ | ==== eth_phy_10g_rx module ==== | ||
+ | |||
+ | 10G Ethernet PCS/PMA PHY receive-side logic. | ||
+ | |||
+ | ==== eth_phy_10g_rx_ber_mon module ==== | ||
+ | |||
+ | 10G Ethernet PCS/PMA PHY BER monitor. | ||
+ | |||
+ | ==== eth_phy_10g_rx_frame_sync module ==== | ||
+ | |||
+ | 10G Ethernet PCS/PMA PHY frame synchronizer. | ||
+ | |||
+ | ==== eth_phy_10g_tx module ==== | ||
+ | |||
+ | 10G Ethernet PCS/PMA PHY transmit-side logic. | ||
+ | |||
+ | ==== gmii_phy_if module ==== | ||
+ | |||
+ | GMII/MII PHY interface and clocking logic. | ||
==== ip module ==== | ==== ip module ==== | ||
- | IPv4 block with 8 bit data width for gigabit Ethernet. Manages IPv4 packet transmssion and reception. Interfaces with ARP module for MAC address lookup. | + | IPv4 block with 8 bit data width for gigabit Ethernet. Manages IPv4 packet |
+ | transmssion and reception. Interfaces with ARP module for MAC address lookup. | ||
==== ip_64 module ==== | ==== ip_64 module ==== | ||
- | IPv4 block with 64 bit data width for 10G Ethernet. Manages IPv4 packet transmssion and reception. Interfaces with ARP module for MAC address lookup. | + | IPv4 block with 64 bit data width for 10G Ethernet. Manages IPv4 packet |
+ | transmssion and reception. Interfaces with ARP module for MAC address lookup. | ||
- | ==== ip_arb_mux_N module ==== | + | ==== ip_arb_mux module ==== |
- | IP frame arbitrated muliplexer with 8 bit data width for gigabit | + | IP frame arbitrated muliplexer with parametrizable data width and port count. |
- | Ethernet. Supports priority and round-robin arbitration. | + | Supports priority and round-robin arbitration. |
- | Can be generated with arbitrary port counts with ip_arb_mux.py. | + | ==== ip_complete module ==== |
- | ==== ip_arb_mux_64_N module ==== | + | IPv4 module with ARP integration. |
- | IP frame arbitrated muliplexer with 8 bit data width for 10G Ethernet. Supports priority and round-robin arbitration. | + | Top level for gigabit IP stack. |
- | Can be generated with arbitrary port counts with ip_arb_mux_64.py. | + | ==== ip_complete_64 module ==== |
+ | |||
+ | IPv4 module with ARP integration and 64 bit data width for 10G Ethernet. | ||
+ | |||
+ | Top level for 10G IP stack. | ||
+ | |||
+ | ==== ip_demux module ==== | ||
+ | |||
+ | IP frame demuliplexer with parametrizable data width and port count. | ||
+ | Supports priority and round-robin arbitration. | ||
==== ip_eth_rx module ==== | ==== ip_eth_rx module ==== | ||
Line 112: | Line 258: | ||
IP frame transmitter with 64 bit datapath for 10G Ethernet. | IP frame transmitter with 64 bit datapath for 10G Ethernet. | ||
- | ==== ip_demux_N module ==== | + | ==== ip_mux module ==== |
- | IP frame demuliplexer with 8 bit data width for gigabit Ethernet. Supports priority and round-robin arbitration. | + | IP frame muliplexer with parametrizable data width and port count. |
+ | Supports priority and round-robin arbitration. | ||
- | Can be generated with arbitrary port counts with ip_demux.py. | + | ==== lfsr module ==== |
- | ==== ip_demux_64_N module ==== | + | Fully parametrizable combinatorial parallel LFSR/CRC module. |
- | IP frame demuliplexer with 64 bit data width for 10G Ethernet. Supports priority and round-robin arbitration. | + | ==== mii_phy_if module ==== |
- | Can be generated with arbitrary port counts with ip_demux_64.py. | + | MII PHY interface and clocking logic. |
- | ==== ip_mux_N module ==== | + | ==== rgmii_phy_if module ==== |
- | IP frame muliplexer with 8 bit data width for gigabit Ethernet. Supports priority and round-robin arbitration. | + | RGMII PHY interface and clocking logic. |
- | Can be generated with arbitrary port counts with ip_mux.py. | + | ==== udp module ==== |
- | ==== ip_mux_64_N module ==== | + | UDP block with 8 bit data width for gigabit Ethernet. Manages UDP packet |
+ | transmssion and reception. | ||
- | IP frame muliplexer with 64 bit data width for 10G Ethernet. Supports priority and round-robin arbitration. | + | ==== udp_64 module ==== |
- | Can be generated with arbitrary port counts with ip_mux_64.py. | + | UDP block with 64 bit data width for 10G Ethernet. Manages UDP packet |
+ | transmssion and reception. | ||
- | ==== udp_arb_mux_N module ==== | + | ==== udp_arb_mux module ==== |
- | UDP frame arbitrated muliplexer with 8 bit data width for gigabit Ethernet. Supports priority and round-robin arbitration. | + | UDP frame arbitrated muliplexer with parametrizable data width and port |
+ | count. Supports priority and round-robin arbitration. | ||
- | Can be generated with arbitrary port counts with udp_arb_mux.py. | + | ==== udp_checksum_gen module ==== |
- | ==== udp_arb_mux_64_N module ==== | + | UDP checksum generator module. Calculates UDP length, IP length, and |
+ | UDP checksum fields. | ||
- | UDP frame arbitrated muliplexer with 8 bit data width for 10G Ethernet. Supports priority and round-robin arbitration. | + | ==== udp_checksum_gen_64 module ==== |
- | Can be generated with arbitrary port counts with udp_arb_mux_64.py. | + | UDP checksum generator module with 64 bit datapath. Calculates UDP |
+ | length, IP length, and UDP checksum fields. | ||
+ | |||
+ | ==== udp_complete module ==== | ||
+ | |||
+ | UDP module with IPv4 and ARP integration. | ||
+ | |||
+ | Top level for gigabit UDP stack. | ||
+ | |||
+ | ==== udp_complete_64 module ==== | ||
+ | |||
+ | UDP module with IPv4 and ARP integration and 64 bit data width for 10G | ||
+ | Ethernet. | ||
+ | |||
+ | Top level for 10G UDP stack. | ||
+ | |||
+ | ==== udp_demux module ==== | ||
+ | |||
+ | UDP frame demuliplexer with parametrizable data width and port count. | ||
+ | Supports priority and round-robin arbitration. | ||
==== udp_ip_rx module ==== | ==== udp_ip_rx module ==== | ||
Line 164: | Line 334: | ||
UDP frame transmitter with 64 bit datapath for 10G Ethernet. | UDP frame transmitter with 64 bit datapath for 10G Ethernet. | ||
- | ==== udp_demux_N module ==== | + | ==== udp_mux module ==== |
- | UDP frame demuliplexer with 8 bit data width for gigabit Ethernet. Supports priority and round-robin arbitration. | + | UDP frame muliplexer with parametrizable data width and port count. |
+ | Supports priority and round-robin arbitration. | ||
- | Can be generated with arbitrary port counts with udp_demux.py. | + | ==== xgmii_baser_dec_64 module ==== |
- | ==== udp_demux_64_N module ==== | + | XGMII 10GBASE-R decoder for 10G PCS/PMA PHY. |
- | UDP frame demuliplexer with 64 bit data width for 10G Ethernet. Supports priority and round-robin arbitration. | + | ==== xgmii_baser_enc_64 module ==== |
- | Can be generated with arbitrary port counts with udp_demux_64.py. | + | XGMII 10GBASE-R encoder for 10G PCS/PMA PHY. |
- | ==== udp_mux_N module ==== | + | ==== xgmii_deinterleave module ==== |
- | UDP frame muliplexer with 8 bit data width for gigabit Ethernet. Supports priority and round-robin arbitration. | + | XGMII de-interleaver for interfacing with PHY cores that interleave the |
+ | control and data lines. | ||
- | Can be generated with arbitrary port counts with udp_mux.py. | + | ==== xgmii_interleave module ==== |
- | ==== udp_mux_64_N module ==== | + | XGMII interleaver for interfacing with PHY cores that interleave the control |
- | + | and data lines. | |
- | UDP frame muliplexer with 64 bit data width for 10G Ethernet. Supports priority and round-robin arbitration. | + | |
- | + | ||
- | Can be generated with arbitrary port counts with udp_mux_64.py. | + | |
==== Common signals ==== | ==== Common signals ==== | ||
Line 202: | Line 371: | ||
<code> | <code> | ||
+ | rtl/arp.v : ARP handling logic | ||
+ | rtl/arp_64.v : ARP handling logic (64 bit) | ||
+ | rtl/arp_cache.v : ARP LRU cache | ||
rtl/arp_eth_rx.v : ARP frame receiver | rtl/arp_eth_rx.v : ARP frame receiver | ||
rtl/arp_eth_rx_64.v : ARP frame receiver (64 bit) | rtl/arp_eth_rx_64.v : ARP frame receiver (64 bit) | ||
Line 207: | Line 379: | ||
rtl/arp_eth_tx_64.v : ARP frame transmitter (64 bit) | rtl/arp_eth_tx_64.v : ARP frame transmitter (64 bit) | ||
rtl/eth_arb_mux.py : Ethernet frame arbitrated multiplexer generator | rtl/eth_arb_mux.py : Ethernet frame arbitrated multiplexer generator | ||
- | rtl/eth_arb_mux_4.v : 4 port Ethernet frame arbitrated multiplexer | + | rtl/axis_eth_fcs.v : Ethernet FCS calculator |
- | rtl/eth_arb_mux_64.py : Ethernet frame arbitrated multiplexer generator (64 bit) | + | rtl/axis_eth_fcs_64.v : Ethernet FCS calculator (64 bit) |
- | rtl/eth_arb_mux_64_4.v : 4 port Ethernet frame arbitrated multiplexer (64 bit) | + | rtl/axis_eth_fcs_insert.v : Ethernet FCS inserter |
+ | rtl/axis_eth_fcs_check.v : Ethernet FCS checker | ||
+ | rtl/axis_gmii_rx.v : AXI stream GMII/MII receiver | ||
+ | rtl/axis_gmii_tx.v : AXI stream GMII/MII transmitter | ||
+ | rtl/axis_xgmii_rx_32.v : AXI stream XGMII receiver (32 bit) | ||
+ | rtl/axis_xgmii_rx_64.v : AXI stream XGMII receiver (64 bit) | ||
+ | rtl/axis_xgmii_tx_32.v : AXI stream XGMII transmitter (32 bit) | ||
+ | rtl/axis_xgmii_tx_64.v : AXI stream XGMII transmitter (64 bit) | ||
+ | rtl/eth_arb_mux.v : Ethernet frame arbitrated multiplexer | ||
rtl/eth_axis_rx.v : Ethernet frame receiver | rtl/eth_axis_rx.v : Ethernet frame receiver | ||
rtl/eth_axis_rx_64.v : Ethernet frame receiver (64 bit) | rtl/eth_axis_rx_64.v : Ethernet frame receiver (64 bit) | ||
rtl/eth_axis_tx.v : Ethernet frame transmitter | rtl/eth_axis_tx.v : Ethernet frame transmitter | ||
rtl/eth_axis_tx_64.v : Ethernet frame transmitter (64 bit) | rtl/eth_axis_tx_64.v : Ethernet frame transmitter (64 bit) | ||
- | rtl/eth_demux.py : Ethernet frame demultiplexer generator | + | rtl/eth_demux.v : Ethernet frame demultiplexer |
- | rtl/eth_demux_4.v : 4 port Ethernet frame demultiplexer | + | rtl/eth_mac_1g.v : Gigabit Ethernet GMII MAC |
- | rtl/eth_demux_64.py : Ethernet frame demultiplexer generator (64 bit) | + | rtl/eth_mac_1g_fifo.v : Gigabit Ethernet GMII MAC with FIFO |
- | rtl/eth_demux_64_4.v : 4 port Ethernet frame demultiplexer (64 bit) | + | rtl/eth_mac_1g_gmii.v : Tri-mode Ethernet GMII/MII MAC |
- | rtl/eth_mux.py : Ethernet frame multiplexer generator | + | rtl/eth_mac_1g_gmii_fifo.v : Tri-mode Ethernet GMII/MII MAC with FIFO |
- | rtl/eth_mux_4.v : 4 port Ethernet frame multiplexer | + | rtl/eth_mac_1g_rgmii.v : Tri-mode Ethernet RGMII MAC |
- | rtl/eth_mux_64.py : Ethernet frame multiplexer generator (64 bit) | + | rtl/eth_mac_1g_rgmii_fifo.v : Tri-mode Ethernet RGMII MAC with FIFO |
- | rtl/eth_mux_64_4.v : 4 port Ethernet frame multiplexer (64 bit) | + | rtl/eth_mac_10g.v : 10G Ethernet XGMII MAC |
+ | rtl/eth_mac_10g_fifo.v : 10G Ethernet XGMII MAC with FIFO | ||
+ | rtl/eth_mac_mii.v : Ethernet MII MAC | ||
+ | rtl/eth_mac_mii_fifo.v : Ethernet MII MAC with FIFO | ||
+ | rtl/eth_mac_phy_10g.v : 10G Ethernet XGMII MAC/PHY | ||
+ | rtl/eth_mac_phy_10g_fifo.v : 10G Ethernet XGMII MAC/PHY with FIFO | ||
+ | rtl/eth_mac_phy_10g_rx.v : 10G Ethernet XGMII MAC/PHY RX with FIFO | ||
+ | rtl/eth_mac_phy_10g_tx.v : 10G Ethernet XGMII MAC/PHY TX with FIFO | ||
+ | rtl/eth_mux.v : Ethernet frame multiplexer | ||
+ | rtl/gmii_phy_if.v : GMII PHY interface | ||
+ | rtl/iddr.v : Generic DDR input register | ||
rtl/ip.v : IPv4 block | rtl/ip.v : IPv4 block | ||
rtl/ip_64.v : IPv4 block (64 bit) | rtl/ip_64.v : IPv4 block (64 bit) | ||
- | rtl/ip_arb_mux.py : IP frame arbitrated multiplexer generator | + | rtl/ip_arb_mux.v : IP frame arbitrated multiplexer |
- | rtl/ip_arb_mux_4.v : 4 port IP frame arbitrated multiplexer | + | rtl/ip_complete.v : IPv4 stack (IP-ARP integration) |
- | rtl/ip_arb_mux_64.py : IP frame arbitrated multiplexer generator (64 bit) | + | rtl/ip_complete_64.v : IPv4 stack (IP-ARP integration) (64 bit) |
- | rtl/ip_arb_mux_64_4.v : 4 port IP frame arbitrated multiplexer (64 bit) | + | rtl/ip_demux.v : IP frame demultiplexer |
rtl/ip_eth_rx.v : IPv4 frame receiver | rtl/ip_eth_rx.v : IPv4 frame receiver | ||
rtl/ip_eth_rx_64.v : IPv4 frame receiver (64 bit) | rtl/ip_eth_rx_64.v : IPv4 frame receiver (64 bit) | ||
rtl/ip_eth_tx.v : IPv4 frame transmitter | rtl/ip_eth_tx.v : IPv4 frame transmitter | ||
rtl/ip_eth_tx_64.v : IPv4 frame transmitter (64 bit) | rtl/ip_eth_tx_64.v : IPv4 frame transmitter (64 bit) | ||
- | rtl/ip_demux.py : IP frame demultiplexer generator | + | rtl/ip_mux.v : IP frame multiplexer |
- | rtl/ip_demux_4.v : 4 port IP frame demultiplexer | + | rtl/lfsr.v : Generic LFSR/CRC module |
- | rtl/ip_demux_64.py : IP frame demultiplexer generator (64 bit) | + | rtl/oddr.v : Generic DDR output register |
- | rtl/ip_demux_64_4.v : 4 port IP frame demultiplexer (64 bit) | + | rtl/mii_phy_if.v : MII PHY interface |
- | rtl/ip_mux.py : IP frame multiplexer generator | + | rtl/rgmii_phy_if.v : RGMII PHY interface |
- | rtl/ip_mux_4.v : 4 port IP frame multiplexer | + | rtl/ssio_ddr_in.v : Generic source synchronous IO DDR input module |
- | rtl/ip_mux_64.py : IP frame multiplexer generator (64 bit) | + | rtl/ssio_ddr_in_diff.v : Generic source synchronous IO DDR differential input module |
- | rtl/ip_mux_64_4.v : 4 port IP frame multiplexer (64 bit) | + | rtl/ssio_ddr_out.v : Generic source synchronous IO DDR output module |
- | rtl/udp_arb_mux.py : UDP frame arbitrated multiplexer generator | + | rtl/ssio_ddr_out_diff.v : Generic source synchronous IO DDR differential output module |
- | rtl/udp_arb_mux_4.v : 4 port UDP frame arbitrated multiplexer | + | rtl/ssio_sdr_in.v : Generic source synchronous IO SDR input module |
- | rtl/udp_arb_mux_64.py : UDP frame arbitrated multiplexer generator (64 bit) | + | rtl/ssio_sdr_in_diff.v : Generic source synchronous IO SDR differential input module |
- | rtl/udp_arb_mux_64_4.v : 4 port UDP frame arbitrated multiplexer (64 bit) | + | rtl/ssio_sdr_out.v : Generic source synchronous IO SDR output module |
+ | rtl/ssio_sdr_out_diff.v : Generic source synchronous IO SDR differential output module | ||
+ | rtl/udp.v : UDP block | ||
+ | rtl/udp_64.v : UDP block (64 bit) | ||
+ | rtl/udp_arb_mux.v : UDP frame arbitrated multiplexer | ||
+ | rtl/udp_checksum_gen.v : UDP checksum generator | ||
+ | rtl/udp_checksum_gen_64.v : UDP checksum generator (64 bit) | ||
+ | rtl/udp_complete.v : UDP stack (IP-ARP-UDP) | ||
+ | rtl/udp_complete_64.v : UDP stack (IP-ARP-UDP) (64 bit) | ||
+ | rtl/udp_demux.v : UDP frame demultiplexer | ||
rtl/udp_ip_rx.v : UDP frame receiver | rtl/udp_ip_rx.v : UDP frame receiver | ||
rtl/udp_ip_rx_64.v : UDP frame receiver (64 bit) | rtl/udp_ip_rx_64.v : UDP frame receiver (64 bit) | ||
rtl/udp_ip_tx.v : UDP frame transmitter | rtl/udp_ip_tx.v : UDP frame transmitter | ||
rtl/udp_ip_tx_64.v : UDP frame transmitter (64 bit) | rtl/udp_ip_tx_64.v : UDP frame transmitter (64 bit) | ||
- | rtl/udp_demux.py : UDP frame demultiplexer generator | + | rtl/udp_mux.v : UDP frame multiplexer |
- | rtl/udp_demux_4.v : 4 port UDP frame demultiplexer | + | rtl/xgmii_baser_dec_64.v : XGMII 10GBASE-R decoder |
- | rtl/udp_demux_64.py : UDP frame demultiplexer generator (64 bit) | + | rtl/xgmii_baser_enc_64.v : XGMII 10GBASE-R encoder |
- | rtl/udp_demux_64_4.v : 4 port UDP frame demultiplexer (64 bit) | + | rtl/xgmii_deinterleave.v : XGMII data/control de-interleaver |
- | rtl/udp_mux.py : UDP frame multiplexer generator | + | rtl/xgmii_interleave.v : XGMII data/control interleaver |
- | rtl/udp_mux_4.v : 4 port UDP frame multiplexer | + | |
- | rtl/udp_mux_64.py : UDP frame multiplexer generator (64 bit) | + | |
- | rtl/udp_mux_64_4.v : 4 port UDP frame multiplexer (64 bit) | + | |
</code> | </code> | ||
Line 261: | Line 457: | ||
transfer with header data | transfer with header data | ||
+ | |||
<code> | <code> | ||
__ __ __ __ __ __ __ | __ __ __ __ __ __ __ | ||
Line 270: | Line 467: | ||
_____ | _____ | ||
hdr_data XXXXXXXXX_HDR_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | hdr_data XXXXXXXXX_HDR_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
- | ___________ _____ _____ | ||
- | tdata XXXXXXXXX_A0________X_A1__X_A2__XXXXXXXXXXXX | ||
___________ _____ _____ | ___________ _____ _____ | ||
tdata XXXXXXXXX_A0________X_A1__X_A2__XXXXXXXXXXXX | tdata XXXXXXXXX_A0________X_A1__X_A2__XXXXXXXXXXXX | ||
Line 288: | Line 483: | ||
two byte transfer with sink pause after each byte | two byte transfer with sink pause after each byte | ||
+ | |||
<code> | <code> | ||
__ __ __ __ __ __ __ __ __ | __ __ __ __ __ __ __ __ __ | ||
Line 307: | Line 503: | ||
two back-to-back packets, no pauses | two back-to-back packets, no pauses | ||
+ | |||
<code> | <code> | ||
__ __ __ __ __ __ __ __ __ | __ __ __ __ __ __ __ __ __ | ||
Line 326: | Line 523: | ||
bad frame | bad frame | ||
+ | |||
<code> | <code> | ||
__ __ __ __ __ __ | __ __ __ __ __ __ | ||
Line 346: | Line 544: | ||
===== Testing ===== | ===== Testing ===== | ||
- | Running the included testbenches requires MyHDL and Icarus Verilog. Make sure that myhdl.vpi is installed properly for cosimulation to work correctly. The testbenches can be run with a Python test runner like nose or py.test, or the individual test scripts can be run with python directly. | + | Running the included testbenches requires MyHDL and Icarus Verilog. Make sure |
+ | that myhdl.vpi is installed properly for cosimulation to work correctly. The | ||
+ | testbenches can be run with a Python test runner like nose or py.test, or the | ||
+ | individual test scripts can be run with python directly. | ||
==== Testbench Files ==== | ==== Testbench Files ==== | ||
Line 353: | Line 554: | ||
tb/arp_ep.py : MyHDL ARP frame endpoints | tb/arp_ep.py : MyHDL ARP frame endpoints | ||
tb/axis_ep.py : MyHDL AXI Stream endpoints | tb/axis_ep.py : MyHDL AXI Stream endpoints | ||
+ | tb/baser_serdes.py : MyHDL 10GBASE-R SERDES endpoints | ||
tb/eth_ep.py : MyHDL Ethernet frame endpoints | tb/eth_ep.py : MyHDL Ethernet frame endpoints | ||
+ | tb/gmii_ep.py : MyHDL GMII endpoints | ||
tb/ip_ep.py : MyHDL IP frame endpoints | tb/ip_ep.py : MyHDL IP frame endpoints | ||
+ | tb/mii_ep.py : MyHDL MII endpoints | ||
+ | tb/rgmii_ep.py : MyHDL RGMII endpoints | ||
tb/udp_ep.py : MyHDL UDP frame endpoints | tb/udp_ep.py : MyHDL UDP frame endpoints | ||
+ | tb/xgmii_ep.py : MyHDL XGMII endpoints | ||
</code> | </code> | ||