1. Intel® High Level Synthesis Compiler Pro Edition User Guide 2. Overview of the Intel® High Level Synthesis (HLS) Compiler Pro Edition 3. Creating a High-Level Synthesis Component and Testbench 4. Verifying the Functionality of Your Design 5. Optimizing and Refining Your Component 6. Verifying Your IP with Simulation 7. Synthesize your Component IP with Intel® Quartus® Prime Pro Edition 8. Integrating your IP into a System A. Reviewing the High-Level Design Reports (report.html) B. Intel® HLS Compiler Pro Edition Restrictions C. Intel® HLS Compiler Pro Edition User Guide Archives D. Document Revision History for Intel® HLS Compiler Pro Edition User Guide
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.
|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.