##master-page:NoteTemplate
#format wiki
#language ja
= HW実験Tips =

== バイナリ版read_int, read_float ==

誰得だけど、入力がビッグエンディアンのときの、3班のread_intとread_floatの実装(バイナリ読み込み版)。

確か審判サーバを-bオプションをつけて実行するとビッグエンディアンになると思います。

{{{
! 入力はビッグエンディアンとする

! 返り値は%g3
min_caml_read_int:
	! 0で初期化
	add %g3, %g0, %g0

	! 24bit目 ~ 31bit目
	input %g4
	add %g3, %g3, %g4
	slli %g3, %g3, 8

	! 16bit目 ~ 23bit目
	input %g4
	add %g3, %g3, %g4
	slli %g3, %g3, 8

	! 8bit目 ~ 15bit目
	input %g4
	add %g3, %g3, %g4
	slli %g3, %g3, 8

	! 0bit目 ~ 7bit目
	input %g4
	add %g3, %g3, %g4

	return

! 返り値は%f0
min_caml_read_float:
	! %f0 = imovf(min_caml_read_int())
	call min_caml_read_int
	sti %g3, %g1, 0
	fldi  %f0, %g1, 0

	return
}}}

== 全部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が半角スペースになってしまっているかもしれません。<<BR>>
また、このMakefileは高確率で稚拙です<<BR>>
<<BR>>
使い方は、make (ファイル名から.mlを除いたもの) で、.mlのコンパイル、.sのアセンブル、バイナリの実行をやってくれます。必要ならば、コンパイラ・アセンブラ・シミュレータのコンパイルもしてくれるので、「なんかおかしいぞ、あっシミュレータ古かった」という事もなくなっています。<<BR>>
<<BR>>
また、impactで.bitを焼いて、命令列をローダで送って、、、というのも非常に煩わしかったので自動化しました。<<BR>>
impact -batch (コマンドファイル) でimpactをCUIで扱えるのがキモです。コマンドファイルは、いつもimpactを使っていると勝手に出来ている_impact.cmdを参考にします。また、GUIでの実行中にも、下のペインをConsoleにすれば、logと一緒に表示されています。(GUIの操作とコマンドを対応付けられます。)<<BR>>
参考までに、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ノート]]