Define Properties of Hardware Boards
The soc.sdk.Hardware object contains all of
the specifications for a specific hardware board in the soc.sdk.BoardSupport framework. The specifications and objects added to the
soc.sdk.Hardware object enable the blocks and features in SoC Blockset™ when the hardware board is selected.
The following code creates a new soc.sdk.Hardware object with an internal
name of MySoCHardware.
hardwareObj = soc.sdk.Hardware(... "MySoCHardware"... % Internal Board Name );
The resulting empty Hardware object appears as follows.
hardwareObj =
Hardware with properties:
ProcessorCores: {}
FPGACores: {}
Memory: {}
LEDs: {}
Clocks: {}
DIPSwitches: {}
Resets: {}
PushButtons: {}
DeviceTreeSourceFiles: {}
DeviceTreeIncludeFiles: {}
Name: 'MySoCHardware'
DeviceID: 'ARM Compatible->ARM Cortex-A (32-bit)'
IOInterface: {}After creating an object, you can add properties related to the processor, memory, FPGA,
and device I/O to the soc.sdk.Hardware object.
Add Processor Information
A processor in an soc.sdk.Hardware object is defined by the
DeviceID property, which specifies the type of processor, such
as the ARM®
Cortex®-A53. Individual cores within the processor can then be defined using the
addNewProcessorCore
method.
The following code shows how to add a processor and make a processor core available.
procCoreObj = addNewProcessorCore(... hardwareObj,... % Hardware object "Core0"... % Core name ); procCoreObj.DeviceID = "ARM Compatible->ARM Cortex-A (64-bit)"; procCoreObj.Vendor = "Xilinx"; procCoreObj.Family = "Unknown";
For models that use this hardware board, the number of processor cores are available in the Task Manager block.
Add FPGA Programmable Logic Information
The FPGA programmable logic in an soc.sdk.Hardware object is defined
by an soc.sdk.FPGACore object
that contains the manufacturer identification, IP instantiation and constraints. The
FPGACore object contains either soc.sdk.ProcessingSystem or soc.sdk.MemorySystem.
soc.sdk.ProcessingSystem defines the interface and instantiation of
processing system IP, and soc.sdk.MemorySystem defines the interface
and instantiation of memory controller IP.
The following code shows how to add the FPGA core, including one processing system, by
using the addNewFPGACore and
addNewProcessingSystem methods, respectively.
fpgaCoreName = 'PL1'; fpgaCoreObj = addNewFPGACore(hardwareObj,fpgaCoreName); fpgaCoreObj.Vendor = 'Xilinx'; fpgaCoreObj.Family = 'MPSOC'; fpgaCoreObj.JTAGChainPosition = 1; fpgaCoreObj.PartNumber = 'xczu7ev-ffvc1156-2-e'; processingSystemObj = addNewProcessingSystem(... fpgaCoreObj,... % FPGA Core Object 'ProcessingSystem'... % Processing system name ); processingSystemObj.TCLFile = ['$(TARGET_ROOT)/tcl/','ZCU106PS.tcl']; processingSystemObj.ClockOutputPort = 'zynq_ultra_ps/pl_clk0'; processingSystemObj.ClockOutputFrequency = 99.990005; processingSystemObj.ResetOutputPort = 'zynq_ultra_ps/pl_resetn0'; processingSystemObj.MasterInterfacePort = 'zynq_ultra_ps/M_AXI_HPM0_FPD'; processingSystemObj.MasterInterfaceClockPort = 'zynq_ultra_ps/maxihpm0_fpd_aclk'; processingSystemObj.SlaveInterfacePort = 'zynq_ultra_ps/S_AXI_HPC0_FPD'; processingSystemObj.SlaveInterfaceClockPort = 'zynq_ultra_ps/saxihpc0_fpd_aclk'; processingSystemObj.SlaveInterfaceDataWidth = 128; % data width of slave interface processingSystemObj.InterruptInterfacePort = 'zynq_ultra_ps/pl_ps_irq0'; % constrain the frequency of the clock which drives slave interface clock port. processingSystemObj.SlaveInterfaceFrequencyMinMax = [1 200];
The port name defined in the soc.sdk.ProcessingSystem object can be
obtained from your implemented processing system IP in Vivado® block design. The above code defines a processing system as shown in this
diagram. Specify the port name with corresponding block design pin name. Export the
Vivado design to TCL file, ZCU106PS.tcl.

Add Memory Information
Memory in an soc.sdk.Hardware object is defined by an soc.sdk.Memory object. The
Memory object must set the Size property to
uniquely allocate a region of memory from the external DDR memory.
The following code shows how to define a 1024 MB region of external memory using the
addNewMemory method.
memoryObj = addNewMemory(... hardwareObj,... % Hardware object 'DDRMEM'... % Memory name ); memoryObj.Size = 1024; % 1024 (MB)
Add Clock and Reset Information
The system clock and hardware board reset in a soc.sdk.Hardware
object are defined by soc.sdk.Clock and soc.sdk.Reset objects,
respectively.
The following code shows how to add a system clock with frequency of
300 MHz using the addNewClock method.
clkObj = addNewClock(hardwareObj,'sys_clk'); clkObj.Pins = ["AJ12","AH12"]; clkObj.Frequency = 300; clkObj.IOStandard = 'IOSTANDARD DIFF_SSTL12';
The following code shows how to add a system reset using the addNewReset method.
rstObj = addNewReset(hardwareObj,'sys_rst'); rstObj.Pin = 'G13'; rstObj.IOStandard = 'IOSTANDARD LVCMOS18'; rstObj.ActiveHigh = true;
Add Device I/O Information
I/O devices in an soc.sdk.Hardware object are defined by the I/O
device objects, including soc.sdk.LED, soc.sdk.PushButton, and
soc.sdk.DIPSwitch objects. Each I/O device object has a
Pin and IOStandard properties that define
the behavior of the connected pin on the hardware.
The following code show how to add an soc.sdk.LED object to the
soc.sdk.Hardware object using the addNewLED method.
ledObj = addNewLED(... hardwareObj,... "GPIO_LED_0"); ledObj.Pin = "AL11"; ledObj.IOStandard = 'IOSTANDARD LVCMOS12';
For models that use this hardware board, the LED is displayed as a port and properties
of LED block. A similar relation occurs between the soc.sdk.PushButton, and
soc.sdk.DIPSwitch objects and the Push Button and
DIP Switch blocks.
Map Hardware Board to the Board Support
After adding all the desired properties to the hardware board, the hardware board can
be added to the board support object. The following code shows how to add the
soc.sdk.Hardware object to soc.sdk.BoardSupport object by using
the map method.
map(boardSupportObj,hardwareObj,'My SoC Hardware Board');After mapping the hardware board, you can test that the hardware board has been registered successfully. The following code shows how to test the hardware registration.
test(boardSupportObj,'feature','hardware');
See Also
Task Manager | LED | Push Button | DIP Switch | Push Button