From 26f3f15a151cdc578d27e42f74e583dacdfe761a Mon Sep 17 00:00:00 2001 From: Francesco Conti Date: Tue, 21 Jan 2025 18:24:43 +0100 Subject: [PATCH] Align to Verilatable PULPissimo --- bin/slm_hyper.py | 2 +- rules/pulpos/default_rules.mk | 35 ++++++++++++++++++++++++++++++ rules/pulpos/targets/pulpissimo.mk | 26 ++++++++++++++-------- 3 files changed, 53 insertions(+), 10 deletions(-) diff --git a/bin/slm_hyper.py b/bin/slm_hyper.py index 56177f6..59e3765 100755 --- a/bin/slm_hyper.py +++ b/bin/slm_hyper.py @@ -21,7 +21,7 @@ if args.output_file is None: raise Exception('Specify the output file with --output= (ex. --output=./build/pulpissimo/slm_files/hyper_flash_stim.slm') delimiter=" " -with open(args.input_file, "rU") as fi: +with open(args.input_file, "r") as fi: data = list(map(lambda x:x.split(delimiter), fi.read().strip().split("\n"))) fo=open(args.output_file, "w") A=np.array(data) diff --git a/rules/pulpos/default_rules.mk b/rules/pulpos/default_rules.mk index 3262e32..2f0edfc 100644 --- a/rules/pulpos/default_rules.mk +++ b/rules/pulpos/default_rules.mk @@ -66,6 +66,9 @@ endif ifeq '$(platform)' 'fpga' PULP_CFLAGS += -D__PLATFORM__=ARCHI_PLATFORM_FPGA endif +ifeq '$(platform)' 'verilator' +PULP_CFLAGS += -D__PLATFORM__=ARCHI_PLATFORM_RTL +endif ifdef CONFIG_NB_PE PULP_CFLAGS += -DARCHI_CLUSTER_NB_PE=$(CONFIG_NB_PE) @@ -146,6 +149,13 @@ else LOAD_MODE := JTAG endif +# +# VERILATOR Flags +# +verilator_flags ?= --trace +verilator_flags += +bootmode=jtag +verilator_flags += +log_file=trace_core.log +itb_file=$(TARGETS).itb + # # VSIM Flags # @@ -353,3 +363,28 @@ help: @echo "Makefile options:" @echo " CONFIG_TRACE_LEVEL= Activate traces for the specified level (0=none, 1=fatal, 2=error, 3=warning, 4=info, 5=debug, 6=trace)." @echo " CONFIG_TRACE_ALL=1 Activate all traces. Other traces can be individually activated with CONFIG_TRACE_." + +ifeq '$(platform)' 'verilator' + +$(TARGET_BUILD_DIR)/Vtb_pulp: +ifndef VERILATOR_PATH + $(error "VERILATOR_PATH is undefined. Either call \ + 'source $$YOUR_HW_DIR/setup/verilator.sh' or set it manually.") +endif + ln -sfn $(VERILATOR_PATH)/obj_dir/Vtb_pulp $@ + +# ITB file needed by CV32E40X tracer +$(TARGETS).itb: + $(PULP_OBJDUMP) -d -l -s $(disopt) $(TARGETS) > $(TARGETS).dis + $(PULPRT_HOME)/bin/objdump2itb.py $(TARGETS).dis > $(TARGETS).itb + +run: $(TARGET_BUILD_DIR)/Vtb_pulp $(TARGETS).itb + $(PULPRT_HOME)/bin/stim_utils.py --binary=$(TARGETS) --vectors=$(TARGET_BUILD_DIR)/vectors/stim.txt + $(PULPRT_HOME)/bin/plp_mkflash --flash-boot-binary=$(TARGETS) --stimuli=$(TARGET_BUILD_DIR)/vectors/qspi_stim.slm --flash-type=spi --qpi + $(PULPRT_HOME)/bin/slm_hyper.py --input=$(TARGET_BUILD_DIR)/vectors/qspi_stim.slm --output=$(TARGET_BUILD_DIR)/vectors/hyper_stim.slm +ifndef VERILATOR_PATH + $(error "VERILATOR_PATH is undefined. Either call \ + 'source $$YOUR_HW_DIR/setup/verilator.sh' or set it manually.") +endif + cd $(TARGET_BUILD_DIR) && ./Vtb_pulp $(verilator_flags) +stimuli=$(TARGET_BUILD_DIR)/vectors/stim.txt +endif diff --git a/rules/pulpos/targets/pulpissimo.mk b/rules/pulpos/targets/pulpissimo.mk index 70a9e3c..710d8b4 100644 --- a/rules/pulpos/targets/pulpissimo.mk +++ b/rules/pulpos/targets/pulpissimo.mk @@ -1,11 +1,11 @@ ifdef USE_IBEX -PULP_LDFLAGS += +PULP_LDFLAGS += -nostartfiles -nostdlib -Wl,--gc-sections -L$(PULPRT_HOME)/kernel -Tchips/pulpissimo/link.ld -lgcc PULP_CFLAGS += -D__ibex__ -U__riscv__ -UARCHI_CORE_HAS_PULPV2 -DRV_ISA_RV32 PULP_ARCH_CFLAGS ?= -march=rv32imc PULP_ARCH_LDFLAGS ?= -march=rv32imc PULP_ARCH_OBJDFLAGS ?= -Mmarch=rv32imc else ifdef USE_CV32E40P -PULP_LDFLAGS += +PULP_LDFLAGS += -nostartfiles -nostdlib -Wl,--gc-sections -L$(PULPRT_HOME)/kernel -Tchips/pulpissimo/link.ld -lgcc PULP_CFLAGS += -D__cv32e40p__ -U__riscv__ -UARCHI_CORE_HAS_PULPV2 ifdef CONFIG_USE_ZFINX PULP_ARCH_CFLAGS ?= -march=rv32imc_zfinx_xcorev -mno-pulp-hwloop @@ -16,13 +16,18 @@ PULP_ARCH_LDFLAGS ?= -march=rv32imfc_xcorev -mno-pulp-hwloop endif PULP_ARCH_OBJDFLAGS ?= else ifdef USE_CV32E40X -PULP_LDFLAGS += +PULP_LDFLAGS += -nostartfiles -nostdlib -Wl,--gc-sections -L$(PULPRT_HOME)/kernel -Tchips/pulpissimo/link.ld PULP_CFLAGS += -D__riscv__ -UARCHI_CORE_HAS_PULPV2 -DRV_ISA_RV32 -DPULP_LLVM PULP_ARCH_CFLAGS ?= -march=rv32imcxfir --target=riscv32 PULP_ARCH_LDFLAGS ?= -march=rv32imcxfir --target=riscv32 PULP_ARCH_OBJDFLAGS ?= -D +# use LLVM for CV32E40X +PULP_CC = clang +PULP_AR = llvm-ar +PULP_LD = clang +PULP_OBJDUMP = llvm-objdump else -PULP_LDFLAGS += +PULP_LDFLAGS += -nostartfiles -nostdlib -Wl,--gc-sections -L$(PULPRT_HOME)/kernel -Tchips/pulpissimo/link.ld -lgcc PULP_CFLAGS += -D__riscv__ PULP_ARCH_CFLAGS ?= -march=rv32imcxgap9 PULP_ARCH_LDFLAGS ?= -march=rv32imcxgap9 @@ -31,12 +36,11 @@ endif PULP_CFLAGS += -fdata-sections -ffunction-sections -include chips/pulpissimo/config.h -I$(PULPRT_HOME)/include/chips/pulpissimo PULP_OMP_CFLAGS += -fopenmp -mnativeomp -PULP_LDFLAGS += -nostartfiles -nostdlib -Wl,--gc-sections -L$(PULPRT_HOME)/kernel -Tchips/pulpissimo/link.ld -PULP_CC = clang -PULP_AR ?= llvm-ar -PULP_LD ?= clang -PULP_OBJDUMP ?= llvm-objdump +PULP_CC ?= riscv32-unknown-elf-gcc +PULP_AR ?= riscv32-unknown-elf-ar +PULP_LD ?= riscv32-unknown-elf-gcc +PULP_OBJDUMP ?= riscv32-unknown-elf-objdump fc/archi=riscv pe/archi=riscv @@ -73,6 +77,10 @@ ifeq '$(platform)' 'rtl' PULP_SRCS += drivers/pulpissimo/rtl_sim/io_mux/src/io_mux.c PULP_CFLAGS += -I$(PULPRT_HOME)/drivers/pulpissimo/rtl_sim/io_mux/include endif +ifeq '$(platform)' 'verilator' +PULP_SRCS += drivers/pulpissimo/rtl_sim/io_mux/src/io_mux.c +PULP_CFLAGS += -I$(PULPRT_HOME)/drivers/pulpissimo/rtl_sim/io_mux/include +endif include $(PULPRT_HOME)/rules/pulpos/configs/default.mk