Skip to content

Latest commit

 

History

History
932 lines (475 loc) · 36.2 KB

IPI_GUI_Examples.md

File metadata and controls

932 lines (475 loc) · 36.2 KB

GUI Workflow with Vivado IP Integrator Quickstart Examples

Table of Content

  1. Overview

  2. HLx IP Integrator Examples using IP integration flow

  3. HLx IP Integrator Examples using RTL flow

  4. Tutorial on how to create HLx IPI hello_world example with AXI GPIO and AXI BRAM (Using IP Integration flow)

  5. Tutorial on how to create HLx IPI DDS example (Using IP Integration flow)

  6. Tutorial on how to create HLx cl_hello_world example (Using IP + RTL flow)

  7. Tutorial on how to create HLx cl_dram_dma example (Using IP + RTL flow)

  8. Tutorial on how to create HLx design example from scratch (Using IP + RTL flow)

Overview

This document is an overview of the IP Integrator examples provided through the HLx environment.

Prior to starting you should have completed Vivado Setup Instructions to help setup and get familar with the Vivado GUI and IP Integrator.

All of the examples have been integrated into an automated flow that automatically generates the Vivado project.

HLx IP Integrator Examples using IP integration flow

This section covers IP Integrator example designs that can help you get familar with the automated project generation flow and IP Integrator.

Current examples include the following:

hello_world

cl_ipi_cdma_test

cl_hls_dds

cl_hello_world_ref

Select the above link for detailed information on the design and how to get started with using that design.

HLx IP Integrator Examples using IP + RTL flow

The following CL examples cover using an automated RTL example design with Vivado. The examples are based on the HDK cl/examples directory (ex: cl_hello_world and cl_dram_dma).

Current examples include the following:

cl_hello_world

cl_dram_dma

Select the above link for detailed information on the design and how to get started with using that design.

Tutorial on how to create HLx IPI hello_world example with AXI GPIO and AXI BRAM (Using IP Integration flow)

The IPI example turtorial will cover how to configure the AWS IP with the BAR1 Interface (AXI4-Lite Master Interface) and the PCIS Interface (AXI4 Master) similar to the one provided in hello\_world.

The AXI GPIO IP is added to the design to control the VLED. Also, the AXI BRAM is added to the design for the PCIS Interface (AXI4 Master).

The VLED is set based upon writing 0xAAAA into the AXI GPIO (0x0) slave register to drive VLED. The value is read using the Verilog task tb.get_virtual_led or fpga-get-virtual-led on F1.

The PCIS Interfaces writes ASCII data into the AXI BRAM memory space and reads back from these address to print out “Hello World!” in simulation or on F1.

Create Directory Structure and Vivado Project

Change directories to hdk/cl/examples

Create a directory in examples like hello_world_vivado

Change directories into hello_world_vivado/

Start Vivado by typing vivado in the bash console.

Create a project any device by typing the following command in Vivado's TCL Tab.

create_project -name hello_world

Type in the following TCL command which changes the project settings for AWS and creates the block diagram with the AWS IP added.

aws::make_ipi

Configuring the Block Diagram

Configuring AWS IP

Double click on the AWS IP block. Under IP Interfaces select Use BAR1 Register Interface (M_AXI_BAR1), Use PCI Slave-access Interface (M_AXI_PCIS), and Use Auxiliary (non-AXI) Signal Ports. This enables the AXI4-Lite Master Interface (for AXI GPIO), AXI4 Master Interface (for AXI BRAM) and the VLED/VDIP input/outputs. Select OK.

The AWS IP is configured for one clock using the Group-A Clock with the default clock recipe which configures a 125 MHz clock.

Adding/Configuring AXI GPIO

Right click in the canvas and select Add IP... Search for AXI GPIO and double click on AXI GPIO.

In the canvas for axi_gpio_0, double click on the block to configure the IP.

In the Re-customize IP Dialog Box, under the GPIO section select All Outputs and GPIO Width of 16. Select OK.

Adding/Configuring AXI BRAM

Right click in the canvas, and select Add IP... Search for AXI BRAM and double click on AXI BRAM Controller.

In the canvas for axi_bram_ctrl_0, double click on the block to configure the IP.

Set the Data Width to 512 and click OK. This is to match the 512-bit data width of the PCIS AXI4 Master Interface.

Connecting the Design

Select Run Connection Automation at the top of the Block Diagram in the green highlighted section.

Select axi_bram_ctrl_0/BRAM_PORTA and then BRAM_PORTB and select Auto. For axi_bram_ctrl_0/S_AXI, make sure Master is set to /f1_inst/M_AXI_PCIS and the rest of the options are Auto.

Select axi_gpio_0/S_AXI. Make sure Master is set to /f1_inst/M_AXI_BAR1 and the rest of the options are Auto.

The axi_gpio_0/GPIO will be manually configured after Run Connection Automation.

Select OK.

Expand axi_gpio_0/GPIO by select the +. Connect gpio_io_o[15:0] on the f1_inst block and make a connection to status_vled[15:0] and Run Connection Automation.

Address Editor Tab

Select the Address Editor tab on top of the block diagram.

The AXI BRAM instance is configured with 64K address space by default starting at address 0xC0000000. The address space can be increased or decreased by selecting a different value for Range.

The AXI GPIO instance has a 4K address space which is reflected in the addressing for M_AXI_BAR1 which starts at 0x00000000.

Saving and Validating the Design

Save the block diagram and select Tools->Validate Design.

Select OK Once Validation is successful.

Add simulation sources from example design (cl_hello_world)

In the Flow Navigator tab/Project Manager select Add Sources -> Add or create simulation sources -> Select Add Files.

Add the hdk/common/shell_stable/hlx/hlx_examples/build/IPI/hello_world/verif/test_cl.sv

Deselect Scan and add RTL includes files into project

Import Only - Sources are not copied to the Vivado project and pointed to outside of the Vivado project.

Deselect Copy sources into project to link to the source files.

Select Add sources from subdirectories.

Select Include all design sources for simulation. Then click Finish.

Right click on SIMULATION in the Project Manager and select Simulation Settings…

For Verilog options select the … box and change the following names (should already be configured).

CL_NAME=cl_top

TEST_NAME=test_cl

Click OK, Click Apply, Click OK to go back into the Vivado project.

Running Simulation

Select Simulation->Run Simulation->Run Behavioral Simulation from the Flow Navigator Tab.

Add signals needed in the simulation.

Type in the following in the TCL console. Note if Critical Warnings appear click OK and the following command needs to run two times. This is a known issue and will be addressed in later versions of the design.

run -all

Adding Constraints for Design

No additional constraints are needed for this design.

Implementing the Design/Tar File

Right click on impl_1 and select Launch Runs… and Click OK.

Click OK on the Missing Synthesis Results Dialog Box.

This will run both synthesis and implementation.

The completed .tar file is located in .runs/faas_1/build/checkpoints/to_aws/.Developer_CL.tar. For information on how to create a AFI/GAFI with .tar from the design, following to the How To Create an Amazon FPGA Image (AFI) From One of The CL Examples: Step-by-Step Guide documentation.

CL Example Software

The runtime software must be compiled for the AFI to run on F1.

Copy the software directory to any directory and compile with the following commands.

$ cp -r $HDK_COMMON_DIR/shell_stable/hlx/hlx_examples/build/IPI/hello_world/software
$ cd software
$ make all
$ sudo ./test_cl

Tutorial on how to create HLx IPI DDS example (Using IP Integration flow)

The DDS IP described in XAPP1299 is connected to AWS F1 IP where BAR1 is used for control of the IP and DDR-C (shell DDR) is the memory used for the two AXI Master outputs of the IP(sine and cosine wave generation with 1024 samples). The host reads back the values written into the memory (simulation-one address read/software-all data written into a text file sine.txt/cosine.txt located in /home/centos ). Refer to XAPP1299 application note for more details about the IP generated by C code through HLS.

The HLS IP is stored in the hdk/common/shell_v04261818/hlx/design/ip directory. Generated IPs should following the same structure as this HLS IP and extracted in the correct directory structure for the Vivado repository to pick up the IP.

Create Directory Structure and Vivado Project

Invoke vivado

Change directories where the project will be stored. Create a new project with the following command.

create_project -name cl_hls_dds

Then create the base IPI design with the following command.

aws::make_ipi

Configuring the Block Diagram

Configuring AWS IP

In the Block Diagram, double click on f1_inst and select the appropriate settings for the AWS IP based upon system for the HLS IP. In this case, select Use DDR4-C in Shell, select Use PCI Slave-access Interface (M_AXI_PCIS), and select Use BAR1 Register Interface (M_AXI_BAR1). Under Clock Signals, for Number of Group-A Clocks select 2 and for Group-A Clock Recipe select 1 for 250 MHz for clk_main_a0 and 125 MHz for clk_extra_a1. Click OK.

Adding AXI GPIO and DDS IP

In the diagram, right click and select Add IP… and search for the HLS IP which is DDS and select the DDS IP. Right click in the Diagram and Select Add IP ... and add AXI GPIO.

Configuring AXI GPIO

Double click on the added AXI GPIO instance. Under the GPIO section, select All Inputs and set GPIO Width to 1. Click OK.

Configuring DDS IP

Double click on the DDS IP instance. Select the Data width to 512. Note this selection will be done two times for the two AXI Masters under the ID width parameter. For the first Base Address of target slave enter in 0x81000000 and for the second Base address of target slave enter in 0x82000000. Click OK.

Connecting the Design Part 1

Select Run Connection Automation at the top of the Block Diagram in the green highlighted section.

Select S_AXI under axi_gpio_0. For Clock source for Slave interface select /f1_inst/clk_extra_a1_out (125 MHz). Leave the rest of the options Auto.

Select s_axi_PROG_BUS under dds_0. Leave all the options set to Auto.

Select S_AXI_DDRC and select Crossbar clock source of Interconnect IP to /f1_inst/clk_extra_a0_out (250 MHz). Select OK.

In the Diagram Tab, select Run Connection Automation again. Select m_axi_DDS_OUTPUT1 under dds_0 and leave all options Auto. Select OK.

Configuring AXI Smartconnect IP

In the block diagram, double click on the AXI Smartconnect instance. Set the Number of Slave Interfaces to 3. Click OK. Connect M_AXI_PCIS on the AWS IP instance to S02_AXI on the AXI Smartconnect instance.

Connecting the Design Part 2

In the Block Design, expand the GPIO output by clicking on the +. Connect the ddrc_is_ready output pin to the gpio_io_i[0:0] pin. Connect the rst_main_n_out on the AWS IP instance to the output pin to the ext_rst_in pin on the Processor System Reset instance.

In the Block Design, select the Address Editor Tab.

Right click on M_AXI_PCIS and select Auto Assign Address.

Expand f1_inst/M_AXI_BAR1. For dds_0 make sure Offset Address is 0x00_0000 and axi_gpio_0 is 0x01_0000.

Expand dds_0/Data_m_axi_DDS_OUTPUT and dds_0/Data_m_axi_DDS_OUTPUT1 address segments. Set Range for both of these segments to 2G and Offset Address to 0x80000000 which is for the static DDR4 memory. Note the IP addressing is 32-bits using 2GB DDR4 memory.

Saving and Validating the Design

Save the block diagram and select Tools->Validate Design.

Select OK Once Validation is successful.

Simulation

The simulation settings are already configured.

Click on Simulation->Run Simulation->Run Behavioral Simulation.

Add signals needed in the simulation.

Type in the following in the TCL console (could take 2 hours based upon machine). Note if Critical Warnings appear click OK and that the following command needs to ran two times. This is a known issue and will be addressed in later versions of the design.

run -all

Implementing the Design/Tar file

In the Design Runs tab, right click on impl_1 and select Launch Runs. Click OK in the Launch Runs Dialog Box. Click OK in the Missing Synthesis Results Dialog Box.

This will run both synthesis and implementation.

The completed .tar file is located in example_projects/cl_hls_dds.runs/faas_1/build/checkpoints/to_aws/.Developer_CL.tar. For information on how to create a AFI/GAFI with .tar from the design, following to the How To Create an Amazon FPGA Image (AFI) From One of The CL Examples: Step-by-Step Guide documentation.

CL Example Software

The runtime software must be complied for the AFI to run on F1.

Copy the software directory to any directory and compile with the following commands.

$ cp -r $HDK_COMMON_DIR/shell_stable/hlx/hlx_examples/build/IPI/cl_hls_dds/software
$ cd software
$ make all
$ sudo ./test_cl

Tutorial on how to create HLx IPI cl_hello_world example (Using IP Integration flow)

Overview

The hello_world example demonstrates basic Shell-to-CL connectivity, memory-mapped register instantiations and the use of the Virtual LED and DIP switches. The hello_world example implements two registers in the FPGA AppPF BAR0 memory space connected to the OCL AXI-L interface. The two registers are:

  1. Hello World Register (offset 0x500)
  2. Virtual LED Register (offset 0x504)

The logic for the original cl_hello_world example from github is contained in one RTL module (hello_world.v). In hello_world.v, the top level ports are for AXI4-Lite interface, clock/reset and ports for VLED and VDIP which allows for IP packaging of the design and reuse with other flows/AXI4-Lite Master interfaces. Note VIO logic is not included with this example from the original hello_world.

Create Directory Structure\Vivado Project

Change directories to hdk/cl/examples

Create a directory in examples like cl_hello_world_ref_vivado

Change directories into cl_hello_world_ref_vivado/

Start Vivado by typing vivado in the console.

Create a project any device with the following command.

create_project -name cl_hello_world_ref

Type in the following command which changes the project settings for AWS and creates the block diagram with the AWS IP added.

aws::make_ipi

Adding existing RTL sources (hello_world.v)

In Flow Navigator->Under Project Manager select Add Sources. Select Add or create design sources and select Add Directories.

Add the hdk/common/shell_stable/hlx/hlx_examples/build/IPI/cl_hello_world_ref/design directory.

Add the cl/examples/common/design directory.

Select Scan and add RTL includes files into project

Import Only - Sources are not copied to the Vivado project and pointed to outside of the Vivado project.

Deselect Copy sources into project to link to the source files.

Copy to Project - Sources are copied to the Vivado project where the user can modify the sources without impact to the original sources.

Select Copy sources into project to add the source files to local Vivado project.

Select Add sources from subdirectories.

Configuring the Block Diagram

Double click on the AWS IP. Under IP Interfaces select Use OCL Register Interface and Use Auxiliary (non-AXI) Signal Ports. This enables the AXI4-Lite Master Interface and the VLED/VDIP input/outputs.

Select Run Connecting Automation on the top of the Block Diagram. Select AUTO for Crossbar clock source of Interconnect IP/Clock source for Master interface/Clock source for Slave interface. The default clock is the 125 MHz coming from clk_main_a0_out from the f1_inst.

Address spaces is configured as the default which the whole address space of OCL. This can be changed in Address Editor for a smaller address space if necessary.

Select vled pin and connect to status_vled on the f1_inst block.

Select status_vdip on the f1_inst block and make a connection to vdip.

Right click on the connection between M_AXI_OCL on f1_inst and S00_AXI on f1_inst_axi_periph and select Debug.

Click on Run Connection Automation and click on for System ILA to be added to the design. If necessary the AXI-MM Protocol Checker can be selected when debugging new IPs.

Save the block diagram and select Tools->Validate Design.

Select OK Once Validation is successful.

Add simulation sources from example design (cl_hello_world)

Add or create simulation sources. Select Add Files.

Add the cl/examples/cl_hello_world/verif/tests/test_hello_world.sv

Deselect Scan and add RTL includes files into project

Import Only - Sources are not copied to the Vivado project and pointed to outside of the Vivado project.

Deselect Copy sources into project to link to the source files.

Copy to Project - Sources are copied to the Vivado project where the user can modify the sources without impact to the original sources.

Select Copy sources into project to add the source files to local Vivado project.

Select Add sources from subdirectories.

Select all design sources for simulation.

Right click on SIMULATION in the Project Manager and select Simulation Settings…

For Verilog options select the … box and change the following names.

CL_NAME=cl_top

TEST_NAME=test_hello_world

Click OK, Click Apply, Click OK to back into the Vivado project.

Running Simulation

Select Simulation->Run Simulation->Run Behavioral Simulation from the Flow Navigator Tab.

Add signals needed in the simulation.

Type in the following in the TCL console. Note if Critical Warnings appear click OK and that the following command needs to ran two times. This is a known issue and will be addressed in later versions of the design.

run -all

Adding constraints for design

No additional constraints are needed for this design.

Implementing the Design/Tar File

Right click on impl_1 and select Launch Runs… and Click OK.

Click OK on the Missing Synthesis Results Dialog Box.

This will run both synthesis and implementation.

The completed .tar file is located in .runs/faas_1/build/checkpoints/to_aws/.Developer_CL.tar. For information on how to create a AFI/GAFI with .tar from the design, following to the How To Create an Amazon FPGA Image (AFI) From One of The CL Examples: Step-by-Step Guide documentation.

CL Example Software

The runtime software must be complied for the AFI to run on F1.

Use the software in cl/examples/cl_hello_world

$ cd cl/cl_hello_world/software/runtime/
$ make all
$ sudo ./test_hello_world

Tutorial on how to create HLx cl_hello_world example (Using IP + RTL flow)

Overview

This example shows how to add existing RTL, simulation RTL, and constraints into a Vivado project. This example uses cl_hello_world from the github examples directory.

Create Directory Structure\Vivado Project and System Variables

Change directories to hdk/cl/examples

Create a directory in examples like cl_hello_world_vivado

Change directories into cl_hello_world_vivado/

For the clock recipes and IDs set the following system variables (these match cl_hello_world example).

export CLOCK_A_RECIPE=0

export CLOCK_B_RECIPE=0

export CLOCK_C_RECIPE=0

export device_id=0xF000

export vendor_id=0x1D0F

export subsystem_id=0x1D51

export subsystem_vendor_id=0xFEDD

Start Vivado by typing vivado in the console.

Type in the following to create a generic project.

create_project -name cl_hello_world

To setup the project for RTL mode, type in the following command.

aws::make_rtl

Adding existing RTL sources (cl_hello_world)

In Flow Navigator->Under Project Manager select Add Sources. Select Add or create design sources and select Add Directories.

Add the cl/examples/cl_hello_world/design directory.

Add the cl/examples/common/design directory.

Select Scan and add RTL includes files into project

Import Only - Sources are not copied to the Vivado project and pointed to outside of the Vivado project.

Deselect Copy sources into project to link to the source files.

Copy to Project - Sources are copied to the Vivado project where the user can modify the sources without impact to the original sources.

Select Copy sources into project to add the source files to local Vivado project.

Select Add sources from subdirectories.

Add simulation sources from example design (cl_hello_world)

Add or create simulation sources. Select Add Files. Add the <cl_dir>/verif/tests/test_hello_world.sv

Deselect Scan and add RTL includes files into project

Import Only - Sources are not copied to the Vivado project and pointed to outside of the Vivado project.

Deselect Copy sources into project to link to the source files.

Copy to Project - Sources are copied to the Vivado project where the user can modify the sources without impact to the original sources.

Select Copy sources into project to add the source files to local Vivado project.

Select Add sources from subdirectories.

Select all design sources for simulation.

Right click on SIMULATION in the Project Manager and select Simulation Settings…

For Verilog options select the … box and change the following names.

CL_NAME=cl_hello_world

TEST_NAME=test_hello_world

Click OK, Click Apply, Click OK to back into the Vivado project.

Running Simulation

Select Simulation->Run Simulation->Run Behavioral Simulation from the Flow Navigator Tab.

Add signals needed in the simulation.

Type in the following in the TCL console.

run -all

Adding constraints from example design (cl_hello_world)

Option 1

Constraints can be copied and pasted from opening the original XDCs in a text editor and copying the constraints into the project .xdc files.

For cl_hello_world, copy the following into the cl_pnr_user.xdc in the Source->Constraints->cl_pnr_user.xdc. Note this is only for cl_hello_world.

set_false_path -from [get_cells CL/vled_q_reg*]

Option 2

Overriding the .xdc in the Vivado project.

cl_synth_user.xdc/cl_pnr_user.xdc can be copied over from the /build/constraints area to the imported area of the Vivado project like the following.

<example_design>/build/constraints/ to <project_name>.srcs/constrs_1/imports/subscripts

Option 3

Deleting the existing .xdc in the Vivado project and import constraints or copy constraints into Vivado project.

Delete cl_synth_user.xdc and cl_pnr_user.xdc in the Source->Constraints tab.

In Flow Navigator select Add Sources and select Add or create constraints.

For cl_synth_user.xdc and cl_pnr_user.xdc select the minus (-) button. Select Add Files and go to the hdk/cl/examples/<cl_example>/build/constraints directory. Select cl_pnr_user.xdc and cl_synth_user.xdc.

Import Only - Sources are not copied to the Vivado project and pointed to outside of the Vivado project.

Deselect Copy constraints files into project to link to the source files.

Copy to Project - Sources are copied to the Vivado project where the user can modify the sources without impact to the original sources.

Select Copy constraints files into project to add the source files to local Vivado project.

In the Sources/Hierarchy Tab, select cl_pnr_user.xdc and go to Source File Properties. Under the General Tab, deselect Enabled and select Implementation Box only. In Properties Tab, select PROCESSING_ORDER to be LATE.

Implementing the Design/Tar File

Right click on impl_1 and select Launch Runs… and Click OK.

Click OK on the Missing Synthesis Results Dialog Box.

This will run both synthesis and implementation.

The completed .tar file is located in .runs/faas_1/build/checkpoints/to_aws/.Developer_CL.tar. For information on how to create a AFI/GAFI with .tar from the design, following to the How To Create an Amazon FPGA Image (AFI) From One of The CL Examples: Step-by-Step Guide documentation.

CL Example Software

The runtime software must be complied for the AFI to run on F1.

Use the software in cl/examples/cl_hello_world

$ cd cl/cl_hello_world/software/runtime/
$ make all
$ sudo ./test_hello_world

Tutorial on how to create HLx cl_dram_dma example (Using IP + RTL flow)

Overview

This example shows how to add existing RTL, simulation RTL, and constraints into a Vivado project. This example uses cl_dram_dma from the github examples directory.

Make sure the HLx Setup Instructions are followed before continuing.

Create Directory Structure\Vivado Project and System Variables

Change directories to hdk/cl/examples

Create a directory in examples like cl_dram_dma_vivado

Change directories into cl_dram_dma_vivado/

For the clock recipes and IDs set the following system variables (these match cl_dram_dma example).

export CLOCK_A_RECIPE=0

export CLOCK_B_RECIPE=0

export CLOCK_C_RECIPE=0

export device_id=0xF001

export vendor_id=0x1D0F

export subsystem_id=0x1D51

export subsystem_vendor_id=0xFEDC

Start Vivado by typing vivado in the console.

Type in the following to create a generic project.

create_project -name cl_dram_dma

To setup the project for RTL mode, type in the following command.

aws::make_rtl

Adding existing RTL sources (cl_dram_dma)

In Flow Navigator->Under Project Manager select Add Sources. Select Add or create design sources and select Add Directories.

Add the cl/examples/cl_dram_dma/design directory.

Add the cl/examples/common/design directory.

Select Scan and add RTL includes files into project

Import Only - Sources are not copied to the Vivado project and pointed to outside of the Vivado project.

Deselect Copy sources into project to link to the source files.

Copy to Project - Sources are copied to the Vivado project where the user can modify the sources without impact to the original sources.

Select Copy sources into project to add the source files to local Vivado project.

Select Add sources from subdirectories.

Add simulation sources from example design (cl_dram_dma)

cl_dram_dma example has several system verilog tests (test_ddr.sv, test_dram_dma.sv, test_ini.sv, test_peek_poke.sv, test_peek_poke_pcis_axsize.sv).

Add or create simulation sources. Select Add Files and individually add in the .sv files needed.

Add the <cl_dir>/verif/tests/<tests_to_add>.sv

Deselect Scan and add RTL includes files into project

Import Only - Sources are not copied to the Vivado project and pointed to outside of the Vivado project.

Deselect Copy sources into project to link to the source files.

Copy to Project - Sources are copied to the Vivado project where the user can modify the sources without impact to the original sources.

Select Copy sources into project to add the source files to local Vivado project.

Select Add sources from subdirectories.

Select all design sources for simulation.

Right click on SIMULATION in the Project Manager and select Simulation Settings…

For Verilog options select the … box and change the following names.

CL_NAME=cl_dram_dma

For TEST_NAME choose the name of the .sv used (don’t put .sv at the end of the line).

Below is an example.

TEST_NAME=test_dram_dma

Click OK, Click Apply, Click OK to back into the Vivado project.

Running Simulation

Select Simulation->Run Simulation->Run Behavioral Simulation from the Flow Navigator Tab.

Add signals needed in the simulation.

Type in the following in the TCL console.

run -all

Adding constraints from example design (cl_dram_dma)

Option 1

Constraints can be copied and pasted from opening the original XDCs in a text editor and copying the constraints into the project .xdc files.

Option 2

Overriding the .xdc in the Vivado project.

cl_synth_user.xdc/cl_pnr_user.xdc can be copied over from the /build/constraints area to the imported area of the Vivado project like the following.

<example_design>/build/constraints/ to <project_name>.srcs/constrs_1/imports/subscripts

Option 3

Deleting the existing .xdc in the Vivado project and import constraints or copy constraints into Vivado project.

Delete cl_synth_user.xdc and cl_pnr_user.xdc in the Source->Constraints tab.

In Flow Navigator select Add Sources and select Add or create constraints.

For cl_synth_user.xdc and cl_pnr_user.xdc select the minus (-) button.

Select Add Files and go to the hdk/cl/examples/<cl_example>/build/constraints directory.

Select cl_pnr_user.xdc and cl_synth_user.xdc.

Import Only - Sources are not copied to the Vivado project and pointed to outside of the Vivado project.

Deselect Copy constraints files into project to link to the source files.

Copy to Project - Sources are copied to the Vivado project where the user can modify the sources without impact to the original sources.

Select Copy constraints files into project to add the source files to local Vivado project.

In the Sources/Hierarchy Tab, select cl_pnr_user.xdc and go to Source File Properties. Under the General Tab, deselect Enabled and select Implementation Box only. In Properties Tab, select PROCESSING_ORDER to be LATE.

Implementing the Design

Right click on impl_1 and select Launch Runs… and Click OK.

Click OK on the Missing Synthesis Results Dialog Box.

This will run both synthesis and implementation.

CL Example Software

The runtime software must be complied for the AFI to run on F1. Note the XDMA driver must be installed before running on F1.

Use the software in cl/examples/cl_dram_dma

$ cd cl/cl_dram_dma/software/runtime/
$ make all
$ sudo ./test_dram_dma

Tutorial on how to create HLx design example from scratch (Using IP + RTL flow)

Overview

This example shows how to add existing RTL, simulation RTL, and constraints into a Vivado project based upon template files provided from github.

Make sure the HLx Setup Instructions are followed before continuing.

Create Directory Structure\Vivado Project and System Variables

Change directories to hdk/cl/examples

Create a directory in examples like cl_template or the proposed design name.

Change directories into cl_template/

For the clock recipes and IDs set the following system variables which are defaults. These values can be changed later either in the bash shell or in Vivado based upon the design's needs.

export CLOCK_A_RECIPE=0

export CLOCK_B_RECIPE=0

export CLOCK_C_RECIPE=0

export device_id=0xF000

export vendor_id=0x1D0F

export subsystem_id=0x1D51

export subsystem_vendor_id=0xFEDD

Start Vivado by typing vivado in the console.

Type in the following to create a generic project (change the project name to the proposed design name).

create_project -name cl_template

aws::make_rtl

Adding existing RTL template sources

In Flow Navigator->Under Project Manager select Add Sources. Select Add or create design sources and select Add Directories.

Add the hdk/common/shell_stable/new_cl_template/design directory.

Select Scan and add RTL includes files into project

Select Copy sources into project to add the source files to local Vivado project. The templates are stored in the local Vivado project and can be modified in Vivado or a text editor.

Select Add sources from subdirectories.

Template Overview

cl_template_defines.vh – Verilog header file where user puts in generic `define based upon the design.

cl_template.sv – Top level file where user adds in logic, modules and `include .inc files to disable interfaces not used in the shell.

Include files

If certain shell interfaces are not enabled, the user needs to use the .inc provided in HDK to disable the interface in cl_template.sv. See the example designs for examples on using these .inc files.

Add Existing RTL

In Flow Navigator->Under Project Manager select Add Sources. Select Add or create design sources and select Add Directories.

Add the directories or files needed.

Select Scan and add RTL includes files into project

Import Only - Sources are not copied to the Vivado project and pointed to outside of the Vivado project.

Deselect Copy sources into project to link to the source files.

Copy to Project - Sources are copied to the Vivado project where the user can modify the sources without impact to the original sources.

Select Copy sources into project to add the source files to local Vivado project.

Adding/Importing IP

To add new IP to the design, select IP Catalog, find the particular IP and configure, and generate with Global synthesis mode (Out of Context is not supported at this time). The template .vho/.veo can be used to insert the IP into the RTL.

To import IP do the following.

In Flow Navigator->Under Project Manager select Add Sources. Select Add or create design sources.

Add the XCI file of the IP or IPs. Make sure to generate with Global synthesis mode (Out of Context is not supported at this time).

Import Only - Sources are not copied to the Vivado project and pointed to outside of the Vivado project.

Deselect Copy sources into project to link to the source files.

Copy to Project - Sources are copied to the Vivado project where the user can modify the sources without impact to the original sources.

Select Copy sources into project to add the source files to local Vivado project.

Adding simulation sources from template System Verilog

Simulation/system behavior should be verified before attempting the implementation flows.

In the Flow Navigator tab/Project Manager select Add Sources. Add or create simulation sources. Select Add Files.

Add the hdk/common/shell_stable/hlx/hlx_examples/verif/test_cl.sv

Deselect Scan and add RTL includes files into project

Copy to Project - Sources are copied to the Vivado project where the user can modify the sources without impact to the original sources.

Select Copy sources into project to add the source files to local Vivado project.

Select Add sources from subdirectories.

Select Include all design sources for simulation. Then click Finish.

Right click on SIMULATION in the Project Manager and select Simulation Settings…

For Verilog options select the … box and change the following names (should all ready be configured).

CL_NAME=cl_top

TEST_NAME=test_cl

Click OK, Click Apply, Click OK to back into the Vivado project.

Modify test_cl.sv based upon interfaces used in the design. Examples are provided in test_cl.sv for a majority of the interfaces.

Running Simulation

Select Simulation->Run Simulation->Run Behavioral Simulation from the Flow Navigator Tab.

Add signals needed in the simulation.

Type in the following in the TCL console. Note if Critical Warnings appear click OK and that the following command needs to ran two times. This is a known issue and will be addressed in later versions of the design.

run -all

Modifying Constraints

The following files are added to the Vivado project automatically.

cl_clocks_aws.xdc – Top level clock constraints for the CL. This file should not be touched as it's dynamically created during the synthesis process.

cl_synth_aws.xdc - Timing constraints between sh_ddr module and DDR4 IP. This file should be disabled in the Vivado project if no DDR4 instances are in the CL.

cl_synth_user.xdc – User can modify this file for the the CL for synthesis (I.E creating new clock structures with clock generator/using clocks in different Shell MMCM).

cl_pnr_user.xdc – User can modify this file for constraints between the CL/SH for implementation(place/route). Floorplanning is done in this file if necessary.

Implementing the Design

Right click on impl_1 and select Launch Runs… and Click OK.

Click OK on the Missing Synthesis Results Dialog Box.

This will run both synthesis and implementation.