Program Target FPGA Boards or SoC Devices - MATLAB & Simulink (original) (raw)
To configure or program the connected target SoC device or FPGA board, use theIP Core Generation
workflow in the HDL Workflow Advisor.
How to Program Target Device
Using the Workflow Advisor UI
- Open the HDL Workflow Advisor. Right-click the DUT Subsystem that contains the algorithm to be deployed on the target FPGA, and select > .
- In the Set Target Device and Synthesis Tool task, specify
IP Core Generation
as the Target workflow, and specify a Target platform other than theGeneric Xilinx Platform
orGeneric Altera Platform
. - Right-click the Program Target Device task and select Run to Selected Task.
- In the Program Target Device task, specify theProgramming method, and run this task.
To learn more about the HDL Workflow Advisor, see Getting Started with the HDL Workflow Advisor.
Using the Workflow Advisor Script
To program the target device at the command line, after you specify the target workflow and target platform in the Set Target Device and Synthesis Tool task, export the HDL Workflow Advisor settings to a script. In the HDL Workflow Advisor window, select > . The script creates and configures anhdlcoder.WorkflowConfig
object that is denoted byhWC
.
Before you run the script, you can specify how to program the target hardware by using the ProgrammingMethod
property of theWorkflowConfig
object. This code snippet shows an example script that is exported from the HDL Workflow Advisor when you use the defaultDownload
Programming method. To run the Program Target Device task, customize this script by setting theRunTaskProgramTargetDevice
attribute of theWorkflowConfig
object to true
.
% This script was generated using the following parameter values:
% ...
% Set properties related to 'RunTaskProgramTargetDevice' Task hWC.RunTaskProgramTargetDevice = true; hWC.ProgrammingMethod = hdlcoder.ProgrammingMethod.Download;
% Validate the Workflow Configuration Object hWC.validate;
%% Run the workflow hdlcoder.runWorkflow('hdlcoder_led_blinking/led_counter', hWC);
After you run the Build FPGA Bitstream task, the Workflow Advisor provides you a link to generate a Workflow script that programs the target device without rerunning the previous tasks in the Workflow Advisor.
Click the link to open the script in the MATLAB® Editor. This code snippet shows an example script that is generated by the HDL Workflow Advisor. If close the HDL Workflow Advisor, you can run the script to program the target hardware without running other workflow tasks.
% Load the Model
% ...
% Set Workflow tasks to run hWC.RunTaskGenerateRTLCodeAndIPCore = false; hWC.RunTaskCreateProject = false; hWC.RunTaskGenerateSoftwareInterface = false; hWC.RunTaskBuildFPGABitstream = false; hWC.RunTaskProgramTargetDevice = true;
% Set properties related to 'RunTaskProgramTargetDevice' Task hWC.ProgrammingMethod = hdlcoder.ProgrammingMethod.Download;
% Validate the Workflow Configuration Object hWC.validate;
To learn more about the script-based workflow, see Run HDL Workflow with a Script.
Programming Methods
Download
If you use the reference designs for Zynq® and Intel® SoC hardware platforms, the code generator usesDownload
as the default Programming method.
When you use Download
as the Programming method and run the Program Target Device task, HDL Coder™ copies the generated FPGA bitstream, Linux® devicetree, and system initialization scripts to the SD card on the target board, and then keeps the bitstream on the SD card persistently. To use this programming method, you do not require an Embedded Coder® license. You can create an SSH object by specifying theIP Address, SSH Username, andSSH Password. HDL Coder uses the SSH object to copy the bitstream to the SD card and reprogram the board.
It is recommended that you use the Download
method, because this method programs the FPGA bitstream and loads the corresponding Linux devicetree before booting the Linux system. Therefore, the Download
method is more robust and does not result in a kernel panic or kernel hang on boot up. During the Linux reboot, the FPGA bitstream is reprogrammed from the SD card automatically. To specify Download
as theProgramming method when you run the workflow using the Workflow Advisor script, before you run the script, make sure that theProgrammingMethod
property of the WorkflowConfig object, hWC
, is set toDownload
.
hWC.ProgrammingMethod = hdlcoder.ProgrammingMethod.Download;
JTAG
When you specify JTAG
as the Programming method and run the Program Target Device task, HDL Coder uses a JTAG cable to program the target SoC device. Use this method to program Intel and Xilinx® SoC devices and standalone FPGA boards.
For programming SoC devices, it is recommended that you use theDownload
method. The JTAG
mode does not involve the ARM® processor and programs the onboard FPGA directly. This mode does not update the Linux devicetree, and can crash the Linux system or result in a kernel panic when the bitstream does not match the devicetree. To avoid this situation, use theDownload
method to program the SoC device.
The standalone Intel and Xilinx FPGA boards do not have an embedded ARM processor. JTAG
is the default method that you use to program the FPGA boards.
To specify JTAG
as the Programming method when you run the workflow using the Workflow Advisor script, before you run the script, change theProgrammingMethod
property of the WorkflowConfig object, hWC
, toJTAG
.
hWC.ProgrammingMethod = hdlcoder.ProgrammingMethod.JTAG;
Custom
To program the target device, you can specify a custom programming method when you create your own custom reference design. Use theCallbackCustomProgrammingMethod
of thehdlcoder.ReferenceDesign
class to register a function handle for the callback function that gets executed when running the Program Target Device task. To define your callback function, create a file that defines a MATLAB function and add the file to your MATLAB path.
This example code snippet shows a reference design definition file that uses a custom programming method. To learn more, see CallbackCustomProgrammingMethod.
unction hRD = plugin_rd() % Reference design definition
% ...
% Construct reference design object hRD = hdlcoder.ReferenceDesign('SynthesisTool', 'Xilinx Vivado');
hRD.ReferenceDesignName = 'Parameter Callback Custom'; hRD.BoardName = 'ZedBoard';
% Tool information hRD.SupportedToolVersion = {'2020.2'};
% ...
hRD.CallbackCustomProgrammingMethod = @my_reference_design.callback_CustomProgrammingMethod;