manarabdelaty | a7929f3 | 2021-04-12 14:12:32 +0200 | [diff] [blame] | 1 | # 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 | |
manarabdelaty | f02cd32 | 2021-09-02 13:59:14 +0200 | [diff] [blame] | 17 | ## PDK |
| 18 | PDK_PATH = $(PDK_ROOT)/sky130A |
| 19 | |
manarabdelaty | a7929f3 | 2021-04-12 14:12:32 +0200 | [diff] [blame] | 20 | ## Caravel Pointers |
manarabdelaty | 340cc4a | 2021-04-20 18:28:22 +0200 | [diff] [blame] | 21 | CARAVEL_ROOT ?= ../../../caravel |
manarabdelaty | c0f458a | 2021-04-19 12:49:21 +0200 | [diff] [blame] | 22 | CARAVEL_PATH ?= $(CARAVEL_ROOT) |
manarabdelaty | a7929f3 | 2021-04-12 14:12:32 +0200 | [diff] [blame] | 23 | CARAVEL_FIRMWARE_PATH = $(CARAVEL_PATH)/verilog/dv/caravel |
| 24 | CARAVEL_VERILOG_PATH = $(CARAVEL_PATH)/verilog |
| 25 | CARAVEL_RTL_PATH = $(CARAVEL_VERILOG_PATH)/rtl |
| 26 | CARAVEL_BEHAVIOURAL_MODELS = $(CARAVEL_VERILOG_PATH)/dv/caravel |
| 27 | |
| 28 | ## User Project Pointers |
| 29 | UPRJ_VERILOG_PATH ?= ../../../verilog |
| 30 | UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl |
| 31 | UPRJ_BEHAVIOURAL_MODELS = ../ |
| 32 | |
| 33 | ## RISCV GCC |
| 34 | GCC_PATH?=/ef/apps/bin |
| 35 | GCC_PREFIX?=riscv32-unknown-elf |
manarabdelaty | a7929f3 | 2021-04-12 14:12:32 +0200 | [diff] [blame] | 36 | |
| 37 | ## Simulation mode: RTL/GL |
manarabdelaty | ee54cee | 2021-09-02 19:14:06 +0200 | [diff] [blame^] | 38 | SIM_DEFINES = -DFUNCTIONAL -DSIM |
manarabdelaty | a7929f3 | 2021-04-12 14:12:32 +0200 | [diff] [blame] | 39 | SIM?=RTL |
| 40 | |
| 41 | .SUFFIXES: |
| 42 | |
| 43 | PATTERN = mprj_stimulus |
| 44 | |
| 45 | all: ${PATTERN:=.vcd} |
| 46 | |
| 47 | hex: ${PATTERN:=.hex} |
| 48 | |
| 49 | %.vvp: %_tb.v %.hex |
| 50 | ifeq ($(SIM),RTL) |
manarabdelaty | ee54cee | 2021-09-02 19:14:06 +0200 | [diff] [blame^] | 51 | iverilog $(SIM_DEFINES) -I $(PDK_PATH) \ |
manarabdelaty | a7929f3 | 2021-04-12 14:12:32 +0200 | [diff] [blame] | 52 | -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \ |
| 53 | -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \ |
| 54 | $< -o $@ |
| 55 | else |
manarabdelaty | ee54cee | 2021-09-02 19:14:06 +0200 | [diff] [blame^] | 56 | iverilog $(SIM_DEFINES) -DGL -I $(PDK_PATH) \ |
manarabdelaty | a7929f3 | 2021-04-12 14:12:32 +0200 | [diff] [blame] | 57 | -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 $@ |
| 60 | endif |
| 61 | |
| 62 | %.vcd: %.vvp |
| 63 | vvp $< |
| 64 | |
manarabdelaty | f02cd32 | 2021-09-02 13:59:14 +0200 | [diff] [blame] | 65 | %.elf: %.c $(CARAVEL_FIRMWARE_PATH)/sections.lds $(CARAVEL_FIRMWARE_PATH)/start.s check-env |
Tim Edwards | f989c64 | 2021-04-15 20:48:24 -0400 | [diff] [blame] | 66 | ${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 $< |
manarabdelaty | a7929f3 | 2021-04-12 14:12:32 +0200 | [diff] [blame] | 67 | |
| 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 | |
manarabdelaty | f02cd32 | 2021-09-02 13:59:14 +0200 | [diff] [blame] | 76 | check-env: |
| 77 | ifndef PDK_ROOT |
| 78 | $(error PDK_ROOT is undefined, please export it before running make) |
| 79 | endif |
| 80 | ifeq (,$(wildcard $(PDK_ROOT)/sky130A)) |
| 81 | $(error $(PDK_ROOT)/sky130A not found, please install pdk before running make) |
| 82 | endif |
| 83 | ifeq (,$(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) |
| 85 | endif |
manarabdelaty | ee54cee | 2021-09-02 19:14:06 +0200 | [diff] [blame^] | 86 | # check for efabless style installation |
| 87 | ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog)) |
| 88 | SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE |
| 89 | endif |
manarabdelaty | f02cd32 | 2021-09-02 13:59:14 +0200 | [diff] [blame] | 90 | |
manarabdelaty | a7929f3 | 2021-04-12 14:12:32 +0200 | [diff] [blame] | 91 | # ---- Clean ---- |
| 92 | |
| 93 | clean: |
| 94 | rm -f *.elf *.hex *.bin *.vvp *.vcd *.log |
| 95 | |
| 96 | .PHONY: clean hex all |