Esempio n. 1
0
class K2MMPacket:
    magic                = 0x4f6f
    version              = 1
    header_length = 8
    header_fields = {
        "magic":     _HeaderField(0, 0, 16, user=False),
        "version":   _HeaderField(2, 4,  4, user=False),
        "nr":        _HeaderField(2, 2,  1, user=True),
        "pr":        _HeaderField(2, 1,  1, user=True),
        "pf":        _HeaderField(2, 0,  1, user=True),
        "addr_size": _HeaderField(3, 0,  8, user=False),
        "port_size": _HeaderField(4, 0,  8, user=False)
    }
    header = Header(header_fields, header_length, swap_field_bytes=True)

    @staticmethod
    def get_header(dw, aligned=True):
        return _Header(
            __class__.header_fields,
            length = dw // 8 if aligned else __class__.header_length,
            swap_field_bytes = True)
    
    @staticmethod
    def packet_description(dw):
        param_layout = __class__.get_header(dw).get_layout()
        payload_layout = [
            ("data",       dw),
            ("last_be", dw//8),
            ("error",   dw//8)
        ]
        return EndpointDescription(payload_layout, param_layout)
    
    @staticmethod
    def packet_user_description(dw):
        param_layout = __class__.get_header(dw).get_user_layout()
        # param_layout = _remove_from_layout(param_layout, "magic", "portsize", "addrsize", "version")
        param_layout += eth_udp_user_description(dw).param_layout
        payload_layout = [
            ("data",       dw),
            ("last_be", dw//8),
            ("error",   dw//8)
        ]
        return EndpointDescription(payload_layout, param_layout)
Esempio n. 2
0
eth_min_len = 46
eth_interpacket_gap = 12
eth_preamble = 0xd555555555555555
buffer_depth = 2**log2_int(eth_mtu, need_pow2=False)

ethernet_type_ip = 0x800
ethernet_type_arp = 0x806

mac_header_length = 14
mac_header_fields = {
    "target_mac": HeaderField(0, 0, 48),
    "sender_mac": HeaderField(6, 0, 48),
    "ethernet_type": HeaderField(12, 0, 16)
}
mac_header = Header(mac_header_fields,
                    mac_header_length,
                    swap_field_bytes=True)

arp_hwtype_ethernet = 0x0001
arp_proto_ip = 0x0800
arp_opcode_request = 0x0001
arp_opcode_reply = 0x0002

arp_header_length = 28
arp_header_fields = {
    "hwtype": HeaderField(0, 0, 16),
    "proto": HeaderField(2, 0, 16),
    "hwsize": HeaderField(4, 0, 8),
    "protosize": HeaderField(5, 0, 8),
    "opcode": HeaderField(6, 0, 16),
    "sender_mac": HeaderField(8, 0, 48),
Esempio n. 3
0
    "c":            HeaderField(0*4, 15, 1),
    "command":      HeaderField(0*4, 16, 8),
    "features_lsb": HeaderField(0*4, 24, 8),

    "lba_lsb":      HeaderField(1*4, 0, 24),
    "device":       HeaderField(1*4, 24, 8),

    "lba_msb":      HeaderField(2*4, 0, 24),
    "features_msb": HeaderField(2*4, 24, 8),

    "count":        HeaderField(3*4, 0, 16),
    "icc":          HeaderField(3*4, 16, 8),
    "control":      HeaderField(3*4, 24, 8)
}
fis_reg_h2d_header = Header(fis_reg_h2d_header_fields,
                            fis_reg_h2d_header_length,
                            swap_field_bytes=False)

fis_reg_d2h_header_length = 5
fis_reg_d2h_header_fields = {
    "type":    HeaderField(0*4,  0, 8),
    "pm_port": HeaderField(0*4,  8, 4),
    "i":       HeaderField(0*4, 14, 1),
    "status":  HeaderField(0*4, 16, 8),
    "errors":  HeaderField(0*4, 24, 8),

    "lba_lsb": HeaderField(1*4, 0, 24),
    "device":  HeaderField(1*4, 24, 8),

    "lba_msb": HeaderField(2*4, 0, 24),
Esempio n. 4
0
from litex.soc.interconnect.packet import HeaderField, Header

etherbone_magic = 0x4e6f
etherbone_version = 1
etherbone_packet_header_length = 8
etherbone_packet_header_fields = {
    "magic": HeaderField(0, 0, 16),
    "version": HeaderField(2, 4, 4),
    "nr": HeaderField(2, 2, 1),  # No Reads
    "pr": HeaderField(2, 1, 1),  # Probe Reply
    "pf": HeaderField(2, 0, 1),  # Probe Flag
    "addr_size": HeaderField(3, 4, 4),  # 1=8bits, 2=16bits, 4=32bits, 8=64bits
    "port_size": HeaderField(3, 0, 4),  # Same as above
}
etherbone_packet_header = Header(etherbone_packet_header_fields,
                                 etherbone_packet_header_length,
                                 swap_field_bytes=True)

# When reading/writing to a FIFO, you don't increase
# the address after each write.
etherbone_record_header_length = 4
etherbone_record_header_fields = {
    "bca": HeaderField(0, 0, 1),  # ReplyToCfgSpace  - ??? (C)onfig (A)dress
    "rca": HeaderField(0, 1,
                       1),  # ReadFromCfgSpace - (R)ead from (C)onfig (A)dress
    "rff": HeaderField(0, 2, 1),  # ReadFIFO         - (R)ead (F)I(F)O
    "cyc": HeaderField(0, 4, 1),  # DropCycle        - Drop(Cyc)le
    "wca": HeaderField(0, 5,
                       1),  # WriteToCfgSpace  - (W)rite to (C)onfig (A)dress
    "wff": HeaderField(0, 6, 1),  # WriteFIFO        - (W)rite (F)I(F)O
    "byte_enable": HeaderField(1, 0, 8),  # Select
Esempio n. 5
0
from litex.soc.integration.soc_core import soc_core_args, soc_core_argdict

from litex.soc.interconnect import stream
from litex.soc.interconnect.csr import CSRStatus, AutoCSR, CSRStorage
from litex.soc.interconnect.packet import Header, HeaderField, Packetizer
from litex.soc.interconnect.stream import EndpointDescription
from liteeth.common import eth_udp_user_description, convert_ip
# from liteeth.frontend.stream import LiteEthStream2UDPTX

fragmenter_header_length = 8
fragmenter_header_fields = {
    "total_fragmets": HeaderField(0, 0, 32),
    "fragment_id": HeaderField(4, 0, 32),
}
fragmenter_header = Header(fragmenter_header_fields,
                           fragmenter_header_length,
                           swap_field_bytes=True)


def udp_fragmenter_description(dw):
    param_layout = [
        ("length", 32),
    ]
    payload_layout = fragmenter_header.get_layout() + [
        ("data", dw),
    ]
    return EndpointDescription(payload_layout, param_layout)


class UDPFragmenterPacketizer(Packetizer):
    def __init__(self, dw=8):