Main Content

Verify HDL Implementation of PID Controller Using FPGA-in-the-Loop

This example shows you how to set up an FPGA-in-the-Loop (FIL) application using HDL Verifier™. The application uses Simulink® and an FPGA development board to verify the HDL implementation of a proportional-integral-derivative (PID) controller. In this example, Simulink generates the desired position of a motor and simulates the motor controlled by this PID controller.

Requirements and Prerequisites

Aside from the listed MathWorks products, other requirements include:

  • FPGA design software (Xilinx® ISE® design suite, or Xilinx® Vivado® design suite, or Intel® Quartus® II design software, or Microsemi® Libero® SoC design software)

  • One of the supported FPGA development boards. For supported hardware, seeSupported FPGA Devices for FPGA Verification.

  • For connection using Ethernet: Gigabit Ethernet Adapter installed on host computer, Gigabit Ethernet crossover cable

  • For connection using JTAG: USB Blaster I or II cable and driver for Intel FPGA boards. Digilent® JTAG cable and driver for Xilinx FPGA boards.

  • For connection using PCI Express®: FPGA board installed into PCI Express slot of host computer.

Prerequisites:

MATLAB® and FPGA design software can either be locally installed on your computer or on a network accessible device. If you use software from the network you will need a second network adapter installed in your computer to provide a private network to the FPGA development board. Consult the hardware and networking guides for your computer to learn how to install the network adapter.

Step 1: Set Up FPGA Development Board

Skip this step and step 2 if you are using PCI Express connection for simulation. If you have not set up your PCI Express connection, use the support package installation software to guide you through PCI Express setup.

Use the following steps to set up your FPGA development board.

  1. Make sure that the power switch remainsOFF.

  2. Connect the AC power cord to the power plug. Plug the power supply adapter cable into the FPGA development board.

  3. Connect the Ethernet connector on the FPGA development board directly to the Ethernet adapter on your computer using the crossover Ethernet cable.

  4. Use the JTAG download cable to connect the FPGA development board with the computer.

  5. Make sure that all jumpers on the FPGA development board are in the factory default position, except for Microsemi PolarFire, which requires special settings. SeeInstalling Microsemi Polarfire Evaluation Kit(HDL Verifier Support Package for Microsemi FPGA Boards).

Step 2: Set Up Host Computer-Board Connection

Skip this step if you are using JTAG connection for simulation. For connection with Ethernet, you must have a Gigabit Ethernet network adapter on your computer to run this example.

On Windows®, do the following steps:

  1. Open theControl Panel.

  2. TypeView network connectionsin the search bar. SelectView network connectionsin the search results.

  3. Right click the connection icon to your FPGA development board and selectPropertiesfrom the pop-up menu.

  4. UnderThis connection uses the following items, selectInternet Protocol Version 4 (TCP/IPv4)and clickProperties.

  5. SelectUse the following IP address:. SetIP addressto 192.168.0.1. If this address is in use by another computer on your network, change it to any available IP address on this subnet, such as 192.168.0.100. This is your host computer address. Set theSubnet maskto 255.255.255.0. Your TCP/IP properties should now look the same as in the following figure:

On Linux®:

Use theifconfigcommand to set up your local address. For example:

% ifconfig eth1 192.168.0.1

In this example, eth1 is the second Ethernet adapter on the Linux computer. Check your system to determine which Ethernet adapter is connected to the FPGA development board. The above command sets the local IP address to 192.168.0.1. If this address is in use by another computer on your network, change it to any available IP address on this subnet, such as 192.168.0.100.

Step 3: Prepare Example Resources

1. Set Up FPGA design software

Before using FPGA-in-the-Loop, set up your system environment for accessing FPGA design software. You can use the functionhdlsetuptoolpathto add ISE, Vivado, Quartus, or Libero SoC to the system path for the current MATLAB session. Example command lines for each tool are given below. Substitute with your actual executable if it is different.

For Xilinx FPGA boards using ISE design software, run:

hdlsetuptoolpath('ToolName','Xilinx ISE','ToolPath','C:\Xilinx\13.1\ISE_DS\ISE\bin\nt64\ise.exe');

For Xilinx FPGA boards using Vivado design software, run:

hdlsetuptoolpath('ToolName','Xilinx Vivado','ToolPath','C:\Xilinx\Vivado\2016.4\bin\vivado.bat');

For Intel boards, run:

hdlsetuptoolpath('ToolName','Altera Quartus II','ToolPath','C:\altera\16.0\quartus\bin\quartus.exe');

For Microsemi boards, run:

hdlsetuptoolpath('ToolName','Microsemi Libero SoC','ToolPath','C:\Microsemi\Libero_SoC_v11.8\Designer\bin\libero.exe');

2. Open thefil_pidmodel.

This model contains a fixed-point PID controller implemented with basic Simulink blocks. This model also contains a DC motor model controlled by this PID controller as well as the desired DC motor position as the input stimulus.

Run this model now and observe the desired and actual motor positions in the scope.

Step 4: Launch FPGA-in-the-Loop (FIL) Wizard

Launch the FPGA-in-the-Loop Wizard by doing the following:

Open theAppsgallery and selectFIL Wizardfrom theCode Verification, Validation, and Testsection.

Alternatively, you can enter the filWizard command at the MATLAB command prompt.

filWizard

Step 5: Specify Hardware Options in FIL Wizard

Set the FIL options for the FPGA development board.

1. Specify if the wizard will generate a FIL Simulink block or a FILSimulation MATLAB System Object. For this example, select金宝appforFIL simulation withSimulink.

2. ForBoard Name, select the FPGA development board connected to your host computer. If your board is not on the list, select one of the following options:

  • "Get more boards..." to download the FPGA board support package(s) (this option starts the Support Package Installer).

  • "Create custom board..." to create the FPGA board definition file for your particular FPGA board (this option starts the New FPGA Board Manager).

3. Select the connection for simulation. The available connection methods are Ethernet and JTAG. Not all boards support both connection methods.

4. Ethernet connection only: If you changed your computer's IP address to a different subnet from 192.168.0.x when you set up the network adapter, or if the default board IP address 192.168.0.2 is in use by another device, expandAdvanced Optionsand change theBoard IP addressaccording to the following guidelines:

  • The subnet address, typically the first three bytes of board IP address, must be the same as those of the host IP address.

  • The last byte of the board IP address must be different from that of the host IP address.

  • The board IP address must not conflict with the IP addresses of other computers.

例如,如果是192.168.8.2主机IP地址, then you can use 192.168.8.3 if it is available. Do not changeBoard MAC address.

5. Optional: If you would like to change the DUT clock frequency from the default (25MHz), you can expandAdvanced Optionsand change theFPGA system clock frequency (MHz).

6. ClickNextto continue.

Step 6: Specify HDL Files in the FIL Wizard

Specify the HDL design to be implemented in the FPGA.

1. Click Add and browse to the directory you created in Prepare Example Resources.

2. Select these HDL files in the pid_hdlsrc directory:

  • Controller.vhd

  • D_component.vhd

  • I_component.vhd

These are the HDL design files to be verified on the FPGA board.

3. In theSource Filestable, check the checkbox on the row of fileController.vhdto specify that this HDL file contains the top-level HDL module.

The FIL Wizard automatically fills theTop-level module namefield with the name of the selected HDL file; in this case,Controller. In this example, the top-level module name matches the file name so that you do not need to change it. If the top-level module name and file name did not match, you would manually correct the top-level module name in this dialog.

ClickNextto continue.

Step 7: Review I/O Ports in FIL Wizard

The FIL Wizard parses the top-level HDL module Controller in Controller.vhd to obtain all the I/O ports and display them in the DUTI/O Portstable. The parser attempts to automatically determine the possible port types by looking at the port names and displays these signals under Port Type.

1. Review the port listing. If the parser assigned an incorrect port type for any given port, you can manually change the signal. For synchronous design, specify a Clock, Reset, or Clock enable signal. In this example, the FIL Wizard automatically fills the table correctly.

2. ClickNextto continue.

Step 8: Set Output Data Types in FIL Wizard

1. For the HDL outputcontrol_signalchangeData TypetoFixedpoint,SigntoSignedandFraction Lengthto28. This will makes the generated FIL block set the output signal of the FPGA design-under-test (DUT) to the correct data type.

2. ClickNextto continue.

步骤9:回顾构建选项IL Wizard

1. Specify the folder for the output files. For this example, use the default option, which is a subfolder namedController_filunder the current directory.

TheSummary显示FPGA项目文件的位置d the FPGA programming file. You may need those two files for advanced operations.

2. ClickBuildto start the build process.

During the build process, the following actions occur:

  • A FIL block named Controller is generated in a new model as shown in the following figure. Do not close this model.

  • After new model generation, the FIL Wizard opens a command window where the FPGA design software performs synthesis, fit, place-and-route, timing analysis, and FPGA programming file generation.

  • When the FPGA design software process is finished, a message in the command-line window lets you know you can close the window. Close the window and proceed to the next step.

Step 10: Set Up Model

In the fil_pid model, replace theControllersubsystem with the FIL block generated in the new model. The modified fil_pid model now appears as shown in the following illustration:

Step 11: Program FPGA

1. Switch FPGA development board powerON.

2. Double-click the FIL block in the fil_pid model to open the block mask.

3. In the opened block mask, clickLoad.

If your board is connected to the host computer through the JTAG cable properly, a message window displays to indicate that the FPGA programming file is loaded successfully. ClickOKto dismiss this dialog.

4. Ethernet connection only: You can test if the FPGA board is connected to your host computer properly through the ping test. Launch a command-line window and enter the following command:

C:\MyTests> ping 192.168.0.2

If you changed the board IP address when you set up the network adapter, replace 192.168.0.2 with your board IP address. If the Gigabit Ethernet connection has been set up properly, you should see the ping reply from the FPGA development board.

Step 12: Review Parameters of FIL Block

1. In the FIL block mask, click theSignal Attributestab.

2. Verify that theData Typeof the HDL signalcontrol_signalisfixdt(1,32,28). If it is not, change it.

3. ClickOKto close the block mask.

Step 13: Run FIL

1. Start simulation of the fil_pid model.

2. When the simulation is done, view the waveform of the desired and actual positions of the motor in the scope. Note that the results of FIL simulation should match those of the Simulink reference model that you simulated inPrepare Example Resources.