-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
104 lines (81 loc) · 3.9 KB
/
Makefile
File metadata and controls
104 lines (81 loc) · 3.9 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
#
# Copyright (C) 2024 Vedad Hadžić
#
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
SV2V = sv2v
YOSYS = yosys
VERILATOR = verilator
CXX = g++
SV_DIR = rtl
V_DIR = gen
TB_DIR = tb
CPP_DIR = cpp
OBJ_DIR = obj
SYN_DIR = syn
VERILATOR_FLAGS = --Mdir $(OBJ_DIR) -CFLAGS -I$(shell pwd)/$(CPP_DIR) -cc -sv -I$(SV_DIR) --exe --build -Wall
VERILATOR_SYN_FLAGS = --Mdir $(OBJ_DIR) -CFLAGS -I$(shell pwd)/$(CPP_DIR) -cc --exe --build -Wall -Wno-unused -Wno-declfilename -Wno-unoptflat -Wno-undriven -O0
YOSYS_LOG_SUFFIX = __log.txt
SV_PACKAGE = $(SV_DIR)/aes128_package.sv
SOURCES = $(wildcard $(SV_DIR)/*.sv)
SV_FILES = $(filter-out $(SV_PACKAGE), $(SOURCES))
V_FILES = $(patsubst $(SV_DIR)/%.sv, $(V_DIR)/%.v,$(SV_FILES))
CPP_FILES = $(wildcard $(CPP_DIR)/*.cpp)
SIM_FILES = $(patsubst $(SV_DIR)/%.sv, $(OBJ_DIR)/V%,$(SV_FILES))
HPC1 = 0
HPC3 = 1
NEW_DESIGN = 0
CANRIGHT_DESIGN = 1
TOP_MODULE = masked_3stage_bv8_inv
NUM_SHARES ?= 2
DEFAULT_LATENCY = 3
LATENCY ?= $(DEFAULT_LATENCY)
DEFAULT_STAGE_TYPE = HPC3
STAGE_TYPE ?= $(DEFAULT_STAGE_TYPE)
DEFAULT_INVERTER_TYPE = NEW_DESIGN
INVERTER_TYPE ?= $(DEFAULT_INVERTER_TYPE)
LIBERTY_FILE = stdcells.lib
.PHONY = all sv2v clean test_% syn_%
all: $(OUTPUT_FILE) $(SIM_FILES)
$(V_DIR) $(OBJ_DIR) $(SYN_DIR):
mkdir -p $@
# .PRECIOUS: $(V_DIR)/%.v
$(V_DIR)/%.v: $(SV_DIR)/%.sv $(SV_FILES) $(V_DIR)
$(SV2V) -I $(SV_DIR) $< > $@
$(OBJ_DIR)/Vmasked%: VERILATOR_DEFINES = -pvalue+NUM_SHARES=$(NUM_SHARES) -CFLAGS -DNUM_SHARES=$(NUM_SHARES)
$(OBJ_DIR)/Vmasked_aes%: VERILATOR_DEFINES += -pvalue+LATENCY=$(LATENCY) -CFLAGS -DLATENCY=$(LATENCY)
$(OBJ_DIR)/Vmasked_aes%: VERILATOR_DEFINES += -pvalue+CHOSEN_STAGE_TYPE=$(value $(STAGE_TYPE)) # -CFLAGS -DSTAGE_TYPE=$(STAGE_TYPE)
$(OBJ_DIR)/Vmasked_aes%: VERILATOR_DEFINES += -pvalue+CHOSEN_INVERTER_TYPE=$(value $(INVERTER_TYPE)) # -CFLAGS -DINVERTER_TYPE=$(INVERTER_TYPE)
$(OBJ_DIR)/Vsyn_masked%: VERILATOR_DEFINES = -CFLAGS -DNUM_SHARES=$(NUM_SHARES)
$(OBJ_DIR)/Vsyn_masked_aes%: VERILATOR_DEFINES += -CFLAGS -DLATENCY=$(LATENCY)
$(OBJ_DIR)/V%: $(SV_DIR)/%.sv $(TB_DIR)/tb_%.cpp $(CPP_FILES)
$(VERILATOR) $(VERILATOR_DEFINES) $(VERILATOR_FLAGS) $^ --top-module $$(basename -s .sv $<)
syn_masked%: YOSYS_DEFINES = NUM_SHARES=$(NUM_SHARES)
syn_masked_aes_sbox%: YOSYS_DEFINES += LATENCY=$(LATENCY)
syn_masked_aes_sbox%: YOSYS_DEFINES += CHOSEN_STAGE_TYPE=$(value $(STAGE_TYPE))
syn_masked_aes_sbox%: YOSYS_DEFINES += CHOSEN_INVERTER_TYPE=$(value $(INVERTER_TYPE))
syn_masked%: YOSYS_LOG_SUFFIX = $(NUM_SHARES)_log.txt
syn_%: $(V_DIR)/%.v $(SYN_DIR)
cp $< $(V_DIR)/tmp_$$(basename $<)
$(YOSYS_DEFINES) IN_FILES="$<" TOP_MODULE="$$(basename -s .v $<)" OUT_BASE="$(SYN_DIR)/$@" LIBERTY="$(LIBERTY_FILE)" $(YOSYS) synth.tcl -t -l "$(SYN_DIR)/$@_$(YOSYS_LOG_SUFFIX)"
$(OBJ_DIR)/Vsyn_masked%: syn_masked% $(TB_DIR)/tb_masked%.cpp $(CPP_FILES)
$(VERILATOR) $(VERILATOR_DEFINES) $(VERILATOR_SYN_FLAGS) $(SYN_DIR)/$<_$(NUM_SHARES)_pre.v $(wordlist 2,$(words $^),$^) --top-module $$(echo $< | sed 's/^syn_//') -o $(shell pwd)/$@
# $(SYN_DIR)/syn_%_pre.v $(SYN_DIR)/syn_%_post.v $(SYN_DIR)/syn_%_pre.json $(SYN_DIR)/syn_%_post.json $(SYN_DIR)/syn_%_stats.json: syn_%
show_masked%: $(SYN_DIR)/syn_masked%_$(NUM_SHARES)_pre.json
IN_FILE="$<" $(YOSYS) show.tcl -t
show_%: $(SYN_DIR)/syn_%__pre.json
IN_FILE="$<" $(YOSYS) show.tcl -t
clean:
rm -rf $(V_DIR) $(OBJ_DIR) $(SYN_DIR)