ICAP (internal configuration access port: to loading/unloading stream PE)
and Router to combine everything above with user-designed Stream PE
Users of OpenFC can design and load their own Stream PE accelerator module, in HLS or of course RTL. Multiple FPGAs can be connected together to enable large-scale accelerated computing.
On the host, simple APIs are provided to enable user programs to communicate with the Stream PE on FPGA(s).
To communicate with Stream PEs, host program transmits one or more data frames via PCIe DMA. Data frames are routed by its routing header: header is basically generated by the host program. Stream PEs can consume the payload part, then generate new payload that contains result of the computation.
A data frame is a stream of 64-bit words, composed of these 3 parts:
Routing header: Values of 64'h0100_0000_xxxx_xxxx, where xxxx_xxxx is the router's port #.
On arrival to router, the first word of routing header is "consumed" to choose the destination port. To describe a route of multiple hops, multiple routing header words are arranged. Any length of routing header is allowed.
Basically, host program prepares routing header to the final destination (i.e., the host itself.) Or, Stream PEs can add routing header words for adaptiveness/flexibility.
Length: Number of 64-bit words follows as the payload. The minimum length is 1 word, the maximum length is 2^32-1 words.