openenoc_endpoint_interface_top address map

  • Absolute Address: 0x0

  • Base Offset: 0x0

  • Size: 0xC0

Control and status address map for an openENOC Endpoint Interface instance.

Offset

Identifier

Name

0x0

openenoc_endpoint_interface

openenoc_endpoint_interface

openenoc_endpoint_interface register file

  • Absolute Address: 0x0

  • Base Offset: 0x0

  • Size: 0xC0

Control and status register file for an openENOC Endpoint Interface instance.

Offset

Identifier

Name

0x00

info

openenoc_endpoint_interface.info

0x20

conf

openenoc_endpoint_interface.conf

0x40

axis_if

openenoc_endpoint_interface.axis_if

0x60

non_oetp_dma

openenoc_endpoint_interface.non_oetp_dma

0x80

irq

openenoc_endpoint_interface.irq

0xA0

peers

openenoc_endpoint_interface.peers

0xBC

rmem

openenoc_endpoint_interface.rmem

info register

  • Absolute Address: 0x0

  • Base Offset: 0x0

  • Size: 0x8

Read-only information register for this openENOC Endpoint Interface instance.

Bits

Identifier

Access

Reset

Name

31:0

rmem_total_depth

r

0x1

openenoc_endpoint_interface.info.rmem_total_depth[31:0]

42:32

num_of_peers

r

0x1

openenoc_endpoint_interface.info.num_of_peers[42:32]

43

peer_dma_supported

r

0x1

openenoc_endpoint_interface.info.peer_dma_supported

44

non_oetp_dma_supported

r

0x1

openenoc_endpoint_interface.info.non_oetp_dma_supported

45

direct_axis_supported

r

0x1

openenoc_endpoint_interface.info.direct_axis_supported

46

rmem_supported

r

0x1

openenoc_endpoint_interface.info.rmem_supported

47

irq_supported

r

0x1

openenoc_endpoint_interface.info.irq_supported

63:48

max_dma_frame_size_bytes

r

0x2000

openenoc_endpoint_interface.info.max_dma_frame_size_bytes[63:48]

rmem_total_depth field

Total depth of the shared memory region for all remote peers. This field reflects the RMEM_TOTAL_DEPTH parameter value.

num_of_peers field

Number of remote peers supported by this openENOC Endpoint Interface instance, from 0 to 2047. This field reflects the NUM_OF_PEERS parameter value.

peer_dma_supported field

Indicates whether DMA transfers associated with configured remote peers are supported.

non_oetp_dma_supported field

Indicates whether endpoint-level DMA transfers of complete non-oETP Ethernet frames are supported.

direct_axis_supported field

Indicates whether direct CSR-driven AXI4-Stream access is supported for non-oETP Ethernet frames.

rmem_supported field

Indicates whether the transparent Remote Memory (RMEM) interface is supported.

irq_supported field

Indicates whether the endpoint interrupt output and interrupt-control logic are implemented.

max_dma_frame_size_bytes field

Synthesis-time maximum Ethernet frame size in bytes, excluding FCS. This field reflects the MAX_RAW_FRAME_SIZE parameter value and bounds raw non-oETP DMA frames. The peer DMA memory-fragment ceiling is 4 * floor((MAX_RAW_FRAME_SIZE - 32) / 4), accounting for the Ethernet header, oETP write metadata, data-word padding and EndOfData. An 8192-byte frame limit permits 8160-byte memory fragments. A value of zero indicates that DMA is not supported.

conf register file

  • Absolute Address: 0x20

  • Base Offset: 0x20

  • Size: 0x20

Configuration register file for this openENOC Endpoint Interface instance.

Offset

Identifier

Name

0x00

mac_address

openenoc_endpoint_interface.conf.mac_address

0x08

multicast_address

openenoc_endpoint_interface.conf.multicast_address

0x10

non_oetp_control

openenoc_endpoint_interface.conf.non_oetp_control

0x14

rmem_timeout

openenoc_endpoint_interface.conf.rmem_timeout

0x18

dma_timeout

openenoc_endpoint_interface.conf.dma_timeout

0x1C

dma_max_fragment_size

openenoc_endpoint_interface.conf.dma_max_fragment_size

mac_address register

  • Absolute Address: 0x20

  • Base Offset: 0x0

  • Size: 0x8

Local endpoint 48-bit unicast MAC address. The oETP engine uses this address as its source MAC and compares individual-addressed incoming oETP frames against it. The I/G bit in the first MAC octet must be zero. Group-addressed oETP frames are compared against conf.multicast_address instead.

Bits

Identifier

Access

Reset

Name

31:0

lo_word

rw

0x0

openenoc_endpoint_interface.conf.mac_address.lo_word[31:0]

47:32

hi_word

rw

0x0

openenoc_endpoint_interface.conf.mac_address.hi_word[47:32]

lo_word field

Lower 32 bits [31:0] of the 48-bit MAC address.

hi_word field

Upper 16 bits [47:32] of the 48-bit MAC address.

multicast_address register

  • Absolute Address: 0x28

  • Base Offset: 0x8

  • Size: 0x8

Local endpoint 48-bit multicast destination MAC address. For an incoming oETP frame whose destination I/G bit is one, the engine accepts the destination only when it exactly matches this address. All slave endpoints in a replication group use the same value. This address is not used as a source MAC. Zero is the reset value and matches no group-addressed destination, disabling oETP group reception. Broadcast is accepted only when this address is all ones. This field does not change the separate non-oETP receive-mode policy.

Bits

Identifier

Access

Reset

Name

31:0

lo_word

rw

0x0

openenoc_endpoint_interface.conf.multicast_address.lo_word[31:0]

47:32

hi_word

rw

0x0

openenoc_endpoint_interface.conf.multicast_address.hi_word[47:32]

lo_word field

Lower 32 bits [31:0] of the 48-bit multicast MAC address.

hi_word field

Upper 16 bits [47:32] of the 48-bit multicast MAC address.

non_oetp_control register

  • Absolute Address: 0x30

  • Base Offset: 0x10

  • Size: 0x4

Receive policy for Ethernet frames that do not carry oETP traffic.

Bits

Identifier

Access

Reset

Name

1:0

receive_mode

rw

0x1

openenoc_endpoint_interface.conf.non_oetp_control.receive_mode[1:0]

receive_mode field

Receive mode for non-oETP Ethernet frames:

  • 0: Drop all non-oETP Ethernet frames.
  • 1: Filtered mode. Accept frames addressed to the configured local MAC address and Ethernet broadcast frames.
  • 2: Multicast mode. Accept the same frames as filtered mode, plus all multicast-addressed frames.
  • 3: Promiscuous mode. Accept all non-oETP Ethernet frames.
An accepted frame is directed to the non-oETP RX DMA channel when that channel is armed; otherwise it is directed to the CSR AXI4-Stream sink.

rmem_timeout register

  • Absolute Address: 0x34

  • Base Offset: 0x14

  • Size: 0x4

Timeout configuration for transparent RMEM operations.

Bits

Identifier

Access

Reset

Name

31:0

cycles

rw

0x0

openenoc_endpoint_interface.conf.rmem_timeout.cycles[31:0]

cycles field

Maximum wait for an RMEM response in endpoint clock cycles. Zero disables the timeout and permits an indefinite response wait. Hardware samples this value when it accepts an RMEM operation; subsequent writes apply to later operations. The response timer starts after the complete request frame has been accepted by the Ethernet-facing transmit stream and runs until the complete matching response is received and validated through Ethernet TLAST. RX backpressure counts toward the timeout; remaining local memory completion does not. A valid response completing on the expiry edge takes priority, including a valid ERROR_RSP with its reported cause. Hardware does not retry; timeout handling and retry policy belong to software. Multicast writes do not wait for a response and do not use this response timeout. An RMEM read timeout terminates the access with all-ones read data and read ACK; a write timeout terminates with write ACK. The external-RMEM boundary uses no ERR signals. Failures set error and error_code in the associated peers.entry[].dma register and may generate a separate RMEM_ERROR IRQ event.

dma_timeout register

  • Absolute Address: 0x38

  • Base Offset: 0x18

  • Size: 0x4

Common response timeout for locally initiated unicast peer DMA fragments.

Bits

Identifier

Access

Reset

Name

31:0

cycles

rw

0x0

openenoc_endpoint_interface.conf.dma_timeout.cycles[31:0]

cycles field

Maximum wait for a response to one peer DMA fragment, in endpoint clock cycles. This value is shared by all peers. Zero disables the timeout and permits an indefinite response wait. Hardware samples this value when the oETP engine accepts the fragment request; later writes apply to later fragments. The response timer starts after the complete request frame has been accepted by the Ethernet-facing transmit stream and runs until the complete matching response is received and validated through Ethernet TLAST, including EndOfData where present. RX backpressure counts toward the timeout; remaining local memory completion does not. A valid response completing on the expiry edge takes priority, including a valid ERROR_RSP with its reported cause. On expiry, hardware aborts the remaining fragments of that DMA transfer and reports error code 8 (timeout) in the peer DMA status. Hardware does not retry; software decides whether to start another transfer. This timeout does not apply to multicast writes, non-oETP DMA, or transparent RMEM operations.

dma_max_fragment_size register

  • Absolute Address: 0x3C

  • Base Offset: 0x1C

  • Size: 0x4

Common software-selected maximum memory fragment size for locally initiated peer DMA transfers. The synthesis-time frame limit remains fixed.

Bits

Identifier

Access

Reset

Name

31:0

bytes

rw

0x1FE0

openenoc_endpoint_interface.conf.dma_max_fragment_size.bytes[31:0]

bytes field

Maximum meaningful memory bytes in one locally initiated DMA fragment, excluding Ethernet/oETP headers, word padding, EndOfData and FCS. The hardware rounds the written value down to a multiple of four before validating it. The effective MFS must be at least four bytes and at most 4 * floor((MAX_RAW_FRAME_SIZE - 32) / 4). With an 8192-byte frame ceiling, the effective range is 4 through 8160 bytes in steps of four, with reset value 8160. For example, 31 selects 28, 7 selects 4, and 8161 through 8163 select 8160. Hardware snapshots the effective value when it accepts the whole peer DMA transfer; later writes apply only to subsequent transfers. The final fragment uses the exact remaining byte length and may be shorter than four bytes. A written value of 0 through 3, or a rounded value above the synthesized ceiling, rejects a new transfer with local error code 1 before issuing any memory or protocol operation. The CSR retains the unrounded written value. This setting does not restrict received peer requests, which use the synthesized fragment ceiling, and does not affect RMEM, direct CSR streams or non-oETP DMA.

axis_if register file

  • Absolute Address: 0x40

  • Base Offset: 0x40

  • Size: 0x1C

Register file for the AXI4-Stream source and sink interfaces.

Offset

Identifier

Name

0x00

source

openenoc_endpoint_interface.axis_if.source

0x10

sink

openenoc_endpoint_interface.axis_if.sink

source register file

  • Absolute Address: 0x40

  • Base Offset: 0x0

  • Size: 0xC

Register file for the AXI4-Stream source interface.

Offset

Identifier

Name

0x0

data

openenoc_endpoint_interface.axis_if.source.data

0x4

control

openenoc_endpoint_interface.axis_if.source.control

0x8

status

openenoc_endpoint_interface.axis_if.source.status

data register

  • Absolute Address: 0x40

  • Base Offset: 0x0

  • Size: 0x4

Data register for the AXI4-Stream source interface.

Bits

Identifier

Access

Reset

Name

31:0

tdata

rw

0x0

openenoc_endpoint_interface.axis_if.source.data.tdata[31:0]

tdata field

32-bit data value for the AXI4-Stream source interface.

control register

  • Absolute Address: 0x44

  • Base Offset: 0x4

  • Size: 0x4

Control register for the AXI4-Stream source interface.

Bits

Identifier

Access

Reset

Name

0

tvalid

rw

0x0

openenoc_endpoint_interface.axis_if.source.control.tvalid

8

tlast

rw

0x0

openenoc_endpoint_interface.axis_if.source.control.tlast

19:16

tkeep

rw

0x0

openenoc_endpoint_interface.axis_if.source.control.tkeep[3:0]

tvalid field

Indicates that the AXI4-Stream source interface has valid data to send. Once asserted by software, the field remains asserted until the transfer is accepted by the destination.

tlast field

Indicates the last data word of a frame on the AXI4-Stream source interface.

tkeep field

Indicates which byte lanes contain valid data on the AXI4-Stream source interface.

status register

  • Absolute Address: 0x48

  • Base Offset: 0x8

  • Size: 0x4

Status register for the AXI4-Stream source interface.

Bits

Identifier

Access

Reset

Name

0

tready

r

0x0

openenoc_endpoint_interface.axis_if.source.status.tready

tready field

Registered readiness at the input of the direct TX AXI4-Stream register slice. With the non_oetp_direct_tx_complete event disabled, follows downstream backpressure through the slice's registered READY path; CSR acknowledgements and frame boundaries do not force it low. With the event enabled, additionally requires frame admission, which reserves space for the TX completion event. Acceptance of the final word (tlast) into the slice deasserts this field until the next frame receives admission. Writing the first word and setting source.control.tvalid requests admission even while this field is low. The active frame retains its admission decision if event_enable changes. Software must retain data, KEEP and LAST until source.control.tvalid is cleared by hardware, independently of this readiness status.

sink register file

  • Absolute Address: 0x50

  • Base Offset: 0x10

  • Size: 0xC

Register file for the AXI4-Stream sink interface.

Offset

Identifier

Name

0x0

data

openenoc_endpoint_interface.axis_if.sink.data

0x4

control

openenoc_endpoint_interface.axis_if.sink.control

0x8

status

openenoc_endpoint_interface.axis_if.sink.status

data register

  • Absolute Address: 0x50

  • Base Offset: 0x0

  • Size: 0x4

Data register for the AXI4-Stream sink interface.

Bits

Identifier

Access

Reset

Name

31:0

tdata

r

—

openenoc_endpoint_interface.axis_if.sink.data.tdata[31:0]

tdata field

32-bit data value for the AXI4-Stream sink interface.

control register

  • Absolute Address: 0x54

  • Base Offset: 0x4

  • Size: 0x4

Control register for the AXI4-Stream sink interface.

Bits

Identifier

Access

Reset

Name

0

tready

rw

0x0

openenoc_endpoint_interface.axis_if.sink.control.tready

tready field

Indicates that the AXI4-Stream sink interface is ready to accept a data transfer. Once asserted by software, the field remains asserted until a transfer occurs.

status register

  • Absolute Address: 0x58

  • Base Offset: 0x8

  • Size: 0x4

Status register for the AXI4-Stream sink interface.

Bits

Identifier

Access

Reset

Name

0

tvalid

r

—

openenoc_endpoint_interface.axis_if.sink.status.tvalid

8

tlast

r

—

openenoc_endpoint_interface.axis_if.sink.status.tlast

19:16

tkeep

r

—

openenoc_endpoint_interface.axis_if.sink.status.tkeep[3:0]

tvalid field

Indicates that the AXI4-Stream sink interface has valid data to receive.

tlast field

Indicates the last data word of a frame on the AXI4-Stream sink interface.

tkeep field

Indicates which byte lanes contain valid data on the AXI4-Stream sink interface.

non_oetp_dma register file

  • Absolute Address: 0x60

  • Base Offset: 0x60

  • Size: 0x20

Endpoint-level DMA control and status for complete non-oETP Ethernet frames. Frame data includes the Ethernet header and payload, but excludes the preamble, Start Frame Delimiter (SFD), and Frame Check Sequence (FCS).

Offset

Identifier

Name

0x00

tx

openenoc_endpoint_interface.non_oetp_dma.tx

0x10

rx

openenoc_endpoint_interface.non_oetp_dma.rx

tx register file

  • Absolute Address: 0x60

  • Base Offset: 0x0

  • Size: 0x10

Transmit DMA channel for complete non-oETP Ethernet frames.

Offset

Identifier

Name

0x0

buffer_address

openenoc_endpoint_interface.non_oetp_dma.tx.buffer_address

0x4

frame_length

openenoc_endpoint_interface.non_oetp_dma.tx.frame_length

0x8

command_status

openenoc_endpoint_interface.non_oetp_dma.tx.command_status

0xC

transferred_length

openenoc_endpoint_interface.non_oetp_dma.tx.transferred_length

buffer_address register

  • Absolute Address: 0x60

  • Base Offset: 0x0

  • Size: 0x4

Local memory address of the non-oETP Ethernet frame to transmit.

Bits

Identifier

Access

Reset

Name

31:0

base

rw

0x0

openenoc_endpoint_interface.non_oetp_dma.tx.buffer_address.base[31:0]

base field

32-bit byte address of the first byte of the transmit buffer.

frame_length register

  • Absolute Address: 0x64

  • Base Offset: 0x4

  • Size: 0x4

Length of the complete non-oETP Ethernet frame to transmit.

Bits

Identifier

Access

Reset

Name

31:0

bytes

rw

0x0

openenoc_endpoint_interface.non_oetp_dma.tx.frame_length.bytes[31:0]

bytes field

Frame length in bytes. Valid non-zero values shall not exceed info.max_dma_frame_size_bytes.

command_status register

  • Absolute Address: 0x68

  • Base Offset: 0x8

  • Size: 0x4

Command and completion status for the non-oETP transmit DMA channel.

Bits

Identifier

Access

Reset

Name

8

request

rw

0x0

openenoc_endpoint_interface.non_oetp_dma.tx.command_status.request

9

clear_errors

rw

0x0

openenoc_endpoint_interface.non_oetp_dma.tx.command_status.clear_errors

16

idle

r

—

openenoc_endpoint_interface.non_oetp_dma.tx.command_status.idle

24

done

r

—

openenoc_endpoint_interface.non_oetp_dma.tx.command_status.done

25

error

r

—

openenoc_endpoint_interface.non_oetp_dma.tx.command_status.error

31:28

error_code

r

—

openenoc_endpoint_interface.non_oetp_dma.tx.command_status.error_code[31:28]

request field

Writing one requests transmission of the configured frame. The field remains asserted until the DMA engine accepts the request. Hardware clears it upon acceptance; while the channel is busy, a newly asserted request remains pending. Software or an RTL controller shall read the completion status and transferred length of the previous request before asserting this field for the next request.

clear_errors field

Writing one clears this channel's error flag and error code. Hardware clears the command after accepting it. The command does not abort an active transfer, clear done or transferred length, or complete an IRQ claim. A new failure takes precedence over a simultaneous clear. Starting or successfully completing a transfer preserves a recorded error.

idle field

Indicates that the channel has no accepted transfer in progress. Hardware deasserts this field when a request is accepted and asserts it when the transfer completes.

done field

Sticky successful-completion flag. Hardware sets this field after the accepted transfer completes successfully and clears it when the next request is accepted.

error field

Sticky error-completion flag. Hardware sets this field when an accepted transfer fails. Only command_status.clear_errors or endpoint reset clears it; starting or successfully completing another transfer preserves a recorded error.

error_code field

Sticky error code for the most recent transmit failure:

  • 0: No error.
  • 1: Invalid DMA configuration or descriptor.
  • 2: AXI4-Stream length or TLAST error.
  • 3: Frame exceeds the supported size or configured buffer capacity.
  • 4: AXI read SLVERR response.
  • 5: AXI read DECERR response.
  • 6: AXI write SLVERR response.
  • 7: AXI write DECERR response.
  • 8-15: Reserved.
These errors describe local non-oETP DMA work. Only command_status.clear_errors or endpoint reset clears this field. A new failure replaces the code and takes precedence over a simultaneous clear; successful transfers preserve the previous failure.

transferred_length register

  • Absolute Address: 0x6C

  • Base Offset: 0xC

  • Size: 0x4

Number of bytes transferred for the most recently accepted transmit request.

Bits

Identifier

Access

Reset

Name

31:0

bytes

r

—

openenoc_endpoint_interface.non_oetp_dma.tx.transferred_length.bytes[31:0]

bytes field

Actual number of bytes transferred. Hardware clears this field when the next request is accepted.

rx register file

  • Absolute Address: 0x70

  • Base Offset: 0x10

  • Size: 0x10

Receive DMA channel for complete non-oETP Ethernet frames.

Offset

Identifier

Name

0x0

buffer_address

openenoc_endpoint_interface.non_oetp_dma.rx.buffer_address

0x4

buffer_capacity

openenoc_endpoint_interface.non_oetp_dma.rx.buffer_capacity

0x8

command_status

openenoc_endpoint_interface.non_oetp_dma.rx.command_status

0xC

received_length

openenoc_endpoint_interface.non_oetp_dma.rx.received_length

buffer_address register

  • Absolute Address: 0x70

  • Base Offset: 0x0

  • Size: 0x4

Local memory address of the receive buffer for a non-oETP Ethernet frame.

Bits

Identifier

Access

Reset

Name

31:0

base

rw

0x0

openenoc_endpoint_interface.non_oetp_dma.rx.buffer_address.base[31:0]

base field

32-bit byte address of the first byte of the receive buffer.

buffer_capacity register

  • Absolute Address: 0x74

  • Base Offset: 0x4

  • Size: 0x4

Capacity of the receive buffer for one complete non-oETP Ethernet frame.

Bits

Identifier

Access

Reset

Name

31:0

bytes

rw

0x0

openenoc_endpoint_interface.non_oetp_dma.rx.buffer_capacity.bytes[31:0]

bytes field

Receive-buffer capacity in bytes. Valid non-zero values shall not exceed info.max_dma_frame_size_bytes.

command_status register

  • Absolute Address: 0x78

  • Base Offset: 0x8

  • Size: 0x4

Command and completion status for the non-oETP receive DMA channel.

Bits

Identifier

Access

Reset

Name

8

request

rw

0x0

openenoc_endpoint_interface.non_oetp_dma.rx.command_status.request

9

clear_errors

rw

0x0

openenoc_endpoint_interface.non_oetp_dma.rx.command_status.clear_errors

16

idle

r

—

openenoc_endpoint_interface.non_oetp_dma.rx.command_status.idle

17

armed

r

—

openenoc_endpoint_interface.non_oetp_dma.rx.command_status.armed

24

done

r

—

openenoc_endpoint_interface.non_oetp_dma.rx.command_status.done

25

error

r

—

openenoc_endpoint_interface.non_oetp_dma.rx.command_status.error

31:28

error_code

r

—

openenoc_endpoint_interface.non_oetp_dma.rx.command_status.error_code[31:28]

request field

Writing one arms reception into the configured buffer. The field remains asserted until the DMA engine accepts the request. Hardware clears it upon acceptance; while the channel is busy, a newly asserted request remains pending. Software or an RTL controller shall read the completion status and received length of the previous request before asserting this field for the next request.

clear_errors field

Writing one clears this channel's error flag and error code. Hardware clears the command after accepting it. The command does not abort an active or armed receive, clear done or received length, or complete an IRQ claim. A new failure takes precedence over a simultaneous clear. Starting or successfully completing a transfer preserves a recorded error.

idle field

Indicates that the channel has no accepted receive request in progress. After acceptance, the channel may be armed and waiting for an eligible non-oETP frame or may be writing a received frame to memory.

armed field

Indicates that the accepted receive request is waiting for an eligible non-oETP Ethernet frame. Hardware sets this field when it accepts a request and clears it when the first beat of the selected frame is accepted by the RX DMA datapath. The frame-routing logic uses this field to select the RX DMA path; otherwise an accepted non-oETP frame is directed to the CSR AXI4-Stream sink.

done field

Sticky successful-completion flag. Hardware sets this field after a received frame has been written successfully and clears it when the next request is accepted.

error field

Sticky error-completion flag. Hardware sets this field when an accepted receive fails. Only command_status.clear_errors or endpoint reset clears it; starting or successfully completing another receive preserves a recorded error.

error_code field

Sticky error code for the most recent receive failure:

  • 0: No error.
  • 1: Invalid DMA configuration or descriptor.
  • 2: AXI4-Stream length or TLAST error.
  • 3: Received frame exceeds the configured buffer capacity.
  • 4: AXI read SLVERR response.
  • 5: AXI read DECERR response.
  • 6: AXI write SLVERR response.
  • 7: AXI write DECERR response.
  • 8-15: Reserved.
Only command_status.clear_errors or endpoint reset clears this field. A new failure replaces the code and takes precedence over a simultaneous clear; successful transfers preserve the previous failure.

received_length register

  • Absolute Address: 0x7C

  • Base Offset: 0xC

  • Size: 0x4

Length of the most recently received non-oETP Ethernet frame.

Bits

Identifier

Access

Reset

Name

31:0

bytes

r

—

openenoc_endpoint_interface.non_oetp_dma.rx.received_length.bytes[31:0]

bytes field

Actual number of frame bytes written to the receive buffer. Hardware clears this field when the next request is accepted.

irq register file

  • Absolute Address: 0x80

  • Base Offset: 0x80

  • Size: 0x14

Endpoint-level interrupt control and claim interface. Interrupt events from peer DMA, non-oETP DMA, direct AXI4-Stream transfers, and RMEM failures are serialized through a shared event FIFO.

Offset

Identifier

Name

0x00

control

openenoc_endpoint_interface.irq.control

0x04

event_enable

openenoc_endpoint_interface.irq.event_enable

0x08

status

openenoc_endpoint_interface.irq.status

0x0C

claim

openenoc_endpoint_interface.irq.claim

0x10

complete

openenoc_endpoint_interface.irq.complete

control register

  • Absolute Address: 0x80

  • Base Offset: 0x0

  • Size: 0x4

Global interrupt-output control and interrupt-controller maintenance requests.

Bits

Identifier

Access

Reset

Name

0

global_enable

rw

0x0

openenoc_endpoint_interface.irq.control.global_enable

8

clear_errors

rw

0x0

openenoc_endpoint_interface.irq.control.clear_errors

global_enable field

Enables the physical endpoint IRQ output. Clearing this field masks the output but does not prevent enabled events from being queued. Event capture is controlled by irq.event_enable and, for peer DMA, by the selected peer's dma.irq_enable field.

clear_errors field

Writing one requests clearing of the sticky irq.status.overflow and irq.status.invalid_complete flags. The field remains asserted until hardware accepts the request and clears it.

event_enable register

  • Absolute Address: 0x84

  • Base Offset: 0x4

  • Size: 0x4

Enables generation of individual endpoint IRQ event classes. These fields control event capture; irq.control.global_enable only masks the physical IRQ output.

Bits

Identifier

Access

Reset

Name

0

peer_dma_complete

rw

0x0

openenoc_endpoint_interface.irq.event_enable.peer_dma_complete

1

non_oetp_dma_tx_complete

rw

0x0

openenoc_endpoint_interface.irq.event_enable.non_oetp_dma_tx_complete

2

non_oetp_dma_rx_complete

rw

0x0

openenoc_endpoint_interface.irq.event_enable.non_oetp_dma_rx_complete

3

non_oetp_direct_tx_complete

rw

0x0

openenoc_endpoint_interface.irq.event_enable.non_oetp_direct_tx_complete

4

non_oetp_direct_rx_available

rw

0x0

openenoc_endpoint_interface.irq.event_enable.non_oetp_direct_rx_available

5

rmem_error

rw

0x0

openenoc_endpoint_interface.irq.event_enable.rmem_error

peer_dma_complete field

Enables PEER_DMA_COMPLETE events. A peer event is queued only when this field and the selected peer's dma.irq_enable field were both set when the DMA request was accepted. A failed incoming bulk DMA request also generates this event for the peer resolved from the source MAC. For incoming failures, hardware captures the per-peer enable when recording the failure and samples this field at IRQ admission. Successful incoming requests generate no event. CSR error recording and the error response do not wait for IRQ FIFO capacity.

non_oetp_dma_tx_complete field

Enables NON_OETP_DMA_TX_COMPLETE events. Hardware samples this field when it accepts a non-oETP transmit DMA request.

non_oetp_dma_rx_complete field

Enables NON_OETP_DMA_RX_COMPLETE events. Hardware samples this field when it accepts a non-oETP receive DMA request.

non_oetp_direct_tx_complete field

Enables NON_OETP_DIRECT_TX_COMPLETE events. Hardware samples this field when the first beat of a direct transmit frame is accepted from the CSR-facing AXI4-Stream interface. When enabled, the frame start is accepted only after an IRQ FIFO credit has been reserved. The event is generated when the final beat is accepted by the oETP engine.

non_oetp_direct_rx_available field

Enables NON_OETP_DIRECT_RX_AVAILABLE events. One event is generated when the first beat of a new direct receive frame becomes valid on the CSR-facing AXI4-Stream interface. When enabled, routing logic does not expose that first TVALID until an IRQ FIFO credit is available, so the event cannot be lost. The event does not depend on TLAST and therefore supports both cut-through and frame-FIFO operation.

rmem_error field

Enables RMEM_ERROR events for locally initiated RMEM failures, including timeout and an accepted ERROR_RSP, and failed incoming RMEM requests from a resolved peer. Hardware records the associated peer's dma.error and dma.error_code before exposing the event and terminates the failed RMEM access without waiting for IRQ FIFO capacity. For locally initiated failures the enable is sampled when the failure is recorded; incoming failures sample it at IRQ admission. The bulk DMA per-peer irq_enable does not gate RMEM_ERROR. Successful RMEM accesses generate no event.

status register

  • Absolute Address: 0x88

  • Base Offset: 0x8

  • Size: 0x4

Status of the endpoint IRQ event FIFO and its reservation mechanism.

Bits

Identifier

Access

Reset

Name

0

claim_pending

r

—

openenoc_endpoint_interface.irq.status.claim_pending

1

credit_full

r

—

openenoc_endpoint_interface.irq.status.credit_full

2

overflow

r

—

openenoc_endpoint_interface.irq.status.overflow

3

invalid_complete

r

—

openenoc_endpoint_interface.irq.status.invalid_complete

4

irq_asserted

r

—

openenoc_endpoint_interface.irq.status.irq_asserted

15:8

fifo_level

r

—

openenoc_endpoint_interface.irq.status.fifo_level[7:0]

23:16

reserved_count

r

—

openenoc_endpoint_interface.irq.status.reserved_count[7:0]

claim_pending field

Indicates that at least one valid event is available in irq.claim.

credit_full field

Indicates that all event FIFO credits are occupied by queued claims or reserved for admitted operations. While no credit is available, new interrupt-enabled DMA requests are not accepted and the start of an interrupt-enabled direct AXI4-Stream frame is backpressured.

overflow field

Sticky internal-error flag indicating that an enabled event could not be retained. Correct credit reservation, admission control, and AXI4-Stream backpressure make this condition unreachable during normal operation. Clear with irq.control.clear_errors.

invalid_complete field

Sticky protocol-error flag indicating that irq.complete.valid was accepted while no claim was pending or that the completion token did not match the current claim. No claim is removed on a mismatch. Clear with irq.control.clear_errors.

irq_asserted field

Reflects the current value of the physical endpoint IRQ output after application of irq.control.global_enable.

fifo_level field

Number of valid claims currently queued in the IRQ event FIFO. Values greater than 255 are reported as 255.

reserved_count field

Number of event FIFO credits reserved for admitted DMA operations or direct transmit frames whose events have not yet been queued. Values greater than 255 are reported as 255.

claim register

  • Absolute Address: 0x8C

  • Base Offset: 0xC

  • Size: 0x4

Read-only view of the event at the head of the IRQ event FIFO. Reading this register has no side effect, and all fields remain stable until a matching irq.complete request removes the claim.

Bits

Identifier

Access

Reset

Name

10:0

peer_idx

r

—

openenoc_endpoint_interface.irq.claim.peer_idx[10:0]

14:11

source

r

—

openenoc_endpoint_interface.irq.claim.source[3:0]

30:15

seq

r

—

openenoc_endpoint_interface.irq.claim.seq[15:0]

31

valid

r

—

openenoc_endpoint_interface.irq.claim.valid

peer_idx field

Zero-based peer index for a PEER_DMA_COMPLETE or RMEM_ERROR event, in the range 0 through NUM_OF_PEERS-1. The field is not applicable to other event sources and is driven to zero for deterministic readback.

source field

IRQ event source:

  • 0: PEER_DMA_COMPLETE. A peer DMA request completed with either success or error; peer_idx identifies the peer.
  • 1: NON_OETP_DMA_TX_COMPLETE. A non-oETP transmit DMA request completed with either success or error.
  • 2: NON_OETP_DMA_RX_COMPLETE. A non-oETP receive DMA request completed with either success or error.
  • 3: NON_OETP_DIRECT_TX_COMPLETE. The final beat of a direct non-oETP transmit frame was accepted by the oETP engine.
  • 4: NON_OETP_DIRECT_RX_AVAILABLE. The first beat of a new direct non-oETP receive frame is available on the CSR-facing AXI4-Stream interface.
  • 5: RMEM_ERROR. A locally initiated RMEM operation failed. The cause is recorded in peers.entry[peer_idx].dma; peer_idx identifies the associated peer.
  • 6-15: Reserved.
This field is meaningful only when valid is set.

seq field

Monotonically increasing event sequence number, modulo 65536. The sequence number distinguishes otherwise identical claims and protects against stale or repeated completion requests.

valid field

Indicates that this register contains the valid event at the head of the IRQ event FIFO. When clear, all other claim fields shall be ignored.

complete register

  • Absolute Address: 0x90

  • Base Offset: 0x10

  • Size: 0x4

Completion request for the current IRQ claim. Software acknowledges an event by copying the complete 32-bit irq.claim value into this register.

Bits

Identifier

Access

Reset

Name

10:0

peer_idx

rw

0x0

openenoc_endpoint_interface.irq.complete.peer_idx[10:0]

14:11

source

rw

0x0

openenoc_endpoint_interface.irq.complete.source[3:0]

30:15

seq

rw

0x0

openenoc_endpoint_interface.irq.complete.seq[15:0]

31

valid

rw

0x0

openenoc_endpoint_interface.irq.complete.valid

peer_idx field

Peer-index portion of the claim token.

source field

Event-source portion of the claim token.

seq field

Sequence-number portion of the claim token.

valid field

Writing one submits the completion token. The field remains asserted until hardware validates the token and clears it. A matching token removes the current claim and releases its FIFO credit; an invalid token leaves the claim unchanged and sets irq.status.invalid_complete.

peers register file

  • Absolute Address: 0xA0

  • Base Offset: 0xA0

  • Size: 0x1C

Register file for remote peer configuration and memory region information.

Offset

Identifier

Name

0x0

entry[0]

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1]

entry register file

  • Absolute Address: 0xA0

  • Base Offset: 0x0

  • Size: 0x1C

  • Array Dimensions: [1]

  • Array Stride: 0x1C

  • Total Size: 0x1C

Register file for a single remote peer configuration and memory region information.

Offset

Identifier

Name

0x00

mac_address

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].mac_address

0x08

rmem_address

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].rmem_address

0x0C

local_address

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].local_address

0x10

remote_address

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].remote_address

0x14

size

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].size

0x18

dma

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].dma

mac_address register

  • Absolute Address: 0xA0

  • Base Offset: 0x0

  • Size: 0x8

Remote peer 48-bit destination MAC address.

Bits

Identifier

Access

Reset

Name

31:0

lo_word

rw

—

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].mac_address.lo_word[31:0]

47:32

hi_word

rw

—

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].mac_address.hi_word[47:32]

lo_word field

Lower 32 bits [31:0] of the 48-bit MAC address.

hi_word field

Upper 16 bits [47:32] of the 48-bit MAC address.

rmem_address register

  • Absolute Address: 0xA8

  • Base Offset: 0x8

  • Size: 0x4

Address offset of the virtual memory region corresponding to the remote peer's memory.

Bits

Identifier

Access

Reset

Name

31:0

offset

rw

—

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].rmem_address.offset[31:0]

offset field

32-bit byte offset of the virtual memory region corresponding to the remote peer's memory. The value shall be aligned to a 32-bit word boundary.

local_address register

  • Absolute Address: 0xAC

  • Base Offset: 0xC

  • Size: 0x4

Start address of the local memory region for DMA transfers.

Bits

Identifier

Access

Reset

Name

31:0

base

rw

—

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].local_address.base[31:0]

base field

Word-aligned 32-bit start address of the local memory region for DMA transfers.

remote_address register

  • Absolute Address: 0xB0

  • Base Offset: 0x10

  • Size: 0x4

Start address of the remote peer's memory region.

Bits

Identifier

Access

Reset

Name

31:0

base

rw

—

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].remote_address.base[31:0]

base field

Word-aligned 32-bit start address of the remote peer's memory region.

size register

  • Absolute Address: 0xB4

  • Base Offset: 0x14

  • Size: 0x4

Size of the remote peer's memory region.

Bits

Identifier

Access

Reset

Name

31:0

bytes

rw

—

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].size.bytes[31:0]

bytes field

32-bit size of the remote peer's memory region in bytes.

dma register

  • Absolute Address: 0xB8

  • Base Offset: 0x18

  • Size: 0x4

DMA/RMEM configuration and control for the remote peer, with shared sticky error reporting. RMEM and bulk DMA retain separate IRQ event classes.

Bits

Identifier

Access

Reset

Name

1:0

mode

rw

—

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].dma.mode[1:0]

2

irq_enable

rw

0x0

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].dma.irq_enable

8

request

rw

0x0

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].dma.request[8:8]

9

clear_error

rw

0x0

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].dma.clear_error

16

idle

r

—

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].dma.idle[16:16]

24

done

r

—

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].dma.done[24:24]

25

error

r

—

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].dma.error[25:25]

31:28

error_code

r

—

openenoc_endpoint_interface.peers.entry[0..NUM_OF_PEERS-1].dma.error_code[31:28]

mode field

DMA mode and responder access policy for the remote peer:

  • 0: Disabled. Locally initiated DMA and transparent RMEM operations are disabled, and incoming oETP memory requests from this peer are rejected.
  • 1: Transparent RMEM mode. Accesses to the virtual RMEM region are translated into individual remote memory accesses. Incoming transparent RMEM read and write requests from this peer are permitted. Bulk DMA read and write requests are rejected.
  • 2: Mirror-to-local mode. A locally initiated DMA request fetches the remote memory region into the configured local memory region using remote DMA reads. On the responder side, incoming bulk DMA write requests from this peer are permitted and target the configured local memory region. Incoming bulk DMA read requests are rejected.
  • 3: Mirror-to-remote mode. A locally initiated DMA request sends the configured local memory region to the remote memory region using remote DMA writes. On the responder side, incoming bulk DMA read requests from this peer are permitted and source data from the configured local memory region. Incoming bulk DMA write requests are rejected.

Consequently, a mirror relationship uses complementary modes: an initiator operating in mirror-to-local mode communicates with a responder entry configured as mirror-to-remote, while an initiator operating in mirror-to-remote mode communicates with a responder entry configured as mirror-to-local.

irq_enable field

Enables generation of a PEER_DMA_COMPLETE IRQ event for this peer. Hardware samples this field together with irq.event_enable.peer_dma_complete when it accepts the peer DMA request. Changing the field while a transfer is active does not affect that transfer. Disabling the field does not affect DMA execution or the done, error, and error_code status fields. For a failed incoming bulk DMA request, this field is captured when recording the failure and irq.event_enable.peer_dma_complete is sampled at IRQ admission. The event identifies this peer by the received source MAC. Successful incoming requests generate no event. RMEM errors use their separate irq.event_enable.rmem_error path.

request field

Writing one requests a DMA transfer to or from the remote peer, according to dma.mode. The field remains asserted until the DMA engine accepts and snapshots the request. Hardware clears it upon acceptance; while a transfer for this peer is active, a newly asserted request remains pending. Software or an RTL controller shall read the completion status of the previous request before asserting this field for the next request and shall keep the peer configuration stable while this field is asserted.

clear_error field

Writing one clears this peer's shared RMEM/DMA error flag and error code. The field remains asserted until hardware accepts and clears the command. It does not abort an active operation, clear done, or complete an IRQ claim. A new failure takes precedence over a simultaneous clear. Starting or successfully completing an operation does not clear a previously recorded error.

idle field

Indicates whether this peer has no accepted DMA request in progress. Hardware deasserts this field when a request is accepted and asserts it after all fragments of the requested block have completed.

done field

Sticky successful-completion flag for this peer. Hardware sets this field after all fragments of the accepted block transfer complete successfully and clears it when the next request is accepted.

error field

Shared sticky RMEM/DMA error flag for this peer. Hardware sets this field when a locally initiated RMEM access or bulk DMA transfer fails, or when servicing an incoming RMEM or bulk DMA request from this peer fails. Received requests are associated by source MAC. An incoming failure records its code before exposing its error response, independently of IRQ enable; it does not change the locally initiated dma.request, idle, or done state. An incomplete incoming DMA data frame records remote stream code 10. Multicast response suppression does not suppress this local error record or an enabled event. Only dma.clear_error or endpoint reset clears a latched error; starting or successfully completing another operation does not clear it. The flag is independent of the IRQ event-enable fields.

error_code field

Shared sticky code for the most recent RMEM or bulk DMA failure for this peer:

  • 0: No error.
  • 1: Local invalid request, configuration, descriptor, or parameters.
  • 2: Local stream/PDU length or TLAST error.
  • 3: Local supported-size or buffer-capacity overflow.
  • 4: Local AXI read SLVERR response.
  • 5: Local AXI read DECERR response.
  • 6: Local AXI write SLVERR response.
  • 7: Local AXI write DECERR response.
  • 8: Local peer response timeout or Request ID wrap collision. An RMEM access terminates through its ACK-only boundary; a bulk DMA timeout aborts the remaining fragments. Hardware does not retry.
  • 9: Remote invalid request, configuration, descriptor, or parameters.
  • 10: Remote stream/PDU length or TLAST error. Also used directly by the receiver of an incomplete DMA_WRITE_REQ or DMA_READ_RSP, including missing or incorrect EndOfData.
  • 11: Remote supported-size or buffer-capacity overflow.
  • 12: Remote AXI read SLVERR response.
  • 13: Remote AXI read DECERR response.
  • 14: Remote AXI write SLVERR response.
  • 15: Remote AXI write DECERR response.
Codes 1-8 describe errors detected by this endpoint, including malformed responses, local memory failures, and failures while servicing received requests. Codes 9-15 describe failures reported by the responding peer through a valid ERROR_RSP. Code 10 additionally reports an incomplete incoming DMA data frame detected at this endpoint, without requiring an ERROR_RSP first. A missing or incorrect EndOfData uses this same code even when Ethernet padding masks the short data length. A receiver of an incomplete unicast DMA_WRITE_REQ records CSR code 10 but sends ERROR_RSP wire cause 2; multicast writes generate no response. ERROR_RSP carries a 32-bit cause in the range 1-7, which the initiating oETP engine validates and maps to CSR code = 8 + wire code. Values outside 1-7 are invalid response parameters and record local code 1; they must not be truncated or mistaken for local TIMEOUT = 8. The oETP initiator completion channel carries this final CSR encoding for both RMEM and bulk DMA. The responder completion channel reports its cause 1-7 for serialization as ERROR_RSP; cause 2 on an incomplete received bulk write corresponds to receiver CSR code 10. Hardware clears this field only on dma.clear_error or endpoint reset. Successful operations preserve a recorded failure. A new failure replaces the code and takes precedence over a simultaneous clear. A failed streaming transfer may have partially modified memory; error reporting does not provide rollback or an exact count of modified bytes. Software manages buffer synchronization and recovery.

rmem register file

  • Absolute Address: 0xBC

  • Base Offset: 0xBC

  • Size: 0x4

Virtual memory region for all remote peers, with offsets and sizes defined in the peers regfile.

Offset

Identifier

Name

0x0

word[0]

openenoc_endpoint_interface.rmem.word[0..RMEM_TOTAL_DEPTH-1]

word register

  • Absolute Address: 0xBC

  • Base Offset: 0x0

  • Size: 0x4

  • Array Dimensions: [1]

  • Array Stride: 0x4

  • Total Size: 0x4

32-bit word in the virtual memory region.

Bits

Identifier

Access

Reset

Name

31:0

data

rw

—

openenoc_endpoint_interface.rmem.word[0..RMEM_TOTAL_DEPTH-1].data[31:0]

data field

Data stored in this virtual memory word.