Skip to content

Commit

Permalink
Makefile: support Palladium simulation (OpenXiangShan#245)
Browse files Browse the repository at this point in the history
* Makefile,Scripts: support Palladium simulation

To add extra Macros when pldm-build, use PLDM_EXTRA_MACRO="..."
To add extra Args when make pldm-run/pldm-debug, use PLDM_EXTRA_ARGS="..."
Use RELEASE_WITH_ASSERT to specify Palladium simulation without Software.

We will provide default path of PLDM_SCRIPTS_DIR in internal env.sh.
User can copy dir and specify path for its own arguments.
  • Loading branch information
klin02 authored Jan 13, 2024
1 parent 4ee7a10 commit 1f6dd8d
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 1 deletion.
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,9 @@ endif

include verilator.mk
include vcs.mk
include palladium.mk

clean: vcs-clean
clean: vcs-clean pldm-clean
rm -rf $(BUILD_DIR)

.PHONY: sim-verilog emu difftest_verilog clean
122 changes: 122 additions & 0 deletions palladium.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
PLDM_TB_TOP = tb_top
PLDM_TOP_MODULE = $(SIM_TOP)

PLDM_BUILD_DIR = $(abspath $(BUILD_DIR)/pldm-compile)
PLDM_CC_OBJ_DIR = $(abspath $(PLDM_BUILD_DIR)/cc_obj)

# Macro Flags
PLDM_MACRO_FLAGS = +define+TOP_MODULE=$(PLDM_TOP_MODULE)
PLDM_MACRO_FLAGS += +define+PALLADIUM
PLDM_MACRO_FLAGS += +define+RANDOMIZE_GARBAGE_ASSIGN
PLDM_MACRO_FLAGS += +define+RANDOMIZE_INVALID_ASSIGN
PLDM_MACRO_FLAGS += +define+RANDOMIZE_MEM_INIT
PLDM_MACRO_FLAGS += +define+RANDOMIZE_REG_INIT
PLDM_MACRO_FLAGS += +define+RANDOMIZE_DELAY=0
ifeq ($(RELEASE_WITH_ASSERT), 1)
PLDM_MACRO_FLAGS += +define+SYNTHESIS +define+TB_NO_DPIC
else
PLDM_MACRO_FLAGS += +define+DIFFTEST
endif
PLDM_MACRO_FLAGS += $(PLDM_EXTRA_MACRO)

# UA Args
IXCOM_FLAGS = -clean -64 -ua +sv +ignoreSimVerCheck +xe_alt_xlm
ifeq ($(RELEASE_WITH_ASSERT), 1)
IXCOM_FLAGS += +1xua
else
IXCOM_FLAGS += +iscDelay+tb_top +iscDelay+SimJTAG -enableLargeSizeMem
endif

# Compiler Args
IXCOM_FLAGS += -xecompile compilerOptions=$(PLDM_SCRIPTS_DIR)/compilerOptions.qel
IXCOM_FLAGS += +tb_import_systf+fwrite +tb_import_systf+fflush
IXCOM_FLAGS += $(PLDM_MACRO_FLAGS)
IXCOM_FLAGS += +dut+$(PLDM_TB_TOP)
ifeq ($(RELEASE_WITH_ASSERT), 1)
PLDM_CLOCK = clock_gen
PLDM_CLOCK_DEF = $(PLDM_SCRIPTS_DIR)/$(PLDM_CLOCK).xel
PLDM_CLOCK_SRC = $(PLDM_BUILD_DIR)/$(PLDM_CLOCK).sv
IXCOM_FLAGS += +dut+$(PLDM_CLOCK) $(PLDM_CLOCK_SRC)
endif

# Other Args
IXCOM_FLAGS += -v $(PLDM_IXCOM)/IXCclkgen.sv
IXCOM_FLAGS += +iscdisp+Rob +iscdisp+tb_top +iscdisp+MemRWHelper
ifneq ($(RELEASE_WITH_ASSERT), 1)
IXCOM_FLAGS += +rtlCommentPragma +tran_relax -relativeIXCDIR -rtlNameForGenerate
endif
IXCOM_FLAGS += +tfconfig+$(PLDM_SCRIPTS_DIR)/argConfigs.qel

# Verilog Files
PLDM_VSRC_DIR = $(RTL_DIR)
ifeq ($(RELEASE_WITH_ASSERT), 1)
PLDM_VSRC_DIR += $(abspath ./src/test/vsrc/vcs) $(abspath ./src/test/vsrc/common/SimJTAG.v)
else
PLDM_VSRC_DIR += $(abspath ./src/test/vsrc)
endif
PLDM_VFILELIST = $(PLDM_BUILD_DIR)/vfiles.f
IXCOM_FLAGS += -F $(PLDM_VFILELIST)

# VLAN Flags
ifneq ($(RELEASE_WITH_ASSERT), 1)
VLAN_FLAGS = -64 -sv
VLAN_FLAGS += $(addprefix -incdir , $(PLDM_VSRC_DIR))
VLAN_FLAGS += -vtimescale 1ns/1ns
VLAN_FLAGS += $(PLDM_MACRO_FLAGS)
VLAN_FLAGS += -F $(PLDM_VFILELIST)
endif

# SoftWare Compile
PLDM_SIMTOOL = $(shell cds_root xrun)/tools/include
PLDM_IXCOM = $(shell cds_root ixcom)/share/uxe/etc/ixcom
DPILIB_EMU = $(PLDM_BUILD_DIR)/libdpi_emu.so
PLDM_CSRC_DIR = $(abspath ./src/test/csrc/vcs)
PLDM_CXXFILES = $(SIM_CXXFILES) $(shell find $(PLDM_CSRC_DIR) -name "*.cpp")
PLDM_CXXFLAGS = -m64 -c -fPIC -g -std=c++11 -I$(PLDM_IXCOM) -I$(PLDM_SIMTOOL)
PLDM_CXXFLAGS = $(SIM_CXXFLAGS) -I$(PLDM_CSRC_DIR) -DNUM_CORES=$(NUM_CORES)

# XMSIM Flags
XMSIM_FLAGS = --xmsim -64 +xcprof -profile
ifneq ($(RELEASE_WITH_ASSERT), 1)
XMSIM_FLAGS += -sv_lib ${DPILIB_EMU}
endif
XMSIM_FLAGS += $(PLDM_EXTRA_ARGS)
XMSIM_FLAGS += --

$(PLDM_BUILD_DIR):
mkdir -p $(PLDM_BUILD_DIR)

$(PLDM_CC_OBJ_DIR):
mkdir -p $(PLDM_CC_OBJ_DIR)

$(PLDM_VFILELIST):
find $(PLDM_VSRC_DIR) -name "*.v" -or -name "*.sv" >> $(PLDM_VFILELIST)

$(PLDM_CLOCK_SRC): $(PLDM_CLOCK_DEF)
ixclkgen -input $(PLDM_CLOCK_DEF) -output $(PLDM_CLOCK_SRC) -module $(PLDM_CLOCK) -hierarchy "$(PLDM_TB_TOP)."


ifeq ($(RELEASE_WITH_ASSERT), 1)
pldm-build: $(PLDM_BUILD_DIR) $(PLDM_VFILELIST) $(PLDM_CLOCK_SRC)
cd $(PLDM_BUILD_DIR) && \
ixcom $(IXCOM_FLAGS) -l $(PLDM_BUILD_DIR)/ixcom.log
else
pldm-build: $(PLDM_BUILD_DIR) $(PLDM_VFILELIST) $(PLDM_CC_OBJ_DIR)
cd $(PLDM_BUILD_DIR) && \
vlan $(VLAN_FLAGS) -l $(PLDM_BUILD_DIR)/vlan.log && \
ixcom $(IXCOM_FLAGS) -l $(PLDM_BUILD_DIR)/ixcom.log && \
cd $(PLDM_CC_OBJ_DIR) && \
$(CC) $(PLDM_CXXFLAGS) $(PLDM_CXXFILES) && \
$(CC) -o $(DPILIB_EMU) -m64 -shared *.o
endif

pldm-run: $(PLDM_BUILD_DIR)
cd $(PLDM_BUILD_DIR) && \
xeDebug $(XMSIM_FLAGS) -input $(PLDM_SCRIPTS_DIR)/run.tcl -l run-$$(date +%Y%m%d-%H%M%S).log

pldm-debug: $(PLDM_BUILD_DIR)
cd $(PLDM_BUILD_DIR) && \
xeDebug $(XMSIM_FLAGS) -gui -xedebugargs -fsdb -input $(PLDM_SCRIPTS_DIR)/run_debug.tcl -l debug-$$(date +%Y%m%d-%H%M%S).log

pldm-clean:
rm -rf $(PLDM_BUILD_DIR)

0 comments on commit 1f6dd8d

Please sign in to comment.