FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

2021-07-01から1ヶ月間の記事一覧

波形を書くときにJSONベースで書けるWaveDromがとても便利だった

諸事情で波形を書く必要があり、正直面倒だったので何か良いツールが無いか探したところ、WaveDromというのがテキストベースで波形画像を生成できるようだったので試してみた。 しかもこいつはVisual Studio Codeと強調して動作することができる。インストー…

RISC-Vベクトル拡張を使ったサンプルプログラムの確認 (その他のサンプルプログラムについて)

RISC-Vのベクトル拡張について、いくつかのサンプルプログラムを用いて使い方を見ていく。 memcpyとstrlenについて見たので、これ以外のサンプルについて確認する。 まずはsaxpyこれは単純に2つの配列のうち、一つの配列に対して定数を掛け合わしてもう一つ…

RISC-Vベクトル拡張を使ったstrlenの実装

RISC-Vのベクトル拡張について、いくつかのサンプルプログラムを用いて使い方を見ていく。 次はstrlen()について。これはmemcpy()とは違って、メモリアクセスするサイズが良く分からない場合のもの。 この場合には、ベクトルロードはFault-only-Firstロード…

RISC-Vベクトル拡張を使ったmemcpyの実装

RISC-Vベクトル拡張について、仕様書の観点からではなく、ベンチマークテストプログラムの観点からどのようにプログラムを構築すれば良いのかについて調べてみる。 RISC-Vベクトル拡張について、いくつかのサンプルプログラムが公式仕様書に添付されている。…

Rocket-Chipの除算器について調査と自作CPUへの接続

Rocket-Chipの実装を見ながら、乗除算回路を自作CPUに実装してみている。 除算回路については面倒くさいのでとりあえずRocket-ChipのChiselから生成した回路をくっつけた。インタフェースはこのようになっている。 module MulDiv( input clock, input reset,…

RISC-V ベクトル拡張 v1.0の日本語訳を公開した

https://msyksphinz-self.github.io/riscv-v-spec-japanese/html/index.html RISC-Vのベクトル拡張については仕様書がGitHubに公開されており、2~3年前に私はそれを日本語訳して公開していた。当時のバージョンは0.7.1から0.8だったが、ついにv1.0までバー…

Rocket-Chipの乗除算器について調べる (2. 負数の扱いに関する調査)

Rocket-Chipの採用している乗算器について少しずつ眺めているが、まだ良く分からないことがある。 負数の扱いについてはどのようになっているのだろう。 負数の乗算については正直あまり知らなかったので、ここで調査してみる。 いくつか検索すると以下のよ…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (25. ベクトル標準プロファイル)

RISC-Vベクトル拡張仕様書の読み直し。ベクトル拡張の標準プロファイルについて。 ベクトル拡張のバリエーションとしていくつかのサブセットが定義されている。組み込み向けにはいくつかの機能を省略することができるという仕組みだ。 github.com github.com…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (24. ベクトルデータ移動命令)

RISC-Vベクトル拡張仕様書の読み直し。次はベクトルデータ移動命令。圧縮や全体移動などのいろんな命令がある。 github.com github.com 16.3. ベクトルレジスタギャザー命令 ベクトル・レジスタ・ギャザー命令は、第2のソースベクトルレジスタグループによっ…

Rocket-Chipの乗除算器について調べる

自作RISC-V アウトオブオーダCPUを作っているのだが、そろそろ乗算器を付けないとテストパタンが増やせなくなってきた。 乗算器・除算器をまじめに作るのはあまり得意ではないので、Rocket-ChipやBOOMのデザインを参考にして作ってみることにした。 Rocket-C…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (23. ベクトルスライド命令)

RISC-Vベクトル拡張仕様書の読み直し。次はベクトル要素スライド命令。 16.2. ベクトルスライド命令 スライド命令は、ベクトルレジスタグループの要素を上下に移動させます。 Note: スライド操作は、任意のレジスタギャザー命令を使用するよりもはるかに効率…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (22. ビットマスク命令)

RISC-Vベクトル拡張仕様書の読み直し。次はマスクを操作するための命令。論理命令など。 github.com github.com 15.2. ベクトルマスクPopカウント vpopc vpopc.m rd, vs2, vm ソースオペランドは、 マスクレジスタのレイアウト 節で説明されているように、マ…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (21. 浮動小数点その他の命令)

RISC-Vベクトル拡張仕様書の読み直し。次はマスクを操作するための命令。論理命令など。 github.com github.com 15. ベクトルマスク命令 ベクトルレジスタに格納されているマスクを操作するための命令がいくつか提供されています。 15.1. ベクトルマスクレジ…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (20. リダクション命令)

RISC-Vベクトル拡張仕様書の読み直し。次はリダクション命令。 整数と浮動小数点、さらにWideningまであるのでとっても厄介。 github.com github.com 14. ベクトルリダクション操作 ベクトルリダクションは、ベクトルレジスタ群の要素と、ベクトルレジスタの…

Rocket-Chip/BOOMにおけるRVC命令の実装方法について

Rocket-ChipはRISC-Vに対応したCPUコアであるが、RVCと呼ばれる16ビット短縮命令をサポートしている。 RVCは、RISC-VのISAアルファベット表記において"C"と表現される。例えばRV64IMAFDCだと、整数・乗算・除算とともに16ビット短縮命令がサポートされている…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (21. 浮動小数点変換命令)

RISC-Vベクトル拡張仕様書の読み直し。浮動小数点の型変換命令。型変換命令には、サイズも変わるものがあり、その際は書き込みベクトルレジスタのサイズも変わる。 github.com github.com 13.17. 単一幅浮動所数点/整数型変換命令 浮動小数点値、符号なし整…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (20. 浮動小数点その他の命令)

RISC-Vベクトル拡張仕様書の読み直し。浮動小数点のその他の命令。MIN/MAXとか、比較命令とか。 github.com github.com 13.11. ベクトル浮動小数点MIN/MAX命令 ベクトル浮動小数点 vfmin および vfmax 命令は、RISC-V F/D/Q 拡張のバージョン 2.2 における対…

RISC-V Rocket-Chipハイパーバイザ実装の論文を読む (2. 評価パート)

Rocket-Chipにハイパーバイザ拡張実装するにあたり参考にされている論文があるので読んでみることにした。 2回目は、検証と評価についてのパート。 前回の記事はこちら。 msyksphinz.hatenablog.com arxiv.org A First Look at RISC-V Virtualization from a…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (19. 浮動小数点テーブルサーチ命令)

RISC-Vベクトル拡張仕様書の読み直し。浮動小数点で使用されるテーブルサーチ命令。 平方根と逆数について、7ビットまでテーブルによりサーチを行う命令。 github.com github.com 13.9. ベクトル浮動小数点逆平方根推定命令 # 7ビットの浮動小数点逆平方根推…

DPI-Cで64ビット以上のデータを扱うための試行

DPI-CではVerilogのデータ構造をC言語などのソフトウェア言語に取り込むことが出来るようになった。 だいたいの場合は32ビット~64ビットの渡すことになるので、C言語側のuint32_tやuint64_tに単純にマップすれば良いのだが、 これ以上のデータを扱うために…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (18. 浮動小数点命令2)

RISC-Vベクトル拡張仕様書の読み直し。浮動小数点算術演算命令。 ここでもWidening命令があり非常に厄介。全部取り払いたい。 github.com riscv-v-spec/v-spec.adoc at master · riscv/riscv-v-spec · GitHub 13. ベクトル浮動小数点命令 標準のベクトル浮動…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (19. 固定小数点演算命令)

RISC-Vベクトル拡張仕様書の読み直し。次は固定小数点命令など。 github.com github.com 12. ベクトル固定小数点算術演算命令 前述の整数演算命令群を拡張し、固定小数点演算がサポートされています。 固定小数点数とは、暗黙の分母を持つ分数の分子として解…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (18. 整数算術演算命令2)

RISC-Vベクトル拡張仕様書の読み直し。算術演算命令、乗除算命令など、その他特殊な命令など。 github.com github.com 11.9. ベクトル整数最大/最小命令 符号付き整数/符号なし整数の最大・最小値計算命令がサポートされている。 # 符号なし最小値 vminu.vv …

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (17. 整数算術演算命令)

RISC-Vベクトル拡張仕様書の読み直し。次は整数比較命令など。 11.5. ベクトル論理命令 # 論理命令 vand.vv vd, vs2, vs1, vm # ベクトル-ベクトル vand.vx vd, vs2, rs1, vm # ベクトル-スカラ vand.vi vd, vs2, imm, vm # ベクトル-即値 vor.vv vd, vs2, v…

RISC-V Rocket-Chipハイパーバイザ実装の論文を読む (1. 実装パート)

Rocket-Chipにハイパーバイザ拡張実装するにあたり参考にされている論文があるので読んでみることにした。 11ページとまあまあ量があるので2~3回に分けて読んでまとめていくことにする。 arxiv.org A First Look at RISC-V Virtualization from an Embedded…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (16. 整数算術演算命令)

RISC-Vベクトル拡張仕様書の読み直し。基本的な算術演算系のベクトル命令の説明。 github.com github.com 11. ベクトル整数算術演算命令 整数ベクトル算術演算命令が提供されています。 11.1. ベクトル単一幅整数加算減算命令 ベクトル整数加減算命令が提供…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (15. Widening / Narrowing 算術演算命令)

RISC-Vベクトル拡張仕様書の読み直し。Widening / Narrowing 算術演算命令について。この辺も挙動が難しくて死にそうになる命令群。 github.com github.com 10.2. 幅拡張ベクトル算術演算命令 いくつかのベクトル演算命令は、書き込みベクトルレジスタグルー…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (14. ベクトル算術演算命令1)

RISC-Vベクトル拡張仕様書の読み直し。ベクトル算術演算命令。この辺りはv0.8からあまり変わっていないと思う。 10. ベクトル算術演算命令 ベクトル演算命令では、OP-FPに隣接する新しいメジャーオペコード(OP-V = 10101112)を使用します。 3ビットの funct3…

RISC-Vベクトル拡張仕様書 v1.0 を読み直す (13. ベクトルロード命令のバリエーション2)

RISC-Vベクトル拡張仕様書の読み直し。ベクトルロード命令の続き。 セグメントアクセスとかが増えてきてこの辺は非常にグロい部分。そもそもEEWとSEWでメモリアクセスは挙動が違うのに、非常に複雑になってしまっている... 他の算術演算と一緒でEEWとSEWを統…