blob: 97726eecb25f66f8c036fe7c00c842ace8cab044 [file] [log] [blame]
dineshannayya62e46322022-02-15 14:19:56 +05301# 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
dineshannayya62e46322022-02-15 14:19:56 +053017
dineshannayyad8a093b2022-03-26 08:32:19 +053018# ---- Include Partitioned Makefiles ----
dineshannayya62e46322022-02-15 14:19:56 +053019
dineshannayyad8a093b2022-03-26 08:32:19 +053020CONFIG = caravel_user_project
21
22#######################################################################
23## Caravel Verilog for Integration Tests
24#######################################################################
dineshannayya62e46322022-02-15 14:19:56 +053025
dineshannayyad8a093b2022-03-26 08:32:19 +053026DESIGNS?=../../..
27
28export USER_PROJECT_VERILOG ?= $(DESIGNS)/verilog
dineshannayya62e46322022-02-15 14:19:56 +053029## YIFIVE FIRMWARE
dineshannayyad8a093b2022-03-26 08:32:19 +053030YIFIVE_FIRMWARE_PATH = $(USER_PROJECT_VERILOG)/dv/firmware
dineshannayya62e46322022-02-15 14:19:56 +053031GCC64_PREFIX?=riscv64-unknown-elf
32
dineshannayya62e46322022-02-15 14:19:56 +053033
34## Simulation mode: RTL/GL
35SIM?=RTL
36DUMP?=OFF
dineshannayyae853c362022-02-22 21:24:03 +053037RISC_CORE?=0
dineshannayya62e46322022-02-15 14:19:56 +053038
dineshannayyad8a093b2022-03-26 08:32:19 +053039### To Enable IVERILOG FST DUMP
40export IVERILOG_DUMPER = fst
41
42
dineshannayya62e46322022-02-15 14:19:56 +053043.SUFFIXES:
44
45PATTERN = user_uart
46
47all: ${PATTERN:=.vcd}
48
dineshannayya62e46322022-02-15 14:19:56 +053049
50vvp: ${PATTERN:=.vvp}
51
52%.vvp: %_tb.v
53 ${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=0 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\" -c -I./ -I$(YIFIVE_FIRMWARE_PATH) user_uart.c -o user_uart.o
54 ${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=0 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\" -D__ASSEMBLY__=1 -c -I./ -I$(YIFIVE_FIRMWARE_PATH) $(YIFIVE_FIRMWARE_PATH)/crt.S -o crt.o
55 ${GCC64_PREFIX}-gcc -o user_uart.elf -T $(YIFIVE_FIRMWARE_PATH)/link.ld user_uart.o crt.o -nostartfiles -nostdlib -lc -lgcc -march=rv32imc -mabi=ilp32 -N
56 ${GCC64_PREFIX}-objcopy -O verilog user_uart.elf user_uart.hex
57 ${GCC64_PREFIX}-objdump -D user_uart.elf > user_uart.dump
58 rm crt.o user_uart.o
59ifeq ($(SIM),RTL)
60 ifeq ($(DUMP),OFF)
dineshannayyad8a093b2022-03-26 08:32:19 +053061 iverilog -g2012 -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
62 -f$(USER_PROJECT_VERILOG)/includes/includes.rtl.$(CONFIG) \
dineshannayya62e46322022-02-15 14:19:56 +053063 $< -o $@
64 else
dineshannayyad8a093b2022-03-26 08:32:19 +053065 iverilog -g2012 -DWFDUMP -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
66 -f$(USER_PROJECT_VERILOG)/includes/includes.rtl.$(CONFIG) \
dineshannayya62e46322022-02-15 14:19:56 +053067 $< -o $@
68 endif
69else
dineshannayyad8a093b2022-03-26 08:32:19 +053070 iverilog -g2012 -DFUNCTIONAL -DSIM -DGL -I $(PDK_PATH) \
71 -f$(USER_PROJECT_VERILOG)/includes/includes.rtl.$(CONFIG) \
dineshannayya62e46322022-02-15 14:19:56 +053072 $< -o $@
73endif
74
75%.vcd: %.vvp
dineshannayyae853c362022-02-22 21:24:03 +053076 vvp $< +risc_core_id=$(RISC_CORE)
dineshannayya62e46322022-02-15 14:19:56 +053077
dineshannayya62e46322022-02-15 14:19:56 +053078
79# ---- Clean ----
80
81clean:
82 rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.dump
83
84.PHONY: clean hex all