MATLAB to HDL Code and Synthesis
MATLAB to HDL Code Conversion
The MATLAB to HDL Workflow task in the HDL Workflow Advisor generates HDL code from fixed-point MATLAB® code, and simulates and verifies the HDL against the fixed-point algorithm. HDL Coder™ then runs synthesis, and optionally runs place and route to generate a circuit description suitable for programming an ASIC or FPGA.
Code Generation: Target Tab
Select target hardware and language and required outputs.
Input Parameters
- Target
Target hardware. Select from the list:
Generic ASIC/FPGA Xilinx Altera Simulation - Language
Select the language (VHDL®, Verilog® or SystemVerilog) in which code is generated. The selected language is referred to as the target language.
Default: VHDL
- Check HDL Conformance
Enable HDL conformance checking.
Default: Off
- Generate HDL
Enable generation of HDL code for the fixed-point MATLAB algorithm.
Default: On
- Generate HDL Test Bench
Enable generation of HDL code for the fixed-point test bench.
Default: Off
- Generate EDA Scripts
Enable generation of script files for third-party electronic design automation (EDA) tools. These scripts let you compile and simulate generated HDL code and synthesize generated HDL code.
Default: On
Code Generation: Coding Style Tab
Parameters that affect the style of the generated code.
Input Parameters
- Preserve MATLAB code comments
Include MATLAB code comments in generated code.
Default: On
- Include MATLAB source code as comments
Include MATLAB source code as comments in the generated code. The comments precede the associated generated code. Includes the function signature in the function banner.
Default: On
- Generate Report
Enable a code generation report.
Default: Off
- VHDL File Extension
Specify the file name extension for generated VHDL files.
Default: .vhd
- Verilog File Extension
Specify the file name extension for generated Verilog files.
Default: .v
- Comment in header
Specify comment lines in header of generated HDL and test bench files.
Default: None
Text entered in this field as a character vector generates a comment line in the header of the generated code. The code generator adds leading comment characters for the target language. When newlines or linefeeds are included in the text, the code generator emits single-line comments for each newline.
- Package postfix
HDL Coder applies this option only if a package file is required for the design.
Default: _pkg
- Entity conflict postfix
Specify the character vector to resolve duplicate VHDL entity, or Verilog or SystemVerilog module names in generated code.
Default: _block
- Reserved word postfix
Specify a character vector to append to value names, postfix values, or labels that are VHDL, Verilog or SystemVerilog reserved words.
Default: _rsvd
- Clocked process postfix
Specify a character vector to append to HDL clock process names.
Default: _process
- Complex real part postfix
Specify a character vector to append to real part of complex signal names.
Default: '_re'
- Complex imaginary part postfix
Specify a character vector to append to imaginary part of complex signal names.
Default: '_im'
- Pipeline postfix
Specify a character vector to append to names of input or output pipeline registers.
Default: '_pipe'
- Enable prefix
Specify the base name as a character vector for internal clock enables and other flow control signals in generated code.
Default: 'enb'
Code Generation: Clocks and Ports Tab
Clock and port settings
Input Parameters
- Reset type
Specify whether to use asynchronous or synchronous reset logic when generating HDL code for registers.
Default: Asynchronous
- Reset Asserted level
Specify whether the asserted (active) level of reset input signal is active-high or active-low.
Default: Active-high
- Reset input port
Enter the name for the reset input port in generated HDL code.
Default: reset
- Clock input port
Specify the name for the clock input port in generated HDL code.
Default: clk
- Clock enable input port
Specify the name for the clock enable input port in generated HDL code.
Default: clk
- Oversampling factor
Specify frequency of global oversampling clock as a multiple of the design under test (DUT) base rate (1).
Default: 1
- Input data type
Specify the HDL data type for input ports.
For VHDL, the options are:
std_logic_vector
Specifies VHDL type STD_LOGIC_VECTOR
signed/unsigned
Specifies VHDL type SIGNED or UNSIGNED
Default: std_logic_vector
For Verilog, the options are:
In generated Verilog code, the data type for all ports is ‘wire’. Therefore, Input data type is disabled when the target language is Verilog.
Default: wire
- Output data type
Specify the HDL data type for output data types.
For VHDL, the options are:
Same as input data type
Specifies that output ports have the same type specified by Input data type.
std_logic_vector
Specifies VHDL type STD_LOGIC_VECTOR
signed/unsigned
Specifies VHDL type SIGNED or UNSIGNED
Default: Same as input data type
For Verilog, the options are:
In generated Verilog code, the data type for all ports is ‘wire’. Therefore, Output data type is disabled when the target language is Verilog.
Default: wire
- Clock enable output port
Specify the name for the clock enable input port in generated HDL code.
Default: clk_enable
Code Generation: Test Bench Tab
Test bench settings.
Input Parameters
- Test bench name postfix
Specify a character vector appended to names of reference signals generated in test bench code.
Default: '_tb’
- Force clock
Specify whether the test bench forces clock enable input signals.
Default: On
- Clock High time (ns)
Specify the period, in nanoseconds, during which the test bench drives clock input signals high (1).
Default: 5
- Clock low time (ns)
Specify the period, in nanoseconds, during which the test bench drives clock input signals low (0).
Default: 5
- Hold time (ns)
Specify a hold time, in nanoseconds, for input signals and forced reset input signals.
Default: 2 (given the default clock period of 10 ns)
- Setup time (ns)
Display setup time for data input signals.
Default: 0
- Force clock enable
Specify whether the test bench forces clock enable input signals.
Default: On
- Clock enable delay (in clock cycles)
Define elapsed time (in clock cycles) between deassertion of reset and assertion of clock enable.
Default: 1
- Force reset
Specify whether the test bench forces reset input signals.
Default: On
- Reset length (in clock cycles)
Define length of time (in clock cycles) during which reset is asserted.
Default: 2
- Hold input data between samples
Specify how long subrate signal values are held in valid state.
Default: On
- Initialize testbench inputs
Specify initial value driven on test bench inputs before data is asserted to device under test (DUT).
Default: Off
- Multi file testbench
Divide generated test bench into helper functions, data, and HDL test bench code files.
Default: Off
- Test bench data file name postfix
Specify suffix added to test bench data file name when generating multi-file test bench.
Default: '_data’
- Test bench reference post fix
Specify a character vector to append to names of reference signals generated in test bench code.
Default: '_ref'
- Ignore data checking (number of samples)
Specify number of samples during which output data checking is suppressed.
Default: 0
- Use fiaccel to accelerate test bench logging
To generate a test bench, HDL Coder simulates the original MATLAB code. Use the Fixed-Point Designer™
fiaccel
function to accelerate this simulation and accelerate test bench logging.Default: On
Code Generation: Optimizations Tab
Optimization settings
Input Parameters
- Map persistent array variables to RAMs
Select to map persistent array variables to RAMs instead of mapping to shift registers.
Default: Off
Dependencies:
RAM Mapping Threshold
Persistent variable names for RAM Mapping
- RAM Mapping Threshold
Specify the minimum RAM size required for mapping persistent array variables to RAMs.
Default: 256
- Persistent variable names for RAM Mapping
Provide the names of the persistent variables to map to RAMs.
Default: None
- Input Pipelining
Specify number of pipeline registers to insert at top level input ports. Can improve performance and help to meet timing constraints.
Default: 0
- Output Pipelining
Specify number of pipeline registers to insert at top level output ports. Can improve performance and help to meet timing constraints.
Default: 0
- Distribute Pipeline Registers
Reduces critical path by changing placement of registers in design. Operates on all registers, including those inserted using the Input Pipelining and Output Pipelining parameters, and internal design registers.
Default: Off
- Sharing Factor
Number of additional sources that can share a single resource, such as a multiplier. To share resources, set Sharing Factor to 2 or higher; a value of 0 or 1 turns off sharing.
In a design that performs identical multiplication operations, HDL Coder can reduce the number of multipliers by the sharing factor. This can significantly reduce area.
Default: 0
Simulation and Verification
Simulates the generated HDL code using the selected simulation tool.
Input Parameters
- Simulation tool
Lists the available simulation tools.
Default: None
- Skip this step
Default: Off
Results and Recommended Actions
Conditions | Recommended Action |
---|---|
No simulation tool available on system path. | Add your simulation tool path to the MATLAB system path, then restart MATLAB. For more information, see Synthesis Tool Path Setup. |
Synthesis and Analysis
This folder contains tasks to create a synthesis project for the HDL code. The task then runs the synthesis and, optionally, runs place and route to generate a circuit description suitable for programming an ASIC or FPGA.
Input Parameters
- Skip this step
Default: Off
Skip this step if you are interested only in simulation or you do not have a synthesis tool.
Create Project
Create synthesis project for supported synthesis tool.
Description. This task creates a synthesis project for the selected synthesis tool and loads the project with the HDL code generated for your MATLAB algorithm.
You can select the family, device, package, and speed that you want.
When the project creation is complete, the HDL Workflow Advisor displays a link to the project in the right pane. Click this link to view the project in the synthesis tool's project window.
Input Parameters
- Synthesis Tool
Select from the list:
Altera Quartus II
Generate a synthesis project for Altera® Quartus II. When you select this option, HDL Coder sets:
Chip Family to
Stratix II
Device Name to
EP2S60F1020C4
You can manually change these settings.
Xilinx ISE
Generate a synthesis project for Xilinx® ISE. When you select this option, HDL Coder:
Sets Chip Family to
Virtex4
Sets Device Name to
xc4vsx35
Sets Package Name to
ff6...
Sets Speed Value to
—...
You can manually change these settings.
Default:
No Synthesis Tool Specified
When you select
No Synthesis Tool Specified
, HDL Coder does not generate a synthesis project. It clears and disables the fields in the Synthesis Tool Selection pane.- Chip Family
Target device family.
Default: None
- Device Name
Specific target device, within selected family.
Default: None
- Package Name
Available package choices. The family and device determine these choices.
Default: None
- Speed Value
Available speed choices. The family, device, and package determine these choices.
Default: None
Results and Recommended Actions
Conditions | Recommended Action |
---|---|
Synthesis tool fails to create project. | Read the error message returned by synthesis tool, then check the synthesis tool version, and check that you have write permission for the project folder. |
Synthesis tool does not appear in dropdown list. | Add your synthesis tool path to the MATLAB system path, then restart MATLAB. For more information, see Synthesis Tool Path Setup. |
Run Logic Synthesis
Launch selected synthesis tool and synthesize the generated HDL code.
Description. This task:
Launches the synthesis tool in the background.
Opens the previously generated synthesis project, compiles HDL code, synthesizes the design, and emits netlists and related files.
Displays a synthesis log in the Result subpane.
Results and Recommended Actions
Conditions | Recommended Action |
---|---|
Synthesis tool fails when running place and route. | Read the error message returned by the synthesis tool, modify the MATLAB code, then rerun from the beginning of the HDL Coder workflow. |
Run Place and Route
Launches the synthesis tool in the background and runs a Place and Route process.
Description. This task:
Launches the synthesis tool in the background.
Runs a Place and Route process that takes the circuit description produced by the previous mapping process, and emits a circuit description suitable for programming an FPGA.
Displays a log in the Result subpane.
Input Parameters
- Skip this step
If you select Skip this step, the HDL Workflow Advisor executes the workflow, but omits the Perform Place and Route, marking it Passed. You might want to select Skip this step if you prefer to do place and route work manually.
Default: Off
Results and Recommended Actions
Conditions | Recommended Action |
---|---|
Synthesis tool fails when running place and route. | Read the error message returned by the synthesis tool, modify the MATLAB code, then rerun from the beginning of the HDL Coder workflow. |