add first cut of verilator simulation, over from microwatt
[ls2.git] / Makefile
1 CFLAGS=-O3 -Wall
2 CXXFLAGS=-g -g
3
4 YOSYS ?= yosys
5 NEXTPNR ?= nextpnr-ecp5
6 ECPPACK ?= ecppack
7 OPENOCD ?= openocd
8
9 all = ls2_verilator
10
11 all: $(all)
12
13 uart_files = $(wildcard ../uart16550/rtl/verilog/*.v)
14
15 # Verilator sim
16 VERILATOR_ROOT=$(shell verilator -getenv VERILATOR_ROOT 2>/dev/null)
17 ifeq (, $(VERILATOR_ROOT))
18 $(soc_dram_tbs):
19 $(error "Verilator is required to make this target !")
20 else
21
22 VERILATOR_CFLAGS=-O3
23 VERILATOR_FLAGS=-O3
24
25 endif
26
27 # Hello world
28 MEMORY_SIZE=8192
29 RAM_INIT_FILE=hello_world/hello_world.hex
30 SIM_MAIN_BRAM=false
31
32 # Micropython
33 #MEMORY_SIZE=393216
34 #RAM_INIT_FILE=micropython/firmware.hex
35
36 # Linux
37 #MEMORY_SIZE=536870912
38 #RAM_INIT_FILE=dtbImage.microwatt.hex
39 #SIM_MAIN_BRAM=false
40 SIM_BRAM_CHAINBOOT=6291456 # 0x600000
41
42 FPGA_TARGET ?= VERILATOR
43
44 ifeq ($(FPGA_TARGET), verilator)
45 RESET_LOW=true
46 CLK_INPUT=50000000
47 CLK_FREQUENCY=50000000
48 clkgen=fpga/clk_gen_bypass.vhd
49 endif
50
51 ls2.v: src/ls2.py
52 python3 src/ls2.py sim
53
54 # Need to investigate why yosys is hitting verilator warnings,
55 # and eventually turn on -Wall
56 microwatt-verilator: ls2.v \
57 verilator/microwatt-verilator.cpp \
58 verilator/uart-verilator.c
59 verilator -O3 -CFLAGS "-DCLK_FREQUENCY=$(CLK_FREQUENCY) -I../verilator" \
60 --assert \
61 --top-module top \
62 --cc ls2.v \
63 --exe verilator/microwatt-verilator.cpp verilator/uart-verilator.c \
64 -o $@ -I../uart16550/rtl/verilog \
65 -Wno-fatal -Wno-CASEOVERLAP -Wno-UNOPTFLAT \
66 -Wno-BLKANDNBLK \
67 -Wno-COMBDLY \
68 -Wno-CASEINCOMPLETE \
69 -Wno-WIDTH \
70 --savable \
71 --trace \
72 # --unroll-count 256 \
73 # --output-split 5000 \
74 # --output-split-cfuncs 500 \
75 # --output-split-ctrace 500 \
76 make -C obj_dir -f Vtop.mk
77 @cp -f obj_dir/microwatt-verilator microwatt-verilator
78
79 clean:
80 rm -fr obj_dir microwatt-verilator ls2.v
81
82 .PHONY: all clean