Xilinx ISEをコマンドラインで使う

 最初はGUIでやってみて、どういうコマンドが実行されたかがcmd_logという拡張子のファイルに保存されるので、それを見てMakefileを書くのが良いかな。
 ここには書いていないけれども、ファイルの依存関係も書くと便利だと思う。
 今回のものはSynplify Premierを使っているので、それ向けになってる。Xilinxのツールだとxstだったかな。それぞれのコマンドの引数は-helpなどで出るのでそれを参考にするとか。


 とりあえずのサンプルとして。後で追記予定。

# Makefile sample
#
# usage :
#  make all	- synthesis
#  make clean	- clean up log, compiled files

CUR_DIR			= .

DESIGN			= hoge
DEVICE			= xc3s400-tq144-4 

XILINX_PATH		= $(subst \,/,$(XILINX)/bin/nt)

ifeq ($(SYNPLICITY),)
SYNPLICITY_BIN		= synplify_premier.exe
else
SYNPLICITY_BIN		= $(SYNPLICITY)
endif
SYNPLICITY_LICENSE	= synplifypremierdp

COREGEN_DIR		= ../coregen

PACK_FILE		= $(DESIGN)$(shell date +%y%m%d).tar.gz
PACK_LIST		= pack_list

CONF_FILE		= \
			$(DESIGN).prd \
			$(DESIGN).prj \
			$(DESIGN).sdc

OTHER_FILE		= \
			$(shell ls rpt*) \
			Makefile

CLEAN_FILE_LIST		= \
			_impactbatch.log \
			$(DESIGN).bld \
			$(DESIGN).data \
			$(DESIGN).edf \
			$(DESIGN).fse \
			$(DESIGN).gyd \
			$(DESIGN).htm \
			$(DESIGN).jed \
			$(DESIGN).map \
			$(DESIGN).mfd \
			$(DESIGN).mod \
			$(DESIGN).ncf \
			$(DESIGN).nga \
			$(DESIGN).ngd \
			$(DESIGN).pad\
			$(DESIGN).pnx \
			$(DESIGN).rpt \
			$(DESIGN).sap \
			$(DESIGN).srd \
			$(DESIGN).srm \
			$(DESIGN).srr \
			$(DESIGN).srs \
			$(DESIGN).szr \
			$(DESIGN).tlg \
			$(DESIGN).tspec \
			$(DESIGN).vm6 \
			$(DESIGN).xml \
			$(DESIGN)_build.xml \
			$(DESIGN)_pad.csv\
			rpt_$(DESIGN).areasrr \
			rpt_$(DESIGN)_areasrr.htm\
			run_options.txt \
			stdout.log \
			timing_report.htm \
			tmperr.err

CLEAN_DIR_LIST		= \
			$(DESIGN)_html \
			backup \
			syntmp \
			verif \
			_ngo

all: top

top: synthesis translate map par report

# build edf file
synthesis:
	$(SYNPLICITY_BIN) -licensetype $(SYNPLICITY_LICENSE) -batch $(DESIGN).prj

# build ngd file
translate:
	$(XILINX_PATH)/ngdbuild -verbose -quiet -i -dd _ngo -sd $(COREGEN_DIR) -nt timestamp -p $(DEVICE) $(DESIGN).edf $(DESIGN).ngd

# exec mapper
map:
	$(XILINX_PATH)/map -p $(DEVICE) -cm area -pr b -k 4 -c 100 -o $(DESIGN)_map.ncd $(DESIGN).ngd $(DESIGN).pcf

# exec place and route
par:
	$(XILINX_PATH)/par -w -ol std -t 1 $(DESIGN)_map.ncd $(DESIGN).ncd $(DESIGN).pcf

# build report file
report:
	$(XILINX_PATH)/trce -e 3 -s 4 -xml $(DESIGN) $(DESIGN).ncd -o $(DESIGN).twr $(DESIGN).pcf

# build bit file
bitgen:
	$(XILINX_PATH)/bitgen -m -f $(DESIGN).ut $(DESIGN).ncd $(DESIGN) $(DESIGN).pcf

# build mcs file
promgen:
	$(XILINX_PATH)/promgen -w -p mcs -c FF -o ./$(DESIGN).mcs -u 0 ./$(DESIGN).bit -x $(CONF_DEVICE)

clean:
	rm -f $(PACK_LIST) $(CLEAN_FILE_LIST)
	rm -Rf $(CLEAN_DIR_LIST)

# pack source etc.
$(PACK_LIST)::
	@for file in $(CONF_FILE) \
		$(OTHER_FILE); do \
		if [ -f $$file ]; then \
			echo $(CUR_DIR)/$$file; \
		fi \
	done

pack::
	@rm -f $(PACK_LIST)
	make -s $(PACK_LIST) -e CUR_DIR=$(CUR_DIR) pack_list > $(PACK_LIST)
	tar cfh - `cat $(PACK_LIST)` |gzip > $(PACK_FILE)
	@rm -f $(PACK_LIST)

pack_check::
	gzip -d < $(PACK_FILE) |tar tvf -
	ls -l $(PACK_FILE)