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. - Fetch
Out - Outputs of
Fetcher. - Fetch
Req - A fetch request:
count(1..=16) words from wordwordof the buffer at byte addressbase. - Fetch
State - 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.