makehdltb
Generate HDL test bench from model or subsystem
Description
makehdltb(
generates an HDL test bench from the specified subsystem or model reference with
options specified by one or more name-value pair arguments. dut
,Name,Value
)
Note
If you have not previously executed
makehdl
within the current MATLAB® session,makehdltb
callsmakehdl
to generate model code before generating the test bench code. Properties passed in tomakehdl
persist aftermakehdl
executes, and (unless explicitly overridden) are passed to subsequentmakehdltb
calls during the same MATLAB session.Test bench code and model code must both be generated in the same target language. If the target language specified for
makehdltb
differs from the target language specified for the previousmakehdl
execution,makehdltb
regenerates model code in the same language specified for the test bench.
Examples
Generate VHDL® DUT and test bench for a subsystem.
Use makehdl
to generate VHDL code
for the subsystem symmetric_fir
.
makehdl('sfir_fixed/symmetric_fir')
### Generating HDL for 'sfir_fixed/symmetric_fir'. ### Starting HDL check. ### HDL check for 'sfir_fixed' complete with 0 errors, 0 warnings, and 0 messages. ### Begin VHDL Code Generation for 'sfir_fixed'. ### Working on sfir_fixed/symmetric_fir as hdlsrc\sfir_fixed\symmetric_fir.vhd ### HDL code generation complete.
After makehdl
is complete, use makehdltb
to
generate a VHDL test bench for the same subsystem.
makehdltb('sfir_fixed/symmetric_fir')
### Begin TestBench generation. ### Generating HDL TestBench for 'sfir_fixed/symmetric_fir'. ### Begin simulation of the model 'gm_sfir_fixed'... ### Collecting data... ### Generating test bench: hdlsrc\sfir_fixed\symmetric_fir_tb.vhd ### Creating stimulus vectors... ### HDL TestBench generation complete.
hdlsrc
folder.Generate Verilog® DUT and test bench for a subsystem.
Use makehdl
to generate Verilog code
for the subsystem symmetric_fir
.
makehdl('sfir_fixed/symmetric_fir','TargetLanguage','Verilog')
### Generating HDL for 'sfir_fixed/symmetric_fir'. ### Starting HDL check. ### HDL check for 'sfir_fixed' complete with 0 errors, 0 warnings, and 0 messages. ### Begin Verilog Code Generation for 'sfir_fixed'. ### Working on sfir_fixed/symmetric_fir as hdlsrc\sfir_fixed\symmetric_fir.v ### HDL code generation complete.
After makehdl
is complete, use makehdltb
to
generate a Verilog test bench for the same subsystem.
makehdltb('sfir_fixed/symmetric_fir','TargetLanguage','Verilog')
### Begin TestBench generation. ### Generating HDL TestBench for 'sfir_fixed/symmetric_fir'. ### Begin simulation of the model 'gm_sfir_fixed'... ### Collecting data... ### Generating test bench: hdlsrc\sfir_fixed\symmetric_fir_tb.v ### Creating stimulus vectors... ### HDL TestBench generation complete.
hdlsrc\sfir_fixed
folder.Generate SystemVerilog DUT and test bench for a subsystem.
Use makehdl
to generate SystemVerilog code for the
subsystem
symmetric_fir
.
makehdl('sfir_fixed/symmetric_fir','TargetLanguage','SystemVerilog')
After makehdl
is complete, use
makehdltb
to generate a SystemVerilog test bench
for the same
subsystem.
makehdltb('sfir_fixed/symmetric_fir','TargetLanguage','SystemVerilog')
symmetric_fir
subsystem is saved in the
hdlsrc\sfir_fixed\symmetric_fir_tb.sv
.Generate SystemVerilog DPI test bench for a subsystem.
Consider this option if generation or simulation of the default
HDL test bench takes a long time. Generation of a DPI test bench can
be faster than the default version because it does not run a Simulink® simulation
to create the test bench data. Simulation of a DPI test bench with
a large data set is faster than the default version because it does
not store the input or expected data in a separate file. For requirements
to use this feature, see the GenerateSVDPITestBench
property.
Use makehdl
to generate Verilog code
for the subsystem symmetric_fir
.
makehdl('sfir_fixed/symmetric_fir','TargetLanguage','Verilog')
### Generating HDL for 'sfir_fixed/symmetric_fir'. ### Starting HDL check. ### HDL check for 'sfir_fixed' complete with 0 errors, 0 warnings, and 0 messages. ### Begin Verilog Code Generation for 'sfir_fixed'. ### Working on sfir_fixed/symmetric_fir as hdlsrc\sfir_fixed\symmetric_fir.v ### HDL code generation complete.
After the code is generated, use makehdltb
to generate a test bench for
the same subsystem. Specify your HDL simulator so that the code generator
can generate scripts to build and run the generated SystemVerilog and C
code. Disable generation of the default test bench.
makehdltb('sfir_fixed/symmetric_fir','TargetLanguage','Verilog',... 'GenerateSVDPITestBench','ModelSim','GenerateHDLTestBench','off')
### Start checking model compatibility with SystemVerilog DPI testbench ### Finished checking model compatibility with SystemVerilog DPI testbench ### Preparing generated model for SystemVerilog DPI component generation ### Generating SystemVerilog DPI component ### Starting build procedure for model: gm_sfir_fixed_ref ### Starting SystemVerilog DPI Component Generation ### Generating DPI H Wrapper gm_sfir_fixed_ref_dpi.h ### Generating DPI C Wrapper gm_sfir_fixed_ref_dpi.c ### Generating SystemVerilog module gm_sfir_fixed_ref_dpi.sv using template C:\matlab\toolbox\hdlverifier\dpigenerator\rtw\hdlverifier_dpitb_template.vgt ### Generating makefiles for: gm_sfir_fixed_ref_dpi ### Invoking make to build the DPI Shared Library ### Successful completion of build procedure for model: gm_sfir_fixed_ref ### Working on symmetric_fir_dpi_tb as hdlsrc\sfir_fixed\symmetric_fir_dpi_tb.sv. ### Generating SystemVerilog DPI testbench simulation script for ModelSim/QuestaSim hdlsrc\sfir_fixed\symmetric_fir_dpi_tb.do ### HDL TestBench generation complete.
hdlsrc\sfir_fixed
folder.Input Arguments
DUT subsystem or model reference name, specified as a character vector, with full hierarchical path.
Example: 'modelname/subsysTarget'
Example: 'modelname/subsysA/subsysB/subsysTarget'
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose
Name
in quotes.
Example: 'TargetLanguage','Verilog'
Target Language and Folder Selection Options
Specify the Subsystem in your model to generate the test bench for. For more information, see Generate HDL for.
Specify whether to generate VHDL or Verilog code. For more information, see Language.
Specify a path to write the generated files and HDL code into. For more information, see Code Generation Folder.
Test Bench Generation Output Options
This property applies to generated test benches. When you select
'Custom'
, the tool uses the custom script
settings. See the “Script Generation”
properties.
For more information, see Simulation tool.
Include code coverage switches in the generated build-and-run scripts.
These switches turn on code coverage for the generated test bench.
Specify your HDL simulator in the
SimulationTool
property. The code
generator produces build-and-run scripts for the simulator you
specify.
When the GenerateCoSimModel
argument is set to
Xilinx Vivado Simulator
, code coverage is
not supported, and this input is ignored.
For more information, see HDL code coverage.
The code generator produces an HDL test bench by running a Simulink simulation to capture input vectors and expected output data for your DUT. For more information, see HDL test bench.
When you set this property, the code generator generates a direct programming interface (DPI) component for your entire Simulink model, including your DUT and data sources. Your entire model must support C code generation with Simulink Coder™. The code generator produces a SystemVerilog test bench that compares the output of the DPI component with the output of the HDL implementation of your DUT. The code generator also builds shared libraries and generates a simulation script for the simulator you select.
Consider using this option if the default HDL test bench takes a long time to generate or simulate. Generation of a DPI test bench is sometimes faster than the default version because it does not run a full Simulink simulation to create the test bench data. Simulation of a DPI test bench with a large data set is faster than the default version because it does not store the input or expected data in a separate file. For an example, see Generate a SystemVerilog DPI Test Bench.
To use this feature, you must have HDL Verifier™ and Simulink Coder licenses. To run the SystemVerilog testbench with generated VHDL code, you must have a mixed-language simulation license for your HDL simulator.
Limitations
This test bench is not supported when you generate HDL code for the top-level Simulink model. Your DUT subsystem must meet the following conditions:
Input and output data types of the DUT cannot be larger than 64 bits.
Input and output ports of the DUT cannot use enumerated data types.
Input and output ports cannot be single-precision or double-precision data types.
The DUT cannot have multiple clocks. You must set the Clock inputs code generation option to
Single
.Use trigger signal as clock must not be selected.
If the DUT uses vector ports, you must use Scalarize ports to flatten the interface.
If the DUT uses non-virtual ports and Target language is
VHDL
orSystemVerilog
, you must not select Preserve Bus structure in the generated HDL code.
See also SystemVerilog DPI test bench.
Generate an HDL Cosimulation block so you can simulate the DUT in Simulink with an HDL simulator.
For more information, see Cosimulation model.
Generate a model containing an HDL Cosimulation block for the specified HDL simulator.
For more information, see Cosimulation model.
Clock and Reset Input Options
Specify that the generated test bench drives the clock enable input
based on ClockLowTime
and
ClockHighTime
.
For more information, see Force clock.
Clock high time during a clock period, specified in nanoseconds.
For more information, see Clock high time (ns).
Clock low time during a clock period, specified in nanoseconds.
For more information, see Clock low time (ns).
Specify that the generated test bench drives the clock enable input.
For more information, see Force clock enable.
Number of clock cycles between deassertion of reset and assertion of clock enable, specified as a positive integer.
For more information, see Clock enable delay (in clock cycles)
Specify that the generated test bench drives the reset input.
For more information, see Force reset.
Length of time that reset is asserted, specified as the number of clock cycles.
For more information, see Reset length (in clock cycles).
Testbench Stimulus and Response Parameters
Hold valid data between samples for signals clocked at slower rate.
For more information, see Hold input data between samples.
Hold time for inputs and forced reset, specified in nanoseconds.
For more information, see Hold time (ns).
Time after clock enable is asserted before starting output data checks, specified in number of samples.
For more information, see Ignore output data checking (number of samples).
Initialize test bench inputs to zero. For more information, see Initialize test bench inputs.
Testbench Configuration Parameters
Postfix for test bench data file name, specified as a character vector.
For more information, see Test bench data file name postfix.
Postfix for test bench name, specified as a character vector.
For more information, see Test bench name postfix.
Postfix for test bench reference signal name, specified as a character vector.
For more information, see Test bench reference postfix.
Divide generated test bench into helper functions, data, and HDL test bench files.
For more information, see Multi-file test bench.
For more information, see Use file I/O to read/write test bench data.
Floating Point Tolerance Options
Floating-point tolerance check based on relative error or ULP. For more information, see Floating point tolerance check based on.
Floating-point tolerance value depending on the
FPToleranceStrategy
specified. For more
information, see Tolerance Value.
Port Names and Types
Specify whether to generate single or multiple clock inputs in the HDL code. For more information, see Clock inputs.
Specify whether to use an active-high or active-low asserted level for the reset input signal. For more information, see Reset asserted level.
Specify the clock enable input port name as a character vector. For more information, see Clock enable input port.
Clock enable output port name, specified as a character vector.
For more information, see Clock enable output port.
Specify the clock input port name as a character vector. For more information, see Clock input port.
Reset input port name, specified as a character vector.
For more information, see Reset input port.
File and Variable Names
Specify the file name extension for generated Verilog files. For more information, see Verilog file extension.
Specify the file name extension for generated VHDL files. For more information, see VHDL file extension.
For more information, see VHDL architecture name.
For more information, see VHDL library name.
For more information, see Split entity file postfix.
For more information, see Split arch file postfix.
Specify the postfix for the package file name as a character vector. For more information, see Package postfix.
For more information, see Complex imaginary part postfix.
For more information, see Complex real part postfix.
Prefix for internal clock enable and control flow enable signals, specified as a character vector. For more information, see Clock enable input port and Enable prefix.
Coding Style
For more information, see Split entity and architecture.
For more information, see Use Verilog or SystemVerilog `timescale directives.
For more information, see Emit time/date stamp in header.
For more information, see Inline VHDL configuration.
For more information, see Scalarize ports.
Script Generation
For more information, see Compile initialization.
For more information, see Compile termination.
For more information, see Compile file postfix.
Verilog compilation command, specified as a character vector.
The SimulatorFlags
name-value pair specifies the
first argument, and the module name specifies the second argument.
For more information, see Compile command for Verilog or SystemVerilog.
VHDL compilation command, specified as a character vector.
The SimulatorFlags
name-value pair specifies the
first argument, and the entity name specifies the second argument.
For more information, see Compile command for VHDL.
The HDL simulation command, specified as a character vector.
For more information, see Simulation command.
Initialization for the HDL simulation script, specified as a character vector.
For more information, see Simulation initialization.
The termination name for the HDL simulation command, specified as a character vector.
For more information, see Simulation termination.
For more information, see Simulation file postfix.
Waveform viewing command, specified as a character vector. The implicit argument adds the signal paths for the DUT top-level input, output, and output reference signals.
For more information, see Simulation waveform viewing command.
Version History
Introduced in R2006b
See Also
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: United States.
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)