noc_async_write_multicast

template<uint32_t max_page_size = NOC_MAX_BURST_SIZE + 1>
inline void noc_async_write_multicast(uint32_t src_local_l1_addr, uint64_t dst_noc_addr_multicast, uint32_t size, uint32_t num_dests, bool linked = false, uint8_t noc = noc_index)

Initiates an asynchronous write from a source address in L1 memory on the Tensix core executing this function call to a rectangular destination grid. The destinations are specified using a uint64_t encoding referencing an on-chip grid of nodes located at NOC coordinate range (x_start,y_start,x_end,y_end) and a local address created using get_noc_multicast_addr function. Also, see noc_async_write_barrier.

The destination nodes can only be a set of Tensix cores + L1 memory address. The destination nodes must form a rectangular grid. The destination L1 memory address must be the same on all destination nodes.

With this API (non-loopback multicast), the multicast sender can be part of the multicast destination range, but data will NOT be written to self. The num_dests argument should NOT count self. For example, when mcasting to an 8x8 grid that includes self, num_dests should be 63. The destination range must not be just self (i.e. at least one other core must be in the range). If the multicast sender also needs to receive the data (i.e. must perform a local L1 write), the other API variant noc_async_write_multicast_loopback_src can be used.

Note: The number of destinations needs to be non-zero. Besides that, there is no restriction on the number of destinations, i.e. the multicast destinations can span the full chip. Since self is not counted, the maximum number of destinations is number of cores - 1.

Return value: None

Argument

Description

Type

Valid Range

Required

src_local_l1_addr

Source address in local L1 memory

uint32_t

0..1MB

True

dst_noc_addr_multicast

Encoding of the destinations nodes (x_start,y_start,x_end,y_end)+address

uint64_t

Results of get_noc_multicast_addr calls

True

size

Size of data transfer in bytes

uint32_t

0..1MB

True

num_dests

Number of destinations that the multicast source is targeting

uint32_t

0..(number of cores -1)

True

linked

Whether the transaction is linked

bool

true or false

False

noc

Which NOC to use for the transaction

uint8_t

0 or 1

False

max_page_size (template argument)

Maximum size of a single transaction in bytes

uint32_t

Any uint32_t number

False