mirror of
https://github.com/lcbcFoo/ReonV.git
synced 2025-04-18 18:44:43 -04:00
1852 lines
63 KiB
Makefile
1852 lines
63 KiB
Makefile
VER=$(VNAME)2017.2
|
|
BID=4194
|
|
CC=gcc
|
|
SED=sed
|
|
|
|
ASICLIBS = ihp25 sgb25vrh ut025crh virage rh_lib18t rh_lib18t_io2 rh_lib13t\
|
|
atc18 artisan umc18 virage90 tsmc90 dare nextreme atc18rha_cell smic13 \
|
|
tm65gplus st65lp st65gp cmos9sf nextreme2 gf65g saed32
|
|
FPGALIBS = apa proasic3 axcelerator ec fusion unisim virtex virtex5 secureip unimacro altera altera_mf \
|
|
stratixii eclipsee cycloneiii stratixiii synplify simprim stratixiv \
|
|
proasic3e proasic3l smartfusion2 rtg4
|
|
|
|
ifeq ("$(GRLIB_CONFIG)","")
|
|
GRLIB_CONFIG = dummy
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","")
|
|
GRLIB_SIMULATOR = ModelSim
|
|
endif
|
|
|
|
# Select LEON3 version
|
|
# The switch between gaisler/leon3 and gaisler/leon3pkgv1v2 is handled
|
|
# by a hack in the script generation (see if (test $$l = "leon3") ..)
|
|
ifeq ("$(GRLIB_LEON3_VERSION)","")
|
|
GRLIB_LEON3_VERSION = 3
|
|
else
|
|
ifeq ("$(GRLIB_LEON3_VERSION)","2")
|
|
DIRSKIP += leon3v3 grfpc grlfpc
|
|
DIRADD += leon3v1 leon3ftv2 grfpcv1 grlfpcv1 grfpcft grlfpcft
|
|
endif
|
|
ifeq ("$(GRLIB_LEON3_VERSION)","1")
|
|
DIRSKIP += leon3v3 grfpc grlfpc
|
|
DIRADD += leon3v1 leon3ftv1 grfpcv1 grlfpcv1 grfpcft grlfpcft
|
|
endif
|
|
endif
|
|
|
|
# Target technology libraries and techmap
|
|
ifeq ("$(TECHLIBS)","")
|
|
TECHLIBS=$(FPGALIBS) $(ASICLIBS)
|
|
endif
|
|
# The unisim techmap in GRLIB has been divided into several parts since
|
|
# new releases of the Xilinx libs lack support for the older technologies.
|
|
# The hack below expands techlibs for technologies that previously only
|
|
# required unisim but now also require the techmap/virtex directory
|
|
ifneq (,$(findstring unisim,$(TECHLIBS)))
|
|
# Virtex2, Virtex4, Spartan3, Spartan3e and Spartan6 currently depend
|
|
# on techmap/virtex
|
|
ifneq (,$(filter Virtex2 Virtex2p Virtex4 Spartan3 Spartan-3A-DSP Spartan3E Spartan6,$(TECHNOLOGY)))
|
|
ifeq (,$(findstring virtex,$(TECHLIBS)))
|
|
TECHLIBS+=virtex
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# Option to avoid scan of tech/, useful when tech libraries are compiled
|
|
# with separate tool:
|
|
ifeq ("$(SKIP_SIM_TECHLIBS)","")
|
|
XTECHLIBS = $(TECHLIBS:%=tech/% )
|
|
endif
|
|
SIMLIBS = hynix micron cypress
|
|
ACTELLIBS = apa apa3 axcelerator proasic3 proasic3e proasic3l fusion smartfusion2 rtg4
|
|
XILINXLIBS = unisim simprim unimacro virtex virtex5
|
|
ALTERALIBS = altera_mf stratixii altera cycloneiii stratixiii
|
|
ALTERAFILES = $(ALTERALIBS:%=lib/techmap/%) $(RMCOMLIBS:%=lib/tech/%) netlists/altera
|
|
LATTICELIBS = ec
|
|
|
|
|
|
|
|
BRMLIBS = core1553bbc core1553brm core1553brt gr1553
|
|
COREPCILIB = corePCIF
|
|
CONTRIBLIBS = openchip gleichmann contrib sun
|
|
|
|
RMFTLIBS=ihp25 sgb25vrh ut025crh rh_lib18t rh_lib18t_io2 rh_lib13t pere05 \
|
|
rhumc tsmc90 atc18rha_cell
|
|
RMCOMLIBS=artisan cust1 virage90 nextreme nextreme2
|
|
|
|
RMFTLIBSX = $(RMFTLIBS:%=lib/techmap/%) $(RMFTLIBS:%=lib/tech/%)
|
|
RMCOMLIBSX = $(RMCOMLIBS:%=lib/techmap/%) $(RMCOMLIBS:%=lib/tech/%)
|
|
RMFPGALIBSX = $(ASICLIBS:%=lib/techmap/%) $(ASICLIBS:%=lib/tech/%)
|
|
|
|
ALIB = alib
|
|
ACOM = acom -quiet $(ACOMOPT) -work
|
|
ALOG = alog -quiet $(ALOGOPT) -work
|
|
AVHDL = avhdl
|
|
|
|
VLIB = vlib
|
|
ifeq ("$(GRLIB_SIMULATOR)", "ALDEC")
|
|
VCOM = vcom -incr -nowarn ELAB1_0026 -nowarn COMP96_0259 -quiet $(VCOMOPT) -93
|
|
VLOG = vlog -incr -v2k5 -quiet $(VLOGOPT)
|
|
SVLOG = vlog -incr -quiet $(VLOGOPT)
|
|
else
|
|
VCOM = vcom -quiet $(VCOMOPT) -93
|
|
VLOG = vlog -quiet $(VLOGOPT)
|
|
SVLOG = $(VLOG)
|
|
endif
|
|
|
|
|
|
OS = `uname`
|
|
|
|
ifeq ("$(SIMTOP)","")
|
|
SIMTOP=$(TOP)
|
|
endif
|
|
|
|
ifeq ("$(LIBSKIP)","")
|
|
XLIBSKIP="x"
|
|
else
|
|
XLIBSKIP= $(LIBSKIP:%=%|) dummy
|
|
endif
|
|
|
|
XXDIRSKIP=$(DIRSKIP:%=%/core)
|
|
YDIRSKIP=$(DIRSKIP) $(XXDIRSKIP) $(LIBSKIP)
|
|
|
|
ifeq ("$(YDIRSKIP)","")
|
|
XDIRSKIP="dummy"
|
|
else
|
|
XDIRSKIP= $(YDIRSKIP:%=%|) $(LIBSKIP:%=%|) dummy
|
|
endif
|
|
|
|
XFILESKIP = $(FILESKIP:%=%|) $(LIBSKIP:%=*_%.vhd|) dummy
|
|
# Note that XFILESKIP is updated in Xilinx targets below
|
|
|
|
|
|
# GRLIB_NHCPU defines # of CPUs available on host for synthesis, value
|
|
# may be used in script generation
|
|
ifeq ("$(GRLIB_NHCPU)","")
|
|
GRLIB_NHCPU=4
|
|
endif
|
|
|
|
all: help
|
|
|
|
help:
|
|
@echo
|
|
@echo " installation targets: : see doc/grlib.pdf for library installation targets"
|
|
@echo
|
|
@echo " interactive targets:"
|
|
@echo " simulation:"
|
|
@echo " make avhdl-launch : start Active-HDL GUI mode"
|
|
@echo " make avhdl : compile design using Active-HDL gui mode"
|
|
@echo " make ncsim-launch : start NCSim GUI"
|
|
@echo " make riviera-launch : start RivieraPRO"
|
|
@echo " make vsim-launch : start ModelSim/QuestaSim"
|
|
@echo " verification:"
|
|
@echo " make alint-launch : start Alint elaboration time linting"
|
|
@echo " make fpro-launch : start FormalPro GUI"
|
|
@echo " implementation:"
|
|
@echo " make actel-launch : start Actel Designer for current project"
|
|
@echo " make ise-launch : start ISE project navigator for XST project"
|
|
@echo " make ise-launch-synp : start ISE project navigator for synplify project"
|
|
@echo " make libero-launch : start Microsemi Libero"
|
|
@echo " make planahead-launch : start PlanAhead project navigator"
|
|
@echo " make quartus-launch : start Quartus for current project"
|
|
@echo " make quartus-launch-synp : start Quartus for synplify project"
|
|
@echo " make synplify-launch : start Synplify"
|
|
@echo " make vivado-launch : start Vivado project navigator"
|
|
@echo " other GRLIB targets:"
|
|
@echo " make xgrlib : start GRLIB GUI"
|
|
@echo
|
|
@echo " batch targets:"
|
|
@echo " simulation:"
|
|
@echo " make vsimsa : compile design using Active-HDL batch mode"
|
|
@echo " make riviera : compile design using riviera"
|
|
@echo " make vsim : compile design using modelsim"
|
|
@echo " make ncsim : compile design using ncsim"
|
|
@echo " make ghdl : compile design using GHDL"
|
|
@echo " verification:"
|
|
@echo " make alint-comp : alint compilation time linting"
|
|
@echo " make fm : Formal equivalence check using Synopsys Formality"
|
|
@echo " implementation:"
|
|
@echo " make actel : synthesize with synplify, place&route Actel Designer"
|
|
@echo " make dc : synthesize design usign Synopsys Design Compiler"
|
|
@echo " make ise : synthesize and place&route with Xilinx ISE"
|
|
@echo " make ise-map : synthesize design using Xilinx XST"
|
|
@echo " make ise-prec : synthesize with precision, place&route with Xilinx ISE"
|
|
@echo " make ise-synp : synthesize with synplify, place&route with Xilinx ISE"
|
|
@echo " make isp-synp : synthesize with synplify, place&route with ISPLever"
|
|
@echo " make planahead : synthesize and place&route with Xilinx PlanAhead"
|
|
@echo " make precision : synthesize design using precision"
|
|
@echo " make quartus : synthesize and place&route using Quartus"
|
|
@echo " make quartus-map : synthesize design using Quartus"
|
|
@echo " make quartus-synp : synthesize with synplify, place&route with Quartus"
|
|
@echo " make synplify : synthesize design using synplify"
|
|
@echo " make vivado : synthesize and place&route with Xilinx Vivado"
|
|
@echo " other GRLIB targets:"
|
|
@echo " make scripts : generate compile scripts only"
|
|
@echo " make clean : remove all temporary files except scripts"
|
|
@echo " make distclean : remove all temporary files"
|
|
@echo
|
|
|
|
make xgrlib:
|
|
@if test -r "/mingw/bin/wish84.exe"; then \
|
|
if !(test -r "/mingw/bin/echo.bat"); then \
|
|
cp $(GRLIB)/bin/echo.bat /mingw/bin/echo.bat; \
|
|
fi; \
|
|
if !(test -r "/mingw/bin/wish"); then \
|
|
cp $(GRLIB)/bin/wish /mingw/bin/wish; \
|
|
fi; \
|
|
fi; \
|
|
unset LD_LIBRARY_PATH ; \
|
|
$(GRLIB)/bin/xgrlib.tcl $(TOP) $(TECHNOLOGY) $(DEVICE) $(BOARD)
|
|
|
|
############ AHB ROM Generation ########################
|
|
|
|
FILE=prom.exe
|
|
|
|
ahbrom: $(GRLIB)/bin/ahbrom.c
|
|
@if test -r "/mingw/bin/gcc.exe"; then \
|
|
$(CC) $(GRLIB)/bin/ahbrom.c -o ahbrom -lwsock32; \
|
|
else \
|
|
$(CC) $(GRLIB)/bin/ahbrom.c -o ahbrom; \
|
|
fi;
|
|
|
|
ahbrom.vhd:
|
|
make ahbrom
|
|
sparc-elf-objcopy -O binary $(FILE) ahbrom.bin
|
|
./ahbrom ahbrom.bin ahbrom.vhd
|
|
|
|
ahbrom64.vhd:
|
|
make ahbrom
|
|
sparc-elf-objcopy -O binary $(FILE) ahbrom.bin
|
|
./ahbrom ahbrom.bin ahbrom64.vhd 64
|
|
|
|
ahbrom128.vhd:
|
|
make ahbrom
|
|
sparc-elf-objcopy -O binary $(FILE) ahbrom.bin
|
|
./ahbrom ahbrom.bin ahbrom128.vhd 128
|
|
|
|
######### Active-HDL batch mode targets ############
|
|
|
|
vsimsa: compile.vsim
|
|
@cat libs.do | sed -e s/modelsim/activehdl/ | sed -e s/vlib/alib/ > alibs-batch.do
|
|
@echo "do alibs-batch.do" > vsimsa-batch.do
|
|
@vsimsa vsimsa-batch.do
|
|
@vmap work activehdl/work
|
|
@make -f make.vsim
|
|
@-rm -f alibs-batch.do vsimsa-batch.do
|
|
|
|
vsimsa-run:
|
|
@vsim $(SIMTOP) < $(GRLIB)/bin/runvsim.do
|
|
|
|
vsimsa-launch: vsimsa-run
|
|
|
|
vsimsa-clean:
|
|
-rm -rf activehdl vsimsa.cfg library.cfg wave.asdb alibs-batch.do vsimsa-batch.do
|
|
|
|
#vsimsa-modelsim:
|
|
# echo "importmodelsim $(SIMTOP).mpf" . > activehdl.tcl
|
|
# echo "quiet on" >> activehdl.tcl
|
|
# echo "SET SIM_WORKING_FOLDER ..\\.." >> activehdl.tcl
|
|
# AVHDL -do activehdl.tcl &
|
|
|
|
######### Active-HDL gui mode targets ############
|
|
|
|
avhdl: compile.asim
|
|
@echo "createdesign work ." > avhdl.tcl
|
|
@echo "opendesign -a work.adf" >> avhdl.tcl
|
|
@cat alibs.do >> avhdl.tcl
|
|
@echo "" >> avhdl.tcl
|
|
@cat make.asim-addfile >> avhdl.tcl
|
|
@cat make.asim >> avhdl.tcl
|
|
@echo "" >> avhdl.tcl
|
|
@echo SET SIM_WORKING_FOLDER $$\DSN/.. >> avhdl.tcl
|
|
@echo "" >> avhdl.tcl
|
|
@echo asim work.$(SIMTOP) >> avhdl.tcl
|
|
|
|
avhdl-run: avhdl-launch
|
|
|
|
avhdl-launch:
|
|
@avhdl -do avhdl.tcl
|
|
|
|
avhdl-clean:
|
|
-rm -rf work avhdl.tcl vsimsa.cfg wave.asdb
|
|
|
|
######### Riviera targets ############
|
|
|
|
ifeq ("$(GRLIB_SIMULATOR)", "ALDEC")
|
|
riviera: make.riviera
|
|
@MTI_DEFAULT_LIB_TYPE=0 vsimsa -quiet -do "do libs.do; quit"
|
|
make -f make.riviera
|
|
|
|
riviera-run:
|
|
ifeq ("$(VSIMOPT)","")
|
|
@vsim -c $(SIMTOP) -do $(GRLIB)/bin/runvsim.do
|
|
else
|
|
@vsim -c $(VSIMOPT)
|
|
endif
|
|
|
|
riviera-launch:
|
|
ifeq ("$(VSIMOPT)","")
|
|
@vsim $(SIMTOP) -do $(GRLIB)/bin/runvsim.do
|
|
else
|
|
@vsim $(VSIMOPT)
|
|
endif
|
|
|
|
else
|
|
### Riviera targets using WS
|
|
|
|
riviera_ws: riviera_ws_create.do
|
|
vsimsa -quiet -do "do riviera_ws_create.do; quit"
|
|
|
|
riviera: riviera_ws
|
|
vsimsa -quiet -do "workspace.open riviera_ws/riviera_ws.rwsp; workspace.compile; quit"
|
|
|
|
ifeq ("$(ASIMOPT)","")
|
|
ASIMOPT = $(VSIMOPT)
|
|
endif
|
|
|
|
# Allow to override
|
|
ifeq ("$(RIVIERA_DO)","")
|
|
RIVIERA_DO = workspace.open riviera_ws/riviera_ws.rwsp; simulation.initialize $(SIMTOP)
|
|
endif
|
|
|
|
riviera-run: riviera_ws
|
|
cp *.srec riviera_ws/
|
|
ifeq ("$(VSIMOPT)","")
|
|
vsimsa -c -do "$(RIVIERA_DO); do $(realpath $(GRLIB))/bin/runvsim.do"
|
|
else
|
|
vsimsa -c $(ASIMOPT) -do "$(RIVIERA_DO); $(ASIMDO)"
|
|
endif
|
|
|
|
riviera-launch: riviera_ws
|
|
cp *.srec riviera_ws/
|
|
ifeq ("$(VSIMOPT)","")
|
|
riviera -do "$(RIVIERA_DO); do $(realpath $(GRLIB))/bin/runvsim.do"
|
|
else
|
|
riviera $(ASIMOPT) -do "$(RIVIERA_DO); $(ASIMDO)"
|
|
endif
|
|
|
|
endif ### end of Riviera targets using WS
|
|
|
|
riviera-clean:
|
|
-rm -rf riviera_ws riviera_ws_*.do vsimsa.cfg wave.asdb library.cfg .riviera_project rlibs.do compile.riviera make.riviera dataset.asdb
|
|
|
|
######### Alint targets ############
|
|
|
|
# Alint compilation time linting
|
|
alint-comp: compile.vsim
|
|
@vsim -c -do "do libs.do; quit"
|
|
@sed -r -e 's/\b(vcom|vlog)\b/\1 -alint -alint_elabchecks -alint_avdb alint\.avdb/' make.vsim > make.alint
|
|
@make -f make.alint
|
|
@vmap work modelsim/work
|
|
|
|
# Alint elaboration time linting
|
|
alint-elab: alint-comp
|
|
vlint -c -alint_maxwarn none -alint_maxrulewarn none -alint_avdb alint.avdb -asim $(TOP)
|
|
|
|
######### Modelsim targets ############
|
|
|
|
UNISIMSRC = $(XILINX)/vhdl/src/unisims/unisim_VPKG.vhd \
|
|
$(XILINX)/vhdl/src/unisims/unisim_VCOMP.vhd \
|
|
$(XILINX)/vhdl/src/unisims/unisim_VITAL.vhd
|
|
|
|
SIMPRIMSRC = $(XILINX)/vhdl/src/simprims/simprim_Vpackage.vhd \
|
|
$(XILINX)/vhdl/src/simprims/simprim_Vcomponents.vhd \
|
|
$(XILINX)/vhdl/src/simprims/simprim_VITAL.vhd
|
|
|
|
vsim: make.work
|
|
@make -f make.work
|
|
|
|
make.work: compile.vsim modelsim
|
|
@make -f make.vsim
|
|
@echo "" > make.work
|
|
@for i in `cat libs.txt`; do vmake $$i >> make.work ; done
|
|
@cat make.work | sed 's/\([a-zA-Z]\)\(:[\\\/]\)/\/cygdrive\/\L\1\//' > make.work2
|
|
@mv make.work2 make.work
|
|
|
|
# If we have paths with ':' we assume that we are running on Cygwin:
|
|
vsim-fix:
|
|
# @cat make.work | sed 's/\([a-zA-Z]\)\(:\\\)/\/\1\//' > make.work2
|
|
@cat make.work | sed 's/\([a-zA-Z]\)\(:[\\\/]\)/\/cygdrive\/\L\1\//' > make.work2
|
|
@mv make.work2 make.work
|
|
|
|
VLOGANOPT =
|
|
SVLOGANOPT =
|
|
VHDLANOPT =
|
|
VCSELAB = -debug_access+all
|
|
|
|
vcs-comp:
|
|
@sh vcs_libs
|
|
@make -f make.simv
|
|
|
|
vcs-elab: vcs-comp
|
|
vcs work.$(SIMTOP) $(VCSELAB)
|
|
|
|
vcs-run: vcs-elab
|
|
./simv
|
|
|
|
vcs-launch: vcs-elab
|
|
./simv -gui
|
|
|
|
vcs-clean:
|
|
rm -rf vcs/ simv.daidir/ csrc DVEfiles/
|
|
rm -f simv vcs_libs synopsys_sim.setup .vdbg_combination_lock .vlogansetup.args .vlogansetup.env ucli.key inter.vpd
|
|
|
|
|
|
modelsim: compile.vsim
|
|
@MTI_DEFAULT_LIB_TYPE=0 vsim -c -quiet -do "do libs.do; quit"
|
|
|
|
vsim-grlib: modelsim
|
|
make vsim
|
|
# @for i in `cat libs.txt`; do \
|
|
# make -f modelsim/make.$$i ; \
|
|
# done ;
|
|
|
|
vsim-run: vsim
|
|
ifeq ("$(VSIMOPT)","")
|
|
@vsim -c $(SIMTOP) < $(GRLIB)/bin/runvsim.do
|
|
else
|
|
@vsim -c $(VSIMOPT)
|
|
endif
|
|
|
|
vsim-launch: scripts modelsim
|
|
ifeq ("$(VSIMOPT)","")
|
|
@vsim -i -quiet $(SIMTOP)
|
|
else
|
|
vsim -i -quiet $(VSIMOPT)
|
|
endif
|
|
|
|
vsim-mcb: scripts
|
|
-vlib modelsim
|
|
-vlib modelsim/unisim
|
|
vcom -quiet -explicit -work unisim $(XILINX)/vhdl/src/unisims/secureip/MCB.vhd
|
|
|
|
vsim-unisim: modelsim
|
|
vcom -quiet -explicit -work unisim $(UNISIMSRC)
|
|
|
|
vsim-simprim: modelsim
|
|
vcom -quiet -explicit -work simprim -ignorevitalerrors $(SIMPRIMSRC)
|
|
|
|
# Ugly hardcode of testbench.vhd..
|
|
vsim-netgen-syn:
|
|
vcom -quiet -explicit -work work netgen/translate/$(TOP)_translate.vhd
|
|
vcom -quiet -explicit -work work testbench.vhd
|
|
|
|
vsim-netgen-par:
|
|
vcom -quiet -explicit -work work netgen/par/$(TOP)_timesim.vhd
|
|
vcom -quiet -explicit -work work testbench.vhd
|
|
|
|
vsim-clean:
|
|
-rm -rf modelsim transcript *.mti stdout.log vsim.wlf vsim_stacktrace.vstf \
|
|
$(SIMTOP).mpf.bak $(SIMTOP).mti *.mpf wlft*
|
|
|
|
######### FormalPro targets ############
|
|
|
|
fpro-launch: $(TOP)_rtl_fpro.fl
|
|
formalpro -gui -a -fl $(TOP)_rtl_fpro.fl -mod $(TOP)
|
|
|
|
# Target rtl2rtl for sanity check
|
|
fpro-launch-rtl2rtl: $(TOP)_rtl_fpro.fl
|
|
formalpro -gui -a -fl $(TOP)_rtl_fpro.fl -mod $(TOP) -b -fl $(TOP)_rtl_fpro.fl -mod $(TOP)
|
|
|
|
fpro-run-rtl2rtl: $(TOP)_rtl_fpro.fl
|
|
formalpro -a -fl $(TOP)_rtl_fpro.fl -mod $(TOP) -b -fl $(TOP)_rtl_fpro.fl -mod $(TOP)
|
|
|
|
fpro-clean:
|
|
-rm -rf $(TOP)_rtl_fpro.fl formalpro.log formalpro.cache
|
|
|
|
|
|
######### GHDL targets ############
|
|
# Outdated files are resolved by "GHDLM".
|
|
|
|
GHDL ?= ghdl
|
|
GHDLI = $(GHDL) -i
|
|
GHDLM = $(GHDL) -m
|
|
GHDLMOPT ?= -fexplicit --ieee=synopsys --mb-comments --warn-no-binding
|
|
GHDLRUNOPT ?= --assert-level=error --ieee-asserts=disable
|
|
|
|
# Compile design
|
|
|
|
.PHONY: ghdl-import
|
|
ghdl-import gnu: make.ghdl
|
|
make -f make.ghdl ghdl-import
|
|
|
|
.PHONY: ghdl
|
|
ghdl: $(SIMTOP)
|
|
|
|
# Analyse outdated files and elaborate design.
|
|
.PHONY: $(SIMTOP)
|
|
$(SIMTOP): gnu
|
|
$(GHDLM) $(GHDLMOPT) --workdir=gnu/work --work=work `cat ghdl.path` $@
|
|
|
|
# Run testbench SIMTOP
|
|
.PHONY: ghdl-run
|
|
ghdl-run: $(SIMTOP)
|
|
./$(SIMTOP) $(GHDLRUNOPT)
|
|
|
|
ghdl-clean:
|
|
-rm -rf gnu $(SIMTOP) make.ghdl
|
|
|
|
######### NcSim targets ############
|
|
|
|
ncsim: xncsim/done
|
|
ncupdate $(SIMTOP)
|
|
|
|
ncsim-run: ncsim
|
|
ncsim $(SIMTOP)
|
|
|
|
ncsim-launch: ncsim
|
|
ncsim -gui $(SIMTOP)&
|
|
|
|
xncsim xncsim/done : compile.ncsim
|
|
-rm -rf xncsim
|
|
make -f make.ncsim
|
|
touch xncsim/done
|
|
|
|
ncsim-clean:
|
|
-rm -rf xncsim nc*.log ncsim.key
|
|
|
|
######### Lattice ISPLEVER targets ############
|
|
|
|
|
|
|
|
isp-synp: $(TOP)_synplify.prj synplify/$(TOP).edf
|
|
$(GRLIB)/bin/route_lattice $(TOP) $(UCF) $(PART) synplify $(ISPLIB) $(ISPPACKAGE) $(BITGEN)
|
|
|
|
isp-prec: $(TOP)_precision.prj precision/$(TOP).edf
|
|
$(GRLIB)/bin/route_lattice $(TOP) $(UCF) $(PART) precision $(ISPLIB) $(ISPPACKAGE) $(BITGEN)
|
|
|
|
isp-launch-synp: $(TOP)_synplify.prj synplify/$(TOP).edf
|
|
projnav ./$(TOP).syn
|
|
|
|
isp-launch-prec: $(TOP)_precision.prj precision/$(TOP).edf
|
|
projnav ./$(TOP)_precision.syn
|
|
|
|
diamond-launch: $(TOP).ldf
|
|
diamond $(TOP).ldf
|
|
|
|
isp-prom:
|
|
synsvf $(PROMGENPAR)
|
|
isp-clean:
|
|
-rm -rf $(TOP).dir *.jid *.alt *.lci *.mt *.nc1 *.nc2 *.p?t \
|
|
*.err compxlib.cfg *.jhd *.lct $(TOP).log *.ngy *.prf *.pt *.rev \
|
|
*.syn *.t2b *.tcm *.tcp *.tw1 $(TOP).tcl *.sty *.svl *.env fonts.dir \
|
|
$(TOP)_tcl.ini lattice $(TOP).ldf $(TOP).lpf
|
|
|
|
|
|
######### Xilinx targets ############
|
|
ifeq ("$(NETLISTTECH)","")
|
|
# Some netlists are reused for other FPGA families
|
|
ifeq ("$(TECHNOLOGY)","zynq7000")
|
|
NETLISTTECH = Zynq
|
|
else
|
|
ifeq ("$(TECHNOLOGY)","Virtex7")
|
|
NETLISTTECH = Virtex7
|
|
else
|
|
ifeq ("$(TECHNOLOGY)","Kintex7")
|
|
NETLISTTECH = Kintex7
|
|
else
|
|
ifeq ("$(TECHNOLOGY)","Artix7")
|
|
NETLISTTECH = Artix7
|
|
else
|
|
ifeq ("$(TECHNOLOGY)","Spartan6")
|
|
NETLISTTECH = Spartan3
|
|
else
|
|
ifeq ("$(TECHNOLOGY)","Virtex6")
|
|
NETLISTTECH = Virtex6
|
|
else
|
|
ifeq ("$(TECHNOLOGY)","Virtex2p")
|
|
NETLISTTECH = Virtex2
|
|
else
|
|
ifeq ("$(TECHNOLOGY)","Spartan3A")
|
|
NETLISTTECH = Spartan3
|
|
else
|
|
ifeq ("$(TECHNOLOGY)","Spartan3E")
|
|
NETLISTTECH = Spartan3
|
|
else
|
|
ifeq ("$(TECHNOLOGY)","Spartan-3A-DSP")
|
|
NETLISTTECH = Spartan3
|
|
else
|
|
NETLISTTECH = $(TECHNOLOGY)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
######### Xilinx ISE targets ############
|
|
|
|
XSTVHDL = elaborate -ifmt vhdl -work_lib
|
|
XSTVLOG = elaborate -ifmt verilog -work_lib
|
|
XSTLIBSKIPX = $(ASICLIBS) $(BRMLIBS) $(ACTELLIBS) $(ALTERALIBS) \
|
|
$(LATTICELIBS) $(COREPCILIB) $(SIMLIBS)
|
|
XSTLIBSKIP = $(XSTLIBSKIPX:%=%|) dware
|
|
XSTDIRSKIPX = $(ASICLIBS) $(ACTELLIBS) $(ALTERALIBS) $(LATTICELIBS)
|
|
XSTDIRSKIP = $(XSTDIRSKIPX:%=%|) dware
|
|
#XSTSKIPX = $(XSTLIBSKIPX:%=*_%.vhd |)
|
|
XSTSKIP = $(XSTSKIPX) b1553* | pci_components* | pcicore* | snpsmul.vhd
|
|
|
|
ifeq ("$(ISETECH)","")
|
|
ISETECH=$(TECHNOLOGY)
|
|
endif
|
|
|
|
ifeq ("$(ISE11TECH)","")
|
|
ISE11TECH=$(ISETECH)
|
|
endif
|
|
|
|
# Xilinx FT-FPGA addon package targets, note: may modify COMPXLIBTECH
|
|
ifneq ("$(GRLIB)","")
|
|
-include $(GRLIB)/bin/xtmr/Makefile
|
|
endif
|
|
|
|
## Xilinx ISE project properties that can be overrideen
|
|
# Pack I/O Registers/Latches into IOBs
|
|
ifeq ("$(GRLIB_XIL_PN_Pack_Reg_Latches_into_IOBs)","")
|
|
GRLIB_XIL_PN_Pack_Reg_Latches_into_IOBs=For Inputs and Outputs
|
|
endif
|
|
# Simulator
|
|
ifeq ("$(GRLIB_XIL_PN_Simulator)","")
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim")
|
|
GRLIB_XIL_PN_Simulator=Modelsim-SE VHDL
|
|
else
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim-SE")
|
|
GRLIB_XIL_PN_Simulator=Modelsim-SE VHDL
|
|
else
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim-PE")
|
|
GRLIB_XIL_PN_Simulator=ModelSim-PE VHDL
|
|
else
|
|
GRLIB_XIL_PN_Simulator=ISim \(VHDL/Verilog\)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
## End of Xilinx ISE project properties
|
|
|
|
NUCF = $(UCF:%=-uc % )
|
|
|
|
ise: $(TOP).ngc
|
|
ngdbuild $(TOP).ngc -aul $(NUCF) -p $(DEVICE) -sd $(GRLIB)/netlists/xilinx/$(NETLISTTECH)
|
|
map -pr b -w -ol $(EFFORT) -p $(DEVICE) $(TOP) $(ISEMAPOPT)
|
|
par -ol $(EFFORT) -w $(TOP) $(TOP).ncd
|
|
trce -v 5 $(TOP).ncd $(TOP).pcf
|
|
bitgen $(TOP) -d -m -w -f $(BITGEN)
|
|
|
|
ise-synp: $(TOP)_synplify.prj synplify/$(TOP).edf
|
|
ngdbuild synplify/$(TOP).edf -aul $(NUCF) -p $(DEVICE) -sd $(GRLIB)/netlists/xilinx/$(NETLISTTECH)
|
|
map -pr b -w -ol $(EFFORT) -p $(DEVICE) $(TOP) $(ISEMAPOPT)
|
|
par -ol $(EFFORT) -w $(TOP) $(TOP).ncd
|
|
trce -v 5 $(TOP).ncd $(TOP).pcf
|
|
bitgen $(TOP) -d -m -w -f $(BITGEN)
|
|
|
|
ise-prec: $(TOP).psp precision/$(TOP).edf
|
|
ngdbuild precision/$(TOP).edf -aul $(NUCF) -p $(DEVICE) -sd $(GRLIB)/netlists/xilinx/$(NETLISTTECH)
|
|
map -pr b -w -ol $(EFFORT) -p $(DEVICE) $(TOP) $(ISEMAPOPT)
|
|
par -ol $(EFFORT) -w $(TOP) $(TOP).ncd
|
|
trce -v 5 $(TOP).ncd $(TOP).pcf
|
|
bitgen $(TOP) -d -m -w -f $(BITGEN)
|
|
|
|
ise-launch8 xst-launch: $(TOP).npl $(TOP)_ise.tcl
|
|
ise $(TOP).npl>& ise.err&
|
|
|
|
ise-launch10 ise-launch9: $(TOP).ise
|
|
ise $(TOP).ise
|
|
|
|
ise-launch11 : $(TOP).xise
|
|
ise $(TOP).xise
|
|
|
|
ise-launch :
|
|
@isever=`promgen | grep Rele | awk '{print $$2}'`; \
|
|
case $$isever in \
|
|
8*) \
|
|
make ise-launch8 ;;\
|
|
9*) \
|
|
make ise-launch9 ;;\
|
|
10*) \
|
|
make ise-launch10 ;;\
|
|
*) \
|
|
make ise-launch11 ;;\
|
|
esac
|
|
|
|
|
|
|
|
ise-launch-synp: $(TOP).npl $(TOP)_synplify.prj synplify/$(TOP).edf $(TOP)_synplify.prj
|
|
ise $(TOP)_synplify.npl>& ise.err&
|
|
|
|
$(TOP).xst: compile.xst $(TOP)_files.prj
|
|
@rm -f $(TOP).xst
|
|
@$(GRLIB)/bin/xstrun $(TOP) $(TOP).vhd $(DEVICE) >> $(TOP).xst
|
|
@echo -ofn $(TOP) $(XSTOPT) -define {XSTDUMMY $(SYNPVLOGDEFS)} -sd $(GRLIB)/netlists/xilinx/$(NETLISTTECH) >> $(TOP).xst
|
|
|
|
ise-xstmod :
|
|
$(GRLIB)/bin/xstmod $(CORE) $(CORE).vhd $(DEVICE) vhdl > tmp.xst
|
|
xst -ifn tmp.xst
|
|
|
|
ise-map xst-map ise-xst xst: $(TOP).ngc
|
|
|
|
$(TOP).ngc: $(TOP).xst $(VHDLSYNFILES) $(VERILOGSYNFILES) compile.xst
|
|
-rm -rf xst
|
|
@-mkdir xst xst/projnav.tmp
|
|
xst -ifn $(TOP).xst
|
|
|
|
$(TOP).ngd:
|
|
@if test -r "$(TOP).ngc"; then \
|
|
ngdbuild $(TOP).ngc -aul $(NUCF) -p $(DEVICE) -sd $(GRLIB)/netlists/xilinx/$(NETLISTTECH) ; \
|
|
fi; \
|
|
if test -r "synplify/$(TOP).edf"; then \
|
|
ngdbuild synplify/$(TOP).edf -aul $(NUCF) -p $(DEVICE) -sd $(GRLIB)/netlists/xilinx/$(NETLISTTECH) ; \
|
|
fi; \
|
|
if test -r "precision/$(TOP).edf"; then \
|
|
ngdbuild precision/$(TOP).edf -aul $(NUCF) -p $(DEVICE) -sd $(GRLIB)/netlists/xilinx/$(NETLISTTECH) ; \
|
|
fi;
|
|
|
|
$(TOP).ise: $(TOP)_ise.tcl
|
|
@echo "Creating $(TOP).ise using xtclsh - this can take up to 20 minutes."
|
|
xtclsh $(TOP)_ise.tcl
|
|
|
|
ise-prom:
|
|
ifeq ("$(PROMGENPAR)","")
|
|
@echo "no prom programming support for this board"
|
|
@exit 1
|
|
else
|
|
promgen $(PROMGENPAR)
|
|
cp $(TOP).bit $(BOARD).bit
|
|
cp $(TOP).msk $(BOARD).msk
|
|
endif
|
|
|
|
ise-cp-ref:
|
|
cp bitfiles/*.* .
|
|
|
|
ise-prog-prom: ise-prom
|
|
impact -batch $(GRLIB)/boards/$(BOARD)/prom.cmd
|
|
|
|
ise-prog-prom-usb: ise-prom
|
|
impact -batch $(GRLIB)/boards/$(BOARD)/prom-usb.cmd
|
|
|
|
ise-prog-prom-ref: ise-cp-ref ise-prom
|
|
impact -batch $(GRLIB)/boards/$(BOARD)/prom.cmd
|
|
|
|
ise-prog-prom-ref-usb: ise-cp-ref ise-prom
|
|
impact -batch $(GRLIB)/boards/$(BOARD)/prom-usb.cmd
|
|
|
|
ise-prog-fpga:
|
|
cp $(TOP).bit $(BOARD).bit
|
|
cp $(TOP).msk $(BOARD).msk
|
|
impact -batch $(GRLIB)/boards/$(BOARD)/fpga.cmd
|
|
|
|
ise-prog-fpga-usb:
|
|
cp $(TOP).bit $(BOARD).bit
|
|
cp $(TOP).msk $(BOARD).msk
|
|
impact -batch $(GRLIB)/boards/$(BOARD)/fpga-usb.cmd
|
|
|
|
|
|
ise-prog-fpga-ref: ise-cp-ref
|
|
cp $(TOP).bit $(BOARD).bit
|
|
cp $(TOP).msk $(BOARD).msk
|
|
impact -batch $(GRLIB)/boards/$(BOARD)/fpga.cmd
|
|
|
|
ise-prog-fpga-ref-usb: ise-cp-ref
|
|
cp $(TOP).bit $(BOARD).bit
|
|
cp $(TOP).msk $(BOARD).msk
|
|
impact -batch $(GRLIB)/boards/$(BOARD)/fpga-usb.cmd
|
|
|
|
ise-netgen-syn: $(TOP).ngd
|
|
netgen -rpw 100 -tpw 100 -ar Structure -tm $(TOP) \
|
|
-w -dir netgen/translate -ofmt vhdl -sim $(TOP).ngd $(TOP)_translate.vhd
|
|
|
|
ise-netgen-par:
|
|
netgen -s 1 -pcf $(TOP).pcf -rpw 100 -tpw 0 -ar Structure -tm $(TOP) \
|
|
-insert_pp_buffers true -w -dir netgen/par -ofmt vhdl -sim $(TOP).ncd $(TOP)_timesim.vhd
|
|
|
|
ise-clean xst-clean:
|
|
-rm -rf xst *.srp xstmods *.twr *.pad _impact* coregen.log \
|
|
tmp.xst *.ngc __projnav* *.stx *.lso *.dhp automake.log \
|
|
$(TOP)*_vhdl.prj *.bit *.bgn *.bld \
|
|
*.cmd_log *.ll *.mrp *.msk *.ncd *.ngd *.syr *.xpi *.csv \
|
|
*pad.txt *.ngm *.lst *.drc *.par *.pcf *.ngo *.mcs *.prm \
|
|
*.sig *.rba *.rbb *.rbd *.rbt *.msd _ngo _impact* stdout.log \
|
|
ngd2vhdl.log _xmsgs tmp.txt $(TOP)*.unroutes $(TOP)*_usage.xml *.cfi \
|
|
$(TOP)*.ise* $(TOP)*.npl* xlnx_auto_0* *.xrpt *.ptwx $(TOP)*_xdb \
|
|
$(TOP)*_summary.html $(TOP)*.restore $(TOP).ntrc_log $(TOP)*.twx \
|
|
$(TOP)*_map.map $(TOP)*.ngr $(TOP)*.xise $(TOP)*.gise \
|
|
device_usage_statistics.html* __*.lock \
|
|
*.xwbt *webtalk* par_usage_statistics.html fuse.log fuse.xmsgs \
|
|
fuseRelaunch.cmd iseconfig isim isim.cmd isim.log testbench_beh.prj \
|
|
version_isim_beh.wdb xilinxsim.ini .ngc2edfcache netgen
|
|
|
|
UNISIM = $(XILINX)/vhdl/src/unisims
|
|
UNISIMFILES = unisim_VPKG.vhd unisim_VCOMP.vhd unisim_VITAL.vhd \
|
|
unisim_virtex5_SMODEL.vhd
|
|
UNISIMSECIPFILES = MCB.vhd GTXE1.vhd \
|
|
GTP_DUAL.vhd GTPA1_DUAL.vhd GT11.vhd \
|
|
GT11CLK.vhd GT11CLK_MGT.vhd GT11_CUSTOM.vhd \
|
|
GT11_DUAL.vhd GTX_DUAL.vhd GTHE1_QUAD.vhd \
|
|
PCIE_2_0.vhd PCIE_A1.vhd
|
|
UNISIMSECIPFILESSKIP = $(UNISIMSECIPFILES:%=|%)
|
|
|
|
# Workaround for secureip files being part of unisim and secureip techlib
|
|
# being unavailable
|
|
ifneq (,$(findstring unisim,$(TECHLIBS)))
|
|
ifeq (,$(filter secureip secureip_ver,$(TECHLIBS)))
|
|
# Skip unisim secureip files if secureip is missing from techlibs.
|
|
# Bad things will happen if there are file name collisions with
|
|
# other libraries..
|
|
XFILESKIP+= $(UNISIMSECIPFILESSKIP)
|
|
endif
|
|
endif
|
|
|
|
GRUNISIM = $(GRLIB)/lib/tech/unisim/ise
|
|
SIMPRIM = $(XILINX)/vhdl/src/simprims
|
|
UNIMACRO = $(XILINX)/vhdl/src/unimacro
|
|
UNISIMS_VER = $(XILINX)/verilog/src/unisims
|
|
GRUNISIMS_VER = $(GRLIB)/lib/tech/unisims_ver/ise
|
|
XILINXCORELIB_VER = $(XILINX)/verilog/src/
|
|
GRXILINXCORELIB_VER = $(GRLIB)/lib/tech/xilinxcorelib_ver/ise
|
|
|
|
|
|
install-unimacro:
|
|
@echo UNIMACRO source path: $(UNIMACRO); \
|
|
if test -r $(UNIMACRO); then \
|
|
cp $(UNIMACRO)/*.vhd $(GRLIB)/lib/tech/unimacro/ise; \
|
|
for i in $(UNIMACRO)/*.vhd ; do basename $$i >> $(GRLIB)/lib/tech/unimacro/ise/vhdlsyn.txt; done; \
|
|
fi
|
|
|
|
remove-unimacro:
|
|
@-rm $(GRLIB)/lib/tech/unimacro/ise/*.vhd; echo "" > $(GRLIB)/lib/tech/unimacro/ise/vhdlsyn.xt
|
|
|
|
install-unisim:
|
|
ifeq ("$(GRLIB_SIMULATOR)","Xilinx")
|
|
@echo "GRLIB_SIMULATOR is Xilinx. Unisim installation not required, aborted."
|
|
else
|
|
@echo UNISIM source path: $(UNISIM); \
|
|
for i in $(UNISIMFILES); do \
|
|
if test -r $(UNISIM)/$$i; then \
|
|
cp $(UNISIM)/$$i $(GRUNISIM);\
|
|
echo installing $$i ;\
|
|
else \
|
|
if [ "unisim_VITAL.vhd" = $$i ]; then \
|
|
if test -r $(UNISIM)/primitive/vhdl_analyze_order; then \
|
|
echo "creating unisim_VITAL.vhd from primitives" ; \
|
|
echo "" > $(GRUNISIM)/unisim_VITAL.vhd; \
|
|
for j in `cat $(UNISIM)/primitive/vhdl_analyze_order`; do \
|
|
cat $(UNISIM)/primitive/$$j >> $(GRUNISIM)/unisim_VITAL.vhd; \
|
|
done ; \
|
|
fi ; \
|
|
fi ; \
|
|
fi ; \
|
|
done
|
|
endif
|
|
|
|
install-xilinxcorelib_ver:
|
|
ifeq ("$(GRLIB_SIMULATOR)","Xilinx")
|
|
@echo "GRLIB_SIMULATOR is Xilinx. Library installation not required, aborted."
|
|
else
|
|
@if [ -d $(GRXILINXCORELIB_VER) ]; then \
|
|
echo "xilinxcorelib_ver library already installed"; else \
|
|
echo installing xilinxcorelib_ver in $(GRXILINXCORELIB_VER) ; \
|
|
mkdir -p $(GRXILINXCORELIB_VER) ; \
|
|
for i in $(XILINXCORELIB_VER)/*.v; do \
|
|
cp $$i $(GRXILINXCORELIB_VER) ; \
|
|
echo `basename $$i` >> $(GRXILINXCORELIB_VER)/vlogsim.txt ; \
|
|
done; fi
|
|
endif
|
|
|
|
install-unisim_ver: install-xilinxcorelib_ver
|
|
ifeq ("$(GRLIB_SIMULATOR)","Xilinx")
|
|
@echo "GRLIB_SIMULATOR is Xilinx. Unisim installation not required, aborted."
|
|
else
|
|
@if [ -f $(GRUNISIMS_VER)/noexist ]; then \
|
|
echo "unisims_ver library already installed"; else \
|
|
echo installing unisims_ver in $(GRUNISIMS_VER) ; \
|
|
mkdir -p $(GRUNISIMS_VER) ; \
|
|
for i in $(UNISIMS_VER)/*.v; do \
|
|
cat $$i >> $(GRUNISIMS_VER)/unisims_ver.v ; \
|
|
# cp $$i $(GRUNISIMS_VER) ; \
|
|
# echo `basename $$i` >> $(GRUNISIMS_VER)/vlogsim.txt ; \
|
|
done ; \
|
|
echo unisims_ver.v > $(GRUNISIMS_VER)/vlogsim.txt ; \
|
|
fi
|
|
endif
|
|
|
|
# Undocumented target, functionality was previously part of install-unisim target.
|
|
patch-unisim:
|
|
if (test -r $(GRUNISIM)/unisim_VITAL.vhd); then \
|
|
cat $(GRUNISIM)/unisim_VITAL.vhd | sed -e s/'SIM_COLLISION_CHECK : string := "ALL"'/'SIM_COLLISION_CHECK : string := "GENERATE_X_ONLY"'/ \
|
|
> $(GRUNISIM)/unisim_vitalx.vhd;\
|
|
cp $(GRUNISIM)/unisim_vitalx.vhd $(GRUNISIM)/unisim_VITAL.vhd;\
|
|
rm $(GRUNISIM)/unisim_vitalx.vhd;\
|
|
echo patching unisim_VITAL.vhd ;\
|
|
fi
|
|
|
|
ifeq ("$(GRLIB_SIMULATOR)","ALDEC")
|
|
XILINX_SECUREIP_PATH = aldec
|
|
else
|
|
ifeq ("$(GRLIB_SIMULATOR)","ALDEC_RWS")
|
|
XILINX_SECUREIP_PATH = aldec
|
|
else
|
|
XILINX_SECUREIP_PATH = mti
|
|
endif
|
|
endif
|
|
|
|
install-secureip: install-unisim
|
|
ifeq ("$(GRLIB_SIMULATOR)","Xilinx")
|
|
@echo "GRLIB_SIMULATOR is Xilinx. SecureIP installation not required, aborted."
|
|
else
|
|
@echo UNISIM source path: $(UNISIM); \
|
|
for i in $(UNISIMSECIPFILES); do \
|
|
cp $(UNISIM)/secureip/$$i $(GRUNISIM);\
|
|
echo installing $$i ;\
|
|
done
|
|
@if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/mcb_$(XILINX_SECUREIP_PATH)); then \
|
|
echo installing $(XILINX)/secureip ;\
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/mcb_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip/ise;\
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/pcie_2_0_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/pcie_2_0_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip/ise; \
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtxe1_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtxe1_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip/ise; \
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtpa1_dual_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtpa1_dual_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip/ise; \
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtp_dual_fast_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtp_dual_fast_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip/ise; \
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtx_dual_fast_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtx_dual_fast_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip/ise; \
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/pcie_a1_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/pcie_a1_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip/ise; \
|
|
fi
|
|
endif
|
|
|
|
install-secureip_ver: install-unisim_ver
|
|
ifeq ("$(GRLIB_SIMULATOR)","Xilinx")
|
|
@echo "GRLIB_SIMULATOR is Xilinx. SecureIP installation not required, aborted."
|
|
else
|
|
@echo UNISIM source path: $(UNISIM); \
|
|
for i in $(UNISIMSECIPFILES); do \
|
|
cp $(UNISIM)/secureip/$$i $(GRUNISIM);\
|
|
echo installing $$i ;\
|
|
done
|
|
@if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/mcb_$(XILINX_SECUREIP_PATH)); then \
|
|
echo installing $(XILINX)/secureip ;\
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/mcb_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip_ver/ise;\
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/pcie_2_0_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/pcie_2_0_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip_ver/ise; \
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtxe1_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtxe1_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip_ver/ise; \
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtpa1_dual_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtpa1_dual_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip_ver/ise; \
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtp_dual_fast_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtp_dual_fast_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip_ver/ise; \
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtx_dual_fast_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/gtx_dual_fast_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip_ver/ise; \
|
|
fi ; \
|
|
if (test -r $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/pcie_a1_$(XILINX_SECUREIP_PATH)); then \
|
|
cp $(XILINX)/secureip/$(XILINX_SECUREIP_PATH)/pcie_a1_$(XILINX_SECUREIP_PATH)/*.vp $(GRLIB)/lib/tech/secureip_ver/ise; \
|
|
fi
|
|
endif
|
|
|
|
remove-secureip uninstall-secureip remove-unisim uninstall-unisim:
|
|
@-rm $(GRLIB)/lib/tech/secureip/ise/*.vp $(GRLIB)/lib/tech/secureip_ver/ise/*.vp
|
|
@-rm -r $(GRLIB)/lib/tech/unisims_ver/ise $(GRLIB)/lib/tech/xilinxcorelib_ver/ise
|
|
@-rm $(GRLIB)/lib/tech/unisim/ise/*.vhd
|
|
|
|
# Simulator compxlib
|
|
ifeq ("$(GRLIB_XIL_compxlib_Simulator)","")
|
|
# Set default to ModelSim for GRLIB_XIL_compxlib_Simulator
|
|
GRLIB_XIL_compxlib_Simulator=mti_se
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim")
|
|
GRLIB_XIL_compxlib_Simulator=mti_se
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim-PE")
|
|
GRLIB_XIL_compxlib_Simulator=mti_pe
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim-SE")
|
|
GRLIB_XIL_compxlib_Simulator=mti_se
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ALDEC")
|
|
GRLIB_XIL_compxlib_Simulator=riviera
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ALDEC_RWS")
|
|
GRLIB_XIL_compxlib_Simulator=riviera
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","Questa")
|
|
GRLIB_XIL_compxlib_Simulator=questasim
|
|
endif
|
|
endif
|
|
|
|
# Simulator vivado
|
|
ifeq ("$(GRLIB_XIL_simlib_Simulator)","")
|
|
# Set default to ModelSim for GRLIB_XIL_simlib_Simulator
|
|
export GRLIB_XIL_simlib_Simulator=modelsim
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim")
|
|
export GRLIB_XIL_simlib_Simulator=modelsim
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim-PE")
|
|
export GRLIB_XIL_simlib_Simulator=modelsim
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim-SE")
|
|
export GRLIB_XIL_simlib_Simulator=modelsim
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ALDEC")
|
|
export GRLIB_XIL_simlib_Simulator=riviera
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ALDEC_RWS")
|
|
export GRLIB_XIL_simlib_Simulator=riviera
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","Questa")
|
|
export GRLIB_XIL_simlib_Simulator=questa
|
|
endif
|
|
endif
|
|
|
|
ifeq ("$(COMPXLIBTECH)","")
|
|
COMPXLIBTECH=$(ISETECH)
|
|
endif
|
|
|
|
|
|
# install-simprim, compile-simprim/xilinxcorelib/unisim/xilinx-simlibs are tailored for ModelSim/Questa
|
|
# (target dir is ./modelsim)
|
|
install-simprim:
|
|
@echo "install-simprim is not supported. compile-simprim can be used to compile simprim for ModelSim"
|
|
|
|
compile-simprim:
|
|
compxlib -s $(GRLIB_XIL_compxlib_Simulator) -l vhdl -arch $(COMPXLIBTECH) -lib simprim -w -dir ./modelsim
|
|
|
|
compile-xilinxcorelib:
|
|
compxlib -s $(GRLIB_XIL_compxlib_Simulator) -l vhdl -arch $(COMPXLIBTECH) -lib xilinxcorelib -w -dir ./modelsim
|
|
|
|
compile-unisim:
|
|
compxlib -s $(GRLIB_XIL_compxlib_Simulator) -l vhdl -arch $(COMPXLIBTECH) -lib unisim -w -dir ./modelsim
|
|
|
|
compile-xilinx-simlibs:
|
|
compxlib -s $(GRLIB_XIL_compxlib_Simulator) -l vhdl -arch $(COMPXLIBTECH) -lib unisim -lib simprim -lib xilinxcorelib -w -dir ./modelsim
|
|
|
|
# Needs to depend on modelsim.ini so that the file is not overwritten by subsequent commands
|
|
# Selects family all since GRLIB techmap layer has Virtex-5-specific primitives (for example)
|
|
compile_xilinx_7series_lib: modelsim.ini
|
|
ifneq ("$(GRLIB_SIMULATOR)","Xilinx")
|
|
-@mkdir -p ./xilinx_lib
|
|
@if [ -d ./xilinx_lib/unisims_ver ]; then \
|
|
echo "Xilinx library already compiled"; else \
|
|
echo "compile_simlib -directory ./xilinx_lib/ -family all -language all -library all -simulator $(GRLIB_XIL_simlib_Simulator)" > ./xilinx_lib/$(TOP)_simlib.tcl ; \
|
|
vivado -mode batch -source ./xilinx_lib/$(TOP)_simlib.tcl ; \
|
|
fi;
|
|
endif
|
|
|
|
map_xilinx_7series_lib: compile_xilinx_7series_lib
|
|
ifneq ("$(GRLIB_SIMULATOR)","Xilinx")
|
|
ifneq ("$(GRLIB_SIMULATOR)","ALDEC_RWS")
|
|
@if [ -d ./xilinx_lib/unisims_ver ]; then \
|
|
vmap secureip_ver ./xilinx_lib/secureip ; \
|
|
vmap secureip ./xilinx_lib/secureip ; \
|
|
vmap axi_bfm ./xilinx_lib/secureip ; \
|
|
vmap unisims_ver ./xilinx_lib/unisims_ver ; \
|
|
vmap unisim ./xilinx_lib/unisim ; \
|
|
vmap unimacro_ver ./xilinx_lib/unimacro_ver ; \
|
|
vmap unimacro ./xilinx_lib/unimacro ; \
|
|
vmap simprim_ver ./xilinx_lib/simprims_ver ; \
|
|
vmap simprim ./xilinx_lib/simprims ; \
|
|
vmap unifast_ver ./xilinx_lib/unifast_ver ; \
|
|
vmap unifast ./xilinx_lib/unifast_ver ; else \
|
|
echo "Xilinx Library not found. Please make sure you have installed the correct version of the Xilinx Library" ; exit 1 ; \
|
|
fi;
|
|
else
|
|
vsimsa -c -do $(GRLIB)/bin/aldec/riviera_ws_map_xilinx_libs.do
|
|
endif
|
|
else
|
|
echo "GRLIB_SIMULATOR is Xilinx, skipping map of libraries"; exit 1
|
|
endif
|
|
|
|
clean-xilinx-lib:
|
|
-rm -rf xilinx_lib compxlib.* .cxl.*.version
|
|
|
|
ip_7series_generate: vivado/$(TOP)_vivado.tcl $(VHDLSYNFILES) $(VERILOGSYNFILES)
|
|
ifeq ($(CONFIG_MIG_7SERIES),y)
|
|
@if [ -d ./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip ]; then \
|
|
echo "Xilinx IPs already generated!"; else \
|
|
vivado -mode batch -source ./vivado/$(TOP)_vivado.tcl ; \
|
|
fi;
|
|
endif
|
|
|
|
mig_7series: ip_7series_generate compile_xilinx_7series_lib map_xilinx_7series_lib
|
|
ifneq ("$(GRLIB_SIMULATOR)","Xilinx")
|
|
ifeq ($(CONFIG_MIG_7SERIES),y)
|
|
ifneq ("$(GRLIB_SIMULATOR)","ALDEC_RWS")
|
|
if [ -f ./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/mig.v ]; then \
|
|
vlog -work gaisler \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/mig.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/mig_mig_sim.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/clocking/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/controller/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/ecc/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/ip_top/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/phy/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/ui/*.v ;\
|
|
vlog -work work $(XILINX_VIVADO)/data/verilog/src/glbl.v ;\
|
|
fi;
|
|
if [ -f ./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/axi/*axi_mc.v ]; then \
|
|
vlog -work gaisler ./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/axi/*.v ;\
|
|
fi;
|
|
else
|
|
# The design.file.property command below is a hack so that the Verilog MIG IP, in (VHDL)
|
|
# library gaisler, will find components from unisim. Otherwise errors will be given during
|
|
# riviera elaboration. No documentation has been found about this. The command is intended
|
|
# to have the same effects as adding libs using:
|
|
# <right click> -> properties -> Enries -> Libraries
|
|
@echo "workspace.open riviera_ws/riviera_ws.rwsp; workspace.design.setactive gaisler" > riviera_ws_add_mig_7series.do
|
|
@for f in ./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/mig.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/mig_mig_sim.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/clocking/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/controller/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/ecc/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/ip_top/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/phy/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/mig/mig/user_design/rtl/ui/*.v ; do \
|
|
echo "design.file.add .$$f" >> riviera_ws_add_mig_7series.do ; \
|
|
echo "design.file.property " `basename $$f` "compilation/verilog/verilog-libraries \"secureip_ver;secureip;axi_bfm;unisims_ver;unisim;unimacro_ver;unimacro;simprim_ver;simprim;unifast_ver;unifast\"" >> riviera_ws_add_mig_7series.do; \
|
|
done;
|
|
@echo "workspace.design.setactive work; design.file.add $(XILINX_VIVADO)/data/verilog/src/glbl.v ; quit" >> riviera_ws_add_mig_7series.do
|
|
@vsimsa -quiet -do riviera_ws_add_mig_7series.do
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
sgmii_7series: ip_7series_generate compile_xilinx_7series_lib map_xilinx_7series_lib
|
|
ifneq ("$(GRLIB_SIMULATOR)","Xilinx")
|
|
ifeq ($(CONFIG_GRETH_ENABLE),y)
|
|
ifneq ("$(GRLIB_SIMULATOR)","ALDEC_RWS")
|
|
if [ -f./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/sgmii/synth/sgmii.v ]; then \
|
|
vlib modelsim/gig_ethernet_pcs_pma ;\
|
|
vmap -modelsimini ./modelsim.ini gig_ethernet_pcs_pma ./modelsim/gig_ethernet_pcs_pma ;\
|
|
vcom -work gig_ethernet_pcs_pma ./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/sgmii/hdl/gig_ethernet_pcs_pma*.vhd ;\
|
|
vlog -work work \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/sgmii/synth/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/sgmii/synth/*/*.v ;\
|
|
fi;
|
|
else
|
|
@echo "workspace.open riviera_ws/riviera_ws.rwsp" > riviera_ws_add_sgmii_7series.do
|
|
@echo "workspace.design.create gig_ethernet_pcs_pma_v14_3 ." >> riviera_ws_add_sgmii_7series.do
|
|
@echo "workspace.design.setactive gig_ethernet_pcs_pma_v14_3" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "amap secureip_ver ../xilinx_lib/secureip" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "amap secureip ../xilinx_lib/secureip" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "amap axi_bfm ../xilinx_lib/secureip" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "amap unisims_ver ../xilinx_lib/unisims_ver" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "amap unisim ../xilinx_lib/unisim" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "amap unimacro_ver ../xilinx_lib/unimacro_ver" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "amap unimacro ../xilinx_lib/unimacro" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "amap simprim_ver ../xilinx_lib/simprims_ver" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "amap simprim ../xilinx_lib/simprims" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "amap unifast_ver ../xilinx_lib/unifast_ver" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "amap unifast ../xilinx_lib/unifast_ver" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "design.file.add ../vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/sgmii/gig_ethernet_pcs_pma_v14_3/hdl/gig_ethernet_pcs_pma_v14_3_rfs.vhd" >> riviera_ws_add_sgmii_7series.do
|
|
@echo "workspace.design.setactive work" >> riviera_ws_add_sgmii_7series.do
|
|
|
|
@for f in ./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/sgmii/synth/*.v \
|
|
./vivado/$(DESIGN)/$(DESIGN).srcs/sources_1/ip/sgmii/synth/*/*.v ; do \
|
|
echo "design.file.add .$$f" >> riviera_ws_add_mig_7series.do ; \
|
|
echo "design.file.property " `basename $$f` "compilation/verilog/verilog-libraries \"secureip_ver;secureip;axi_bfm;unisims_ver;unisim;unimacro_ver;unimacro;simprim_ver;simprim;unifast_ver;unifast\"" >> riviera_ws_add_mig_7series.do; \
|
|
done;
|
|
@echo "quit" >> riviera_ws_add_sgmii_7series.do
|
|
@vsimsa -quiet -do riviera_ws_add_sgmii_7series.do
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
.PHONY: compile_xilinx_7series_lib map_xilinx_7series_lib mig_7series_generate mig_7series install-simprim compile-simprim compile-xilinxcorelib compile-unisim compile-xilinx-simlibs
|
|
|
|
######### Xilinx PlanAhead targets ############
|
|
|
|
ifeq ("$(PLANAHEAD_SYNTH_FLOW)","")
|
|
PLANAHEAD_SYNTH_FLOW="XST 14"
|
|
endif
|
|
ifeq ("$(PLANAHEAD_SYNTH_STRATEGY)","")
|
|
PLANAHEAD_SYNTH_STRATEGY="TimingWithIOBPacking"
|
|
#PLANAHEAD_SYNTH_STRATEGY="XST Defaults"
|
|
endif
|
|
ifeq ("$(PLANAHEAD_IMPL_STRATEGY)","")
|
|
PLANAHEAD_IMPL_STRATEGY="ParHighEffort"
|
|
endif
|
|
|
|
## Xilinx planAhead project properties that can be overrideen
|
|
ifeq ("$(GRLIB_XIL_PlanAhead_Simulator)","")
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim")
|
|
GRLIB_XIL_PlanAhead_Simulator=ModelSim
|
|
else
|
|
GRLIB_XIL_PlanAhead_Simulator=ISim
|
|
endif
|
|
endif
|
|
|
|
#PLANAHEAD_SIMSET=sim_$(DESIGN)
|
|
PLANAHEAD_SIMSET=sim_1
|
|
|
|
planahead-launch: planahead/$(TOP)_planAhead.tcl $(VHDLSYNFILES) $(VERILOGSYNFILES)
|
|
planAhead -mode gui -source ./planahead/$(TOP)_planAhead.tcl
|
|
@if test -r ./planahead/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).bit; then \
|
|
cp ./planahead/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).bit . ; \
|
|
cp ./planahead/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).msk . ; \
|
|
fi;
|
|
|
|
planahead: planahead/$(TOP)_planAhead.tcl $(VHDLSYNFILES) $(VERILOGSYNFILES)
|
|
planAhead -mode batch -source ./planahead/$(TOP)_planAhead.tcl ./planahead/$(TOP)_planAhead_run.tcl ./planahead/$(TOP)_planAhead_end.tcl
|
|
@if test -r ./planahead/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).bit; then \
|
|
cp ./planahead/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).bit . ; \
|
|
cp ./planahead/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).msk . ; \
|
|
fi;
|
|
|
|
planahead-clean:
|
|
-rm -rf ./planahead planAhead.log planAhead*.jou planAhead*.*.log
|
|
|
|
######### Xilinx Vivado targets ############
|
|
|
|
VIVADOVHDL = read_vhdl -library
|
|
VIVADOVLOG = read_verilog -library
|
|
|
|
VIVADOLIBSKIPX = $(ASICLIBS) $(BRMLIBS) $(ACTELLIBS) $(ALTERALIBS) \
|
|
$(LATTICELIBS) $(COREPCILIB) $(SIMLIBS)
|
|
VIVADOLIBSKIP = $(VIVADOLIBSKIPX:%=%|) dware | grdware
|
|
VIVADODIRSKIPX = $(ASICLIBS) $(ACTELLIBS) $(ALTERALIBS) $(LATTICELIBS)
|
|
VIVADODIRSKIP = $(VIVADODIRSKIPX:%=%|) dware | grdware
|
|
VIVADOSKIP = $(VIVADOSKIPX) b1553* | pci_components* | pcicore* | snpsmul.vhd | clkgen_virtex.vhd | \
|
|
memory_virtex.vhd | simple_simprim.vhd | unisim_VCOMP.vhd | unisim_VITAL.vhd | unisim_VPKG.vhd
|
|
|
|
ifeq ("$(VIVADO_SYNTH_FLOW)","")
|
|
VIVADO_SYNTH_FLOW=Vivado Synthesis 2012
|
|
endif
|
|
ifeq ("$(VIVADO_SYNTH_STRATEGY)","")
|
|
VIVADO_SYNTH_STRATEGY=Vivado Synthesis Defaults
|
|
endif
|
|
ifeq ("$(VIVADO_IMPL_STRATEGY)","")
|
|
VIVADO_IMPL_STRATEGY=Vivado Implementation Defaults
|
|
endif
|
|
|
|
## Xilinx Vivado project properties that can be overrideen
|
|
ifeq ("$(GRLIB_XIL_Vivado_Simulator)","")
|
|
GRLIB_XIL_Vivado_Simulator=XSim
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim")
|
|
GRLIB_XIL_Vivado_Simulator=ModelSim
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim-PE")
|
|
GRLIB_XIL_Vivado_Simulator=ModelSim
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ModelSim-SE")
|
|
GRLIB_XIL_Vivado_Simulator=ModelSim
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","Questa")
|
|
GRLIB_XIL_Vivado_Simulator=Questa
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ALDEC")
|
|
GRLIB_XIL_Vivado_Simulator=Riviera
|
|
endif
|
|
ifeq ("$(GRLIB_SIMULATOR)","ALDEC_RWS")
|
|
GRLIB_XIL_Vivado_Simulator=Riviera
|
|
endif
|
|
endif
|
|
|
|
#VIVADO_SIMSET=sim_$(DESIGN)
|
|
VIVADO_SIMSET=sim_1
|
|
|
|
vivado-launch: vivado/$(TOP)_vivado.tcl $(VHDLSYNFILES) $(VERILOGSYNFILES)
|
|
vivado -mode gui -source ./vivado/$(TOP)_vivado.tcl
|
|
@if test -r ./vivado/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).bit; then \
|
|
cp ./vivado/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).bit . ; \
|
|
cp ./vivado/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).msk . ; \
|
|
fi;
|
|
|
|
vivado: vivado/$(TOP)_vivado.tcl $(VHDLSYNFILES) $(VERILOGSYNFILES)
|
|
vivado -mode batch -source ./vivado/$(TOP)_vivado.tcl ./vivado/$(TOP)_vivado_run.tcl | tee $(TOP)_vivado.log
|
|
@if test -r ./vivado/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).bit; then \
|
|
cp ./vivado/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).bit . ; \
|
|
cp ./vivado/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).msk . ; \
|
|
fi;
|
|
|
|
vivado-clean:
|
|
-rm -rf ./vivado *vivado.log vivado*.jou vivado*.backup.log vivado*.str .Xil .cxl.*.version compile_simlib.log compile_simlib.log.bak xmd.ini
|
|
|
|
vivado-prog-fpga:
|
|
@echo "fpga -f ./vivado/$(DESIGN)/$(DESIGN).runs/impl_1/$(TOP).bit" > ./xmd.ini
|
|
@echo "exit" >> ./xmd.ini
|
|
xmd
|
|
|
|
vivado-prog-fpga-ref:
|
|
@echo "fpga -f ./bitfiles/$(TOP).bit" > ./xmd.ini
|
|
@echo "exit" >> ./xmd.ini
|
|
xmd
|
|
|
|
######### Altera targets ############
|
|
|
|
install-altera:
|
|
ifeq ("$(QUARTUS_ROOTDIR)","")
|
|
@echo "QUARTUS_ROOTDIR is not set. Altera library installation failed"
|
|
else
|
|
@if test -r $(QUARTUS_ROOTDIR)/eda/sim_lib/altera_primitives.vhd; then \
|
|
echo installing tech/altera ;\
|
|
cp $(QUARTUS_ROOTDIR)/eda/sim_lib/altera_primitives*.vhd $(GRLIB)/lib/tech/altera/simprims ;\
|
|
else echo skipping tech/altera; fi ; \
|
|
if test -r $(QUARTUS_ROOTDIR)/eda/sim_lib/altera_mf_components.vhd; then \
|
|
echo installing tech/altera_mf ;\
|
|
cp $(QUARTUS_ROOTDIR)/eda/sim_lib/altera_mf*.vhd $(GRLIB)/lib/tech/altera_mf/simprims ;\
|
|
cat $(GRLIB)/bin/altera/altera_mf.vhd >> $(GRLIB)/lib/tech/altera_mf/simprims/altera_mf.vhd ;\
|
|
else echo skipping tech/altera_mf; fi ; \
|
|
if test -r $(QUARTUS_ROOTDIR)/eda/sim_lib/cycloneiii_atoms.vhd; then \
|
|
echo installing tech/cycloneiii ;\
|
|
cp $(QUARTUS_ROOTDIR)/eda/sim_lib/cycloneiii_*.vhd $(GRLIB)/lib/tech/cycloneiii/simprims ;\
|
|
else echo skipping tech/cycloneiii - not supported by Quartus II version; fi ; \
|
|
if test -r $(QUARTUS_ROOTDIR)/eda/sim_lib/stratixii_atoms.vhd; then \
|
|
echo installing tech/stratixii ;\
|
|
cp $(QUARTUS_ROOTDIR)/eda/sim_lib/stratixii_*.vhd $(GRLIB)/lib/tech/stratixii/simprims ;\
|
|
else echo skipping tech/stratixii - not supported by Quartus II version; fi ; \
|
|
if test -r $(QUARTUS_ROOTDIR)/eda/sim_lib/stratixiii_atoms.vhd; then \
|
|
echo installing tech/stratixii ;\
|
|
cp $(QUARTUS_ROOTDIR)/eda/sim_lib/stratixiii_*.vhd $(GRLIB)/lib/tech/stratixiii/simprims ;\
|
|
else echo skipping tech/stratixiii - not supported by Quartus II version; fi ; \
|
|
echo Altera library installation completed.
|
|
endif
|
|
|
|
remove-altera:
|
|
-@rm $(GRLIB)/lib/tech/altera/simprims/altera_primitives*.vhd \
|
|
$(GRLIB)/lib/tech/altera_mf/simprims/altera_mf*.vhd \
|
|
$(GRLIB)/lib/tech/cycloneiii/simprims/cycloneiii_*.vhd \
|
|
$(GRLIB)/lib/tech/stratixii/simprims/stratixii_*.vhd \
|
|
$(GRLIB)/lib/tech/stratixiii/simprims/stratixiii_*.vhd
|
|
@echo Altera libraries removed from GRLIB
|
|
|
|
######### Altera Quartus targets ############
|
|
|
|
#ifeq ("$(QUARTUS_ROOTDIR)","")
|
|
QUARTUS_CDB = quartus_cdb $(QUARTUSOPT)
|
|
QUARTUS_MAP = quartus_map $(QUARTUSOPT)
|
|
QUARTUS_FIT = quartus_fit $(QUARTUSOPT)
|
|
QUARTUS_ASM = quartus_asm $(QUARTUSOPT)
|
|
QUARTUS_STA = quartus_sta $(QUARTUSOPT)
|
|
QUARTUS_PGM = quartus_pgm $(QUARTUSOPT)
|
|
QUARTUS_SH = quartus_sh $(QUARTUSOPT)
|
|
#else
|
|
#QUARTUS_MAP = $(QUARTUS_ROOTDIR)/bin/quartus_map
|
|
#QUARTUS_FIT = $(QUARTUS_ROOTDIR)/bin/quartus_fit
|
|
#QUARTUS_ASM = $(QUARTUS_ROOTDIR)/bin/quartus_asm
|
|
#QUARTUS_STA = $(QUARTUS_ROOTDIR)/bin/quartus_tan
|
|
#endif
|
|
ALTCABLE ?= USB-Blaster
|
|
QLIBSKIPX = $(SIMLIBS) $(ASICLIBS) $(BRMLIBS) $(ACTELLIBS) $(XILINXLIBS) \
|
|
$(LATTICELIBS) $(COREPCILIB)
|
|
QUARTUSLIBSKIP = $(QLIBSKIPX:%=%|) dware
|
|
QDIRSKIPX = $(ASICLIBS) $(ACTELLIBS) $(XILINXLIBS) $(LATTICELIBS)
|
|
QDIRSKIP = $(QDIRSKIPX:%=%|) dware | satcan | leon2ft
|
|
QUARTUSSKIP = b1553* | pci_components* | pcicore* | snpsmul.vhd
|
|
|
|
quartus-vqm:
|
|
-@case $(TECHNOLOGY) in \
|
|
CYCLONEII) \
|
|
cp $(GRLIB)/netlists/altera/cyclone2/*.vqm . ;;\
|
|
CYCLONEIII) \
|
|
cp $(GRLIB)/netlists/altera/cyclone3/*.vqm . ;;\
|
|
CYCLONEIV) \
|
|
cp $(GRLIB)/netlists/altera/cyclone3/*.vqm . ;;\
|
|
CYCLONEIV-E) \
|
|
cp $(GRLIB)/netlists/altera/cyclone3/*.vqm . ;;\
|
|
CYCLONEV) \
|
|
cp $(GRLIB)/netlists/altera/cyclone5/*.vqm . ;;\
|
|
STRATIXV) \
|
|
cp $(GRLIB)/netlists/altera/stratix5/*.vqm . ;;\
|
|
STRATIXIV) \
|
|
cp $(GRLIB)/netlists/altera/stratix4/*.vqm . ;;\
|
|
STRATIXIII) \
|
|
cp $(GRLIB)/netlists/altera/stratix3/*.vqm . ;;\
|
|
STRATIXII) \
|
|
cp $(GRLIB)/netlists/altera/stratix2/*.vqm . ;;\
|
|
esac
|
|
|
|
quartus: quartus-vqm
|
|
make quartus-map quartus-route
|
|
|
|
quartus-synp: $(TOP)_synplify.prj synplify/$(TOP).edf quartus-vqm
|
|
@-cp synplify/*.hex .
|
|
$(QUARTUS_MAP) --import_settings_files=on --export_settings_files=off $(TOP)_synplify -c $(TOP)_synplify
|
|
$(if $(strip $(QSF_NEXT)),$(QUARTUS_SH) -t $(QSF_NEXT) quartus_map $(TOP)_synplify $(TOP)_synplify,)
|
|
$(QUARTUS_CDB) --merge $(TOP)_synplify
|
|
$(QUARTUS_FIT) --import_settings_files=off --export_settings_files=off $(TOP)_synplify -c $(TOP)_synplify
|
|
$(if $(strip $(QSF_NEXT)),$(QUARTUS_SH) -t $(QSF_NEXT) quartus_fit $(TOP)_synplify $(TOP)_synplify,)
|
|
$(QUARTUS_ASM) --import_settings_files=off --export_settings_files=off $(TOP)_synplify -c $(TOP)_synplify
|
|
$(if $(strip $(QSF_NEXT)),$(QUARTUS_SH) -t $(QSF_NEXT) quartus_asm $(TOP)_synplify $(TOP)_synplify,)
|
|
$(QUARTUS_STA) $(TOP)_synplify
|
|
|
|
quartus-launch: $(TOP)_quartus.qsf quartus-vqm
|
|
quartus $(TOP)_quartus.qpf
|
|
|
|
quartus-launch-synp: $(TOP)_synplify.prj synplify/$(TOP).edf quartus-vqm
|
|
quartus $(TOP)_synplify.qpf
|
|
|
|
quartus-map: $(TOP)_quartus.qsf quartus-vqm
|
|
$(QUARTUS_MAP) --import_settings_files=on --export_settings_files=off $(TOP)_quartus -c $(TOP)_quartus
|
|
$(if $(strip $(QSF_NEXT)),$(QUARTUS_SH) -t $(QSF_NEXT) quartus_map $(TOP)_quartus $(TOP)_quartus,)
|
|
|
|
quartus-route: $(TOP)_quartus.qsf
|
|
$(QUARTUS_CDB) --merge $(TOP)_quartus
|
|
$(QUARTUS_FIT) --import_settings_files=off --export_settings_files=off $(TOP)_quartus -c $(TOP)_quartus
|
|
$(if $(strip $(QSF_NEXT)),$(QUARTUS_SH) -t $(QSF_NEXT) quartus_fit $(TOP)_quartus $(TOP)_quartus,)
|
|
$(QUARTUS_ASM) --import_settings_files=off --export_settings_files=off $(TOP)_quartus -c $(TOP)_quartus
|
|
$(if $(strip $(QSF_NEXT)),$(QUARTUS_SH) -t $(QSF_NEXT) quartus_asm $(TOP)_quartus $(TOP)_quartus,)
|
|
$(QUARTUS_STA) $(TOP)_quartus
|
|
|
|
quartus-prog-fpga:
|
|
$(QUARTUS_PGM) -c $(ALTCABLE) -m JTAG -o p\;$(TOP)_quartus.sof
|
|
|
|
quartus-prog-fpga-ref:
|
|
cp bitfiles/$(TOP).sof $(TOP)_ref.sof
|
|
$(QUARTUS_PGM) -c $(ALTCABLE) -m JTAG -o p\;$(TOP)_ref.sof
|
|
|
|
quartus-srec:
|
|
$(QUARTUS_PGM)
|
|
|
|
quartus-clean:
|
|
-rm -rf db *.syr *.qws automake.log dumpdata.txt \
|
|
*.rpt *.done *.eqn *.pof *.summary *.ttf *.pin *.sof \
|
|
*.jam *.jbc cmp_state.ini simulation undo_redo.txt *.vqm *.qdf \
|
|
*.csf *.psf *.quartus *.smsg .undefinedlib .jaguarc .unorderedFilePath \
|
|
incremental_db PLLJ_PLLSPE_INFO.txt *.jdi $(TOP)_quartus.sld
|
|
|
|
######## Synplify targets ########################
|
|
|
|
SYNPVHDL = add_file -vhdl -lib
|
|
SYNPVLOG = add_file -verilog
|
|
SYNPLIBSKIP = $(ASICLIBS)
|
|
XSYNPLIBSKIP = $(SYNPLIBSKIP:%=%|) dummy
|
|
XSYNPDIRSKIP = $(SYNPLIBSKIP:%=%|) dummy
|
|
|
|
SYNPSKIP = snpsmul.vhd
|
|
|
|
SYNPLIFY = synplify_pro
|
|
|
|
|
|
synplify synplify-map: $(TOP)_synplify.prj synplify/$(TOP).edf
|
|
|
|
synplify-launch: $(TOP)_synplify.prj
|
|
$(SYNPLIFY) $(TOP)_synplify.prj && \
|
|
if test -r synplify//$(TOP).edn; then \
|
|
echo "GRLIB: Detected synplify/$(TOP).edn, copying to synplify/$(TOP).edf"; \
|
|
cp synplify/$(TOP).edn synplify/$(TOP).edf; \
|
|
fi &
|
|
-@mkdir synplify>& tmp.err; touch synplify/dummy.mif
|
|
-@mv synplify/*.mif .
|
|
|
|
synplify/$(TOP).edf: $(VHDLSYNFILES) $(VERILOGSYNFILES)
|
|
$(SYNPLIFY) -batch $(TOP)_synplify.prj
|
|
@touch synplify/dummy.mif
|
|
-@mv synplify/*.mif .
|
|
@if test -r synplify/$(TOP).edn; then \
|
|
echo "GRLIB: Detected synplify/$(TOP).edn, copying to synplify/$(TOP).edf"; \
|
|
cp synplify/$(TOP).edn synplify/$(TOP).edf; \
|
|
fi;
|
|
|
|
$(TOP)_synplify.prj: compile.synp
|
|
@echo source compile.synp > $(TOP)_synplify.prj
|
|
@for i in $(VERILOGOPTSYNFILES) $(VERILOGSYNFILES); do \
|
|
if test -r $$i; then \
|
|
echo add_file "-verilog -lib work" $$i >> $(TOP)_synplify.prj; \
|
|
fi; \
|
|
done
|
|
@for i in $(VHDLOPTSYNFILES) $(VHDLSYNFILES); do \
|
|
if test -r $$i; then \
|
|
echo add_file "-vhdl -lib work" $$i >> $(TOP)_synplify.prj; \
|
|
fi; \
|
|
done
|
|
@if test -r $(GRLIB)/netlists/xilinx/$(NETLISTTECH)/edifsyn.txt; then \
|
|
for q in `cat $(GRLIB)/netlists/xilinx/$(NETLISTTECH)/edifsyn.txt`; do \
|
|
if test -r $(GRLIB)/netlists/xilinx/$(NETLISTTECH)/$$q; then \
|
|
echo add_file -edif $(GRLIB)/netlists/xilinx/$(NETLISTTECH)/$$q >> $(TOP)_synplify.prj ; \
|
|
fi; \
|
|
done; \
|
|
fi
|
|
@for i in $(SDCFILE); do echo add_file "-constraint " $$i >> $(TOP)_synplify.prj; done
|
|
@for i in $(FDCFILE); do echo add_file "-fpga_constraint " $$i >> $(TOP)_synplify.prj; done
|
|
@cat $(GRLIB)/bin/synplify.prj | sed -e s/TOP/$(TOP)/ \
|
|
-e s/TECHNOLOGY/$(TECHNOLOGY)/ \
|
|
-e s/PART/$(PART)/ -e s/SPEED/$(SPEED)/ -e s/SYNFREQ/$(SYNFREQ)/ >> $(TOP)_synplify.prj
|
|
ifneq ("$(PACKAGE)","")
|
|
@echo set_option -package $(PACKAGE) >> $(TOP)_synplify.prj
|
|
endif
|
|
ifneq ("$(SYNPVLOGDEFS)","")
|
|
@echo set_option -hdl_define -set \"$(SYNPVLOGDEFS)\" >> $(TOP)_synplify.prj
|
|
endif
|
|
ifneq ("$(SYNPVLOGINC)","")
|
|
@echo set_option -include_path \"$(SYNPVLOGINC)\" >> $(TOP)_synplify.prj
|
|
endif
|
|
ifneq ("$(SYNPVLOGSTD)","")
|
|
@echo set_option -vlog_std \"$(SYNPVLOGSTD)\" >> $(TOP)_synplify.prj
|
|
endif
|
|
@echo $(SYNPOPT) >> $(TOP)_synplify.prj
|
|
@echo impl -active \"synplify\" >> $(TOP)_synplify.prj
|
|
|
|
synplify-clean:
|
|
-rm -rf synplify *.prd stdout.log *.mif syntmp.* synplify_* \
|
|
$(TOP).map $(TOP)_summary.xml synlog.tcl
|
|
|
|
######## Precision targets ########################
|
|
|
|
PRECLIBSKIPX = $(SIMLIBS) $(ASICLIBS)
|
|
PRECLIBSKIP = $(PRECLIBSKIPX:%=%|) dware
|
|
PRECDIRSKIP = $(PRECLIBSKIPX:%=%|) dware
|
|
PRECSKIP = dummy
|
|
|
|
|
|
PRECISION=precision
|
|
|
|
precision precision-map: $(TOP)_precision.tcl $(TOP).psp precision/$(TOP).edf
|
|
|
|
$(TOP).psp: $(TOP)_precision.tcl
|
|
$(PRECISION) -shell $(PRECISIONOPT) -file $(TOP)_precision.tcl
|
|
|
|
precision-launch: $(TOP).psp
|
|
$(PRECISION) $(PRECISIONOPT) -project $(TOP).psp
|
|
|
|
precision/$(TOP).edf: $(TOP)_precision.tcl $(VHDLSYNFILES) $(VERILOGSYNFILES)
|
|
$(PRECISION) -shell $(PRECISIONOPT) -file $(TOP)_precrun.tcl
|
|
|
|
precision-clean:
|
|
-rm -rf *.psp stdout.log prec.log $(TOP)_prec* precision* $(TOP)_temp*
|
|
|
|
######### DARE targets ###############
|
|
|
|
ifneq ("$(GRLIB)","")
|
|
-include $(GRLIB)/bin/Makefile.dare
|
|
endif
|
|
|
|
remove-dare:
|
|
-@rm -r $(GRLIB)/lib/tech/dare/components/*.v
|
|
@echo "" > $(GRLIB)/lib/tech/dare/components/vlogsim.txt
|
|
|
|
######### Microsemi targets ###############
|
|
PROASIC3LIBS = proasic3 proasic3e proasic3l
|
|
XLIBEROLIBSKIP = $(ASICLIBS) $(LATTICELIBS) \
|
|
$(ALTERALIBS) $(XILINXLIBS) $(PROASIC3LIBS) fusion smartfusion2 axcelerator rtg4
|
|
LIBEROLIBSKIP = $(XLIBEROLIBSKIP:%=%|) dummy
|
|
LIBERODIRSKIPX = $(ASICLIBS) $(XILINXLIBS) $(ALTERALIBS) $(LATTICELIBS)
|
|
LIBERODIRSKIP = $(LIBERODIRSKIPX:%=%|) dummy
|
|
LIBEROSKIP = dummy
|
|
|
|
ifeq ("$(TECHNOLOGY)","RTG4")
|
|
LIBEROPRECOMPLIBDIR=rtg4
|
|
else
|
|
LIBEROPRECOMPLIBDIR=smartfusion2
|
|
endif
|
|
|
|
LIBERO = libero
|
|
|
|
# DESIGNER_LAYOUT_OPT can be overridden i template design Makefile
|
|
ifeq ("$(DESIGNER_LAYOUT_OPT)","")
|
|
ifeq ("$(TECHNOLOGY)","Axcelerator")
|
|
DESIGNER_LAYOUT_OPT=-effort_level 5 -timing_driven -incremental \"OFF\"
|
|
else
|
|
DESIGNER_LAYOUT_OPT=-timing_driven -incremental \"OFF\"
|
|
endif
|
|
endif
|
|
|
|
ifeq ("$(DESIGNER_TECHNOLOGY)","")
|
|
DESIGNER_TECHNOLOGY=$(TECHNOLOGY)
|
|
endif
|
|
|
|
ifeq ("$(DESIGNER_PART)","")
|
|
DESIGNER_PART=$(PART)
|
|
endif
|
|
|
|
|
|
|
|
ifneq ("$(GRLIB)","")
|
|
-include $(GRLIB)/bin/Makefile.microsemi
|
|
endif
|
|
|
|
actel-clean:
|
|
-rm -rf *.adb report*.log ./actel hdl constraint \
|
|
actgen constraint designer package phy_synthesis simulation \
|
|
smartgen stimulus synthesis viewdraw libero x $(TOP)_libero.prj \
|
|
libero_sim_files libero_syn_files coreconsole \
|
|
libero.do component *.pdb *.pdb.depends *.stp \
|
|
*.sdb *_layout.log *.dtf from.ufc from.mem \
|
|
$(TOP)_libero.prjx tooldata $(TOP)_libero.tcl $(TOP)_libero/
|
|
|
|
remove-microsemi: remove-microsemi-precomp
|
|
-@for i in fusion proasic3 proasic3e proasic3l axcelerator smartfusion2 rtg4; do \
|
|
rm $(GRLIB)/lib/tech/$$i/components/$$i.v* ; \
|
|
done
|
|
|
|
remove-microsemi-precomp:
|
|
-@rm -r $(GRLIB)/lib/tech/smartfusion2/precomp_libraries/smartfusion2
|
|
-@rm -r $(GRLIB)/lib/tech/rtg4/precomp_libraries/rtg4
|
|
|
|
############ Synopsys ########################
|
|
|
|
install-gtech:
|
|
@echo GTECH source path: $(SNPS_HOME)/packages/gtech/src; \
|
|
if test -r $(SNPS_HOME)/packages/gtech/src; then \
|
|
cp $(SNPS_HOME)/packages/gtech/src/*.vhd $(GRLIB)/lib/tech/gtech/simprims; \
|
|
fi
|
|
|
|
remove-gtech:
|
|
@-rm $(GRLIB)/lib/tech/gtech/simprims/*.vhd
|
|
|
|
|
|
############ Synopsys DC targets ########################
|
|
|
|
DCVHDL = analyze -f VHDL -library
|
|
DCVLOG = analyze -f VERILOG -library
|
|
FMVHDL = read_vhdl -r -libname
|
|
FMVLOG = read_verilog -r -libname
|
|
ifeq ("$(DCSCRIPT)","")
|
|
DCSCRIPT=$(TOP)_dc.tcl
|
|
endif
|
|
ifeq ("$(FMSCRIPT)","")
|
|
FMSCRIPT=$(TOP)_fm.tcl
|
|
endif
|
|
DCLIBSKIP = $(FPGALIBS) corePCIF
|
|
DCDIRSKIP = $(FPGALIBS) corePCIF pci/pcif
|
|
#DCDIRSKIP = corePCIF pcif
|
|
XDCLIBSKIP = $(DCLIBSKIP:%=% | ) dummy
|
|
XDCDIRSKIP = $(DCDIRSKIP:%=% | ) dummy
|
|
DCSKIP = $(DCLIBSKIP:%=*_%.vhd | ) dummy
|
|
|
|
dc-launch: $(TOP)_dc.tcl
|
|
@-mkdir -p synopsys
|
|
design_compiler&
|
|
|
|
dc: $(TOP)_dc.tcl
|
|
@-mkdir -p synopsys
|
|
dc_shell-xg-t $(DCOPT) -f $(DCSCRIPT) | tee $(DCSCRIPT).log
|
|
|
|
fm: $(TOP)_dc.tcl
|
|
@-mkdir -p synopsys
|
|
fm_shell $(FMOPT) -f $(FMSCRIPT) | tee $(FMSCRIPT).log
|
|
|
|
$(TOP)_dc.tcl: compile.dc
|
|
@cp $(GRLIB)/bin/top.dc $(TOP)_dc.tcl
|
|
@for i in $(VERILOGOPTSYNFILES) $(VERILOGSYNFILES); do \
|
|
if test -r $$i; then \
|
|
echo $(DCVLOG) work $$i >> $(TOP)_dc.tcl; \
|
|
echo $(FMVLOG) work $$i >> fmref.tcl; \
|
|
fi; \
|
|
done
|
|
@for i in $(VHDLOPTSYNFILES) $(VHDLSYNFILES); do \
|
|
if test -r $$i; then \
|
|
echo $(DCVHDL) work $$i >> $(TOP)_dc.tcl; \
|
|
echo $(FMVHDL) work $$i >> fmref.tcl; \
|
|
fi; \
|
|
done
|
|
@echo elaborate $(TOP) >> $(TOP)_dc.tcl
|
|
|
|
dc-clean:
|
|
-rm -rf synopsys view_command.log command.log dumpdata.txt filenames.log \
|
|
dc.log dwsvf* alib* $(TOP)_dc.tcl fmref.tcl fm_shell_command.log \
|
|
formality*.log *.svf $(DCSCRIPT).log $(DCSCRIPT).log.swp FM_WORK $(FMSCRIPT).log formality_svf *.mr *.pvl \
|
|
ARCH ENTI PACK *.log.swp
|
|
|
|
############ Cadence RTL Compiler ########################
|
|
|
|
RTLCVHDL = read_hdl -vhdl -lib
|
|
RTLCVLOG = read_hdl
|
|
RCSCRIPT=$(TOP).rc
|
|
|
|
NCVHDL = ncvhdl -nowarn DLCPTH -NOVITALCHECK -linedebug -v93 -nocopyright -work
|
|
NCVLOG = ncvlog -nowarn DLCPTH -nocopyright -linedebug $(NCVLOGOPT) -work
|
|
|
|
rc: $(TOP).rc
|
|
-mkdir rtlc
|
|
rc -files $(RCSCRIPT)
|
|
|
|
$(TOP).rc: compile.rc
|
|
@cp $(GRLIB)/bin/top.rc $(TOP).rc
|
|
@for i in $(VHDLOPTSYNFILES) $(VHDLSYNFILES); do \
|
|
if test -r $$i; then \
|
|
echo "read_hdl -vhdl -lib work" $$i >> $(TOP).rc; \
|
|
fi; \
|
|
done
|
|
# @for i in $(VERILOGOPTSYNFILES) $(VERILOGSYNFILES); do echo "read_hdl " $$i >> $(TOP).rc; done
|
|
@echo elaborate $(TOP) >> $(TOP).rc
|
|
|
|
rc-clean:
|
|
-rm -rf rtlc rc.log rc.cmd
|
|
|
|
######### Generic simulation target ###############
|
|
|
|
ifeq ("$(GRLIB_SIMULATOR)", "ALDEC")
|
|
SIM=riviera
|
|
else
|
|
SIM=vsim
|
|
endif
|
|
|
|
sim:
|
|
make $(SIM)
|
|
|
|
sim-run:
|
|
make $(SIM)-run
|
|
|
|
sim-launch:
|
|
make $(SIM)-launch
|
|
|
|
|
|
########## Generation of compile scripts ###############
|
|
prereqtools:= $(shell (export GRLIB=$(GRLIB) TOP=$(TOP) && tclsh $(GRLIB)/bin/scriptgen/dependencies.tcl))
|
|
|
|
targettools:= $(shell (export GRLIB=$(GRLIB) TOP=$(TOP) && tclsh $(GRLIB)/bin/scriptgen/targets.tcl))
|
|
|
|
empty:=
|
|
s:= $(empty) $(empty)
|
|
u:= |
|
|
|
|
scripts: $(prereqtools)
|
|
|
|
$(targettools): scriptgendone
|
|
|
|
VARIABLE_LIST := $(shell cat $(GRLIB)/bin/scriptgen/scriptgen_variables.txt)
|
|
|
|
scriptgen_variable_values.tcl:
|
|
@rm -f scriptgen_variable_values.tcl
|
|
@touch scriptgen_variable_values.tcl
|
|
@$(foreach v,$(VARIABLE_LIST), echo set $(v) {$(subst $(u),$(s),$($(v)))} >> scriptgen_variable_values.tcl ;)
|
|
|
|
scriptgendone: scriptgen_variable_values.tcl
|
|
@printf "$(shell export GRLIB=$(GRLIB) OS=$(OS) && tclsh $(GRLIB)/bin/scriptgen/main.tcl)"
|
|
|
|
|
|
|
|
######## Common cleaning ####################
|
|
|
|
clean: $(CLEAN) vsim-clean ise-clean ncsim-clean ghdl-clean synplify-clean quartus-clean \
|
|
actel-clean dc-clean rc-clean isp-clean precision-clean vsimsa-clean avhdl-clean \
|
|
vivado-clean planahead-clean riviera-clean fpro-clean vcs-clean
|
|
-rm -rf verilog.txt tkparse.exe main.tk ahbrom outdata ahbrom.bin
|
|
|
|
scripts-clean:
|
|
-rm -rf compile\.* libs.txt $(TOP)_quartus.qsf $(TOP)_synplify.qsf *.qpf ghdl.path \
|
|
compile\.* libs.do make\.* *.xst $(TOP)*_files.prj cds.lib *.npl $(TOP)_ise.tcl \
|
|
.config.old hdl.var $(TOP)_dc.tcl $(TOP).rc \
|
|
$(TOP)_synplify.prj $(SIMTOP).mpf \
|
|
$(TOP)_designer.tcl $(TOP)_designer_act.tcl \
|
|
modelsim.ini modelsim.ini.bak \
|
|
alibs.do avhdl.tcl riviera_ws_create.do $(EXTRACLEAN) \
|
|
make.ghdl simulation vivado scriptgendone scriptgen_variable_values.tcl
|
|
|
|
scriptgen-clean:
|
|
-rm -rf scriptgenwork
|
|
|
|
distclean: $(CLEAN) clean scripts-clean clean-xilinx-lib scriptgen-clean
|
|
|
|
libclean: remove-altera remove-unisim remove-microsemi remove-dare
|
|
|
|
none-clean:
|
|
|
|
######## xconfig targets ####################
|
|
|
|
ifneq ($(CURLIB), $(GRLIB))
|
|
include $(GRLIB)/bin/Makefile.config
|
|
endif
|
|
|
|
TKCONFIG= $(GRLIB)/bin/tkconfig
|
|
|
|
tkparse.o: $(TKCONFIG)/tkparse.c
|
|
$(CC) -g -c $<
|
|
|
|
tkcond.o: $(TKCONFIG)/tkcond.c
|
|
$(CC) -g -c $<
|
|
|
|
tkgen.o: $(TKCONFIG)/tkgen.c
|
|
$(CC) -g -c $<
|
|
|
|
|
|
tkparse.exe: tkparse.o tkcond.o tkgen.o
|
|
$(CC) -g tkparse.o tkcond.o tkgen.o -o tkparse.exe
|
|
|
|
lconfig.tk: config.in $(CONFDEP) $(HELPDEP)
|
|
make main.tk
|
|
cat $(TKCONFIG)/header.tk main.tk $(TKCONFIG)/tail.tk > lconfig.tk
|
|
chmod a+x lconfig.tk
|
|
|
|
main.tk : config.in tkparse.exe $(CONFDEP) $(HELPDEP)
|
|
./tkparse.exe config.in $(GRLIB) $(EXTRALIBS) > main.tk
|
|
|
|
$(GRLIB)/bin/Makefile.config:
|
|
make -C $(GRLIB) -f bin/Makefile cfgdep
|
|
|
|
xconfig: lconfig.tk $(GRLIB)/bin/Makefile.config
|
|
@if test -r "/usr/bin/wish84.exe"; then /usr/bin/wish84.exe -f lconfig.tk; \
|
|
else \
|
|
if test -r "/mingw/bin/wish84.exe"; then \
|
|
if !(test -r "/mingw/bin/echo.bat"); then \
|
|
cp $(GRLIB)/bin/echo.bat /mingw/bin/echo.bat; \
|
|
fi; \
|
|
if !(test -r "/mingw/bin/wish"); then \
|
|
cp $(GRLIB)/bin/wish /mingw/bin/wish; \
|
|
fi; \
|
|
fi; \
|
|
unset LD_LIBRARY_PATH ; \
|
|
wish -f lconfig.tk; \
|
|
fi; \
|
|
if test $$? = "2" ; then \
|
|
cpp -P -DGRLIB_PATH=$(GRLIB) config.vhd.in > config.vhd; \
|
|
echo config.vhd created; \
|
|
fi
|
|
|
|
xdep:
|
|
cpp -P -DGRLIB_PATH=$(GRLIB) config.vhd.in > config.vhd
|
|
|
|
boardconfig:
|
|
cp $(GRLIB)/boards/$(BOARD)/config .config
|
|
cp $(GRLIB)/boards/$(BOARD)/config.h config.h
|
|
make xdep
|
|
|
|
oldconfig: lconfig.tk $(GRLIB)/bin/Makefile.config
|
|
@if test -r "/usr/bin/wish84.exe"; then /usr/bin/wish84.exe -f lconfig.tk -regen; \
|
|
else \
|
|
if test -r "/mingw/bin/wish84.exe"; then \
|
|
if !(test -r "/mingw/bin/echo.bat"); then \
|
|
cp $(GRLIB)/bin/echo.bat /mingw/bin/echo.bat; \
|
|
fi; \
|
|
if !(test -r "/mingw/bin/wish"); then \
|
|
cp $(GRLIB)/bin/wish /mingw/bin/wish; \
|
|
fi; \
|
|
fi; \
|
|
unset LD_LIBRARY_PATH ; \
|
|
wish -f lconfig.tk -regen; \
|
|
fi; \
|
|
if test $$? = "2" ; then \
|
|
cpp -P -DGRLIB_PATH=$(GRLIB) config.vhd.in > config.vhd; \
|
|
echo config.vhd recreated from .config; \
|
|
fi
|
|
|
|
.PHONY: xst precision synplify scripts bitfiles planahead planahead-launch vivado vivado-launch
|
|
|
|
|
|
|
|
############ Maintenance - do not remove! ##################
|
|
|
|
cfgdep:
|
|
@printf "CONFDEP = " > bin/Makefile.config
|
|
@for i in `find lib -name '*.in' -print | grep -v vhd | xargs`; do \
|
|
echo -n '$$(GRLIB)'/$$i >> bin/Makefile.config ; \
|
|
printf " \\" >> bin/Makefile.config ; \
|
|
printf "\n" >> bin/Makefile.config ; \
|
|
done;
|
|
@printf " \n" >> bin/Makefile.config
|
|
@printf "HELPDEP = " >> bin/Makefile.config
|
|
@for i in `find lib -name '*.in.help' -print | xargs`; do \
|
|
echo -n '$$(GRLIB)'/$$i >> bin/Makefile.config ; \
|
|
printf " \\" >> bin/Makefile.config ; \
|
|
printf "\n" >> bin/Makefile.config ; \
|
|
done;
|
|
@printf " \n" >> bin/Makefile.config
|
|
|
|
|
|
ifneq ("$(GRLIB)","")
|
|
-include $(GRLIB)/bin/Makefile.dist
|
|
-include $(GRLIB)/bin/Makefile.test
|
|
endif
|