This document describes the structure and execution of dynamic evaluation module, implemented as dynamicEval function.
The structure of dynamicEval
is described as below. The primitive has 4-stream and 4-constant as inputs.
The data type of input stream and constant is a template parameter in API, and the maximum width of constant is limited to 64-bit.
The primitive is a tree-shaped structure with evaluation cells in each node. Each evaluation cell provides 4 kinds of computing unit, which are: compare, boolean algebra, multiplex and math compute. For comparator and boolean algebra, the results are in boolean type, while multiplex and math compute will generate non-boolean results. The internal of dynamic eval will expread two types of results from one cell to the next level of cells. There are two types of cell design. For Cell1-Cell4, as the level-1 cells, the two inputs which are stream and constant respectively. For Cell5-Cell7, as the internal cells, which need process both boolean and non-boolean results from previous level. Cell1-Cell4 is shown as:
While Cell5-Cell7 has more inputs to select:
The configuration of the primitive is defined as below, and the bits are concatenated without padding from top to bottom in LSB to MSB order.
Type | Usage | Size |
---|---|---|
Operator | Output Mux | 1 bit |
Strm Empty | 4 bit | |
Cell1 OP | 4 bit | |
Cell2 OP | 4 bit | |
Cell3 OP | 4 bit | |
Cell4 OP | 4 bit | |
Cell5 OP | 4 bit | |
Cell6 OP | 4 bit | |
Cell7 OP | 4 bit | |
Operand | C1 | 64 bit |
C2 | 64 bit | |
C3 | 64 bit | |
C4 | 64 bit |
To automatically generate its configuration, please refer to the test case in L3/tests/sw/dynamic_alu_host/test.cpp
To manually generate configuration, please refer to built-in docs in L1/include/hw/xf_database/dynamic_eval.hpp