Cross-Network Cosimulation
Why Perform Cross-Network Cosimulation?
You can perform cross-network cosimulation when your setup comprises one machine
running MATLAB® and Simulink® software and another machine running the HDL simulator. Typically, a
Windows®-platform machine runs the MATLAB and Simulink software, while a Linux® machine runs the HDL simulator. However, these procedures apply to any
combination of platforms that HDL Verifier™ and the HDL simulator support.
Preparing for Cross-Network Cosimulation
Before you cosimulate between the HDL simulator and MATLAB or Simulink across a network, perform the following steps:
Create your design and testing files.
ModelSim Users
Create and compile your HDL design, and create your
MATLAB function (for MATLAB cosimulation) or Simulink model (for Simulink cosimulation).
If you are going to cosimulate with Simulink, use the -voptargs=+acc
flag
when you compile so that the design is not optimized, and
include the same flag when you issue the
vsim
command (see Performing Cross-Network Cosimulation Using Simulink). Using this flag retains some unused signals from the design
which are required by the Simulink model to run and display the results.
Incisive Users
Create, compile, and elaborate your HDL design, and create your
MATLAB function (for MATLAB cosimulation), or Simulink model (for Simulink cosimulation).
Copy HDL Verifier libraries to the machine with the HDL simulator
Go to the system where you installed MATLAB. Then, find the folder in the MATLAB distribution where the HDL Verifier libraries reside.
You can usually find the libraries in the default installed
folder:
matlabroot/toolbox/edalink/extensions/adaptor/platform/productlibraryname_
compiler_tag.ext
where the variable shown in the following table have the values
indicated.
Variable | Value |
---|
matlabroot | The location where you installed the MATLAB software; default value is
MATLAB/version
where version is the installed release (for example,
R2009a). |
adaptor | incisive or
modelsim |
platform | The operating system of the machine with the HDL
simulator, for example, linux32 .
(For more information, see Cosimulation Libraries.) |
productlibraryname | The name of the library files for MATLAB and for Simulink (for example,
liblfmhdlc ,
liblfmhdls for ModelSim® users; liblfihdlc ,
liblfihdls for Incisive® users). See Cosimulation Libraries. |
compiler_tag | The compiler used to create the library (for
example, gcc32 or
spro ). For more information,
see Cosimulation Libraries. |
ext | dll (dynamic link
library—Windows only) or so (
shared library extension) |
For a list of all the HDL Verifier HDL shared libraries shipped, see Default Libraries.
From the MATLAB machine, copy the HDL Verifier libraries you plan to use (which you determined in
step 2) to the machine where you installed the HDL simulator. Make
note of the location to which you copied the libraries; you'll need
this information when you are actually establishing the connection
to the HDL simulator. For purposes of this example, the sample code
refers to the destination folder as
HDLSERVER_LIB_LOCATION
.
If you now want to cosimulate with MATLAB, see Performing Cross-Network Cosimulation Using MATLAB. If you want to
cosimulate with Simulink, see Performing Cross-Network Cosimulation Using Simulink.
Performing Cross-Network Cosimulation Using MATLAB
To perform an HDL-simulator-to-MATLAB cosimulation session across a network, follow these steps:
ModelSim Users
In MATLAB, get an available socket using hdldaemon
:
Or assign one (that you know is available):
On the machine with the HDL simulator, launch the HDL simulator from a
shell with the following command:
vsim -foreign "matlabclient /HDLSERVER_LIB_LOCATION/library_name;" design_name
where the arguments shown in the following table have the values
indicated.
Argument | Value |
---|
library_name | The name of the library you copied to the machine
with the HDL simulator (in Preparing for Cross-Network Cosimulation). |
design_name | The VHDL® or Verilog® design you want to load |
In the HDL simulator, schedule the test bench or component
(matlabcp
or matlabtb
).
Specify the socket port number from step 1 and the name of the host
machine where hdldaemon
is running.
Incisive Users
In MATLAB, get an available socket using hdldaemon
:
Or assign one:
Create a MATLAB configuration file (for loading the functions used in the
HDL simulator) with the following contents:
//Command file for MATLAB HDL Verifier.
//Loading of foreign Library and HDL simulator functions.
-loadcfc /HDLSERVER_LIB_LOCATION/library_name:matlabclient
//TCL wrappers for MATLAB commands
-input @proc" "nomatlabtb" "{args}" "{call" "nomatlabtb" "\$args}
-input @proc" "matlabtb" "{args}" "{call" "matlabtb" "\$args}
-input @proc" "matlabcp" "{args}" "{call" "matlabcp" "\$args}
-input @proc" "matlabtbeval" "{args}" "{call" "matlabtbeval" "\$args}
Where library_name
is the name of the
library you copied in Preparing for Cross-Network Cosimulation. You may name this
configuration file anything you like.
On the machine with the HDL simulator, launch the HDL simulator from a
shell with the following command:
ncsim -gui -f matlab_config.file design_name
where the arguments shown in the following table have the values
indicated.
Argument | Value |
---|
matlab_config.file | The name of the MATLAB configuration file (from step 3) |
design_name | The VHDL or Verilog design you want to load |
In the HDL simulator, schedule the test bench or component
(matlabcp
or matlabtb
).
Specify the socket port number from step 1 and the name of the host
where hdldaemon
is running.
Performing Cross-Network Cosimulation Using Simulink
When you want to perform an HDL-simulator-to-Simulink cosimulation session across a network, follow these steps:
ModelSim Users
Launch the HDL simulator from a shell with the following
command:
vsim -foreign "simlinkserver /HDLSERVER_LIB_LOCATION/library_name;
-socket socket_num" -voptargs=+acc design_name
where the arguments shown in the following table have the values
indicated.
Argument | Value |
---|
library_name | The name of the library you copied to the machine
with the HDL simulator (in Preparing for Cross-Network Cosimulation). |
socket_num | The socket number you have chosen for this
connection |
design_name | The VHDL or Verilog design you want to load |
On the machine with MATLAB and Simulink, start Simulink and open your model.
Double-click on the HDL Cosimulation block to open the
Function Block Parameters dialog box.
Click on the Connections tab.
Clear “The HDL simulator is running on this
computer.” HDL Verifier changes the Connection method to Socket.
In the text box labeled Host name, enter
the host name of the machine where the HDL simulator is
located.
In the text box labeled Port number or
service, enter the socket number from step
1.
Click OK to exit block dialog box, and
save your changes.
Incisive Users
Launch the HDL simulator from a shell with the following
command:
ncsim -gui -loadvpi "/HDLSERVER_LIB_LOCATION/library_name:simlinkserver"
+socket=socket_num design_name
where the arguments shown in the following table have the values
indicated.
Argument | Value |
---|
library_name | The name of the library you copied to the machine
with the HDL simulator (in Preparing for Cross-Network Cosimulation). |
socket_num | The socket number you have chosen for this
connection |
design_name | The VHDL or Verilog design you want to load |
On the machine with MATLAB and Simulink, start Simulink and open your model.
Double-click on the HDL Cosimulation block to open the
Function Block Parameters dialog box.
Click on the Connections tab.
Clear the check box labeled The HDL simulator is
running on this computer. HDL Verifier changes the Connection method to Socket.
In the Host name box, enter the host name
of the machine where the HDL simulator is located.
In the Port number or service box, enter
the socket number from step 1.
Click OK to exit block dialog box, and
save your changes.
Next, run your simulation, add more blocks, or make other desired changes. For
instructions on using Simulink and the HDL simulator for cosimulation, see Simulink as a Test Bench or Component Simulation with Simulink.