ADD,SUB,MUL に続いて MADD もバークレーテストフロートで検証しました。動作モデルがあったので、とりあえず動くものはあまり頭を使わなくても作れます。が、スラックは -7ns をこえました… そして、恐ろしく大きくなっている。

最新版
Report Instance Areas:
+------+---------------+----------------+------+
| |Instance |Module |Cells |
+------+---------------+----------------+------+
|1 |top | | 7941|
|18 | vscale |vscale_core | 7355|
|19 | pipeline |vscale_pipeline | 7349|
|20 | csr |vscale_csr_file | 1634|
|21 | ctrl |vscale_ctrl | 1639|
|22 | fregfile |vscale_fregfile | 133|
|23 | md |vscale_mul_div | 3463|
|24 | regfile |vscale_regfile | 71|
|25 | vscale_xbar |vscale_xbar | 36|
+------+---------------+----------------+------+

整数MUL/DIV高速版
+------+----------------+-----------------+------+
| |Instance |Module |Cells |
+------+----------------+-----------------+------+
|1 |top | | 5044|
|17 | vscale |vscale_core | 4485|
|18 | pipeline |vscale_pipeline | 4482|
|19 | csr |vscale_csr_file | 1567|
|20 | ctrl |vscale_ctrl | 1045|
|21 | imm_gen |vscale_imm_gen | 1|
|22 | md |vscale_mul_div | 1430|
|23 | regfile |vscale_regfile | 60|
|24 | src_a_mux |vscale_src_a_mux | 32|
|25 | src_b_mux |vscale_src_b_mux | 37|

オリジナル
+------+----------------+-----------------+------+
| |Instance |Module |Cells |
+------+----------------+-----------------+------+

|1 |top | | 4475|
|17 | vscale |vscale_core | 3916|
|18 | pipeline |vscale_pipeline | 3913|
|19 | csr |vscale_csr_file | 1562|
|20 | ctrl |vscale_ctrl | 1135|
|21 | imm_gen |vscale_imm_gen | 1|
|22 | md |vscale_mul_div | 777|
|23 | regfile |vscale_regfile | 60|
|24 | src_a_mux |vscale_src_a_mux | 32|
|25 | src_b_mux |vscale_src_b_mux | 37|

ちなみに、fnmadd と fmsub と fnmsub は、テストフロートにないので検証が弱そうです。仕様書を見た感じでは fnm… はネゲート後に丸めるので良いのですよね?まぁ、近傍丸めでは差は出ないんですけど。

[PR]
# by tom01h | 2017-09-14 21:00 | PCとか | Trackback | Comments(0)

booth 乗算器の話

唐突に Booth アルゴリズムを使った乗算器の話を始めます。
冗長表現の4進数を使って、うまいこと乗算しましょうという話です。
まず2進数と4進数の掛け算を比べてみると、
f0054075_23201334.png

こんな感じです。4進数を使うと2進数と比べて、部分積の数が半分で済みます。当たり前ですが…
でもこれだと、部分積を求めるための×3とか計算が大変ですよね。なので、冗長4進表現に書き換えます。ここでは、-2,-1,0,1,2の5個のシンボルを使う表現にします。大事なのは、2倍は1ビットシフトで済むこと、-1倍はひとまずは論理否定をしておいて、後で+1すれは良いってところです。
結果から先に言うとこんな感じです。部分積が1個増えちゃいましたが…
f0054075_23295465.png
ここで使ったルールは、元のシンボルが2,3の場合は上の桁に+1して(+4になる)自身は-2,-1となります。その結果に下の桁からの桁上げを足したら冗長4進表現になった新しいシンボルが出来ます。
表にすると下のようになります。
f0054075_23375274.png
この表を見るとわかるように-3,3がないので、部分積が簡単に求まります。
4進表現の部分積を2進数に書き換えてあげると下のようになります。
f0054075_23580016.png
符号拡張をさぼる手法の話はまた今度。

[PR]
# by tom01h | 2017-09-13 23:46 | 論理設計の話 | Trackback | Comments(0)

SiFive GNU Embedded Toolchain

いつも参考にさせてもらっているFPGA開発日記にあるように、SiFive が Windows 用の GNU Toolchain を公開しています。せっかくなので、試してみることにしました。インストールは、ただ解くだけです。
これを BoW 上で Vscale-chip 用に使ってみます。変更は src/main/c/XXX/Makefile の変更のみ。

-PREFIX = /opt/riscv
-ARCH = riscv32-unknown-elf
+PREFIX = ${HOME}/riscv64-unknown-elf-gcc-20170612-x86_64-w64-mingw32
+ARCH = riscv64-unknown-elf

-CFLAGS = -Wall -nostdinc -nostdlib -fno-builtin
+CFLAGS = -Wall -nostdinc -nostdlib -fno-builtin -march=rv32im -mabi=ilp32

こんな感じですが、BoW から Windows 用のコマンドを使うには .exe が必要なので、

-AR = $(BINDIR)/$(ADDNAME)ar
-AS = $(BINDIR)/$(ADDNAME)as
-CC = $(BINDIR)/$(ADDNAME)gcc
:
+AR = $(BINDIR)/$(ADDNAME)ar.exe
+AS = $(BINDIR)/$(ADDNAME)as.exe
+CC = $(BINDIR)/$(ADDNAME)gcc.exe


[PR]
# by tom01h | 2017-09-12 20:55 | PCとか | Trackback | Comments(0)
FMA を仮に組み込んだらスラックが -6ns を超えました。フラグ更新のパスがワーストです。
サブノーマル対応のノーマライザが遅いのかなぁ?なんかよい方法を考えないといけなさそうです。
でもその前に、ちゃんと機能を積み込みます。安心のバークレーテストフロートを使うために、モデル検証環境を再利用しました。ADD/SUB/MUL は完成したつもり。
精度不足を補ったり、特殊値の入力に対応して FMA が完成したら、最適化に取り組もうと思います。
しかし、デフォルト非数の符号がテストフロートとRISC-Vで違うっぽいのが面倒ですねぇ。


[PR]
# by tom01h | 2017-09-11 23:57 | PCとか | Trackback | Comments(0)

V-scale に FPU MADD 仮組込

rv32uf-p-fmadd がPASS するところまで組み込みました。
どう考えても精度が足りないし、特殊値の入力も対応していません。
ここから、もうちょっときれいに回路の共有をしたり、単体で検証できるようにして行こうと思います。

[PR]
# by tom01h | 2017-09-10 15:20 | PCとか | Trackback | Comments(0)

wsl-terminal

Bash on Ubuntu on Windows のターミナルがあまりに使いにくいので、wsl-terminal なるものを入れてみました。もっと便利なものもあるのかもしれませんが、とりあえず画面が崩れたりしなくなりました。マウスのコピペも普通になりました。もっと早く試せばよかった。
しかし、ググったページに必ずと言ってよいほど BoW から Windows のコマンドを実行可能にする拡張の話も一緒に出ているのですが、皆さん Creators Update から標準で出来るようになったこと知らないんですかね?それとも、標準のより便利なんですかね?標準のは BoW の環境変数を Windows のコマンドに渡してくれないあたりを不便に感じています。

[PR]
# by tom01h | 2017-09-07 19:57 | PCとか | Trackback | Comments(0)
だいぶ強引に組み込みました。特殊値の入力は FMUL はまだ対応していません。
清書とか検証とかは FMADD を組み込んでから考えます。
とりあえずリハビリです。でも、tests の rv32uf-p-fadd は PASS したので、Github にはおいておきました。

[PR]
# by tom01h | 2017-09-06 22:46 | PCとか | Trackback | Comments(0)
やっと時間が取れそうなので、久々に V-Scale をいじり始めました。
でもなんか、もう全然覚えてないです。せっかく転送命令で練習した時のことも忘れているし…
で、特殊値のことはひとまず置いておくとして、普通の FADD, FSUB が出来るようにしてみた。演算結果は良いのだが、フラグが合わない。というか、tests を見てもフラグがクリアされるタイミングが分からない。
マニュアルを読み直してみたら CSRRW のバグでした。rs1=x0 で書き込みを無視するのは CSRRC と CSRRS だけだよ。なんでこんなのが残っているんだよ~~
しかし、V-Scale はこういうところ、あんまりちゃんとしていないなぁ。

[PR]
# by tom01h | 2017-09-03 23:52 | PCとか | Trackback | Comments(0)

対話は答えではない

爾後国民政府を対手とせず
[PR]
# by tom01h | 2017-08-31 20:22 | Trackback | Comments(0)

信長の忍び

12巻です。アニメのDVDもついてきます。
f0054075_22125019.jpg

[PR]
# by tom01h | 2017-08-30 22:13 | 本・映画など | Trackback | Comments(0)