HW実験Tips

全部Makefileで済ませてみた

とりあえずMakefileを晒します。

LIBDIR = ../lib
LIBMINCAML = ../compiler/FirstArch/libmincaml.s

SIMDIR = ../simulator
CMPDIR = ../compiler
HWDDIR = ../hardware/debugger

CMP = $(CMPDIR)/min-caml
ASM = $(SIMDIR)/asm
SIM = $(SIMDIR)/sim

IMPACT = ${HOME}/Xilinx/ISE_DS/ISE/bin/lin64/impact -batch

SLEEP = @sleep 1

.PHONY: all clean

.PRECIOUS: %.bin %.s %.txt

all: 
        @echo "please specify the target."

libs: 
        $(MAKE) --directory $(LIBDIR)
sim:
        $(MAKE) --directory $(SIMDIR)
asm:
        $(MAKE) --directory $(SIMDIR)
cmp:
        $(MAKE) --directory $(CMPDIR)
loader:
        $(MAKE) --directory $(HWDDIR)

%.s: %.ml cmp
        $(CMP) $*

%.bin: %.s $(LIBMINCAML) libs asm
        $(ASM) $(LIBMINCAML) $(LIBDIR)/*.s $< -o $@

%.txt: %.bin sim
        $(SIM) $<
        $(SLEEP)

%.hw: %.bin loader
        $(IMPACT) loader.impact.cmd > /dev/null 2>&1
        $(SLEEP)
        $(HWDDIR)/loader -s 0 $< > /dev/null 2>&1
        $(SLEEP)
        $(IMPACT) 1starch.impact.cmd > /dev/null 2>&1
        $(HWDDIR)/receiver

%: %.s
%: %.txt
        
# このTabは重要!

clean:
        rm -f *~ *.s *.kn *.bin *.txt a.out

\tが半角スペースになってしまっているかもしれません。
また、このMakefileは高確率で稚拙です

使い方は、make (ファイル名から.mlを除いたもの) で、.mlのコンパイル、.sのアセンブル、バイナリの実行をやってくれます。必要ならば、コンパイラ・アセンブラ・シミュレータのコンパイルもしてくれるので、「なんかおかしいぞ、あっシミュレータ古かった」という事もなくなっています。

また、impactで.bitを焼いて、命令列をローダで送って、、、というのも非常に煩わしかったので自動化しました。
impact -batch (コマンドファイル) でimpactをCUIで扱えるのがキモです。コマンドファイルは、いつもimpactを使っていると勝手に出来ている_impact.cmdを参考にします。また、GUIでの実行中にも、下のペインをConsoleにすれば、logと一緒に表示されています。(GUIの操作とコマンドを対応付けられます。)
参考までに、loader.impact.cmdを晒します。

setMode -bs
setCable -port auto
Identify -inferir
identifyMPM
assignFile -p 2 -file ../hardware/1starch/top.bit
Program -p 2
quit

ただし、このHW自動化は、ちょっと挙動が怪しいので、フィードバックを募集中です。


Categoryノート