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

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

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

FSQRTモデル

思ったよりも手間取りました。そもそもCで書いた何となく動くものがあって、それを翻訳するだけのはずなのですが…
乗算との回路共有の兼ね合いで、ループが半サイクルずれているんですよね。そのせいでなんか良く分からない動きになっちゃうんです。とりあえず波形を見ながら現物合わせで直して…
サブノーマル入力は精度不足になるだけのようですね。FDIVから荒いプレシフタをコピーしてきます。
ちなみに平方根なので、サブノーマル出力もオバーフローもアンダーフローもありません。
さて、これから1個の回路にマージしていく作業ですか?その前に整数除算にプレシフト付けるのかな。

[PR]
by tom01h | 2017-07-17 00:33 | PCとか | Trackback | Comments(0)

FPGAマガジン続報

アマゾンにもFPGAマガジン次号が来ました。RISC-V特集ですよ~~。
ってか、オリジナルのRISC-Vだと。だれが書いているんだろうか?もう、V-Scaleは捨てちゃおうかな。

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

FDIV モデル 2

FDIV のモデルを作ります。整数除算と丸めはすでに持っているので、くっつけるだけで簡単にできると思っていました。実際、正規化数を扱っているだけなら、今まで作った部品のコピペで出来ました。
また、サブノーマルの出力の方はそれほど難しくなく、すでに持っているサブノーマル出力機能付きのノーマライザを通すだけで出来ます。回路化するときはどうせ共有する部品ですし。
入力はちょっと難しいですが、整数除算を高速化するためのプレシフタとの共通化を視野に入れて考えます。
まず条件として、被除数が大きすぎて除数を引いた後の部分剰余がまだ、除数よりも大きいままだと除算が成立しません。被除数が小さすぎる分には、必要な精度を得るためのループ数が多くなるだけです。それを前提として、回路を節約するために8bit単位の荒いプレシフトをすることにしました。
途中で桁が足りなくなったりして苦労しましたが、とりあえずモデルは完成しました。回路化するときに、もう一度見直そうと思います。

[PR]
by tom01h | 2017-07-08 23:18 | PCとか | Trackback | Comments(0)

FDIV モデル

久々ですが、FPU演算器のモデル設計を再開します。次は FDIV です。整数除算も出来ているし、丸めも別に作っているので、コピペだけで簡単にできました。サブノーマルのことを考えなければ…
ということで、中途のを GitHub に置いておきました。
しかし、サブノーマル入力はどうすればよいのだろうか?
最悪、被除数はそのままでもループ回数さえ増やせば大丈夫なはず。でも、除数が小さいと無理だよねぇ。プレシフト必要かな?整数除算でも使える方式を考えてみるか。
出力はサブノーマル出力ができるノーマライザに、右詰めで答えを入力すれば良いと思います。

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

Vscale-chip 修正

こんな感じに変更します。もともとHREADYは1サイクル遅れで返して、その場合はXbar内に保持したリクエストに差し替えていました。のつもりがあれ?そんな論理どこにも無いぞ??そうするつもりでまだやっていなかったのか?そりゃ動くはずがない。
f0054075_18471537.png
いやいや、ほかにもいろいろ変だぞ。V-scale は HREADY ネゲートのサイクルで前のリクエストを再送している。こんな感じで普通に動いていました。HREADYの次のサイクルに再送じゃないのか?上の図で合っているよね?
f0054075_18500259.png
そんなわけで、Xbar は HREADY を1サイクル早くして、V-scale の中は HREADY を1サイクル遅らして、プロトコル通りになりました。そして命令フェッチストールが1サイクル余分に出る件は、該当論理を削除しただけで一応動いているみたいです。
これで一応、バス周りの既知バグはなくなりました。わかってみると簡単な話ですが、チップのシミュレータを作ったからこそ発見できたのではないかと思います。また、例外キャンセルもめちゃくちゃですが、こっちは見なかったことにします。
元の論理がかなり混乱しているうえに、さらに適当な修正をしたのでめちゃくちゃになってしまっています。というか、今でも原作者の意図は理解できていません。今の構成はスレーブがHREADYを落とすことがないので、それには対応できないかもしれんせん。もう、他人の物は捨てて、1から作り直そうかなぁ。

[PR]
by tom01h | 2017-07-02 00:41 | PCとか | Trackback | Comments(0)
V-scale のコア外は Vivado に任せてみようと思った目論見は失敗に終わりました。AHB Xbar を自力で直すしかないみたいです。
AHB Xbar が難しいことになっているのは、無駄にタイミングを気にしているせいだと気づきました。マスタ→バス→スレーブの転送は許しているのに、マスタ→バス→マスタの調停の信号は1サイクル転送を許していません。このせいでXbarの設計が無駄に難しくなっています。設計を簡単にするために、調停の信号も1サイクル転送を許せばよいかと。
がしかし、HREADYは多分受けてから結構いっぱい使っているよなぁ。遅くなるのは必至です。これはV-scaleを直すべきか?うだうだ考えていたら、リクエストホールド用のREADYとリードデータ用のREADYが混ざっているのが悪いのではないかとの考えに至る。AXI Lite にするとARREADY と RVALID に分かれるのでタイミング設計がしやすくなるかも?

[PR]
by tom01h | 2017-06-26 20:57 | PCとか | Trackback | Comments(0)
続きです。
スレーブIPを2個にしてみました。
f0054075_23511737.png
が、シミュレーションに反映されませんよ。Generate Output Products とやらを選ぶのかな?かなり悩んで試行錯誤の結果、やっと出来るようになったけど…
f0054075_22003597.png
おせ~~~~ なんじゃこりゃ?こんなにレイテンシでかいんじゃ、お手軽自動生成のインターコネクトはめったな事じゃ使えませんねぇ。仕様書にもちゃんと、リクエストのレイテンシは2サイクルって書いてありました。使うの諦めましょう。

[PR]
by tom01h | 2017-06-25 00:48 | PCとか | Trackback | Comments(0)
次のPDFファイル Vivado IP インテグレーターへのカスタム AXI IP の組み込み に従って、AXI Lite のマスタとスレーブIPを作ってみます。vivado のバージョンが違うのでいろいろ違うけど、細かいことは気にしないで進みます。
1つのフォルダで複数のIPを作ると上手く行かない?まぁ、普通はそんな事しないと思うので、IP毎にフォルダを分けてみましょう。
vivadoip/ ← IPを使ってみるプロジェクト用のフォルダ
vivadoip/axi_lite_slave/ ← axi_lite_slave IP 用のフォルダ
vivadoip/axi_lite_master/ ← axi_lite_master IP 用のフォルダ
出来ました。
f0054075_13011785.png
最初は自動で連結してもらったんだけど、バスとか、リセット・クロックコントローラとかいっぱい生成されて大変なことになったので、手で繋ぎなおしました。ちなみにリセットの極性を間違えていたのですが、シミュレーションする以前から、これ反対なんじゃない?って指摘してきました。すげーなぁ。
して、シミュレーションもPDF通りに進めて行けば出来ます。Vivado Simulator は使い慣れないんですが…
f0054075_13281717.png

なんか遅い。これ参考にしちゃうと、すごく遅いIP作りそうだ… 勉強するのもめんどいしなぁ。
ひとまず適当にマスターのライトを速くしてみた。IPを修正しても、全体のプロジェクトには簡単には反映されないみたい。いろいろ試した結果、IPのプロジェクトも開いておいて、変更したら Re-Package IP を押す。全体のプロジェクトでシミュレーションを閉じると、Refresh IP Catalog を押せって言ってくるので押す。更新した IP を選択して、Upgrade Selected を押す。そのあと、シミュレーションのやり直し。
2サイクルかかるのは、スレーブのせいだと思います。ラッチが推論されている気がするけどまぁ良いよね。
f0054075_16541149.png
Vivado 17.2 が出てますね。ダウンロード中…

[PR]
by tom01h | 2017-06-24 17:34 | PCとか
コンパイル後にいろいろと変更するのは格好悪いので…
--- a/bsp/env/freedom-e300-hifive1/link.lds
+++ b/bsp/env/freedom-e300-hifive1/link.lds
@@ -4,6 +4,7 @@ ENTRY( _start )
MEMORY
{
+ spi (rxai!w) : ORIGIN = 0x00400000, LENGTH = 512M
flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M
ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K
}
@@ -22,7 +23,7 @@ SECTIONS
.init :
{
KEEP (*(SORT_NONE(.init)))
- } >flash AT>flash :flash
+ } >flash AT>spi :flash
以下同様に AT> を変更。最後の1行を取っ払うのはこうかっ。
--- a/bsp/env/common.mk
+++ b/bsp/env/common.mk
@@ -25,11 +25,12 @@ INCLUDES += -I$(PLATFORM_DIR)
TOOL_DIR = $(BSP_BASE)/../toolchain/bin
-CC := $(TOOL_DIR)/riscv32-unknown-elf-gcc
-AR := $(TOOL_DIR)/riscv32-unknown-elf-ar
+CC := riscv32-unknown-elf-gcc
+AR := riscv32-unknown-elf-ar
LDFLAGS += -T $(LINKER_SCRIPT) -nostartfiles
LDFLAGS += -L$(ENV_DIR)
+LDFLAGS += -e 0 ← これ


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