Module axi_atop_filter

Filter atomic operations (ATOPs) in a protocol-compliant manner.

This module filters atomic operations (ATOPs), i.e., write transactions that have a non-zero

aw_atop value, from its slv to its mst port. This module guarantees that:

  1. aw_atop is always zero on the mst port;

  2. write transactions with non-zero aw_atop on the slv port are handled in conformance with

    the AXI standard by replying to such write transactions with the proper B and R responses.

    The response code on atomic operations that reach this module is always SLVERR

    (implementation-specific, not defined in the AXI standard).

Intended usage

This module is intended to be placed between masters that may issue ATOPs and slaves that do not

support ATOPs. That way, this module ensures that the AXI protocol remains in a defined state on

systems with mixed ATOP capabilities.

Specification reminder

The AXI standard specifies that there may be no ordering requirements between different atomic

bursts (i.e., a burst started by an AW with ATOP other than 0) and none between atomic bursts

and non-atomic bursts [E2.1.4]. That is, **an atomic burst may never have the same ID as any

other write or read burst that is in-flight at the same time**.

Parameters

AxiIdWidth: int unsigned

AXI ID width

AxiMaxWriteTxns: int unsigned

Maximum number of in-flight AXI write transactions

axi_req_t: type

AXI request type

axi_resp_t: type

AXI response type

COUNTER_WIDTH: int unsigned

Ports

clk_i: input logic

Rising-edge clock of both ports

rst_ni: input logic

Asynchronous reset, active low

slv_req_i: input axi_req_t

Slave port request

slv_resp_o: output axi_resp_t

Slave port response

mst_req_o: output axi_req_t

Master port request

mst_resp_i: input axi_resp_t

Master port response

Types

cnt_t
w_state_e
r_state_e
id_t
len_t
r_resp_cmd_t

Signals

w_cnt_d: cnt_t

w_cnt_q: cnt_t

w_state_d: w_state_e

w_state_q: w_state_e

r_state_d: r_state_e

r_state_q: r_state_e

id_d: id_t

id_q: id_t

r_beats_d: len_t

r_beats_q: len_t

r_resp_cmd_push: r_resp_cmd_t

r_resp_cmd_pop: r_resp_cmd_t