Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.naic.edu/~phil/hardware/pdev/fpga/gx/jfft/pdev/Makefile
Дата изменения: Thu Jun 26 04:28:50 2008
Дата индексирования: Sat Sep 6 20:06:09 2008
Кодировка:
#
# Jeff Mock
# 2030 Gough
# San Francisco, CA 94109
# jeff@mock.com
# (c) 2004, 2006
#

# Main parameters for PFB
#
N = xfft
MAXLEN = 8192
IMP = behave
WIDTH = 18
IWIDTH = 12
CWIDTH = 16
WINDOW = hamming
OVERLAP = 4

# --bt=257
OPT = --rnd --ovl=${OVERLAP} --window=${WINDOW} \
--pfb --varlen --pfbby --pshift --noinit \
--iwidth=${IWIDTH} --cwidth=${CWIDTH} --bt=257

COEFF_OPT = --n=${LENGTH} --maxlen=${MAXLEN} --width=${CWIDTH} \
--fwid=${OVERLAP} --window=${WINDOW}

GEN = gen
RTL = rtl
SRC = ../src
CVER = cver
XFFT = ${GEN}/${N}.v
XILINX = /usr/xilinx


# How to load PFB filter coefficients
PFB_LOAD = PFB_COEFF_LOAD
# PFB_LOAD = PFB_COEFF_WRITE

# Testbench files
TBV = ${SRC}/top.v ${SRC}/test.v ${SRC}/glbl.v

# Set debug to get a VCD dump file and more output
# DEBUG = 1

# For FFT frequency sweep tests
#
FRAMES = 8
PSHIFT = 13\'h1555
AMP = 0.02
DELTA = 12
LENGTH = 64

# For plotting graphs
PLOT_PSHIFT = 13\'h1fff
PLOT_PTS = 600
MP = --mp=2 # Number of CPUs for sim

# Build verilog for the fancy PFB with variable length, PFB bypass
# and per-stage programmable downshift.
#
gen ${XFFT}: Makefile
-rm -rf ${GEN}
mkdir ${GEN}
perl ${SRC}/mkjfft \
--imp=${IMP} \
--n=${MAXLEN} \
--width=${WIDTH} \
--prefix=${N} \
--odir=${GEN} ${OPT}

# Build real Xilinx RTL for synthesis
#
rtl: Makefile
${MAKE} ${RTL}/${N}.v GEN=${RTL} IMP=virtex2

# Generate PFB filter coefficient tables, pretty much hard-wired for
# 8k with an overlap of 4.
#
${GEN}/coeff0: Makefile
-mkdir ${GEN}
perl ${SRC}/mkcoeff ${COEFF_OPT} \
--start=-1 --stop=-2 \
--fn=${GEN}/coeff0
perl ${SRC}/mkcoeff ${COEFF_OPT} \
--start=0 --stop=-1 \
--fn=${GEN}/coeff1
perl ${SRC}/mkcoeff ${COEFF_OPT} \
--start=1 --stop=0 \
--fn=${GEN}/coeff2
perl ${SRC}/mkcoeff ${COEFF_OPT} \
--start=2 --stop=1 \
--fn=${GEN}/coeff3

# short sweep (four frequencies plus noise) for each FFT length
#
fft_s:
${MAKE} AMP=0.2 DELTA=12 LENGTH=4 sweep_s
${MAKE} AMP=0.2 DELTA=12 LENGTH=8 sweep_s
${MAKE} AMP=0.1 DELTA=12 LENGTH=16 sweep_s
${MAKE} AMP=0.1 DELTA=12 LENGTH=32 sweep_s
${MAKE} AMP=0.1 DELTA=12 LENGTH=64 sweep_s
${MAKE} AMP=0.1 DELTA=12 LENGTH=128 sweep_s
${MAKE} AMP=0.05 DELTA=18 LENGTH=256 sweep_s
${MAKE} AMP=0.05 DELTA=18 LENGTH=512 sweep_s
${MAKE} AMP=0.02 DELTA=18 LENGTH=1024 sweep_s
${MAKE} AMP=0.02 DELTA=34 LENGTH=2048 sweep_s
${MAKE} AMP=0.01 DELTA=34 LENGTH=4096 sweep_s
${MAKE} AMP=0.01 DELTA=66 LENGTH=8192 sweep_s

# long sweep (40 frequencies plus noise) for each FFT length
#
fft_l:
${MAKE} AMP=0.2 DELTA=12 LENGTH=4 sweep_l
${MAKE} AMP=0.2 DELTA=12 LENGTH=8 sweep_l
${MAKE} AMP=0.1 DELTA=12 LENGTH=16 sweep_l
${MAKE} AMP=0.1 DELTA=12 LENGTH=32 sweep_l
${MAKE} AMP=0.08 DELTA=12 LENGTH=64 sweep_l
${MAKE} AMP=0.08 DELTA=12 LENGTH=128 sweep_l
${MAKE} AMP=0.05 DELTA=18 LENGTH=256 sweep_l
${MAKE} AMP=0.05 DELTA=18 LENGTH=512 sweep_l
${MAKE} AMP=0.02 DELTA=18 LENGTH=1024 sweep_l
${MAKE} AMP=0.02 DELTA=34 LENGTH=2048 sweep_l
${MAKE} AMP=0.01 DELTA=34 LENGTH=4096 sweep_l
${MAKE} AMP=0.01 DELTA=66 LENGTH=8192 sweep_l

# short CW sweep + noise (4 freqs)
#
sweep_s: ${N}.f ${TBV} ${SRCV} ${XFFT} fftt
perl ${SRC}/dosweep \
--width=${WIDTH} \
--iwidth=${IWIDTH} \
--n=${LENGTH} \
--delta=${DELTA} \
--frames=${FRAMES} \
--noise=${AMP} \
--cveropt=+define+PFBBY=1\'b1 \
--cveropt=+define+LENGTH=${LENGTH} \
--cveropt=+define+PSHIFT=${PSHIFT} \
--pshift=${PSHIFT} \
--amp=${AMP} \
--start=0.1 \
--stop=0.8 \
--cnt=4 \
--cmd=${N}.f

# longer CW sweep + noise (40 freqs)
#
sweep_l: ${N}.f ${TBV} ${SRCV} ${XFFT} fftt
perl ${SRC}/dosweep \
--width=${WIDTH} \
--iwidth=${IWIDTH} \
--n=${LENGTH} \
--delta=${DELTA} \
--frames=${FRAMES} \
--noise=${AMP} \
--cveropt=+define+PFBBY=1\'b1 \
--cveropt=+define+LENGTH=${LENGTH} \
--cveropt=+define+PSHIFT=${PSHIFT} \
--pshift=${PSHIFT} \
--amp=${AMP} \
--start=-0.95 \
--stop=0.95 \
--cnt=40 \
--cmd=${N}.f

# Command file for verilog simulation
#
${N}.f: Makefile ${SRC}/Makefile.defs ${XFFT}
rm -rf ${N}.f
echo "+define+WIDTH=${WIDTH}" >> ${N}.f
echo "+define+IWIDTH=${IWIDTH}" >> ${N}.f
echo "+define+FRAMES=${FRAMES}" >> ${N}.f
echo "+define+FFTMODULE=${N}" >> ${N}.f
echo "+define+VARLEN" >> ${N}.f
if [ -n "${DEBUG}" ] ; then \
echo "+define+DEBUG" >> ${N}.f ; \
fi
echo "+nointeractive" >> ${N}.f
echo "+notimingchecks" >> ${N}.f
echo "+licq_all+" >> ${N}.f
echo "+change_port_type" >> ${N}.f
echo "+libext+.vmd+.v" >> ${N}.f
echo "-y ${XILINX}/verilog/src/unisims" >> ${N}.f
echo "-y ${XILINX}/verilog/src/simprims" >> ${N}.f
for i in ${TBV} ${SRCV} ${GEN}/*.v ; do \
echo "$$i" >> ${N}.f ; \
done

fftplot0:
${MAKE} LENGTH=4 fft0.png
mv fft0.png fft0-4.png
${MAKE} LENGTH=8 fft0.png
mv fft0.png fft0-8.png
${MAKE} LENGTH=16 fft0.png
mv fft0.png fft0-16.png
${MAKE} LENGTH=32 fft0.png
mv fft0.png fft0-32.png
${MAKE} LENGTH=64 fft0.png
mv fft0.png fft0-64.png
${MAKE} LENGTH=128 fft0.png
mv fft0.png fft0-128.png
${MAKE} LENGTH=256 fft0.png
mv fft0.png fft0-256.png
${MAKE} LENGTH=512 fft0.png
mv fft0.png fft0-512.png
${MAKE} LENGTH=1024 fft0.png
mv fft0.png fft0-1024.png
${MAKE} LENGTH=2048 fft0.png
mv fft0.png fft0-2048.png
${MAKE} LENGTH=4096 fft0.png
mv fft0.png fft0-4096.png
${MAKE} LENGTH=8192 fft0.png
mv fft0.png fft0-8192.png


fft0.png: ${N}.f ${TBV} ${SRCV} ${XFFT} fftt
perl ${SRC}/doplot \
--width=${WIDTH} \
--iwidth=${IWIDTH} \
--n=${LENGTH} \
--frames=${FRAMES} \
--start=-12 \
--stop=12 \
--amp=0.60 \
--bins=0,1 \
--cnt=${PLOT_PTS} \
--fn=fft0.png \
--cmd=${N}.f \
--range=100 \
--cveropt=+define+PFBBY=1\'b1 \
--cveropt=+define+LENGTH=${LENGTH} \
--cveropt=+define+PSHIFT=${PLOT_PSHIFT} \
${MP}

pfbplot0:
${MAKE} LENGTH=4 pfb0.png
mv pfb0.png pfb0-4.png
${MAKE} LENGTH=8 pfb0.png
mv pfb0.png pfb0-8.png
${MAKE} LENGTH=16 pfb0.png
mv pfb0.png pfb0-16.png
${MAKE} LENGTH=32 pfb0.png
mv pfb0.png pfb0-32.png
${MAKE} LENGTH=64 pfb0.png
mv pfb0.png pfb0-64.png
${MAKE} LENGTH=128 pfb0.png
mv pfb0.png pfb0-128.png
${MAKE} LENGTH=256 pfb0.png
mv pfb0.png pfb0-256.png
${MAKE} LENGTH=512 pfb0.png
mv pfb0.png pfb0-512.png
${MAKE} LENGTH=1024 pfb0.png
mv pfb0.png pfb0-1024.png
${MAKE} LENGTH=2048 pfb0.png
mv pfb0.png pfb0-2048.png
${MAKE} LENGTH=4096 pfb0.png
mv pfb0.png pfb0-4096.png
${MAKE} LENGTH=8192 pfb0.png
mv pfb0.png pfb0-8192.png

pfb0.png: ${N}.f ${TBV} ${SRCV} ${XFFT} fftt
-rm -rf ${GEN}/coeff*
${MAKE} ${GEN}/coeff0
perl ${SRC}/doplot \
--width=${WIDTH} \
--iwidth=${IWIDTH} \
--n=${LENGTH} \
--frames=${FRAMES} \
--start=-12 \
--stop=12 \
--amp=0.60 \
--bins=0,1 \
--cnt=${PLOT_PTS} \
--fn=pfb0.png \
--cmd=${N}.f \
--range=100 \
--cveropt=+define+${PFB_LOAD} \
--cveropt=+define+PFBBY=1\'b0 \
--cveropt=+define+LENGTH=${LENGTH} \
--cveropt=+define+PSHIFT=${PLOT_PSHIFT} \
${MP}

# C program using fftw for comparison with FFT simulation
#
fftt: ${SRC}/fftt.c
gcc ${SRC}/fftt.c -o fftt -lm -lfftw3

clean:
rm -rf wave.vcd verilog.log ${N}.f fft.out sig1.mem sig2.mem
rm -rf ${N}*.v ${GEN} ${RTL} fftt fftw.out *.png
rm -rf plot