blob: 3a73b997f14ebde920620c2e20ff382b986a4c7d [file] [log] [blame]
manarabdelatya7929f32021-04-12 14:12:32 +02001# SPDX-FileCopyrightText: 2020 Efabless Corporation
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14#
15# SPDX-License-Identifier: Apache-2.0
16
manarabdelatyf02cd322021-09-02 13:59:14 +020017## PDK
18PDK_PATH = $(PDK_ROOT)/sky130A
19
manarabdelatya7929f32021-04-12 14:12:32 +020020## Caravel Pointers
manarabdelaty340cc4a2021-04-20 18:28:22 +020021CARAVEL_ROOT ?= ../../../caravel
manarabdelatyc0f458a2021-04-19 12:49:21 +020022CARAVEL_PATH ?= $(CARAVEL_ROOT)
manarabdelatya7929f32021-04-12 14:12:32 +020023CARAVEL_FIRMWARE_PATH = $(CARAVEL_PATH)/verilog/dv/caravel
24CARAVEL_VERILOG_PATH = $(CARAVEL_PATH)/verilog
25CARAVEL_RTL_PATH = $(CARAVEL_VERILOG_PATH)/rtl
26CARAVEL_BEHAVIOURAL_MODELS = $(CARAVEL_VERILOG_PATH)/dv/caravel
27
28## User Project Pointers
29UPRJ_VERILOG_PATH ?= ../../../verilog
30UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl
31UPRJ_BEHAVIOURAL_MODELS = ../
32
33## RISCV GCC
34GCC_PATH?=/ef/apps/bin
35GCC_PREFIX?=riscv32-unknown-elf
manarabdelatya7929f32021-04-12 14:12:32 +020036
37## Simulation mode: RTL/GL
manarabdelatyee54cee2021-09-02 19:14:06 +020038SIM_DEFINES = -DFUNCTIONAL -DSIM
manarabdelatya7929f32021-04-12 14:12:32 +020039SIM?=RTL
40
41.SUFFIXES:
42
43PATTERN = mprj_stimulus
44
45all: ${PATTERN:=.vcd}
46
47hex: ${PATTERN:=.hex}
48
49%.vvp: %_tb.v %.hex
50ifeq ($(SIM),RTL)
manarabdelatyee54cee2021-09-02 19:14:06 +020051 iverilog $(SIM_DEFINES) -I $(PDK_PATH) \
manarabdelatya7929f32021-04-12 14:12:32 +020052 -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
53 -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \
54 $< -o $@
55else
manarabdelatyee54cee2021-09-02 19:14:06 +020056 iverilog $(SIM_DEFINES) -DGL -I $(PDK_PATH) \
manarabdelatya7929f32021-04-12 14:12:32 +020057 -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \
58 -I $(UPRJ_BEHAVIOURAL_MODELS) -I$(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
59 $< -o $@
60endif
61
62%.vcd: %.vvp
63 vvp $<
64
manarabdelatyf02cd322021-09-02 13:59:14 +020065%.elf: %.c $(CARAVEL_FIRMWARE_PATH)/sections.lds $(CARAVEL_FIRMWARE_PATH)/start.s check-env
Tim Edwardsf989c642021-04-15 20:48:24 -040066 ${GCC_PATH}/${GCC_PREFIX}-gcc -I $(CARAVEL_PATH) -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(CARAVEL_FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -o $@ $(CARAVEL_FIRMWARE_PATH)/start.s $<
manarabdelatya7929f32021-04-12 14:12:32 +020067
68%.hex: %.elf
69 ${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@
70 # to fix flash base address
71 sed -i 's/@10000000/@00000000/g' $@
72
73%.bin: %.elf
74 ${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@
75
manarabdelatyf02cd322021-09-02 13:59:14 +020076check-env:
77ifndef PDK_ROOT
78 $(error PDK_ROOT is undefined, please export it before running make)
79endif
80ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
81 $(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
82endif
83ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
84 $(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
85endif
manarabdelatyee54cee2021-09-02 19:14:06 +020086# check for efabless style installation
87ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
88SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
89endif
manarabdelatyf02cd322021-09-02 13:59:14 +020090
manarabdelatya7929f32021-04-12 14:12:32 +020091# ---- Clean ----
92
93clean:
94 rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
95
96.PHONY: clean hex all