mirror of
https://github.com/openhwgroup/cvw
synced 2025-01-23 13:04:28 +00:00
102 lines
3.3 KiB
Makefile
102 lines
3.3 KiB
Makefile
dst := IP
|
|
|
|
all: ArtyA7
|
|
|
|
.PHONY: ArtyA7 vcu118 vcu108
|
|
|
|
ArtyA7: export XILINX_PART := xc7a100tcsg324-1
|
|
ArtyA7: export XILINX_BOARD := digilentinc.com:arty-a7-100:part0:1.1
|
|
ArtyA7: export board := ArtyA7
|
|
ArtyA7: export SYSTEMCLOCK := 20000000
|
|
ArtyA7: export MAXSDCCLOCK := 5000000
|
|
ArtyA7: FPGA_Arty
|
|
|
|
vcu118: export XILINX_PART := xcvu9p-flga2104-2L-e
|
|
vcu118: export XILINX_BOARD := xilinx.com:vcu118:part0:2.4
|
|
vcu118: export board := vcu118
|
|
vcu118: export SYSTEMCLOCK := 71000000
|
|
vcu118: export MAXSDCCLOCK := 1000000
|
|
vcu118: FPGA_VCU
|
|
|
|
vcu108: export XILINX_PART := xcvu095-ffva2104-2-e
|
|
vcu108: export XILINX_BOARD := xilinx.com:vcu108:part0:1.7
|
|
vcu108: export board := vcu108
|
|
vcu108: export SYSTEMCLOCK := 50000000
|
|
vcu108: export MAXSDCCLOCK := 12500000
|
|
vcu108: FPGA_VCU
|
|
|
|
# variables computed from config
|
|
EXT_MEM_BASE = $(shell grep 'EXT_MEM_BASE' ../../config/deriv/fpga$(board)/config.vh | sed 's/.*=.*h\([[:alnum:]]*\);/0x\1/g')
|
|
|
|
EXT_MEM_RANGE = $(shell grep 'EXT_MEM_RANGE' ../../config/deriv/fpga$(board)/config.vh | sed 's/.*=.*h\([[:alnum:]]*\);/\1/g' | sed 's/\(.*\)/base=16;\1+1/g' | bc | sed 's/\(.*\)/0x\1/g')
|
|
|
|
|
|
.PHONY: FPGA_Arty FPGA_VCU
|
|
FPGA_Arty: PreProcessFiles IP_Arty zsbl
|
|
vivado -mode tcl -source wally.tcl 2>&1 | tee wally.log
|
|
FPGA_VCU: PreProcessFiles IP_VCU zsbl
|
|
vivado -mode tcl -source wally.tcl 2>&1 | tee wally.log
|
|
|
|
# Generate IP Blocks
|
|
.PHONY: IP_Arty IP_VCU
|
|
IP_VCU: $(dst)/sysrst.log \
|
|
MEM_VCU \
|
|
$(dst)/clkconverter.log \
|
|
$(dst)/ahbaxibridge.log
|
|
IP_Arty: $(dst)/sysrst.log \
|
|
MEM_Arty \
|
|
$(dst)/mmcm.log \
|
|
$(dst)/clkconverter.log \
|
|
$(dst)/ahbaxibridge.log
|
|
|
|
# Generate Memory IP Blocks
|
|
.PHONY: MEM_VCU MEM_Arty
|
|
MEM_VCU:
|
|
$(MAKE) $(dst)/ddr4-$(board).log
|
|
MEM_Arty:
|
|
$(MAKE) $(dst)/ddr3-$(board).log
|
|
|
|
# Copy files and make necessary modifications
|
|
.PHONY: PreProcessFiles
|
|
PreProcessFiles:
|
|
$(MAKE) -C ../../sim deriv
|
|
rm -rf ../src/CopiedFiles_do_not_add_to_repo/
|
|
cp -r ../../src/ ../src/CopiedFiles_do_not_add_to_repo/
|
|
cp -r ../../addins/verilog-ethernet/*/*.sv ../src/CopiedFiles_do_not_add_to_repo/rvvi
|
|
cp -r ../../addins/verilog-ethernet/*/*/*/*.sv ../src/CopiedFiles_do_not_add_to_repo/rvvi
|
|
mkdir ../src/CopiedFiles_do_not_add_to_repo/config/
|
|
cp ../../config/deriv/fpga$(board)/config.vh ../src/CopiedFiles_do_not_add_to_repo/config/
|
|
./insert_debug_comment.sh
|
|
# This line allows the Bootloader to be loaded in a Block RAM on the FPGA
|
|
sed -i "s/bit \[DATA_WIDTH-1:0\].*ROM.*/(\* rom_style=\"block\" \*) &/g" ../src/CopiedFiles_do_not_add_to_repo/generic/mem/rom1p1r.sv
|
|
sed -i 's/$$WALLY/\.\.\/\.\.\/\.\.\//g' ../src/CopiedFiles_do_not_add_to_repo/generic/mem/rom1p1r.sv
|
|
sed -i 's/$$WALLY/\.\.\/\.\.\/\.\.\//g' ../src/CopiedFiles_do_not_add_to_repo/generic/mem/ram1p1rwbe.sv
|
|
|
|
# build the Zero stage boot loader (ZSBL)
|
|
.PHONY: zsbl
|
|
zsbl:
|
|
$(MAKE) -C ../zsbl clean
|
|
SYSTEMCLOCK=$(SYSTEMCLOCK) EXT_MEM_BASE=$(EXT_MEM_BASE) EXT_MEM_RANGE=$(EXT_MEM_RANGE) $(MAKE) -C ../zsbl
|
|
|
|
# Generate Individual IP Blocks
|
|
$(dst)/%.log: %.tcl
|
|
mkdir -p IP
|
|
cd IP;\
|
|
vivado -mode batch -source ../$*.tcl | tee $*.log
|
|
|
|
# Clean
|
|
.PHONY: cleanIP cleanLogs cleanFPGA cleanAll
|
|
cleanIP:
|
|
rm -rf IP
|
|
cleanLogs:
|
|
rm -rf *.jou *.log
|
|
cleanFPGA:
|
|
rm -rf WallyFPGA.* reports sim .Xil
|
|
cleanAll: cleanIP cleanLogs cleanFPGA
|
|
|
|
# Aliases
|
|
.PHONY: arty artya7 VCU118 VCU108
|
|
arty artya7: ArtyA7
|
|
VCU118: vcu118
|
|
VCU108: vcu108
|