-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxst.mk
131 lines (88 loc) · 4.85 KB
/
xst.mk
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# Command to initialize the Xilinx environment
# (Feel free to change to the 64 bit version if necessary.)
#XILINX_INIT = source /sw/xilinx/ise_11.1i/ISE/settings32.sh;
#XILINX_INIT = source /extra/ise_11.1/ISE/settings32.sh;
# This rule is responsible for creating the XST synthesis script and
# the PRJ file containing the name of the files we want to synthesize
.PRECIOUS: $(PROJNAME)-synthdir/%.scr $(PROJNAME)-synthdir/%.prj %.ncd $(PROJNAME)-synthdir/%.ngc $(PROJNAME)-synthdir/%.ngd $(PROJNAME)-synthdir/%_map.ncd $(PROJNAME)-synthdir/%.ncd $(PROJNAME)-synthdir/%.edf %.ncd %.bit
$(PROJNAME)-synthdir/xst/synth/design.scr: $(S)
$(XILINX_INIT) xwebtalk -user off
@echo
@echo '*** Creating synthesis scripts ***'
@echo
mkdir -p $(@D)
# We first create the project file
@rm -f [email protected]
@echo "set -tmpdir tmpdir" > [email protected]
@echo "run -ifn design.prj" >> [email protected]
@echo "-ofn design.ngc" >> [email protected]
# The following lines finds the first specified synthesizable file,
# removes the file extension by using sed and then removing the
# directory part of the file by using basename. This is then used as
# our top module!
echo "-top $$(basename $$(echo $(firstword $(S)) | sed 's/\..*$$//'))" >> [email protected]
echo "-p $(PART)" >> [email protected]
echo $(XST_OPT) >> [email protected]
# First enter all Verilog files into the project file, then all VHDL files
rm -f $(@D)/design.prj
touch $(@D)/design.prj
$(foreach i,$(filter %.v,$(S)), echo 'verilog work "$(call fixpath3,$(i))"' >> $(@D)/design.prj;)
$(foreach i,$(filter %.vhd,$(S)), echo 'vhdl work "$(call fixpath3,$(i))"' >> $(@D)/design.prj;)
$(foreach i,$(filter %.vhdl,$(S)), echo 'vhdl work "$(call fixpath3,$(i))"' >> $(@D)/design.prj;)
mv [email protected] $@
# Synthesize the design based on the synthesis script
# Clean out temporary directories to be sure no stale data is left...
$(PROJNAME)-synthdir/xst/synth/design.ngc: $(PROJNAME)-synthdir/xst/synth/design.scr
@echo
@echo '*** Synthesizing ***'
@echo
rm -rf $(@D)/tmpdir
mkdir -p $(@D)/tmpdir
rm -rf $(@D)/xst
mkdir -p $(@D)/xst
cd $(@D); $(XILINX_INIT) xst -ifn design.scr -ofn design.syr
POSTSYNTHSIMNETLIST=$(PROJNAME)-synthdir/xst/synth/design_postsynth.vhd
$(POSTSYNTHSIMNETLIST): $(PROJNAME)-synthdir/xst/synth/design.ngc
@echo
@echo '*** Creating post synthesis netlist $* ***'
@echo
$(XILINX_INIT) netgen -w -ofmt vhdl $(@D)/design.ngc $@
MODELSIM_POSTSYNTH_OPTIONS=-L unisim
# TODO: Don't recompile all files all the time!
PARSIM: work $(PROJNAME)-synthdir/layoutdefault/design_postpar.vhd SIMTBFILES
vcom +acc $(PROJNAME)-synthdir/layoutdefault/design_postpar.vhd
cp $(PROJNAME)-synthdir/layoutdefault/design_postpar.sdf .
vsim -sdfmax /uut=$(PROJNAME)-synthdir/layoutdefault/design_postpar.sdf -L simprim $$(basename $$(echo $(firstword $(T)) | sed 's/\..*$$//'))
# TODO: Don't recompile all files all the time!
PARSIMC: work $(PROJNAME)-synthdir/layoutdefault/design_postpar.vhd SIMTBFILES
vcom +acc $(PROJNAME)-synthdir/layoutdefault/design_postpar.vhd
vsim -sdfmax /uut=$(PROJNAME)-synthdir/layoutdefault/design_postpar.sdf -L simprim $$(basename $$(echo $(firstword $(T)) | sed 's/\..*$$//')) -c -do 'run -a; quit -f'
# TODO: Don't recompile all files all the time!
POWERSIM: work $(PROJNAME)-synthdir/layoutdefault/design_postpar.vhd SIMTBFILES
vcom +acc $(PROJNAME)-synthdir/layoutdefault/design_postpar.vhd
vsim -sdfmax /uut=$(PROJNAME)-synthdir/layoutdefault/design_postpar.sdf -do 'vcd file activity.vcd;vcd add -r -internal -in -out uut/*; vcd on;run -a;vcd off;vcd flush;quit -f' -c -L simprim $$(basename $$(echo $(firstword $(T)) | sed 's/\..*$$//'))
$(XILINX_INIT) xpwr -v -a -s activity.vcd $(PROJNAME)-synthdir/layoutdefault/design.ncd
$(PROJNAME)-synthdir/synth/design.ngc: $(PROJNAME)-synthdir/xst/synth/design.ngc
mkdir -p $(@D)
cp $< $@
export XST_EXTRA_OPTIONS
dump_synthsettings:
@echo
@echo " *** Important settings for the Synthesis module ***"
@echo
@echo " Synthesis top module: $$(basename $$(echo $(firstword $(S)) | sed 's/\..*$$//'))"
@echo " Files to synthesize: $(S)"
@echo " Include directories: $(INCDIRS)"
@echo " FPGA part (PART): $(PART)"
@echo " Extra options to XST: $(XST_EXTRA_OPTIONS) (FIXME - not implemented yet in Makefile!)"
@echo
%.synth: sanitychecksynth
$(NICE) $(MAKE) -f Makefile $*-synthdir/synth/design.ngc PROJNAME="$*"
%.synthsim:
$(NICE) $(MAKE) -f Makefile SYNTHSIM PROJNAME="$*" S="$(S)" U="$(U)" XST_OPT="$(XST_OPT)" PART="$(PART)" T="$(T)" INCDIRS="$(INCDIRS)"
%.parsim:
$(NICE) $(MAKE) -f Makefile PARSIM PROJNAME="$*" S="$(S)" U="$(U)" XST_OPT="$(XST_OPT)" PART="$(PART)" T="$(T)" INCDIRS="$(INCDIRS)"
%.parsimc:
$(NICE) $(MAKE) -f Makefile PARSIMC PROJNAME="$*" S="$(S)" U="$(U)" XST_OPT="$(XST_OPT)" PART="$(PART)" T="$(T)" INCDIRS="$(INCDIRS)"
%.powersim:
$(NICE) $(MAKE) -f Makefile POWERSIM PROJNAME="$*" S="$(S)" U="$(U)" XST_OPT="$(XST_OPT)" PART="$(PART)" T="$(T)" INCDIRS="$(INCDIRS)"