diff --git a/resources/fpga/build_design.tcl b/resources/fpga/build_design.tcl new file mode 100644 index 0000000000000000000000000000000000000000..787e435c263639729dfb2a529de7ae90a48b3a83 --- /dev/null +++ b/resources/fpga/build_design.tcl @@ -0,0 +1,91 @@ +###----------------------------------------------------------------------------- +### Build Design Viviado FPGA Script +### A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +### +### Contributors +### +### David Mapstone (d.a.mapstone@soton.ac.uk) +### +### Copyright 2023, SoC Labs (www.soclabs.org) +###----------------------------------------------------------------------------- +# +# Developed & Tested using vivado_version 2021.1 +# + +# Get Environmnet Variables from Makefile +set fpga_name $env(FPGA_NAME) +set xilinx_part $env(FPGA_PART) +set project_dir $env(FPGA_PROJECT_DIR) +set import_dir $env(FPGA_TARGET) +set target_tcl_dir $env(FPGA_TARGET_TCL) +set design_name $env(FPGA_DESIGN_NAME) +set wrapper_name $env(FPGA_WRAPPER_NAME) +set pinmap_file $env(FPGA_PINMAP) +set output_dir $env(FPGA_OUTPUT_DIR) +set implementation_dir $env(FPGA_IMP_DIR) + +# +# STEP#1: setup design sources and constraints +# +set_part $xilinx_part +set_property TARGET_LANGUAGE Verilog [current_project] +set_property DEFAULT_LIB work [current_project] + +set paths [list $implementation_dir] + +# Set IP repository paths +set obj [get_filesets sources_1] +if { $obj != {} } { + set_property "ip_repo_paths" "[file normalize $implementation_dir] " $obj + # Rebuild user ip_repo's index before adding any source files + update_ip_catalog -rebuild +} + +report_ip_status + +# # +# # STEP#2: create Block Diagram and add specific IO wrapper (and import matching pinmap.xdc) +# # +# # using script written out from GUI capture + +create_bd_design $design_name + +read_verilog $import_dir/$wrapper_name.v +source $target_tcl_dir/$design_name.tcl +create_root_design "" + + +add_files $pinmap_file + +set_property top $wrapper_name [current_fileset] + +# # +# # STEP#3: save in Project mode to complete flow +# # +save_project_as $fpga_name $project_dir -exclude_run_results -force + +update_compile_order -fileset sources_1 + +# # +# # STEP#4: synthesize project +# # +set_property part $xilinx_part [get_runs synth_1] +launch_runs synth_1 -jobs 8 + +wait_on_run synth_1 + +# # +# # STEP#5: place and route project +# # +set_property part $xilinx_part [get_runs impl_1] +launch_runs impl_1 -to_step write_bitstream -jobs 8 + +wait_on_run impl_1 + +# # +# # STEP#6: export $design_name.bit and $design_name.hwh files for PYNQ +# # + +write_hw_platform -fixed -include_bit -force -file $project_dir/$design_name.xsa + +exit 0