2022-03-01から1ヶ月間の記事一覧
DATE2022に上がっていたChiselの拡張言語Twineというものについて、論文を読んでみることにした。 今回で最後まで読み切った。感想としてはちょっとイマイチ。 具体的な例が乏しく、Chiselとの対比で具体的にどのようなメリットがあるのかあまり想像がつかな…
DATE2022に上がっていたChiselの拡張言語Twineというものについて、論文を読んでみることにした。 今回はインタフェースの接続方法と実装まで。うーん、データフローのみのハードウェアならやりようはあるかもしれないが、細かいCPUみたいな実装ではあまり活…
DATE2022に上がっていたChiselの拡張言語Twineというものについて、論文を読んでみることにした。 しかしこれ系の拡張言語はふわっとしている印象が多くて嫌な予感がする。大丈夫か?(DATEにAcceptしているのだから大丈夫なのかなあ) 前回の記事 msyksphinz.…
自作RISC-Vアウトオブオーダコアがある程度安定し始めたので、久しぶりにVivadoの論理合成を流して様子を確認してみた。 その間に、いくつかVivadoでないと見つけられないエラーを直した。やっぱりVerilatorだけだとちょっと厳しいものがあるなあ。 とりあえ…
自作RISC-Vアウトオブオーダコアの、命令発行ポリシについて少し考えなおした。 これまでは命令グループ内において、若い命令から順番に同じ演算ユニットに渡していた(その方が論理が簡単)が、やっぱり特定の演算器に命令が偏りそうだということで、少し考え…
DATE2022に上がっていたChiselの拡張言語Twineというものについて、論文を読んでみることにした。 しかしこれ系の拡張言語はふわっとしている印象が多くて嫌な予感がする。大丈夫か?(DATEにAcceptしているのだから大丈夫なのかなあ) web.eecs.umich.edu Twi…
BOOM Explorerという論文を読んでいる。ずいぶん時間が空いたが続き。VLSIの最適化された設計空間を探すのは時間がかかって大変。どうやって適切な探索空間を見つけだすかが問題となる。 難しそうな数式の部分はさておいて、とりあえず実験結果と結論まで一…
自作RISC-V アウトオブオーダコアの実装、いくつかのデバッグの結果標準構成でriscv-testsの必要なテストをすべて通すことが出来るようになった。 いくつか問題になったのは、ロード命令でTLBによりメモリアクセス例外が発生してそのまま当該ロード命令が強…
BOOM Explorerという論文を読んでいる。ずいぶん時間が空いたが続き。VLSIの最適化された設計空間を探すのは時間がかかって大変。どうやって適切な探索空間を見つけだすかが問題となる。 読み進めていくと定式化のためにかなり複雑なことをしている。マイク…
riscv-testsのテストケースをすべて通すためにテストケースの確認をしている。 rv64si-p-icache-aliasのテストケースを確認している。基本的にはスーパーページのテストと、ページテーブルをアップデートした際のアップデート確認のためのテストが入っている…
BOOM Explorerという論文を読んでいる。ずいぶん時間が空いたが続き。VLSIの最適化された設計空間を探すのは時間がかかって大変。どうやって適切な探索空間を見つけだすかが問題となる。 前の記事はこちら。 msyksphinz.hatenablog.com ieeexplore.ieee.org …
今更ながら、riscv-testsのrv64ui-p-accessをPassさせるために中身を理解する必要が生じたので、自分用のメモ。 64-bitの場合仮想アドレスは64ビット取ることができる。Sv39の場合はそのうち下位の39ビットを仮想アドレスとして使用することができるのだが、…
自作CPUのL1Dキャッシュアップデートポリシ再考、実装を結構進めた。ある程度テストパタンが通るようになった。 いくつかの最適化をしている。MissUnitがL1Dへのデータ書き込みをしているタイミングと、パイプラインによるL1Dの読み直しがタイミング的に必ず…
自作CPUのL1Dキャッシュアップデートポリシ再考、少し実装を始めた。なんか最近これしかやってないけど。 これまではMissUnitがL2へのリクエストを出し、L1Dキャッシュがレスポンスを受け取るようにしていた。 L1DキャッシュはMissUnitを検索して当該リクエ…
自作CPUのL1Dキャッシュアップデートポリシ再考、少し実装を始めた。 基本的な方針としてはL1Dのアップデートは2種類に分類する。 タグを更新せずにキャッシュラインをアップデート。1サイクル目でタグを確認し、ヒットすれば(Evictionされていなければ)、2…
BOOM Explorerという論文を読んでいる。これは、RISC-VのアウトオブオーダコアであるBOOMのパラメータを探索し、最適なマイクロアーキテクチャデザインを見つけるためのツールセットらしい。どうやって見つけだすのか、その手法に非常に興味があるので読んで…
自作CPUのL1Dキャッシュについていろいろ考えているが、やはりキャッシュラインを置き換えるタイミングでの書き込み制御が甘くランダムテストでバグを出してしまっている。 L1Dを置き換えるとき、ロード命令によるL1Dアクセスを行い、キャッシュミスかつウェ…
結論から言うとモデルを作っているのだけれども、例えばRISC-VのMULH命令などの計算結果の上位ビットを持ってくるようなタイプの命令は、最初に何が正しいのかナイーブな方法で計算しておかないと訳が分からなくなる。 一つのステップは、riscv-isa-sim (Spi…
AAPGはランダムテストケースなので、これまでのriscv-testsのようにお行儀のよい実行順序を守ってくれない。 いくつかのケースでパイプラインの修正を行う必要が生じてきた。例えばALUのパイプライン上で可変レイテンシ長で動くようなケース。 MUL命令やDIV…
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というのはこの間WOSETの論文を読んでいたRTLをファジングするためのツールセットらしい。 以下のスライドを見てみると何となくわかってくる。 https://woset-workshop.github.io/PDFs/2021/a10-slides.pdf FuzzLabというのはRTLに対してランダム…
AAPGはRISC-V向けのランダムパタンジェネレータだ。Pythonで記述されており簡単にインストールできる。 pip3 install aapg 以下のコマンドでセットアップできる。 $ aapg setup [INFO] - root : aapg started [INFO] - root : (2.2.6) Automated Assembly Pr…
自作RISC-Vコアの検証を強化するために、ランダムテストケースの適用を始めた。 ある程度テストが動くようになったので、100本作ってみて動かしてみることにした。テストケースはJSONで管理している。 [ { "name": "torture_00" , "elf": "torture-gen/20220…
自作RISC-V CPUコアのデバッグをしているときに気が付いたのだが、現状の乗算器にはバグがあるようだ(自分で作ったのだけれども)。 乗算器において符号付数、符号なし数についての取り扱いをきちんと設計しないと結構実装でミスをしてしまうのだが、この辺の…
色々と大きなイベントが終わったので、自分へのご褒美ということでREALFORCE R2キーボードを買った。 実は職場に一台持っていたのだけれども、非常に快適なので自宅にも一台置こうということで買ったのだった。 モデルとしてはREALFORCE A R2 TKLというもの…
ちょっと必要になって調査したので、メモ代わりに残しておく。 Chiselはデフォルトでは同期リセットなのだが、これを非同期リセットにするためのトレイトが用意されている。 多分これはChisel3.4あたりで加わった機能かな?あまり詳細なバージョンは追いかけ…