2021-07-01から1ヶ月間の記事一覧
諸事情で波形を書く必要があり、正直面倒だったので何か良いツールが無いか探したところ、WaveDromというのがテキストベースで波形画像を生成できるようだったので試してみた。 しかもこいつはVisual Studio Codeと強調して動作することができる。インストー…
RISC-Vのベクトル拡張について、いくつかのサンプルプログラムを用いて使い方を見ていく。 memcpyとstrlenについて見たので、これ以外のサンプルについて確認する。 まずはsaxpyこれは単純に2つの配列のうち、一つの配列に対して定数を掛け合わしてもう一つ…
RISC-Vのベクトル拡張について、いくつかのサンプルプログラムを用いて使い方を見ていく。 次はstrlen()について。これはmemcpy()とは違って、メモリアクセスするサイズが良く分からない場合のもの。 この場合には、ベクトルロードはFault-only-Firstロード…
RISC-Vベクトル拡張について、仕様書の観点からではなく、ベンチマークテストプログラムの観点からどのようにプログラムを構築すれば良いのかについて調べてみる。 RISC-Vベクトル拡張について、いくつかのサンプルプログラムが公式仕様書に添付されている。…
Rocket-Chipの実装を見ながら、乗除算回路を自作CPUに実装してみている。 除算回路については面倒くさいのでとりあえずRocket-ChipのChiselから生成した回路をくっつけた。インタフェースはこのようになっている。 module MulDiv( input clock, input reset,…
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の採用している乗算器について少しずつ眺めているが、まだ良く分からないことがある。 負数の扱いについてはどのようになっているのだろう。 負数の乗算については正直あまり知らなかったので、ここで調査してみる。 いくつか検索すると以下のよ…
RISC-Vベクトル拡張仕様書の読み直し。ベクトル拡張の標準プロファイルについて。 ベクトル拡張のバリエーションとしていくつかのサブセットが定義されている。組み込み向けにはいくつかの機能を省略することができるという仕組みだ。 github.com github.com…
RISC-Vベクトル拡張仕様書の読み直し。次はベクトルデータ移動命令。圧縮や全体移動などのいろんな命令がある。 github.com github.com 16.3. ベクトルレジスタギャザー命令 ベクトル・レジスタ・ギャザー命令は、第2のソースベクトルレジスタグループによっ…
自作RISC-V アウトオブオーダCPUを作っているのだが、そろそろ乗算器を付けないとテストパタンが増やせなくなってきた。 乗算器・除算器をまじめに作るのはあまり得意ではないので、Rocket-ChipやBOOMのデザインを参考にして作ってみることにした。 Rocket-C…
RISC-Vベクトル拡張仕様書の読み直し。次はベクトル要素スライド命令。 16.2. ベクトルスライド命令 スライド命令は、ベクトルレジスタグループの要素を上下に移動させます。 Note: スライド操作は、任意のレジスタギャザー命令を使用するよりもはるかに効率…
RISC-Vベクトル拡張仕様書の読み直し。次はマスクを操作するための命令。論理命令など。 github.com github.com 15.2. ベクトルマスクPopカウント vpopc vpopc.m rd, vs2, vm ソースオペランドは、 マスクレジスタのレイアウト 節で説明されているように、マ…
RISC-Vベクトル拡張仕様書の読み直し。次はマスクを操作するための命令。論理命令など。 github.com github.com 15. ベクトルマスク命令 ベクトルレジスタに格納されているマスクを操作するための命令がいくつか提供されています。 15.1. ベクトルマスクレジ…
RISC-Vベクトル拡張仕様書の読み直し。次はリダクション命令。 整数と浮動小数点、さらにWideningまであるのでとっても厄介。 github.com github.com 14. ベクトルリダクション操作 ベクトルリダクションは、ベクトルレジスタ群の要素と、ベクトルレジスタの…
Rocket-ChipはRISC-Vに対応したCPUコアであるが、RVCと呼ばれる16ビット短縮命令をサポートしている。 RVCは、RISC-VのISAアルファベット表記において"C"と表現される。例えばRV64IMAFDCだと、整数・乗算・除算とともに16ビット短縮命令がサポートされている…
RISC-Vベクトル拡張仕様書の読み直し。浮動小数点の型変換命令。型変換命令には、サイズも変わるものがあり、その際は書き込みベクトルレジスタのサイズも変わる。 github.com github.com 13.17. 単一幅浮動所数点/整数型変換命令 浮動小数点値、符号なし整…
RISC-Vベクトル拡張仕様書の読み直し。浮動小数点のその他の命令。MIN/MAXとか、比較命令とか。 github.com github.com 13.11. ベクトル浮動小数点MIN/MAX命令 ベクトル浮動小数点 vfmin および vfmax 命令は、RISC-V F/D/Q 拡張のバージョン 2.2 における対…
Rocket-Chipにハイパーバイザ拡張実装するにあたり参考にされている論文があるので読んでみることにした。 2回目は、検証と評価についてのパート。 前回の記事はこちら。 msyksphinz.hatenablog.com arxiv.org A First Look at RISC-V Virtualization from a…
RISC-Vベクトル拡張仕様書の読み直し。浮動小数点で使用されるテーブルサーチ命令。 平方根と逆数について、7ビットまでテーブルによりサーチを行う命令。 github.com github.com 13.9. ベクトル浮動小数点逆平方根推定命令 # 7ビットの浮動小数点逆平方根推…
DPI-CではVerilogのデータ構造をC言語などのソフトウェア言語に取り込むことが出来るようになった。 だいたいの場合は32ビット~64ビットの渡すことになるので、C言語側のuint32_tやuint64_tに単純にマップすれば良いのだが、 これ以上のデータを扱うために…
RISC-Vベクトル拡張仕様書の読み直し。浮動小数点算術演算命令。 ここでもWidening命令があり非常に厄介。全部取り払いたい。 github.com riscv-v-spec/v-spec.adoc at master · riscv/riscv-v-spec · GitHub 13. ベクトル浮動小数点命令 標準のベクトル浮動…
RISC-Vベクトル拡張仕様書の読み直し。次は固定小数点命令など。 github.com github.com 12. ベクトル固定小数点算術演算命令 前述の整数演算命令群を拡張し、固定小数点演算がサポートされています。 固定小数点数とは、暗黙の分母を持つ分数の分子として解…
RISC-Vベクトル拡張仕様書の読み直し。算術演算命令、乗除算命令など、その他特殊な命令など。 github.com github.com 11.9. ベクトル整数最大/最小命令 符号付き整数/符号なし整数の最大・最小値計算命令がサポートされている。 # 符号なし最小値 vminu.vv …
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…
Rocket-Chipにハイパーバイザ拡張実装するにあたり参考にされている論文があるので読んでみることにした。 11ページとまあまあ量があるので2~3回に分けて読んでまとめていくことにする。 arxiv.org A First Look at RISC-V Virtualization from an Embedded…
RISC-Vベクトル拡張仕様書の読み直し。基本的な算術演算系のベクトル命令の説明。 github.com github.com 11. ベクトル整数算術演算命令 整数ベクトル算術演算命令が提供されています。 11.1. ベクトル単一幅整数加算減算命令 ベクトル整数加減算命令が提供…
RISC-Vベクトル拡張仕様書の読み直し。Widening / Narrowing 算術演算命令について。この辺も挙動が難しくて死にそうになる命令群。 github.com github.com 10.2. 幅拡張ベクトル算術演算命令 いくつかのベクトル演算命令は、書き込みベクトルレジスタグルー…
RISC-Vベクトル拡張仕様書の読み直し。ベクトル算術演算命令。この辺りはv0.8からあまり変わっていないと思う。 10. ベクトル算術演算命令 ベクトル演算命令では、OP-FPに隣接する新しいメジャーオペコード(OP-V = 10101112)を使用します。 3ビットの funct3…
RISC-Vベクトル拡張仕様書の読み直し。ベクトルロード命令の続き。 セグメントアクセスとかが増えてきてこの辺は非常にグロい部分。そもそもEEWとSEWでメモリアクセスは挙動が違うのに、非常に複雑になってしまっている... 他の算術演算と一緒でEEWとSEWを統…