Getting Started Guide
The ECM1900 and BRK1900 have been specifically chosen for this Getting Started Guide due to their complementary features. The ECM1900 is specifically designed as a compact and efficient platform for the Zynq MPSoC, whereas the BRK1900 functions as a comprehensive development board that not only provides power to the ECM1900 but also provides access to essential Processing System (PS) peripherals. Together, they provide a complete solution for evaluating and implementing the ECM1900, making them the perfect choice for this guide. The following are the learning objectives for this Getting Started Guide:
- Requirements
Lists the necessary requirements, such as hardware, software, and tools, required for working with this Getting Started Guide. - Prebuilt Linux Image
Explains how to flash a microSD card with the prebuilt Linux image for the BRK1900 w/ ECM1900 device. - Power, Boot, and Serial Connection
Provides instructions on powering on the BRK1900 w/ ECM1900, booting it up, and establishing a serial connection for communication. - Device Sensors
Introduces the sensors on the ECM1900 device and how to configure and interact with them. - Si5341 Clock Generator
Explains the process of configuring the Si5341 clock generator that is onboard the ECM1900 device. - Si5338 Clock Generator
Guides users on how to configure the Si5338 clock generator that is onboard the BRK1900 device. - IO Bank Voltages
Provides instructions on setting the voltages for the IO banks of the Zynq MPSoC on the ECM1900 device. - Configure a Bitfile
Walks users through the process of configuring a bitfile for programming the BRK1900 w/ ECM1900 device. - MPSoC Vivado IP Core Configuration
Explains the process of applying the BRK1900 configuration information to the Zynq Ultrascale+ MPSoC Vivado IP Core. - Processing System (PS) Side DisplayPort
This guide roughly instructs users on how to get AMD’s Standalone DisplayPort example design working on the hardened DisplayPort 1.2 in the processing system (PS).
Requirements
This section provides an overview of the hardware, software, and tools that are required for working through the BRK1900 w/ ECM1900 Getting Started Guide. It outlines the essential prerequisites that users need to have in place before proceeding:
- ECM1900
- BRK1900
- microSD card
- microSD card reader/writer
- Our latest prebuilt BRK1900LinuxImage-vX.Y.wic.zip download
Prebuilt Linux Image
This section explains the process of flashing a microSD card with the prebuilt Linux image specifically designed for the BRK1900 w/ ECM1900 device. It provides instructions on how to prepare the microSD card with the required Linux image.
Our Linux image is available in Wic format, which offers a simplified way to flash images to the microSD card. Wic includes built-in information on partitioning the drive for boot and rootfs, making the process more streamlined and efficient. Start by performing the following:
- Extract our latest prebuilt BRK1900LinuxImage-vX.Y.wic.zip download.
- Follow the instructions below for your operating system:
Windows
We recommend using Etcher or similar tools. Most of these tools support the Wic format.
Linux
Use the following command to flash the microSD card:
sudo dd if=BRK1900LinuxImage-vX.Y.wic of=/dev/sdb bs=1M status=progress
Explanation of the command:
sudo
: Runs the command with administrative privileges, required for writing to disks.dd
: The command used for low-level data copying and conversion.if=
: Specifies that our prebuilt .wic image should be used as the input source.BRK1900LinuxImage-vX.Y.wic
of=/dev/sdb
: Specifies the target disk to write to, in this example, the disk named “sdb”.bs=1M
: Specifies the block size for reading and writing data, set to 1 megabyte (MB) in this example. You can adjust this value as needed.status=progress
: Displays the progress of the operation in real-time, showing the amount of data written.
Power, Boot, and Serial Connection
This section guides users on powering on the BRK1900 w/ ECM1900 device, booting up our provided Linux image, and establishing a serial connection for communication purposes.
- Install the ECM1900 onto the BRK1900. See the Jack Screw Instructions.
- Insert the microSD card containing the BRK1900 Linux image into the microSD card slot on the ECM1900.
- Power the BRK1900 either through the DC barrel jack or the 6-pin Mini-Fin connector with a DC supply within the range of 6 V to 15 V. See ‘Powering the BRK1900’ at BRK1900 Breakout Board.
- Plug in a USB type C cable from the USB UART port on the ECM1900 to a USB port of your host computer.
- Establish a serial connection with the connected device at 115200 baud.
- Wait for the boot sequence to finish before proceeding
Device Sensors
This section provides guidance on how to run the Device Sensors application, which serves as an example implementation showcasing the sensor capabilities of our product. Please note that while this application can be used in an end design, it is intended to be a starting point that you can customize and modify to suit your specific design requirements. See the following resources for more information:
- Device Sensors documentation
- device-sensors Application
- Navigate to the appropriate sample application folder:
cd ~/tools/device-sensors/
- Run the sample application:
python3 device-sensors.py
Si5341 Clock Generator
This section provides instructions on how to configure the Si5341 Clock Generator on the ECM1900. The premade application provided here serves as an example implementation that you can use as a starting point and modify according to your design requirements. See the following resources for more information:
- Navigate to the appropriate sample application folder:
cd ~/tools/set-clock-ecm1900/
- Optionally view the provided configuration.
vim ECM1900-Si5341-Regs.h
- Optionally substitute
ECM1900-Si5341-Regs.h
for a new configuration.
See set-clock-ecm1900 Application README for more information. - Compile the application with the
ECM1900-Si5341-Regs.h
configuration:make
- Run the sample application:
./set-clock-ecm1900 /dev/i2c-0
Si5338 Clock Generator
In this section, you will learn how to configure the Si5338 Clock Generator on the BRK1900. We provide a premade application that serves as an example implementation of clock configuration, which you can use as a foundation and tailor to your specific design needs. See the following resources for more information:
- Navigate to the appropriate sample application folder:
cd ~/tools/set-clock-brk1900/
- Optionally view the provided configuration.
vim BRK1900-Si5338-Regs.h
- Optionally substitute
BRK1900-Si5338-Regs.h
for a new configuration.
See set-clock-brk1900 Application README for more information. - Compile the application with the
ECM1900-Si5341-Regs.h
configuration:make
- Run the sample application:
./set-clock-brk1900 -w /dev/i2c-0
IO Bank Voltages
In this section, you will learn how to set the IO bank voltages of the Zynq MPSoC on the ECM1900. The premade application provided here offers an example implementation for power rail configuration, which you can use as a reference and customize to meet the power requirements of your specific application. See the following resources for more information:
- Run the sample application to set VIO1 (VCCO_87_88) to 3.3V:
syzygy-ecm1900 -s -1 330 /dev/i2c-0
- You can confirm that this rail has been properly set by measuring the VCCO_87_88 test point on the BRK1900 PCB board.
Configure a Bitfile
This section guides users on how to configure a bitfile for programming the PL side of the ECM1900 device.
- Transfer your bitfile to the rootfs using UART, Ethernet, USB2, USB3, or by directly writing it to the rootfs partition on the microSD card.
- Run the AMD-Xilinx provided
fpgautil
application to configure the PL side with your bitfile:fpgautil -b YOUR_BITFILE.bit
MPSoC Vivado IP Core Configuration
This section explains the process of applying our BRK1900 configuration information to the Zynq Ultrascale+ MPSoC Vivado IP Core. We provide this configuration through the BRK1900’s Vivado Board File. Communications between the PS and PL side will require an instantiation of the Zynq Ultrascale+ MPSoC Vivado IP Core in your Vivado design.
Required resources:
- Create a new Vivado project with the BRK1900 Board File
- Create a new Block Design in the IP Integrator (IPI)
- Instantiate the Zynq UltraScale+ MPSoC Vivado IP Core
- A “Designer Assistance available.” notification will appear. Select “Run Block Automation.”
- Ensure that “Apply Board Preset” is enabled
- Click “OK”
Processing System (PS) Side DisplayPort
This guide will roughly instruct the user on how to get AMD’s Standalone DisplayPort example design working on the hardened Displayport 1.2 in the processing system (PS).
- Go through the MPSoC Vivado IP Core Configuration guide above.
- Connect EMIO pins for the DisplayPort AUX to an IOBUFDS using the Utility Buffer IP core in the block designer.
- Make the DisplayPort hot plug detect and AUX external ports in the block designer.
- Generate the block design.
- Create a wrapper for the block design.
- Constrain the pin locations for the DP AUX and hot plug detect as documented at BRK1900 Peripherals.
- Generate the bitstream.
- File->Export Hardware, include the bitfile, export to .xsa.
- Create a new “Platform Project” and import the XSA to Vitis.
- Under standalone on psu_cortex, “Import Example” for the “dpdma” driver.
- Add IIC (I2C1) to the system to configure the clock generator and the power supplies.
- Use the IO Bank Voltages section above to help you power the rails.
- Use the Si5338 Clock Generator section above to configure clock OUT2 to 27 MHz.
Note: This clock needs to be available at boot. You can either add it to the FSBL or configure the clock and then restart the application without power cycling the board so that the clock is available at the time of boot. - For both the “IO Bank Voltages” and “Si5338 Clock Generator” sections, they are part of an application baked into Linux. This is not the case with AMD’s standalone DisplayPort example design. You will need to take some of that code and implement some of the functions from it to complete these actions in the standalone application.
- In the “Platform Project” you created above, use the file navigator in Vitis to go to:
<PlatformProject>/psu_cortexa53_0/standalone_domain/bsp/psu_cortexa53_0/libsrc/avbuf_v2_5/src/xavbuf_clk.c
. Refer to AMD’s GitHub for the specific line: avbuf. Change the line to:define XAVBUF_INPUT_REF_CLK 5000000000
- Build the Vitis project.
- Run the Vitis project on the BRK1900 using a JTAG connection.