示例#1
0
    def __init__(self, identifier):
        self.sink = sink = stream.Endpoint(
            eth_etherbone_packet_user_description(32))
        self.source = source = stream.Endpoint(user_description(32))

        # # #

        self.submodules.packetizer = packetizer = EtherbonePacketPacketizer()
        self.comb += [
            packetizer.sink.valid.eq(sink.valid),
            packetizer.sink.last.eq(sink.last),
            sink.ready.eq(packetizer.sink.ready),
            packetizer.sink.magic.eq(etherbone_magic),
            packetizer.sink.port_size.eq(32 // 8),
            packetizer.sink.addr_size.eq(32 // 8),
            packetizer.sink.pf.eq(sink.pf),
            packetizer.sink.pr.eq(sink.pr),
            packetizer.sink.nr.eq(sink.nr),
            packetizer.sink.version.eq(etherbone_version),
            packetizer.sink.data.eq(sink.data)
        ]
        self.submodules.fsm = fsm = FSM(reset_state="IDLE")
        fsm.act(
            "IDLE", packetizer.source.ready.eq(1),
            If(packetizer.source.valid, packetizer.source.ready.eq(0),
               NextState("SEND")))
        fsm.act(
            "SEND", packetizer.source.connect(source),
            source.dst.eq(identifier),
            source.length.eq(sink.length + etherbone_packet_header.length),
            If(source.valid & source.last & source.ready, NextState("IDLE")))
示例#2
0
def eth_etherbone_packet_user_description(dw):
    param_layout = etherbone_packet_header.get_layout()
    param_layout = _remove_from_layout(param_layout, "magic", "portsize",
                                       "addrsize", "version")
    param_layout += user_description(dw).param_layout
    payload_layout = [("data", dw), ("error", dw // 8)]
    return EndpointDescription(payload_layout, param_layout)
示例#3
0
    def __init__(self):
        self.sink = sink = stream.Endpoint(user_description(32))
        self.source = source = stream.Endpoint(
            eth_etherbone_packet_user_description(32))

        # # #

        self.submodules.depacketizer = depacketizer = EtherbonePacketDepacketizer(
        )
        self.comb += sink.connect(depacketizer.sink)

        self.submodules.fsm = fsm = FSM(reset_state="IDLE")
        fsm.act(
            "IDLE", depacketizer.source.ready.eq(1),
            If(depacketizer.source.valid, depacketizer.source.ready.eq(0),
               NextState("CHECK")))
        valid = Signal()
        self.sync += valid.eq(depacketizer.source.valid
                              & (depacketizer.source.magic == etherbone_magic))
        fsm.act("CHECK",
                If(valid, NextState("PRESENT")).Else(NextState("DROP")))
        self.comb += [
            source.last.eq(depacketizer.source.last),
            source.pf.eq(depacketizer.source.pf),
            source.pr.eq(depacketizer.source.pr),
            source.nr.eq(depacketizer.source.nr),
            source.data.eq(depacketizer.source.data),
            source.length.eq(sink.length - etherbone_packet_header.length)
        ]
        fsm.act(
            "PRESENT", source.valid.eq(depacketizer.source.valid),
            depacketizer.source.ready.eq(source.ready),
            If(source.valid & source.last & source.ready, NextState("IDLE")))
        fsm.act(
            "DROP", depacketizer.source.ready.eq(1),
            If(
                depacketizer.source.valid & depacketizer.source.last
                & depacketizer.source.ready, NextState("IDLE")))
示例#4
0
 def __init__(self):
     Packetizer.__init__(self, eth_etherbone_packet_description(32),
                         user_description(32), etherbone_packet_header)