Intel® High Level Synthesis Compiler Pro Edition: User Guide

ID 683456
Date 4/03/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

6.3. High-Throughput Simulation (Asynchronous Component Calls) Using Enqueue Function Calls

An explicit call to a component in simulation is a blocking call. To be consistent with C++ language conventions, the testbench waits for a return value from the component before continuing execution. This blocking call results in serial execution of the component. You can test how well successive invocations of your component can be pipelined by queuing inputs to the component before executing the component. You can queue inputs to a component that has explicit interfaces by using enqueue function calls from the simulation library. Estimate the throughput of your component by dividing the component fMAX by the component initiation interval (II), which indicates approximately how many times your component is invoked per second.
Table 6.  Functions from Simulation Library for Queuing Inputs to the Component with Explicit Interfaces
Function Description
ihc_hls_enqueue(void* retptr, void* funcptr, …) This function enqueues one invocation of an HLS component.

The return value is stored in the first argument which should be a pointer to the return type.

The component does not execute until the ihc_hls_component_run_all() function is invoked.

ihc_hls_enqueue_noret(void* funcptr, …) This function is similar to ihc_hls_enqueue(void* retptr, void* funcptr, …), except that it does not have an output pointer to capture return values.
ihc_hls_component_run_all (void* funcptr) This function executes all enqueued calls to the specified component in a pipelined fashion.