manarabdelaty | 69bd326 | 2021-04-07 15:58:03 +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 | |
| 17 | ## Caravel Pointers |
manarabdelaty | 8dbabc1 | 2021-04-16 21:53:57 +0200 | [diff] [blame] | 18 | # Path to caravel from user project root |
manarabdelaty | eac56e8 | 2021-04-16 22:51:06 +0200 | [diff] [blame^] | 19 | CARAVEL_ROOT ?= caravel |
| 20 | CARAVEL_PATH ?= ../../../$(CARAVEL_ROOT) |
manarabdelaty | 69bd326 | 2021-04-07 15:58:03 +0200 | [diff] [blame] | 21 | CARAVEL_FIRMWARE_PATH = $(CARAVEL_PATH)/verilog/dv/caravel |
| 22 | CARAVEL_VERILOG_PATH = $(CARAVEL_PATH)/verilog |
| 23 | CARAVEL_RTL_PATH = $(CARAVEL_VERILOG_PATH)/rtl |
manarabdelaty | 69bd326 | 2021-04-07 15:58:03 +0200 | [diff] [blame] | 24 | CARAVEL_BEHAVIOURAL_MODELS = $(CARAVEL_VERILOG_PATH)/dv/caravel |
| 25 | |
| 26 | ## User Project Pointers |
| 27 | UPRJ_VERILOG_PATH ?= ../../../verilog |
| 28 | UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl |
manarabdelaty | 69bd326 | 2021-04-07 15:58:03 +0200 | [diff] [blame] | 29 | UPRJ_BEHAVIOURAL_MODELS = ../ |
| 30 | |
| 31 | ## RISCV GCC |
| 32 | GCC_PATH?=/ef/apps/bin |
| 33 | GCC_PREFIX?=riscv32-unknown-elf |
| 34 | PDK_PATH?=/ef/tech/SW/sky130A |
| 35 | |
| 36 | ## Simulation mode: RTL/GL |
| 37 | SIM?=RTL |
| 38 | |
| 39 | .SUFFIXES: |
| 40 | |
| 41 | PATTERN = la_test1 |
| 42 | |
| 43 | all: ${PATTERN:=.vcd} |
| 44 | |
| 45 | hex: ${PATTERN:=.hex} |
| 46 | |
| 47 | %.vvp: %_tb.v %.hex |
| 48 | ifeq ($(SIM),RTL) |
| 49 | iverilog -DFUNCTIONAL -DSIM -I $(PDK_PATH) \ |
| 50 | -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \ |
| 51 | -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \ |
| 52 | $< -o $@ |
| 53 | else |
manarabdelaty | a63e2e6 | 2021-04-08 20:32:40 +0200 | [diff] [blame] | 54 | iverilog -DFUNCTIONAL -DSIM -DGL -I $(PDK_PATH) \ |
| 55 | -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \ |
| 56 | -I $(UPRJ_BEHAVIOURAL_MODELS) -I$(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \ |
manarabdelaty | 69bd326 | 2021-04-07 15:58:03 +0200 | [diff] [blame] | 57 | $< -o $@ |
| 58 | endif |
| 59 | |
| 60 | %.vcd: %.vvp |
| 61 | vvp $< |
| 62 | |
| 63 | %.elf: %.c $(CARAVEL_FIRMWARE_PATH)/sections.lds $(CARAVEL_FIRMWARE_PATH)/start.s |
manarabdelaty | 496112a | 2021-04-16 20:53:54 +0200 | [diff] [blame] | 64 | ${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 | 69bd326 | 2021-04-07 15:58:03 +0200 | [diff] [blame] | 65 | |
| 66 | %.hex: %.elf |
| 67 | ${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@ |
| 68 | # to fix flash base address |
| 69 | sed -i 's/@10000000/@00000000/g' $@ |
| 70 | |
| 71 | %.bin: %.elf |
| 72 | ${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@ |
| 73 | |
| 74 | # ---- Clean ---- |
| 75 | |
| 76 | clean: |
| 77 | rm -f *.elf *.hex *.bin *.vvp *.vcd *.log |
| 78 | |
| 79 | .PHONY: clean hex all |