diff --git a/fpga/build_nanosoc.tcl b/fpga/build_nanosoc.tcl deleted file mode 100644 index e38f6b4ad0460c57a8e2dd883e71e0956f5f2c07..0000000000000000000000000000000000000000 --- a/fpga/build_nanosoc.tcl +++ /dev/null @@ -1,54 +0,0 @@ -###----------------------------------------------------------------------------- -### Build NanoSoC FPGA TCL File -### A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. -### -### Contributors -### -### David Flynn (d.w.flynn@soton.ac.uk) -### -### Copyright � 2022, SoC Labs (www.soclabs.org) -###----------------------------------------------------------------------------- -# -# developed & tested using vivado_version 2021.1 -# - - -# -# STEP#0: setup design sources and constraints -# -source $env(FPGA_TCL_FILELIST) - - -set_property generic {ACCELERATOR_SUBSYSTEM=$env(FPGA_ACCELERATOR_SUBSYSTEM)} [current_fileset] -set_property verilog_define {ACCELERATOR_SUBSYSTEM=$env(FPGA_ACCELERATOR_SUBSYSTEM)} [current_fileset] -set_property top $env(FPGA_DESIGN_TOP) [current_fileset] - -# -# STEP#1: run synthesis, report utilization and timing estimates, write checkpoint design -# - -update_compile_order -fileset sources_1 - -ipx::package_project -root_dir $nanosoc_lib -vendor $env(FPGA_VENDOR) -library user -taxonomy /UserIP -import_files -set_current false -force -force_update_compile_order - -ipx::unload_core $nanosoc_lib/component.xml -ipx::edit_ip_in_project -upgrade true -name tmp_edit_project -directory $nanosoc_lib $nanosoc_lib/component.xml - -update_compile_order -fileset sources_1 -set_property ipi_drc {ignore_freq_hz true} [ipx::current_core] -ipx::merge_project_changes files [ipx::current_core] - -set_property core_revision $env(FPGA_CORE_REV) [ipx::current_core] -ipx::update_source_project_archive -component [ipx::current_core] -ipx::create_xgui_files [ipx::current_core] -ipx::update_checksums [ipx::current_core] -ipx::check_integrity [ipx::current_core] - -ipx::save_core [ipx::current_core] -ipx::check_integrity -quiet -xrt [ipx::current_core] -ipx::move_temp_component_back -component [ipx::current_core] -close_project - -set_property ip_repo_paths " $socket_lib $nanosoc_lib" [current_project] -update_ip_catalog -close_project diff --git a/fpga/build_fpga.tcl b/fpga/build_nanosoc_design.tcl similarity index 92% rename from fpga/build_fpga.tcl rename to fpga/build_nanosoc_design.tcl index 17adbd3af8256a9d5c833b843a8e0792f0d61eb3..94d2a6208b51e0a556c9e7d90b9eff31b890fbe0 100644 --- a/fpga/build_fpga.tcl +++ b/fpga/build_nanosoc_design.tcl @@ -15,21 +15,15 @@ # Get Environmnet Variables from Makefile set fpga_name $env(FPGA_NAME) set xilinx_part $env(FPGA_PART) -set import_dir $env(FPGA_TARGET) set project_dir $env(FPGA_PROJECT_DIR) -set flow_dir $env(FPGA_FLOW_DIR) -set design_name $env(FPGA_DESIGN_NAME) +set import_dir $env(FPGA_TARGET) set target_tcl_dir $env(FPGA_TARGET_TCL) +set design_name $env(FPGA_DESIGN_NAME) set socket_lib $env(FPGA_SOCKET_LIB) set nanosoc_lib $env(FPGA_NANOSOC_LIB) set output_dir $env(FPGA_OUTPUT_DIR) -# -# STEP#0: Build NanoSoC Design (without pads) as an "IP" library component for the testbench (in nanosoc_lib) -# -source $flow_dir/build_nanosoc.tcl - # # STEP#1: setup design sources and constraints # @@ -102,5 +96,4 @@ exec mkdir -p $output_dir exec cp -p $project_dir/export/$design_name.bit $output_dir exec cp -p $project_dir/export/$design_name.hwh $output_dir -exec rm -r $nanosoc_lib exit 0 diff --git a/fpga/makefile b/fpga/makefile index 7bff7dfe29d57286d4f16bdafb48dddc5c9693ff..be5892e1250da874a4f21f2814d3058cacfae601 100644 --- a/fpga/makefile +++ b/fpga/makefile @@ -35,23 +35,26 @@ DESIGN_NAME ?= nanosoc_design # Location to build FPGA files IMPLEMENTATION_DIR ?= $(SOCLABS_PROJECT_DIR)/imp/fpga RUN_DIR := $(IMPLEMENTATION_DIR)/run -TEMP_RTL_NANOSOC_DIR := $(IMPLEMENTATION_DIR)/nanosoc_lib -TEMP_RTL_SOCKET_DIR := $(IMPLEMENTATION_DIR)/socket +IMP_NANOSOC_DIR := $(IMPLEMENTATION_DIR)/nanosoc +IMP_SOCKET_DIR := $(IMPLEMENTATION_DIR)/socket PROJECT_DIR := $(IMPLEMENTATION_DIR)/targets/$(BOARD_NAME) # Name of generated filelist by python script -TCL_FLIST_DIR := $(TEMP_RTL_NANOSOC_DIR)/flist +TCL_FLIST_DIR := $(IMP_NANOSOC_DIR)/flist TCL_OUTPUT_FILELIST := $(TCL_FLIST_DIR)/gen_flist.tcl # NanoSoC Tech Flow Dependencies NANOSOC_FPGA_FLOW_DIR := $(SOCLABS_NANOSOC_TECH_DIR)/fpga +# NanoSoC Defines File +NANOSOC_DEFINES ?= $(NANOSOC_FPGA_FLOW_DIR)/nanosoc_defines.tcl + # Directory to look for FPGA specific implementation files TARGET_DIR ?= $(NANOSOC_FPGA_FLOW_DIR)/targets/$(BOARD_NAME) TARGET_TCL_DIR := $(TARGET_DIR)/vivado_script/$(VIVIADO_VERSION) # NanoSoC Tech Socket Design Dependencies -RTL_SOCKET_DIR := $(SOCLABS_SOCDEBUG_TECH_DIR)/socket/vivado_lib +RTL_SOCKET_DIR := $(SOCLABS_SOCDEBUG_TECH_DIR)/socket/vivado_packages # Define Bitfile Output Directory depending on Platform ifeq ($(PLATFORM), bare) @@ -69,46 +72,60 @@ else ACCELERATOR_SUBSYSTEM = 0 endif -# Export Environment Variables so FPGA TCL scripts can access values -build_fpga: export FPGA_NAME = $(BOARD_NAME) -build_fpga: export FPGA_PART = $(XILINX_PART) -build_fpga: export FPGA_PROJECT_DIR = $(PROJECT_DIR) -build_fpga: export FPGA_TARGET = $(TARGET_DIR) -build_fpga: export FPGA_TARGET_TCL = $(TARGET_TCL_DIR) -build_fpga: export FPGA_TCL_FILELIST = $(TCL_OUTPUT_FILELIST) -build_fpga: export FPGA_ACCELERATOR = $(ACCELERATOR_SUBSYSTEM) -build_fpga: export FPGA_DESIGN_TOP = $(FPGA_TOP) -build_fpga: export FPGA_VENDOR = $(VENDOR) -build_fpga: export FPGA_CORE_REV = $(NANOSOC_CORE_REV) -build_fpga: export FPGA_NANOSOC_LIB = $(TEMP_RTL_NANOSOC_DIR) -build_fpga: export FPGA_SOCKET_LIB = $(RTL_SOCKET_DIR) -build_fpga: export FPGA_IMPLEMENTATION_DIR = $(IMPLEMENTATION_DIR) -build_fpga: export FPGA_FLOW_DIR = $(NANOSOC_FPGA_FLOW_DIR) -build_fpga: export FPGA_DESIGN_NAME = $(DESIGN_NAME) -build_fpga: export FPGA_OUTPUT_DIR = $(OUTPUT_DIR) - # Generate TCL filelist from flists -tcl_flist: +nanosoc_flist: @mkdir -p $(TCL_FLIST_DIR) @(cd $(TCL_FLIST_DIR); \ - $(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -f $(DESIGN_VC) -o $(TCL_OUTPUT_FILELIST) -r $(TEMP_RTL_NANOSOC_DIR);) - + $(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -f $(DESIGN_VC) -o $(TCL_OUTPUT_FILELIST) -r $(IMP_NANOSOC_DIR);) + +# Package NanoSoC Socket Components package_socket: - $(MAKE) -C $(SOCLABS_SOCDEBUG_TECH_DIR)/fpga package_socket TEMP_RTL_SOCKET_DIR=$(TEMP_RTL_SOCKET_DIR) RTL_SOCKET_DIR=$(RTL_SOCKET_DIR) + $(MAKE) -C $(SOCLABS_SOCDEBUG_TECH_DIR)/fpga package_socket IMP_SOCKET_DIR=$(IMP_SOCKET_DIR) RTL_SOCKET_DIR=$(RTL_SOCKET_DIR) + +# Environment Variables for Packaging NanoSoC +package_nanosoc: export FPGA_COMPONENT_FILELIST = $(TCL_OUTPUT_FILELIST) +package_nanosoc: export FPGA_COMPONENT_DEFINES = $(NANOSOC_DEFINES) +package_nanosoc: export FPGA_COMPONENT_LIB = $(IMP_NANOSOC_DIR) +package_nanosoc: export FPGA_ACCELERATOR = $(ACCELERATOR_SUBSYSTEM) +package_nanosoc: export FPGA_DESIGN_TOP = $(FPGA_TOP) +package_nanosoc: export FPGA_VENDOR = $(VENDOR) +package_nanosoc: export FPGA_CORE_REV = $(NANOSOC_CORE_REV) + +# Package NanoSoC IP +package_nanosoc: nanosoc_flist + @echo Packaging NanoSoC + @mkdir -p $(RUN_DIR) + @cd $(RUN_DIR); vivado -mode batch -source $(SOCLABS_SOCTOOLS_FLOW_DIR)/resources/fpga/package_component.tcl + @mkdir -p $(IMP_NANOSOC_DIR)/logs + @cp $(RUN_DIR)/vivado.log $(IMP_NANOSOC_DIR)/logs + @echo NanoSoC Packaged + +# Environment Variables for Build NanoSoC Design +build_nanosoc_design: export FPGA_NAME = $(BOARD_NAME) +build_nanosoc_design: export FPGA_PART = $(XILINX_PART) +build_nanosoc_design: export FPGA_PROJECT_DIR = $(PROJECT_DIR) +build_nanosoc_design: export FPGA_TARGET = $(TARGET_DIR) +build_nanosoc_design: export FPGA_TARGET_TCL = $(TARGET_TCL_DIR) +build_nanosoc_design: export FPGA_DESIGN_NAME = $(DESIGN_NAME) +build_nanosoc_design: export FPGA_NANOSOC_LIB = $(IMP_NANOSOC_DIR) +build_nanosoc_design: export FPGA_SOCKET_LIB = $(IMP_SOCKET_DIR) +build_nanosoc_design: export FPGA_OUTPUT_DIR = $(OUTPUT_DIR) # Synthesise and Implement an FPGA Bitfile -build_fpga: tcl_flist clean_fpga - @echo Starting Vivado Run +build_nanosoc_design: + @echo Building NanoSoC Design @mkdir -p $(RUN_DIR) - @cd $(RUN_DIR); vivado -mode batch -source $(NANOSOC_FPGA_FLOW_DIR)/build_fpga.tcl + @cd $(RUN_DIR); vivado -mode batch -source $(NANOSOC_FPGA_FLOW_DIR)/build_nanosoc_design.tcl @cp $(RUN_DIR)/vivado.log $(TARGET_DIR) - @echo Vivado Build Complete + @echo Built NanoSoC Design + +# Build NanoSoC Design Flow +build_fpga: clean_fpga package_socket package_nanosoc build_nanosoc_design # Clean FPGA Run clean_fpga: @echo Cleaning Previous Runs of $(BOARD_NAME) @rm -rf $(PROJECT_DIR) - @rm -rf $(TEMP_RTL_NANOSOC_DIR) @rm -rf $(RUN_DIR) # Clean ALL FPGA Implementation Directory diff --git a/fpga/nanosoc_defines.tcl b/fpga/nanosoc_defines.tcl new file mode 100644 index 0000000000000000000000000000000000000000..63769afdf4d35fb6ef1df7bea68551d7addbb382 --- /dev/null +++ b/fpga/nanosoc_defines.tcl @@ -0,0 +1,13 @@ +###----------------------------------------------------------------------------- +### NanoSoC Defines 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) +###----------------------------------------------------------------------------- + +set_property generic {ACCELERATOR_SUBSYSTEM=$env(FPGA_ACCELERATOR_SUBSYSTEM)} [current_fileset] +set_property verilog_define {ACCELERATOR_SUBSYSTEM=$env(FPGA_ACCELERATOR_SUBSYSTEM)} [current_fileset] \ No newline at end of file diff --git a/nanosoc/socdebug_tech b/nanosoc/socdebug_tech index abe4e2cbb68fde22cac578f15943b1e7e61a51d7..6afabad6b246d01a7feb1c4348982eeb9479f5e1 160000 --- a/nanosoc/socdebug_tech +++ b/nanosoc/socdebug_tech @@ -1 +1 @@ -Subproject commit abe4e2cbb68fde22cac578f15943b1e7e61a51d7 +Subproject commit 6afabad6b246d01a7feb1c4348982eeb9479f5e1