~ruther/verilog-riscv-semestral-project

verilog-riscv-semestral-project/Makefile -rw-r--r-- 2.6 KiB
79c7be5c — Rutherther chore: remove unnecessary executable flags 1 year, 3 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
MODULE ?= tb_control_unit

PROGRAM ?= gcd
MEMORY_LOAD ?= in/default_memory_in.dat
MEMORY_WRITE ?= out/program_$(PROGRAM)_memory_out.dat

## Verilog part
.PHONY: show run_program

show: ./waves/$(MODULE).vcd
	gtkwave ./waves/$(MODULE).vcd

./waves/cpu_program_%.vcd: ./obj_dir/Vtb_cpu_program_% ./waves
	$<

./waves/%.vcd: ./obj_dir/V% ./waves
	$<

./waves:
	mkdir -p $@

./out:
	mkdir -p $@

# These are runtime dependencies, not build time dependencies.
.PRECIOUS: ./programs/bin/%.dat ./programs/bin/%.bin

run_program: ./programs/bin/$(PROGRAM).dat testbench/tb_cpu_program.sv src/*.sv src/stages/*.sv ./out
	verilator --binary --trace \
		-GCPU_PROGRAM_PATH="\"./programs/bin/$(PROGRAM).dat\"" \
		-GTRACE_FILE_PATH="\"out/program_$(notdir $(basename $<)).vcd\"" \
		-GMEMORY_LOAD_FILE=1 \
		-GMEMORY_LOAD_FILE_PATH="\"$(MEMORY_LOAD)\"" \
		-GMEMORY_WRITE_FILE=1 \
		-GMEMORY_WRITE_FILE_PATH="\"$(MEMORY_WRITE)\"" \
		--trace-max-array 512 \
		src/cpu_types.sv \
		src/instruction_decoder.sv \
		src/control_unit.sv \
		src/alu.sv \
		src/register_file.sv \
		src/program_counter.sv \
		src/forwarder.sv \
        src/stages/*.sv \
		src/ram.sv \
		src/cpu.sv \
		src/file_program_memory.sv \
		testbench/tb_cpu_program.sv \
		-o Vtb_cpu_program_$(notdir $(basename $<)) \
		--top tb_cpu_program
	./obj_dir/Vtb_cpu_program_$(notdir $(basename $<))

./obj_dir/Vtb_%: testbench/tb_%.sv src/*.sv src/stages/*.sv
	verilator --binary --trace \
		--trace-max-array 512 \
		src/cpu_types.sv \
		src/instruction_decoder.sv \
		src/control_unit.sv \
		src/alu.sv \
		src/register_file.sv \
		src/program_counter.sv \
		src/forwarder.sv \
        src/stages/*.sv \
		src/ram.sv \
		src/cpu.sv \
		src/file_program_memory.sv \
		$< \
        --top $(notdir $(basename $<))

## C part
CFLAGS=-march=rv32i -mabi=ilp32 -O0 -c
ASFLAGS=-march=rv32i -mabi=ilp32
LDFLAGS=-Tprograms/link.ld

CC=riscv32-none-elf-gcc
AS=riscv32-none-elf-as
LD=riscv32-none-elf-ld
OBJDUMP=riscv32-none-elf-objdump
OBJCOPY=riscv32-none-elf-objcopy

./programs/bin:
	mkdir -p $@

./programs/bin/start.o: ./programs/start.S ./programs/bin
	$(AS) $(ASFLAGS) $< -o $@

./programs/bin/%.o: ./programs/%.c ./programs/bin
	$(CC) $(CFLAGS) $< -o $@

./programs/bin/%.elf: ./programs/bin/start.o ./programs/bin/%.o
	$(LD) $(LDFLAGS) $^ -o $@

./programs/bin/%.bin: ./programs/bin/%.elf
	$(OBJCOPY) $< -O binary $@

./programs/bin/%.dat: ./programs/bin/%.bin
	od $< -t x4 -A n -v > $@

.PHONY: objdump
objdump: ./programs/bin/$(PROGRAM).elf
	$(OBJDUMP) -d -M no-aliases $<

.PHONY: clean
clean:
	rm -rf ./waves
	rm -rf ./programs/bin
	rm -rf ./obj_dir
	rm -rf waveform.vcd
	rm -rf tests/out
	make -C tests/official clean
Do not follow this link