タグ:V-scale ( 55 ) タグの人気記事

もくじ

V-scale というオープンソースマイコンを拾ってきて FPGA に乗せて遊んでます

_コンソール付きのシミュレータが欲しい 端末 XMODEM
乗算・除算器を改良した話 : github
FPU 拡張を追加したい話
_演算器のモデル記述 FADD FMUL FMADD FDIV FSQRT : github
_組み込み 転送 演算器

[PR]
by tom01h | 2017-12-31 23:59 | PCとか | Trackback | Comments(0)
V-scale xbar の先のペリフェラル用マスターポートには、AHB に代えて AXI ポートを付けようと思っています。
その際、クリティカルパスになりがちだったリクエストを 1サイクル遅延させたいと思います。
AXI がノーウェイトだったらこうなるのかな?
f0054075_20512547.png
でもって、AXI の RVALID が1サイクル遅れる時がこんな感じ。
f0054075_20593847.png
最後に、リクエストすら受け付けてくれない場合。
f0054075_21021808.png


[PR]
by tom01h | 2017-11-18 22:47 | PCとか | Trackback | Comments(0)

V-scale chip 更新はじめ

Vivado が Fall Creators Update で起動しない問題は この情報 を参考に解決できました。
とりあえず、V-scale の Vivado IP 化の準備としてメモリインタフェースをAHBもどきから同期SRAMもどきに変更しました。
合成してみると、Dが遅れるために面倒になっていたメモリ周りのスラックが緩和されたおかげで、FPU のスラックがトップに躍り出ました。
FADD 用のアラインメントシフタから加算までのパスと、正規化シフトから丸めてレジスタに書き込むまでのパスです。
やっぱり FPGA ってシフタが遅いのかな?粗粒度でも細粒度でも、リコンフィギュアラブルってこんな感じですよね?
アラインメントシフタは前のサイクルがスカスカなので論理を移動すれば対策できそうです。
正規化シフトは、サブノーマル出力のための回路を工夫すればよいと思っています。
まだ動かない対策をして試しただけですが、4ns スラックくらいまで行きそうな感じです。
しかし、久々に ARTY で動かしてみたら結構はまってしまった…

[PR]
by tom01h | 2017-11-15 00:46 | PCとか | Trackback | Comments(0)

V-scale SubSystem 構想

V-scale chip を Arty Z7 に移植していないのは、どうしてもわからないことがあったためで…
ボード上の USB-UART って、PL からアクセスできるの?
これって、PS MIO Pin につながっているので、PL の UART ロジックからは使えないですよね?
じゃあ、PS の UART を使えば良いじゃないですか。PS の UART は GP0 からアクセスできるよね?
理屈の上ではそうなんでしょうが… と思って色々調べていたんだけど、やっとそれっぽい解が見つかった気がします。

ここ での似たような質問が解決しているようです。
そもそも、 Xilinx が サンプル を示しているみたいですね。ただ、これ見ても全然わからないけど…
でも、こんなにわかりやすい 手順 を書いてくれる親切な人がいるんですね。

とりあえず、いずれ試してみるぞ宣言。
その前に、V-scale SybSystem 作るぞ宣言。

V-scale のメモリアクセスポートは、単純な同期 SRAM もどきに変更 (Dを遅らせない)。
X-bar のマスターポートは V-scale の命令とデータ用に2個。
スレーブポートは SRAM 用2個と AXI 用1個。
AXI用だけ READY 制御ありにしようかと思います。

これを Vivado IP 化して、AXI インターコネクトと、AXI Uartlite につないでチップにする。
これが Arty で動いてからその先のことを考えようと思います。

[PR]
by tom01h | 2017-11-11 21:03 | PCとか | Trackback | Comments(0)
Normalizer のシフト判定は前段シフトの結果を使って判定していたのですが、前々段の結果に前倒しすることでちょっとだけ論理が増えますがスラックが -6ns を割るところまで高速化しました。ここまでくるとドングリの背比べになって、本当に遅いのがどこなのか分からなくなります。ただ、非正規化数出力のための仕組みを外すと、ちょっとだけ早くなりそうなので、別の方式を思いついたら試してみようと思います。

次に、何か所にもコピーされてしまっているアラインメントシフタを1本化しました。ちょっとだけ小さくなってる。
|23 | md |vscale_mul_div | 3232|

最後に、32ビット加算器を3個連結して96ビット加算器として使っている部分を、2連結までに戻します。実際問題として、3連結が必要なのは、FMADDの加数をシフトする時で、かつ、-1倍した時のキャリーが発生する時だけです。V-scaleの乗算器は遅いので、下位の32bitを前もって-1倍しておくことも可能です。で、とってもわかりにくいものになりましたが、スラックもトップ10にはFPUは出てこなくなって -5ns 付近まで減少、面積も以下のごとく。
Report Instance Areas:
+------+---------------+----------------+------+
| |Instance |Module |Cells |

+------+---------------+----------------+------+
|1 |top | | 7667|
|18 | vscale |vscale_core | 7081|
|19 | pipeline |vscale_pipeline | 7076|
|20 | csr |vscale_csr_file | 1305|
|21 | ctrl |vscale_ctrl | 2038|
|22 | fregfile |vscale_fregfile | 92|
|23 | md |vscale_mul_div | 3157|
|24 | regfile |vscale_regfile | 71|

[PR]
by tom01h | 2017-09-15 15:16 | PCとか | Trackback | Comments(0)
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)

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)
だいぶ強引に組み込みました。特殊値の入力は FMUL はまだ対応していません。
清書とか検証とかは FMADD を組み込んでから考えます。
とりあえずリハビリです。でも、tests の rv32uf-p-fadd は PASS したので、Github にはおいておきました。

[PR]
by tom01h | 2017-09-06 22:46 | PCとか | Trackback | Comments(0)