Run MATLAB-HDL Cosimulation
Process for Running MATLAB Cosimulation
To start and control the execution of a simulation in the MATLAB® environment, perform the following steps:
Check MATLAB Cosimulation Server's Link Status
The first step to starting an HDL simulator and MATLAB testbench or component function session is to check the link status of the
MATLAB server. Is the server running? If the server is running, what mode of
communication and, if applicable, what TCP/IP socket port is the server using for its links?
You can retrieve this information by using the MATLAB function hdldaemon
with the 'status'
option. For example:
hdldaemon('status')
The function displays a message that indicates whether the server is running and, if it is running, the number of connections it is handling. For example:
HDLDaemon socket server is running on port 4449 with 0 connections
If the server is not running, the message reads
HDLDaemon is NOT running
See the Options: Inputs section in the hdldaemon
reference
documentation for information on determining the mode of communication
and the TCP/IP socket in use.
Run Cosimulation
You can run a cosimulation session using both the MATLAB and HDL simulator GUIs (typical) or, to reduce memory demand, you can run the cosimulation using the command line interface (CLI) or in batch mode.
Cosimulation with MATLAB Using the HDL Simulator GUI
These steps describe a typical sequence for running a simulation interactively from the main HDL simulator window:
Set breakpoints in the HDL and MATLAB code to verify and analyze simulation progress.
How you set breakpoints in the HDL simulator will vary depending on what simulator application you are using.
In MATLAB, there are several ways you can set breakpoints; for example, by using the Set/Clear Breakpoint button on the toolbar.
Issue
matlabtb
command at the HDL simulator prompt.When you begin a specific testbench or component session, you specify parameters that identify the following information:
The mode and, if applicable, TCP/IP data for connecting to a MATLAB server (see
matlabtb
reference)The MATLAB function that is associated with and executes on behalf of the HDL instance. See Bind HDL Module Component to MATLAB Testbench Function.
Timing specifications and other control data that specifies when the module's MATLAB function is to be called. See Schedule Options for a Testbench Session.
For example:
hdlsim> matlabtb osc_top -sensitivity /osc_top/sine_out -socket 4448 -mfunc hosctb
Start the simulation by entering the HDL simulator
run
command.The
run
command offers a variety of options for applying control over how a simulation runs (refer to your HDL simulator documentation for details). For example, you can specify that a simulation run for several time steps.The following command instructs the HDL simulator to run the loaded simulation for 50000 time steps:
run 50000
Step through the simulation and examine values.
How you step through the simulation in the HDL simulator will vary depending on what simulator application you are using.
In MATLAB, there are several ways you can step through code; for example, by clicking the Step toolbar button.
When you block execution of the MATLAB function, the HDL simulator also blocks and remains blocked until you clear all breakpoints in the function's code.
Resume the simulation, as desired.
How you resume the simulation in the HDL simulator will vary depending on what simulator application you are using.
In MATLAB, there are several ways you can resume the simulation; for example, by clicking the Continue toolbar button.
The following HDL simulator command resumes a simulation:
run -continue
For more information on HDL simulator and MATLAB debugging features, see the HDL simulator documentation and MATLAB online help or documentation.
Cosimulation with MATLAB Using the Command Line Interface (CLI)
Running your cosimulation session using the command-line interface allows you to interact with the HDL simulator during cosimulation, which can be helpful for debugging.
To use the CLI, specify "CLI" as the property value for the run mode parameter of the HDL Verifier™ HDL simulator launch command.
The Tcl command you build to pass to the HDL simulator launch command must contain the run command or no cosimulation will take place.
Caution
Close the terminal window by entering quit -f
at
the command prompt. Do not close the terminal window by clicking the
"X" in the upper right-hand corner. This causes a memory-type error
to be issued from the system. This is not a bug with HDL Verifier but
just the way the HDL simulator behaves in this context.
You can type CTRL+C to interrupt and terminate the simulation in the HDL simulator but this action also causes the memory-type error to be displayed.
Cosimulation with MATLAB Using Batch Mode
Running your cosimulation session in batch mode allows you to keep the process in the background, reducing demand on memory by disengaging the GUI.
To use the batch mode, specify "Batch" as the property value
for the run mode parameter of the HDL Verifier HDL simulator
launch command. After you issue the HDL Verifier HDL simulator
launch command with batch mode specified, start the simulation in Simulink®.
To stop the HDL simulator before the simulation is completed, issue
the breakHdlSim
command.
Apply Stimuli to Cosimulation Session with force Command
After you establish a connection between the HDL simulator and MATLAB, you can then apply stimuli to the testbench or component cosimulation
environment. One way of applying stimuli is through the iport
parameter
of the linked MATLAB function. This parameter forces signal values by deposit.
Other ways to apply stimuli include issuing force
commands in the HDL
simulator main window (for ModelSim, you can also use the Edit > Clock option in the ModelSim Signals window).
For example, consider the following sequence of force
commands:
Xcelium™
force osc_top.clk_enable 1 -after 0ns force osc_top.reset 0 -after 0ns 1 -after 40ns 0 -after 120ns force osc_top.clk 1 -after 0ns 0 -after 40ns -repeat 80ns
ModelSim
VSIM n> force clk 0 0 ns, 1 5 ns -repeat 10 ns VSIM n> force clk_en 1 0 VSIM n> force reset 0 0
These commands drive the following signals:
The
clk
signal to 0 at 0 nanoseconds after the current simulation time and to 1 at 5 nanoseconds after the current HDL simulation time. This cycle repeats starting at 10 nanoseconds after the current simulation time, causing transitions from 1 to 0 and 0 to 1 every 5 nanoseconds, as the following diagram shows.For example,
force /foobar/clk 0 0, 1 5 -repeat 10
The
clk_en
signal to 1 at 0 nanoseconds after the current simulation time.The
reset
signal to 0 at 0 nanoseconds after the current simulation time.
Xcelium Users: Using HDL to Code Clock Signals Instead of the force Command
You should consider using HDL to code clock signals as force
is a lower
performance solution in the current version of Cadence®
Xcelium simulators.
The following are ways that a periodic force might be introduced:
Via the Clock pane in the HDL Cosimulation block
Via pre/post Tcl commands in the HDL Cosimulation block
Via a user-input Tcl script to
xmsim
All three approaches may lead to performance degradation.
Restart Simulation
Because the HDL simulator issues the service requests during a MATLAB cosimulation session, you must restart the session from the HDL simulator. To restart a session, perform the following steps:
Make the HDL simulator your active window, if your input focus was not already set to that application.
Reload HDL design elements and reset the simulation time to zero.
Reissue the
matlabtb
ormatlabcp
command.
Note
To restart a simulation that is in progress, issue a break command and end the current simulation session before restarting a new session.
Stop Simulation
When you are ready to stop a testbench or component session, it is best to do so in an orderly way to avoid possible corruption of files and to see that all application tasks shut down cleanly. You should stop a session as follows:
Make the HDL simulator your active window, if your input focus was not already set to that application.
Halt the simulation. You must quit the simulation at the HDL simulator side or MATLAB may hang until the simulator is quit.
Close your project.
Exit the HDL simulator, if you are finished with the application.
Quit MATLAB, if you are finished with the application. If you want to shut down the server manually, stop the server by calling
hdldaemon
with the'kill'
option:hdldaemon('kill')
For more information on closing HDL simulator sessions, see the HDL simulator documentation.