Get Started with MATLAB to High-Level Synthesis Workflow Using the Command Line Interface - MATLAB & Simulink (original) (raw)
This example shows how to use the HDL Coder™ command-line interface to generate High-Level Synthesis (HLS) code from MATLAB® code, including floating-point to fixed-point conversion.
Overview
High-Level Synthesis (HLS) code generation using the command-line interface has the following basic steps:
- Set up the HLS tool path for HLS code generation by using the function hdlsetuphlstoolpath.
- Create a
fixpt
coder configuration object. - Create an
hdl
coder configuration object. - Set configuration object parameters.
- Run the
codegen
command to generate HLS code.
The HDL Coder command-line interface can use two coder configuration objects with the codegen
command. The fixpt
coder configuration object configures the floating-point to fixed-point conversion of your MATLAB code. The hdl
coder configuration object configures HLS code generation and programming options.
The example code implements a simple symmetric finite impulse response (FIR) filter and its test bench. Using this example, you can configure floating-point to fixed-point conversion and generate HLS code.
Create Floating-Point to Fixed-Point Conversion Configuration Object
If your design already uses fixed-point types and functions, then you can skip the fixed-point conversion step.
To perform floating-point to fixed-point conversion, you need a fixpt
configuration object.
Create a fixpt
configuration object and specify your test bench name.
fixptcfg = coder.config('fixpt'); fixptcfg.TestBenchName = "mlhdlc_sfir_tb";
Fixed-Point Conversion Type Proposal Options
The code generator can propose fixed-point types based on your choice of either word length or fraction length. These two options are mutually exclusive.
Base the proposed types on a word length of 24
:
fixptcfg.DefaultWordLength = 24; fixptcfg.ProposeFractionLengthsForDefaultWordLength = true;
Alternatively, you can base the proposed fixed-point types on fraction lengths. The following code configures the code generator to propose types based on a fraction length of 10
:
fixptcfg.DefaultFractionLength = 10; fixptcfg.ProposeWordLengthsForDefaultFractionLength = true;
Safety Margin
The code generator increases the simulation data range on which it bases its fixed-point type proposal by the safety margin percentage. For example, the default safety margin is 4
, which increases the simulation data range used for fixed-point type proposal by 4%
.
Set the SafetyMargin
to 10%
:
fixptcfg.SafetyMargin = 10;
Data Logging
The code generator runs the test bench with the design before and after a floating-point to fixed-point conversion. You can enable simulation data logging to plot the quantization effects of the new fixed-point data types.
Enable data logging in the fixpt
configuration object:
fixptcfg.LogIOForComparisonPlotting = true;
Numeric Type Proposal Report
Configure the code generator to start the type proposal report once the fixed-point types have been proposed:
fixptcfg.LaunchNumericTypesReport = true;
Create HLS Code Generation Configuration Object
To generate HLS code, you must create an hdl
configuration object and set your test bench name:
hdlcfg = coder.config('hdl'); hdlcfg.TestBenchName = "mlhdlc_sfir_tb";
Target Language and Synthesis Tool
To generate HLS code, specify the workflow as High Level Synthesis
and the synthesis tool.
hdlcfg.Workflow = "High Level Synthesis"; hdlcfg.SynthesisTool = "Cadence Stratus HLS"; % or "Vitis HLS"
Generation of HLS Test Bench Code
Configure the code generator to generate a HLS test bench from your MATLAB® test bench:
hdlcfg.GenerateHDLTestBench = true;
Simulation of the Generated HLS Code
If you want to simulate your generated HLS code, you must also configure the code generator to generate a HLS test bench.
hdlcfg.SimulateGeneratedCode = true;
Synthesis Tool for Generated HLS Code
You can synthesize your generated HLS code by using the synthesis tool. Configure the code generator to use this tool.
hdlcfg.SynthesizeGeneratedCode = true;
Run HLS Code Generation
Now that you have your fixpt
and hdl
configuration objects set up, run the codegen
command to perform floating-point to fixed-point conversion and generate HLS code:
codegen -float2fixed fixptcfg -config hdlcfg mlhdlc_sfir -report
HLS Code Generation Report
At the MATLAB® command line window, you can check the code generation report by clicking View Report
.
The code generation report helps you to:
- Debug code generation issues and verify that your MATLAB code is suitable for code generation.
- View generated HLS code.
- Access additional reports like a conformance report and resource utiliztion report.
- See how the code generator determines and propagates type information for variables and expressions in your MATLAB code.
To view a MATLAB function in the code pane, click the name of the function in the MATLAB Source pane. In the code pane, when you pause on a variable or expression, a tooltip displays information about its size, type, and complexity.
For more information see, HLS Code Generation Report.
Limitations
- Cadence Stratus HLS supports only point to point (p2p) communication for HLS code generation.
- Generating HLS code that runs on multiple threads is not supported.
- System object™ are not supported for HLS code generation.
- Array of structures, enumerations, and classes are not supported as inputs and outputs at the top-level DUT ports for HLS code generation.