====== Using makefiles to automate digital design tasks ======
[ __[[vlsi:workbook2|Back]]__ ]
[[http://sunsite.ualberta.ca/Documentation/Gnu/make-3.79/html_chapter/make_7.html]]
[[http://www.cs.indiana.edu/hmg/le/project-home/xilinx/ise_13.2/ISE_DS/ISE/coregen/ip/xilinx/primary/com/xilinx/ip/cdn_axi_bfm/examples/Makefile]]
[[http://rhlug.pileus.org/wiki/Cadence_IUS]]
[[http://billauer.co.il/blog/2010/08/unisim-verilog-makefile-primitive-fuse-vlogcomp-ise/]]
[[http://mrbook.org/tutorials/make/]]
[[http://people.virginia.edu/~ll2bf/docs/various/flow_example.html]]
[[http://www.csee.umbc.edu/portal/help/VHDL/Makefile.cadence]]
[[http://www.ece.ucdavis.edu/~astill/Makefile]]
====== Makefile for Cadence Incisive tools ======
[[http://vak-opensource.googlecode.com/svn/trunk/hardware/systemverilog/uart-example/Makefile]] \\
[[https://groups.google.com/forum/#!topic/comp.lang.verilog/iMd4NMmko8s]]
''configure'' file:
##################################################################################
## General setup and preferences ##
##################################################################################
# Edit the following statements to fit your requirements
# Top-level design unit (e.g. testbench file)
TOP = test
# Configure source files
SRCDIR = ./src
TBDIR = ./testbench
#SOURCES = $(SRCDIR)/*.v $(TBDIR)/$(TOP).v
#SOURCES = $(SRCDIR)/*.vhd $(TBDIR)/$(TOP).vhd
SOURCES = $(TBDIR)/$(TOP).v
# Library setup
# LIBDIR = ./INCA_libs
LIBDIR = ./lib
CDSLIB = cds.lib
WORK = myLib
# Note!
# Your cds.lib library mapping file must contain a DEFINE statement
#
# DEFINE ./lib/
#
# Type
#
# linux% make worklib
#
# to mkdir a new work library ./lib/$(WORK) according to the WORK value
# specified in this Makefile
# Log directory (.log and .key files)
# usage: -logfile $(LOGDIR)/filename.log
LOGDIR = ./log
# Standard Delay Format (SDF) annotation directory
#SDFDIR = ./sdf
# Simulation results directory. By default, a waves.shm Cadence Signal History Manager
# (SHM) waveform database will be crearted under the ./shm directory, but feel free to
# use a VCD dump file
WAVEDIR = ./shm
#WAVEDIR = ./vcd
# change default snapshot name
# usage: -snapshot $(SNAPSHOT)
SNAPSHOT = simexe
# ncsim run mode (GUI, interactive or batch)
#RUNMODE = gui
RUNMODE = tcl
#RUNMODE = batch
\\
''Makefile'':
# Define general user preferences (e.g. libraries) in a ./configure file
include ./configure
##################################################################################
## Tools options and command line switches ##
##################################################################################
# Incisive top installation directory
CDS_INST_DIR = $(shell ncroot)
# default hdl.var
HDLVAR = $(CDS_INST_DIR)/tools/inca/files/hdl.var
# Compiler executable
CC = ncvlog
#CC = ncvhdl
# Elaborator executable
ELABORATOR = ncelab
# Simulator executable
SIMULATOR = ncsim
# ncls executable
LS = ncls
# Remove command
RM = rm -rf
# SimVision options can be passed to ncsim/irun
# executables with the -simvisargs switch:
# -simvisargs " $(SIMVISARGS)"
# Use simvision -help for more information
SIMVISARGS = -cdslib $(CDSLIB) \
-logfile $(LOGDIR)/simvision.log \
-keyfile $(LOGDIR)/simvision.key \
-diagfile $(LOGDIR)/simvision.diag \
-nosplash \
-waves
# Note!
# You must pass SimVision options to ncsim/irun in quotes!
# Furthermore, you must also leave a blank space before the
# first option (Tcl syntax error otherwise)
# nclaunch options
# Use nclaunch -help for more information
NCLAUNCHOPTS = -work $(WORK) \
-cdslib $(CDSLIB) \
#-input ./scripts/run.tcl \
-keyfile $(LOGDIR)/nclaunch.key
# ncvhdl options
# Use ncvhdl -help for more information
NCVHDLOPTS = -work $(WORK) \
-cdslib $(CDSLIB) \
-hdlvar $(HDLVAR) \
-v93 \
-errormax 15 \
-update \
-linedebug \
-status \
-smartorder \
-logfile $(LOGDIR)/ncvhdl.log
# ncvlog options
# Use ncvlog -help for more information
NCVLOGOPTS = -work $(WORK) \
-cdslib $(CDSLIB) \
-hdlvar $(HDLVAR) \
-errormax 15 \
-update \
-linedebug \
-status \
-logfile $(LOGDIR)/ncvlog.log
# ncelab options
# Use ncelab -help for more information
NCELABOPTS = -work $(WORK) \
-cdslib $(CDSLIB) \
-hdlvar $(HDLVAR) \
-snapshot $(SNAPSHOT) \
-errormax 15 \
-update \
-access +rwc \
-status \
-logfile $(LOGDIR)/ncelab.log
# ncsim options
# Use ncsim -help for more information
NCSIMOPTS = -$(RUNMODE) \
-cdslib $(CDSLIB) \
-hdlvar $(HDLVAR) \
-run \
-errormax 15 \
-update \
-status \
-simvisargs " $(SIMVISARGS)" \
-logfile $(LOGDIR)/ncsim.log \
-keyfile $(LOGDIR)/ncsim.key \
-input ./scripts/shm.tcl \
# Linting tool options (missing...)
#HALOPTS =
# irun options (missing...)
# User irun -helpall for more information
IRUNOPTS = -$(RUNMODE) \
-v $(CDSLIB) \
-l $(LOGDIR)/irun.log \
-k $(LOGDIR)/irun.key \
-access +rwc \
-exit \
-top $(TOP) \
-simvisargs " $(SIMVISARGS)"
# Xterm appearance
XTERM_APPEARANCE = -fg black -bg grey
##################################################################################
## make targets implementation (DO NOT EDIT!) ##
##################################################################################
# Target: default
# By default, just call the help target
default: help
# Target: worklib
# Create a new work library $(LIBDIR)/$(WORK)
worklib: clean_all
@mkdir $(LIBDIR)/$(WORK)
@echo "DEFINE $(WORK) $(LIBDIR)/$(WORK)" >> $(CDSLIB)
@echo "INCLUDE $(CDS_INST_DIR)/tools/inca/files/cds.lib" >> $(CDSLIB)
@echo "Added $(WORK) and default libraries to $(CDSLIB) file"
# Target: list
# Lists the work library contents
list:
$(LS) -cdslib $(CDSLIB) -hdlvar $(HDLVAR) -logfile $(LOGDIR)/ncls.log -library $(WORK)
# Target: list_all
# Lists the contents of all libraries defined in the $(CDSLIB) file
list_all:
$(LS) -cdslib $(CDSLIB) -hdlvar $(HDLVAR) -logfile $(LOGDIR)/ncls.log -all
# Target: nclaunch
# Run NCLaunch with a few additional switches
nclaunch: clean
nclaunch $(NCLAUNCHOPTS) &
# Target: prepare
# Compile and elaborate the design without simulating
prepare: clean
$(CC) $(NCVLOGOPTS) $(SOURCES)
$(ELABORATOR) $(NCELABOPTS) $(WORK).$(TOP)
# Target: sim
# Compile, elaborate and simulate the design
sim: prepare
xterm $(XTERM_APPEARANCE) -e $(SIMULATOR) $(NCSIMOPTS) $(WORK).$(SNAPSHOT) &
# Target: update
# Compile, elaborate and simulate the design
update: prepare
# Target: results
results:
simvision $(SIMVISARGS) $(SNAPSHOT) &
# Target: all
# single-step compilation/elaboration/simulation using irun
#all:
# irun $(IRUNOPTS) $(SOURCES)
# Target: lint
# call Incisive HDL Analysis and Lint (HAL)
#lint: prepare
# irun
# Target: clean
# delete all log and backup files
clean:
@find ./ -name '*.log*' -exec $(RM) {} \;
@find ./ -name '.nclaunch*' -exec $(RM) {} \;
@find ./ -name '*.key*' -exec $(RM) {} \;
@find ./ -name '*~' -exec $(RM) {} \;
@find ./ -name '*.diag' -exec $(RM) {} \;
@find ./ -name '*.sim' -exec $(RM) {} \;
@echo "Deleted all log and backup files."
# Target: clean all
# delete everything (libraries, cds.lib library mapping files,
# hdl.var option files and SHM waveform databases)
clean_all:
@find ./ -name '*.log*' -exec $(RM) {} \;
@find ./ -name '.nclaunch*' -exec $(RM) {} \;
@find ./ -name '*.key*' -exec $(RM) {} \;
@find ./ -name '*~' -exec $(RM) {} \;
@find ./ -name '*.lib' -exec $(RM) {} \;
@find ./ -name '*.var' -exec $(RM) {} \;
@find ./ -name '*.diag' -exec $(RM) {} \;
@find ./ -name '*.sim' -exec $(RM) {} \;
@$(RM) INCA_libs
@$(RM) ./lib/*
@$(RM) ./.simvision
@$(RM) ~/.simvision
@$(RM) ./shm/*
# Target: help
# Display information about all available targets
help:
@echo " "
@echo " Usage: "
@echo " "
@echo " make "
@echo " "
@echo " Available targets are: "
@echo " "
@echo " help -- Prints this help "
@echo " worklib -- Creates a new work library $(LIBDIR)/$(WORK) "
@echo " list -- Display the contents of the $(WORK) library "
@echo " list_all -- Display the contents of all $(CDSLIB) libraries "
@echo " nclaunch -- Start NCLaunch attached to the current environment setup "
@echo " prepare -- Compile and elaborate the design without simulating "
@echo " sim -- Compile, elaborate and simulate the design in $(RUNMODE)-mode "
@echo " lint -- Call Incisive HAL linting tool (not yet implemented) "
@echo " clean -- Delete all log files and other temporary files "
@echo " clean_all -- Delete everything (libraries, waveforms etc.) "
@echo " "
Simple ''./scripts/shm.tcl'' script for NCSim:
database -open waves -into ./shm/waves.shm -default
probe -create -shm -all -variables -depth all
====== Makefile for Cadence RTL Compiler (RC) ======
[[http://people.virginia.edu/~ll2bf/docs/various/flow_example.html]] \\
[[http://soc.eurecom.fr/EDC/cadence_rc_quick_start/src/Makefile]]
# log directory
LOGDIR = ./log
# RTL Compiler executable
RC = rc
RM = rm -f
# RTL Compiler command line options
RCOPTS = -gui \
-logfile $(LOGDIR)/rc.log \
-cmdfile $(LOGDIR)/rc.cmd \
-overwrite \
-files ./scripts/synthesize.tcl
# Target: syn
# call Cadence RTL Compiler with input main Tcl script
syn: clean
$(RC) $(RCOPTS)
# Target: clean
# delete all log and backup files
clean:
@find ./ -name '*.log*' -exec $(RM) {} \;
@find ./ -name '*.cmd*' -exec $(RM) {} \;
@find ./ -name '*~' -exec $(RM) {} \;
====== Makefile Cadence Encounter Digital Implementation (EDI) ======
target:
$(EDI) $(EDIOPTS)
====== ======
\\
----
Last update: [[pacher@NOSPAMto.infn.it|Luca Pacher]] - Apr 24, 2014
~~NOTOC~~