Skip to main content

Module fetch

Module fetch 

Source
Expand description

Reading mailboxes: one burst instead of one read per word.

Problem. ubft_new reads HBM through volatile int *, one 32-bit word per AXI transaction. Counting a slot’s votes takes N reads, a 64-byte signature share 16, and each pays the full memory latency (HLS assumes 64 cycles). Polling is most of what the kernel does while it waits for peers, so its loop crawls.

Idea. Everything one poll needs sits in at most 32 consecutive words (a slot’s two-word votes from 16 replicas, a prepare, a record). Fetcher reads them with one INCR burst of one to three 64-byte beats, whatever the alignment (the mailboxes start at byte 1,000,764, which is 60 mod 64), and hands back the 32 words starting at the requested one.

Result. A poll costs one memory latency plus one or two beats, instead of N latencies.

Structs§

FetchIn
Inputs of Fetcher.
FetchOut
Outputs of Fetcher.
FetchReq
A fetch request: count (1..=16) words from word word of the buffer at byte address base.
FetchState
The fetcher’s registers.
Fetcher
One-burst mailbox reader (see the module docs).

Functions§

fetch_kernel
The fetcher’s logic.
idle_fetch_req
No fetch.