-
Notifications
You must be signed in to change notification settings - Fork 98
Expand file tree
/
Copy pathgalaxsim.mk
More file actions
120 lines (97 loc) · 4.14 KB
/
galaxsim.mk
File metadata and controls
120 lines (97 loc) · 4.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#***************************************************************************************
# Copyright (c) 2025 Beijing Institute of Open Source Chip (BOSC)
# Copyright (c) 2020-2025 Institute of Computing Technology, Chinese Academy of Sciences
# Copyright (c) 2020-2025 X-EPIC Co., Ltd
#
# DiffTest is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
# http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
#
# See the Mulan PSL v2 for more details.
#
# GalaxSim, developed by X-EPIC Technologies, is an event-driven Verilog/SystemVerilog simulator.
#
# GalaxSim Turbo, another innovation from X-EPIC, is a hybrid simulation accelerator that
# combines event-driven and cycle-based methodologies.
#
# FusionDebug, a feature-rich debugger that supports a wide array of simulation debugging techniques.
#
# These 3 tools are available for free trial on the website: https://free.x-epic.com/
#
#***************************************************************************************
RUN_BIN ?= $(DESIGN_DIR)/ready-to-run/copy_and_run.bin
GLX = galaxsim
GLX_TOP = tb_top
GLX_TARGET = $(abspath $(BUILD_DIR)/xsim)
GLX_BUILD_DIR = $(abspath $(BUILD_DIR)/xsim-compile)
GLX_RUN_DIR = $(abspath $(BUILD_DIR)/$(notdir $(RUN_BIN)))
GLX_CSRC_DIR = $(abspath ./src/test/csrc/vcs)
GLX_CONFIG_DIR = $(abspath ./config)
GLX_CXXFILES = $(SIM_CXXFILES) $(shell find $(GLX_CSRC_DIR) -name "*.cpp")
GLX_CXXFLAGS = $(SIM_CXXFLAGS) -I$(GLX_CONFIG_DIR) -I$(GLX_CSRC_DIR)
GLX_LDFLAGS = $(SIM_LDFLAGS)
GLX_VSRC_DIR = $(abspath ./src/test/vsrc/vcs)
GLX_VFILES = $(SIM_VSRC) $(shell find $(GLX_VSRC_DIR) -name "*.v" -or -name "*.sv")
GLX_FLAGS = $(SIM_VFLAGS)
GLX_FLAGS += -timescale=1ns/1ns -debug_access+all
GLX_FLAGS += -j8
GLX_FLAGS += +define+GLX
ifeq ($(ENABLE_XPROP),1)
GLX_FLAGS += -xprop
else
# randomize all undefined signals (instead of using X)
# GLX_FLAGS += -initreg
endif
GLX_CXXFLAGS += -std=c++11
GLX_FLAGS += -o $(GLX_TARGET)
ifneq ($(ENABLE_XPROP),1)
GLX_FLAGS += +define+RANDOMIZE_GARBAGE_ASSIGN
GLX_FLAGS += +define+RANDOMIZE_INVALID_ASSIGN
GLX_FLAGS += +define+RANDOMIZE_MEM_INIT
GLX_FLAGS += +define+RANDOMIZE_REG_INIT
endif
# manually set RANDOMIZE_DELAY to avoid GLX from incorrect random initialize
# NOTE: RANDOMIZE_DELAY must NOT be rounded to 0
GLX_FLAGS += +define+RANDOMIZE_DELAY=1
# SRAM lib defines
GLX_FLAGS += +define+UNIT_DELAY +define+no_warning
# C++ flags
GLX_FLAGS += -XCFLAGS "$(GLX_CXXFLAGS)" -XLDFLAGS "$(GLX_LDFLAGS)"
# search build for other missing verilog files
GLX_FLAGS += -y $(RTL_DIR) +libext+.v +libext+.sv
# search generated-src for verilog included files
GLX_FLAGS += +incdir+$(GEN_VSRC_DIR)
#glaxism turbo mode
ifeq ($(GLX_TURBO),1)
GLX_CXXFLAGS += -DVERILATOR_4_210
GLX_FLAGS += -turbo_mode +define+VERILATOR_5 +define+VERILATOR=1 +define+PRINTF_COND=1 +define+RANDOMIZE_DELAY=0
endif
$(GLX_TARGET): $(SIM_TOP_V) $(GLX_CXXFILES) $(GLX_VFILES)
$(GLX) $(GLX_USER_COMP_OPTS) $(GLX_FLAGS) $(SIM_TOP_V) $(GLX_CXXFILES) $(GLX_VFILES)
xsim: $(GLX_TARGET)
RUN_OPTS := +workload=$(RUN_BIN)
#glaxism turbo threads
ifneq ($(GLX_TURBO_THREADS),0)
RUN_OPTS += -turbo_threads=$(GLX_TURBO_THREADS)
endif
ifeq ($(NO_DIFF),1)
RUN_OPTS += +no-diff
endif
RUN_OPTS += -assert finish_maxfail=30 -assert maxfail=100
xsim-run:
$(shell if [ ! -e $(GLX_RUN_DIR) ]; then mkdir -p $(GLX_RUN_DIR); fi)
touch $(GLX_RUN_DIR)/sim.log
$(shell if [ -e $(GLX_RUN_DIR)/xsim ]; then rm -f $(GLX_RUN_DIR)/xsim; fi)
$(shell if [ -e $(GLX_RUN_DIR)/xsim.data ]; then rm -rf $(GLX_RUN_DIR)/xsim.data; fi)
$(shell if [ -e $(GLX_RUN_DIR)/xsim.src ]; then rm -rf $(GLX_RUN_DIR)/xsim.src; fi)
cp $(GLX_TARGET) $(GLX_RUN_DIR)/xsim
cp -r $(BUILD_DIR)/xsim.data $(GLX_RUN_DIR)/xsim.data
cp -r $(BUILD_DIR)/xsim.src $(GLX_RUN_DIR)/xsim.src
cd $(GLX_RUN_DIR) && (./xsim $(GLX_USER_RUN_OPTS) $(RUN_OPTS) | tee sim.log)
glx-clean:
rm -rf xsim xsim.data xsim.src $(GLX_BUILD_DIR)