FPGA開発日記

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

2022-03-01から1ヶ月間の記事一覧

Chiselの拡張言語であるTwineの論文を読む (4. 実装と結果)

DATE2022に上がっていたChiselの拡張言語Twineというものについて、論文を読んでみることにした。 今回で最後まで読み切った。感想としてはちょっとイマイチ。 具体的な例が乏しく、Chiselとの対比で具体的にどのようなメリットがあるのかあまり想像がつかな…

Chiselの拡張言語であるTwineの論文を読む (3. コンポーネントの関係性と実装)

DATE2022に上がっていたChiselの拡張言語Twineというものについて、論文を読んでみることにした。 今回はインタフェースの接続方法と実装まで。うーん、データフローのみのハードウェアならやりようはあるかもしれないが、細かいCPUみたいな実装ではあまり活…

Chiselの拡張言語であるTwineの論文を読む (2. Twineのインタフェース概要)

DATE2022に上がっていたChiselの拡張言語Twineというものについて、論文を読んでみることにした。 しかしこれ系の拡張言語はふわっとしている印象が多くて嫌な予感がする。大丈夫か?(DATEにAcceptしているのだから大丈夫なのかなあ) 前回の記事 msyksphinz.…

自作RISC-VアウトオブオーダコアのFPGA向け論理合成確認

自作RISC-Vアウトオブオーダコアがある程度安定し始めたので、久しぶりにVivadoの論理合成を流して様子を確認してみた。 その間に、いくつかVivadoでないと見つけられないエラーを直した。やっぱりVerilatorだけだとちょっと厳しいものがあるなあ。 とりあえ…

自作RISC-Vアウトオブオーダコアの命令発行方法再考

自作RISC-Vアウトオブオーダコアの、命令発行ポリシについて少し考えなおした。 これまでは命令グループ内において、若い命令から順番に同じ演算ユニットに渡していた(その方が論理が簡単)が、やっぱり特定の演算器に命令が偏りそうだということで、少し考え…

Chiselの拡張言語であるTwineの論文を読む

DATE2022に上がっていたChiselの拡張言語Twineというものについて、論文を読んでみることにした。 しかしこれ系の拡張言語はふわっとしている印象が多くて嫌な予感がする。大丈夫か?(DATEにAcceptしているのだから大丈夫なのかなあ) web.eecs.umich.edu Twi…

BOOM Explorerの論文を読む (4. 実験結果と結論)

BOOM Explorerという論文を読んでいる。ずいぶん時間が空いたが続き。VLSIの最適化された設計空間を探すのは時間がかかって大変。どうやって適切な探索空間を見つけだすかが問題となる。 難しそうな数式の部分はさておいて、とりあえず実験結果と結論まで一…

自作RISC-Vアウトオブオーダコアでriscv-testsのテストケースがすべてPassできるようになった

自作RISC-V アウトオブオーダコアの実装、いくつかのデバッグの結果標準構成でriscv-testsの必要なテストをすべて通すことが出来るようになった。 いくつか問題になったのは、ロード命令でTLBによりメモリアクセス例外が発生してそのまま当該ロード命令が強…

BOOM Explorerの論文を読む (3. 問題の形成)

BOOM Explorerという論文を読んでいる。ずいぶん時間が空いたが続き。VLSIの最適化された設計空間を探すのは時間がかかって大変。どうやって適切な探索空間を見つけだすかが問題となる。 読み進めていくと定式化のためにかなり複雑なことをしている。マイク…

riscv-testsの`rv64si-p-icache-alias`は何のテストなのか

riscv-testsのテストケースをすべて通すためにテストケースの確認をしている。 rv64si-p-icache-aliasのテストケースを確認している。基本的にはスーパーページのテストと、ページテーブルをアップデートした際のアップデート確認のためのテストが入っている…

BOOM Explorerの論文を読む (2. 問題の定式化)

BOOM Explorerという論文を読んでいる。ずいぶん時間が空いたが続き。VLSIの最適化された設計空間を探すのは時間がかかって大変。どうやって適切な探索空間を見つけだすかが問題となる。 前の記事はこちら。 msyksphinz.hatenablog.com ieeexplore.ieee.org …

riscv-testsの`rv64ui-p-access`は何のテストなのか

今更ながら、riscv-testsのrv64ui-p-accessをPassさせるために中身を理解する必要が生じたので、自分用のメモ。 64-bitの場合仮想アドレスは64ビット取ることができる。Sv39の場合はそのうち下位の39ビットを仮想アドレスとして使用することができるのだが、…

L1Dキャッシュのキャッシュライン置き換え方法再考 (4. 実装と確認)

自作CPUのL1Dキャッシュアップデートポリシ再考、実装を結構進めた。ある程度テストパタンが通るようになった。 いくつかの最適化をしている。MissUnitがL1Dへのデータ書き込みをしているタイミングと、パイプラインによるL1Dの読み直しがタイミング的に必ず…

L1Dキャッシュのキャッシュライン置き換え方法再考 (3. 実装と確認)

自作CPUのL1Dキャッシュアップデートポリシ再考、少し実装を始めた。なんか最近これしかやってないけど。 これまではMissUnitがL2へのリクエストを出し、L1Dキャッシュがレスポンスを受け取るようにしていた。 L1DキャッシュはMissUnitを検索して当該リクエ…

L1Dキャッシュのキャッシュライン置き換え方法再考 (2. 実装と確認)

自作CPUのL1Dキャッシュアップデートポリシ再考、少し実装を始めた。 基本的な方針としてはL1Dのアップデートは2種類に分類する。 タグを更新せずにキャッシュラインをアップデート。1サイクル目でタグを確認し、ヒットすれば(Evictionされていなければ)、2…

BOOM Explorerの論文を読む (1. Introduction)

BOOM Explorerという論文を読んでいる。これは、RISC-VのアウトオブオーダコアであるBOOMのパラメータを探索し、最適なマイクロアーキテクチャデザインを見つけるためのツールセットらしい。どうやって見つけだすのか、その手法に非常に興味があるので読んで…

L1Dキャッシュのキャッシュライン置き換え方法再考

自作CPUのL1Dキャッシュについていろいろ考えているが、やはりキャッシュラインを置き換えるタイミングでの書き込み制御が甘くランダムテストでバグを出してしまっている。 L1Dを置き換えるとき、ロード命令によるL1Dアクセスを行い、キャッシュミスかつウェ…

64ビットよりも大きい数値の乗算器をどうやって検証するか

結論から言うとモデルを作っているのだけれども、例えばRISC-VのMULH命令などの計算結果の上位ビットを持ってくるようなタイプの命令は、最初に何が正しいのかナイーブな方法で計算しておかないと訳が分からなくなる。 一つのステップは、riscv-isa-sim (Spi…

RISC-Vのランダムテストジェネレータ AAPGを試す (3. AAPGパタンを使ったデバッグ)

AAPGはランダムテストケースなので、これまでのriscv-testsのようにお行儀のよい実行順序を守ってくれない。 いくつかのケースでパイプラインの修正を行う必要が生じてきた。例えばALUのパイプライン上で可変レイテンシ長で動くようなケース。 MUL命令やDIV…

RISC-Vのランダムテストジェネレータ AAPGを試す (2. より複雑な命令の生成)

AAPGの続き。もう少し複雑な命令を生成してみる。config.yamlを以下のように変更してみた。 isa-instruction-distribution: rel_sys: 0 rel_sys.csr: 1 rel_rv32i.ctrl: 0 rel_rv32i.compute: 1 rel_rv32i.data: 1 rel_rv32i.fence: 1 rel_rv64i.compute: 1 …

RTLFuzzLabを試す (2. RTLFuzzLabの仕組みを学ぶ)

RTLFuzzLabというのはこの間WOSETの論文を読んでいたRTLをファジングするためのツールセットらしい。 以下のスライドを見てみると何となくわかってくる。 https://woset-workshop.github.io/PDFs/2021/a10-slides.pdf FuzzLabというのはRTLに対してランダム…

RISC-Vのランダムテストジェネレータ AAPGを試す

AAPGはRISC-V向けのランダムパタンジェネレータだ。Pythonで記述されており簡単にインストールできる。 pip3 install aapg 以下のコマンドでセットアップできる。 $ aapg setup [INFO] - root : aapg started [INFO] - root : (2.2.6) Automated Assembly Pr…

自作RISC-V CPU開発におけるriscv-tortureの適用 (2)

自作RISC-Vコアの検証を強化するために、ランダムテストケースの適用を始めた。 ある程度テストが動くようになったので、100本作ってみて動かしてみることにした。テストケースはJSONで管理している。 [ { "name": "torture_00" , "elf": "torture-gen/20220…

自作RISC-V CPU開発における乗算器の設計

自作RISC-V CPUコアのデバッグをしているときに気が付いたのだが、現状の乗算器にはバグがあるようだ(自分で作ったのだけれども)。 乗算器において符号付数、符号なし数についての取り扱いをきちんと設計しないと結構実装でミスをしてしまうのだが、この辺の…

REALFORCEキーボードを買った

色々と大きなイベントが終わったので、自分へのご褒美ということでREALFORCE R2キーボードを買った。 実は職場に一台持っていたのだけれども、非常に快適なので自宅にも一台置こうということで買ったのだった。 モデルとしてはREALFORCE A R2 TKLというもの…

Chiselにおける非同期リセットの実現方法

ちょっと必要になって調査したので、メモ代わりに残しておく。 Chiselはデフォルトでは同期リセットなのだが、これを非同期リセットにするためのトレイトが用意されている。 多分これはChisel3.4あたりで加わった機能かな?あまり詳細なバージョンは追いかけ…