Some Matrox imaging boards have a Processing FPGA. You can configure this Processing FPGA to perform some required processing operations on-board to free up the Host for other tasks.
Before any processing can take place using the Processing FPGA, you must configure it with an FPGA configuration that contains the appropriate processing units (PUs) to carry out the required set of tasks.
Several useful Matrox FPGA configurations are distributed with MIL. However, depending on your application's requirements, you might need to develop a custom FPGA configuration using Matrox PUs and, if required, custom PUs. If this is the case, you must purchase and use the Matrox FPGA Developer's Toolkit (FDK).
Once the Processing FPGA is configured, MIL will use it to perform any MIL function that can be performed using the Matrox PUs in the loaded FPGA configuration, if possible. MIL functions cannot be performed using custom PUs.
To use PUs without a corresponding MIL function, or to reduce memory accesses by routing an output of one PU to an input of another PU (cascaded or parallel processing operations), you must use the MIL FPGA module to create, set up, and dispatch the required command(s) to the board. The MIL FPGA module allows you to create a command and set its target PU, specify the image buffers to associate with the stream input and output ports of the PU, and set the PU's user-specific registers (with required processing information). Besides associating image buffers with the ports, the MIL FPGA module also allows you to route the output of one command's PU to an input port of another command's PU, if the PUs are interconnected in the loaded FPGA configuration.
You can create a simple function (primitive function) that calls all the required functions of the MIL FPGA module. However, if incorrect parameters are passed to your primitive function, you are not notified and you cannot use MIL's tracing mechanism to determine the cause of the unexpected results. To enable basic error checking and parameter validation, you must call your primitive function from a user-defined MIL function; to do so, see Chapter 33: The MIL function development module. Note that this error checking adds a small overhead to the processing function.
When your Matrox imaging board also has an on-board processor, you must use a user-defined MIL function because the MIL FPGA functions must be executed by the on-board processor.
If your board has an on-board processor and you don't define your primitive function as a user-defined MIL function, an error will be generated.
Although an FPGA configuration also has components (referred to as transfer units and memory controllers) required to transfer data to/from the required PUs and to/from memory, the MIL FPGA module handles these transparently.