Main Content

Verify Raised Cosine Filter Design Using MATLAB

MATLAB and Cosimulation Wizard Tutorial Overview

This tutorial guides you through the basic steps for setting up an HDL Verifier™ cosimulation that uses MATLAB® and the HDL Simulator. This cosimulation verifies an HDL design using a MATLAB component as the test bench. In this tutorial, you perform the steps to cosimulate MATLAB with the HDL simulator to verify the suitability of a raised cosine filter written in Verilog®.


This tutorial requires MATLAB, HDL Verifier, Fixed-Point Designer™, and ModelSim® or Incisive® HDL simulator. This tutorial also assumes that you have read Import HDL Code for MATLAB Function.

The HDL test bench instantiates two raised-cosine filter components: one is implemented in HDL, and the other is associated with a MATLAB callback function. The test bench also generates stimulus to both filters and compares their outputs.

Tutorial: Set Up Tutorial Files (MATLAB)

To help others access copies of the tutorial files, set up a folder for your own tutorial work by following these instructions:

  1. Create a folder outside the scope of your MATLAB installation folder into which you can copy the tutorial files. The folder must be writable. This tutorial assumes that you create a folder named MyTests.

  2. Copy all the files located in the following MATLAB folder to the folder you created:


    where matlabroot is the MATLAB root directory on your system.

  3. You now have the following files in your working folder:

    • filter_tb.v

    • mycallback_solution.m

    • rcosflt_beh.v

    • rcosflt_rtl.v

    • rcosflt_tb.mdl (not used in this tutorial)

Tutorial: Launch Cosimulation Wizard (MATLAB)

  1. Start MATLAB.

  2. Set the folder you created in Tutorial: Set Up Tutorial Files (MATLAB) as your current folder in MATLAB.

  3. At the MATLAB command prompt, enter:


    This command launches the Cosimulation Wizard.

Tutorial: Configure the Component Function with the Cosimulation Wizard

This tutorial leads you through the following wizard pages, designed to assist you in creating an HDL Verifier component function:

Tutorial: Specify Cosimulation Type (MATLAB)

In the Cosimulation Type page, perform the following steps:

  1. Change HDL cosimulation with option set to MATLAB.

  2. If you are using ModelSim, leave HDL Simulator option as ModelSim.

    If you are using Incisive, change HDL Simulator option to Incisive.

  3. Leave the default option Use HDL simulator executables on the system path option if the HDL simulator executables appear on your system path.

    If the executables do not appear in the path, specify the HDL simulator path as described in Cosimulation Type—MATLAB Function.

  4. Click Next to proceed to the HDL Files page.

Tutorial: Select HDL Files (MATLAB)

In the HDL Files page, perform the following steps:

  1. Add HDL files to file list.

    1. Click Add and browse to the directory you created in Tutorial: Set Up Tutorial Files (MATLAB).

    2. Select the Verilog files filter_tb.v, rcosflt_rtl.v, and rcosflt_beh.v. You can select multiple files in the file browser by holding down the CTRL key while selecting the files with the mouse.

    3. Review the file in the file list with the file type identified as you expected.

  2. Click Next to proceed to the HDL Compilation page.

Tutorial: Specify HDL Compilation Commands (MATLAB)

Cosimulation Wizards lists the default commands in the Compilation Commands window. You do not need to change these defaults for this tutorial.

  1. Examine compilation commands.

    1. ModelSim users: Your HDL Compilation pane looks similar to the following.

    2. Incisive users: Your HDL Compilation commands will look similar to the following:

      ncvlog -64bit -update "/mathworks/home/user/MyTests/filter_tb.v"
      ncvlog -64bit -update "/mathworks/home/user/MyTests/rcosflt_beh.v"
      ncvlog -64bit -update "/mathworks/home/user/MyTests/rcosftl_rtl.v"
  2. Click Next to proceed to the HDL Modules pane.

    The MATLAB console displays the compilation log. If an error occurs during compilation, that error appears in the Status area. Change whatever settings you can to remove the error before proceeding to the next step.

Tutorial: Select HDL Modules for Cosimulation (MATLAB)

In the HDL Modules pane, perform the following steps:

  1. Specify the name of the HDL module/entity for cosimulation.

    At Name of HDL module to cosimulate with, select filter_tb from the drop-down list to specify the Verilog module you will use for cosimulation.

    If you do not see filter_tb in the drop-down list, you can enter it manually.

  2. For Connection method, select Shared Memory if your firewall policy does not allow TCP/IP socket communication.

  3. Click Next to proceed to the Callback Schedule page.

    Cosimulation Wizard launches the HDL simulator in the background console using the specified HDL module and simulation options. After the wizard launches the HDL simulator, the Callback Schedule page appears. On Windows® systems, the console remains open. Do not close the console; the application closes this window upon completion.

Tutorial: Specify Callback Schedule

In the Callback Schedule page, perform the following steps:

  1. Leave Callback type as matlabcp (default). This type instructs the Cosimulation Wizard to create a MATLAB callback function as a component for cosimulation with the HDL simulator.

  2. Leave Callback function name as callback_fcn. The wizard gives this name to the generated MATLAB callback function.

  3. For HDL component, click Browse. Click the expander icon next to filter_tb to expand the selection. Select u_rcosflt_beh, and click OK. You have specified to the Cosimulation Wizard that the HDL simulator associate this component with the MATLAB callback function.

  4. Set Trigger mode to Rising Edge.

  5. For Trigger Signal, click Browse. Click the expander icon next to filter_tb to expand the selection. Select u_rcosflt_beh. In the ports list on the right, select clk. Click OK.

  6. Click Add. The Cosimulation Wizard generates the corresponding matlabcp command that associates the HDL module u_rcosflt_beh with the MATLAB function callback_fcn, as shown in the following image:

    For more information on the callback parameters, see the reference page for matlabcp.

  7. Click Next to proceed to the Generate Script page.

Tutorial: Generate Script

  1. Leave Launch HDL simulator after exiting this dialog selected.

  2. Click Finish to complete the Cosimulation Wizard session and generate scripts.

Tutorial: Customize Callback Function

After you click Finish in the Cosimulation Wizard, the application generates three HDL files in the current directory:

  • compile_hdl_design.m: For recompiling the HDL design

  • launch_hdl_simulator.m: To relaunch the MATLAB server and start the HDL simulator.

  • callback_fcn.m: The MATLAB callback function

In addition to launching the HDL simulator, HDL Verifier software opens the MATLAB Editor and loads callback_fcn.m (partial image shown).

The generated template comprises four parts:

  • Initialize internal state(s) of callback function

  • Read signal from HDL component

  • Write signal to HDL component

  • Update internal state(s)

You modify this template to model a raised cosine filter in MATLAB following the instructions as shown in the following sections.


You can find a completed modified callback function in mycallback_solution.m. This function resides in the directory you copied the tutorial files into. You can use this file to overwrite the one in your current directory. Name the file "callback_fcn.m", and change the function name to callback_fcn.

Tutorial: Define Internal States

Define two internal states: a 49-element vector to hold filter inputs and a vector of filter coefficients.

Edit callback_fcn.m so that the internal state section contains the following code:

Tutorial: Read Signal from HDL Component

Read the filter input and convert it to a decimal number in MATLAB.

Edit callback_fcn.m so that the read signal section contains the following code:

Tutorial: Write Signal to HDL Component

The input "reset" signal controls the filter output. If reset is low, then the output is the product of previous inputs and filter coefficients. MATLAB converts the decimal result to a multivalued logic output of the HDL component.

Edit callback_fcn.m so that the write signal section contains the following code:

Tutorial: Update Internal States

Use the filter input to update the internal 49-element state.

Edit callback_fcn.m so that the update internal states section contains the following code:

Tutorial: Run Cosimulation and Verify HDL Design

Switch to the HDL simulator and enter the following command in the HDL simulator console:

run 200 ns

You see the following output displayed in the HDL simulator:

These messages indicate that the output of the HDL component matches the behavioral output of the MATLAB component.