FPGA開発日記

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

ChiselとDiplomacyを使ってオリジナルデザインを作成してみる (3. 外部モジュールとの接続方法検討)

前回の続き。Diplomacyを使って実際にいくつかデザインを作ってみようと思った。Diplomacyを使えばデバッグユニットをその場で生成して、さらに外部と接続して制御したい。そんなデザインを作ってみよう。 CoreComplexモジュールの作成 まずはコアの部分を作…

ChiselとDiplomacyを使ってオリジナルデザインを作成してみる (2. Rocket-Chipの確認)

Diplomacyの勉強をしていて、さてRocket-Chipの場合はどのようにして外部インタフェースと接続しているのか、具体的にはどのようにELFファイルなどのテストパタンをロードしているのか気になってきたので調査してみた。 Verilatorの場合 Verilatorはシミュレ…

ChiselとDiplomacyを使ってオリジナルデザインを作成してみる (1. 開発環境の構築)

久しぶりにChiselで何か作ってみたくなった。Chiselを使うならDiplomacyを使わないと意味ないだろ!ということで久しぶりにDiplomacyの資料を取り出して読み直している。少し新しいデザインを作りながら、Diplomacyの作り方を復習している。 Diplomacyを使っ…

ブログを毎日書き続けるためのテクニック

このブログ「FPGA開発日記」は約2100日で2000記事に到達した。特に2019年と2020年は殆どサボることなく記事を書き続けることができている。ブログの品質は置いておいて、毎日日記を書くことは何となく楽しいものだ。2015年にブログを開設したときに「よしこ…

歳を取ったエンジニアとして腕力のある若手にどうやって立ち向かおうか考えた

この記事はFPGA開発日記の祝2,000記事到達の記念に書いているものです。 普段の記事と比べて非常にエモい内容となっております。 FPGA開発日記を始めたのが2015年の1月4日。それからおよそ5年と10か月で2,000記事に到達した。 計算してみると2,115日での2,00…

Binary Translation型エミュレータを作る(softfloat-wrapper最新版への対応)

少し前に浮動小数点命令対応時に、Rustのクレートであるsoftfloat-wrapperがRISC-V向けコンパイルに対応していなかったのだが、作者の方が対応してくれたようで、RISC-Vコンパイルに対応してくれたようだ。さっそくアップデートしてみる。Cargo.tomlを以下の…

Binary Translation型エミュレータを作る(TCGの途中で例外を取得する方法の検討)

TCGは分岐命令に到達するまで一連のブロックとして変換されるため、1ブロックで複数の命令が実行されます。もしこのブロック実行中に例外が発生した場合どのようにすればよいでしょうか?例えば以下のような命令列をTCGに変換することを考えます。 add x10, …

Binary Translation型エミュレータを作る(ロードストア命令のMMU実装)

Binary Translation方式の命令セットエミュレータのRust実装をしている。前回まででデバッグ機能は作り切ったので、いよいよより複雑な機能の実装に着手する。まず手を付けなければならないのは仮想アドレスのサポート。前回までにとりあえずRustによる仮想…

Binary Translation型エミュレータを作る(MMU機能の実装検討)

Binary Translation方式の命令セットエミュレータのRust実装をしている。前回まででデバッグ機能は作り切ったので、いよいよより複雑な機能の実装に着手する。まず手を付けなければならないのは仮想アドレスのサポート。これが無いとテストパタンの大半をPAS…

MicrochipのPolarFire SoC Icicle Kitを購入した

ちょくちょく話題に上がっていた、MicrochipのPolarFire Icicle Kitを購入し、先日発送されついに我が家に到着した。 どうも中身はSiFiveのマルチコアSoCのようで、それにFPGAを接続してSoCを構成しているようだ。 しかし詳細については正直全く調べていない…

「SystemVerilog入門」を入手しました

SystemVerilog入門: 設計・仕様・検証のためのハードウェア記述言語作者:篠塚 一也発売日: 2020/10/09メディア: 単行本 共立出版様から「System Verilog入門:設計・仕様・検証のためのハードウェア記述言語」を献本頂きました。共立出版様、ありがとうござ…

「動かして学ぶ 量子コンピュータプログラミング」を買いました

量子コンピュータについては、こういう本が欲しかったんですよ。大学の講義資料とかを読み漁っても、量子コンピュータって複雑な数式が大量に出てきたりして分かりにくい。そこをどうにか突破できたとしても、じゃあどうやって具体的にプログラミングするの…

「並列コンピュータ 非定量的アプローチ」を買いました

天野英晴先生の新著ということで購入してみました。「非定量的」という何とも面白いサブタイトルを付けたもんだ。 「非定量的アプローチ」という名前の通り、本書にはヘネパタと違って具体的な数値がグラフが全く出てこない。すべてを雰囲気で理解するための…

Binary Translation型エミュレータを作る(RISC-V Disassemblerクレートの作成)

Binary Translation方式の命令セットエミュレータのRust実装、ある程度進んできたが、どんどん複雑なテストパタンを確認していかなければならない。デバッグ機能についてだが、ホスト命令のディスアセンブル機能ができたので、次はゲスト命令をディスアセン…

Binary Translation型エミュレータを作る(x86命令ディスアセンブルのサポート)

Binary Translation方式の命令セットエミュレータのRust実装、ある程度進んできたが、どんどん複雑なテストパタンを確認していかなければならない。デバッグ機能についてだが、ホスト命令(つまりx86命令)のディスアセンブル機能を実装したい。つまり、変換後…

Binary Translation型エミュレータを作る(ステップ実行のサポート)

Binary Translation方式の命令セットエミュレータのRust実装、ある程度進んできたが、どんどん複雑なテストパタンを確認していかなければならない。その際に問題となるのはデバッグ機能だ。デバッグ機能については、いくつかやらなければならないことがある…

Binary Translation型エミュレータを作る(fsgnj命令の実装)

Binary Translation方式のエミュレータをRustで作る実装、浮動小数点命令を実装している。次はfsgnj命令の実装だ。fsgnj命令は単精度・倍精度を合わせて合計6つ存在している。 FSGNJ.D fd, fs1, fs2 // f[rd] = {f[rs2][63], f[rs1][62:0]} FSGNJN.D fd, fs1…

QEMUはどのようにMMUをエミュレートしているのか

QEMUがどのようにしてMMUによるアドレス変換を実現しているのかを観察する。 まず以下のオプションでテストパタンを実行しログの様子を観察する。 ./build-riscv/riscv64-softmmu/qemu-system-riscv64 \ -nographic -d in_asm,mmu \ -kernel /home/msyksphin…

半導体業界における「IP」とは何なのかを説明したい

「RISC-V」という言葉が徐々にエンジニア界隈に普及し始め、技術界隈のニュースサイトだけでなく、一般的なニュースを扱うような新聞社の記事でも見かけるようになってきました。例えば以下のような記事です。 www.nikkei.com 半導体エンジニアではない人が…

KVM on SpikeでRISC-Vのハイパーバイザーを試す

前回のQEMUを使ったRISC-V Linuxの起動およびKVMでのLinux起動、実はSpikeでも実現できることが分かった。 同じプロジェクト内の以下のWikiを参考にした。というか、違いはQEMUをビルドする代わりにSpikeをビルドするだけだった。 github.com git clone http…

KVM on QEMUでRISC-Vのハイパーバイザーを試す

RISC-Vのハイパーバイザー拡張は現在Version0.61まで進んでいるが、実際にアプリケーションを試す手法としてLinux上でKVMを動かしてさらにLinuxを立ち上げるというものがある。チュートリアルが公開されているので試してみたい。 以下の資料に基づいて試して…

Binary Translation型エミュレータを作る(単精度浮動小数点命令の実装)

Binary Translation方式のエミュレータをRustで作る実装、浮動小数点命令を実装している。倍精度の命令についてはおおよそ実装が完了したので、次は単精度の命令を実装したい。実装方針は全く同一で、単精度の命令についてサポート関数を追加していけばよい…

Binary Translation型エミュレータを作る(Fused-Multiply-Add向けヘルパー関数の実装)

Binary Translation方式のエミュレータをRustで作る実装、浮動小数点命令を実装している。加減算命令については特に問題なく実装が進んだのだが、FMADDなどの3オペランド命令の実装についてサポートを追加した。FMADD.DなどのFused Multiply-Add命令は入力オ…

Binary Translation型エミュレータを作る(softfloatクレートの実装変更)

Binary Translation方式のエミュレータをRustで作る実装、浮動小数点命令を実装している。浮動小数点演算はsoftfloatを使用しており、Rustでもいくつかのcrateが公開されているためこれを活用している。 テストパタンを試行していたのだが、riscv-testsが通…

Binary Translation型エミュレータを作る(浮動小数点演算の実装)

自作Binary Translationエミュレータの実装、浮動小数点レジスタへのロードストア命令の実装が完了したので、次は演算命令の実装だ。簡単なところから、FADD.D(倍精度浮動小数点加算命令)から実装して行きたい。 さて、C++で記述されたsoftfloatをどのよう…

Binary Translation型エミュレータを作る(浮動小数点演算の検討)

Binary Translation方式のエミュレータ開発、RISC-Vの基本命令については一通り実装が完了した。次はどちらの方向に進むかということだが、いくつか考えられるのは、 浮動小数点命令のサポート 仮想アドレスのサポート Compressed 命令のサポート AArch64ホ…

Binary Translation型エミュレータを作る(AArch64に対応するために)

Binary Translation型のエミュレータを作っている。今のところRISC-Vのバイナリをx86に直接バイナリ変換して実行することができるようになった。riscv-testsの一部を実行してx86上でPassできるようになっている。 QEMUはもともとマルチプラットフォーム向け…

QEMUはどのように浮動小数点命令をエミュレートしているのか

QEMUはゲストマシンの機械語をホストマシンの機械語に直接翻訳して(Binary Translation)実行することで高速動作を実現しているのだが、整数命令の場合はこれで問題ない。しかし浮動小数点命令の場合はどうだろう?RISC-Vとx86では浮動小数点命令の丸めの扱い…

Binary Translation型エミュレータを作る(riscv-testsのパタンを通していく)

Binary Translation型のエミュレータをRustで自作する話、徐々にテストパタンが安定して動作するようになっている。64ビット整数命令のパタンはすべてPassできるようになりたい。 これに伴っていくつかの実装変更を行った。これまではCSRRW命令などは専用のT…

GoogleのSystemVerilog ParserであるVeribleを試す(2)

GoogleのSystemVerilog Parserの続き。さらにいくつかコマンドがあるので探っていく。 verible-verilog-syntax これがおそらくSyntax解析エンジンの最も中心的なコマンドであろう。Verilogファイルを読み取って階層構造を出力する。階層構造を出力するために…