2021-08-01から1ヶ月間の記事一覧
キャッシュの置き換えアルゴリズムというのはいろいろあるけれども、ここではそういう話ではなくて「どうアトミックにキャッシュを置き換えるか」ということを考えた。 つまり、キャッシュを掃き出してロードするまでには間隔があくわけで、それをきちんと実…
Digital Design and Computer Architecutre というのは、通称Hariss & Harris と呼ばれ、デジタル回路、コンピュータアーキテクチャの基礎的な題材を取り扱う非常に有名な教科書だ。 これまで第1版、第2版と出てきて、さらにARM版も出てきている。これらは日…
最近は色々あってCPUのストアバッファについて考えている。 ストアバッファは簡単に言えばコミット済みのストア命令を、STQ(Store Queue)から分離しL1Dキャッシュもしくは外部へ書き込むまでの生存管理を行うものだ。 STQによるLSUパイプライン実行とL1Dへの…
RISC-VはメモリコンシステンシモデルとしてRVWMO (RISC-V Weakl Memory Ordering)を採用している。 RVWMOについての説明はRISC-Vの仕様書のAppendixについて説明されているが、ここを読んでいくことにする。 RVWMOを理解するにあたって、リトマステストとい…
RISC-Vの仕様書27章にある「ISA Extension Naming Convensations」が面白かったので纏めてみる。 RISC-Vの命名文字列(つまり、RV64IMAFDCやRV32IMCなど)は、大文字小文字を区別しない。 標準拡張、つまり以下の拡張命令には表記の順序がある。以下の表におい…
ModelSim(32-bit版)を使うにあたり、これまで使っていたlibelfが使用できなくなり、elfをhexに変換してRAMにロードする必要が生じた。 しかもRAMとしてシミュレーション用に連想配列を使っているので、readmemhで読み込む際にアドレス情報が必要になる。いく…
LLVMバックエンドの開発で、これまで使用していたrelease/12.xブランチからrelease/13.xに移行したときのAPIの変更点について確認した。 今回はAPIの変更点が少ない。 namespace llvm { // 以下のコードを追加 class formatted_raw_ostream; MCTargetDesc/MY…
RISC-VとChiselで学ぶ はじめてのCPU自作 ――オープンソース命令セットによるカスタムCPU実装への第一歩作者:⻄⼭ 悠太朗,井⽥健太技術評論社Amazon 最近発売になった、「RISC-VとChiselで学ぶはじめてのCPU自作」を献本頂きました。@ciniml 様、ありがとうご…
これまで基本的に自作CPUのシミュレーションはVerilatorを使っていた。これには理由がある。 - ある程度の規模のデザインならばコンパイル時間も気にならない。 - SpikeとのDPI接続などの機能が豊富 - かなり攻めたSystemVerilogの構文もサポートしている し…
developer.arm.com developer.arm.com インターコネクト間のプロトコルフローについて 次に、CHIのプロトコルフローについて見ていく。 Read Transaction flows Read transactions with DMT and without snoops DMTというのはDirect Memory Transferであると…
RISC-Vの仕様書を一から読みなおすことを地道に続けている。RISC-Vの仕様自体についてはあまり言及することはないのだが、仕様書には面白いことに「RISC-Vの拡張」関する取り決めをした章が設けられている。"Chapter26 Extending RISC-V"がそれに相当する。 …
developer.arm.com developer.arm.com CHIのコヒーレンスプロトコルについて キャッシュラインの取りうる状態 キャッシュラインの状態の種類は、以下のようになっている。 状態 説明 補足? I (Invalid) キャッシュラインはキャッシュ中に存在していない Inv…
少し前にWaveDromというJSONで波形を表示するツールについて調査していたのだが、ある程度使いこなすことが出来るようになってきた。 今作っている自作RISC-V CPUの仕様書を書くために波形を書いているのだが、結構便利に使うことが出来ている。 例えば、以…
developer.arm.com developer.arm.com CHIのオーダリングの章を読んでいたのだが、正直概念的な話が多すぎて良く分からん。 CHIのオーダリングについて CHIがオーダリングの要求をサポートするためのプロトコルのメカニズムについて説明する。 マルチコピー…
自作CPUとかをやっていて、RTLとISS(命令セットシミュレータ)でどうしても誤差が生じる部分と言えば、真っ先に思いつくのがサイクル計測部分だ。 RISC-VのCPUとかを設計していると、ベンチマークを流している場合に必ずMCYCLEが一致しない問題にぶちあたる。…
developer.arm.com developer.arm.com いくつかの例に分けてCHIのトランザクションの例を見ていく。 まず、トランザクションには2種類ある。 DMT : Direct Memory Transfer スレーブノードはリクエストノードに対して直接データを転送することを許す DCT : D…
developer.arm.com developer.arm.com プロトコル層のトランザクションの種類 プロトコル層のトランザクションは以下のような種類が定義されている。 読み込み要求 ReadNoSnp, ReadNoSnpSep ReadOnce. ReadOnceCleanInvalid. ReadOnceMakeInvalid. ReadClean…
developer.arm.com developer.arm.com AMBA5ではデバイス間のコヒーレンスを取るためのプロトコルとしてCHIが導入される。CHIはCoherent Hub Interfaceの略称で、AMBA4ではACEと呼ばれていたものを拡張したものになる。 ACEとCHIの違いはどのようになってい…
前回、浮動小数点演算器のHardFloatを調査したが、そのままのデザインだとパイプラインレジスタが入っていないし、Rocket-Chip側のパイプライン形式のFPUを使うのも面倒なので、昔論文で読んだことのあったFPNewを使うとどんな感じだろうということでやって…
久しぶりに浮動小数点演算器を触っているのだが、自作CPUに浮動小数点演算器を組み込む場合にどうすればいいのかを調査している。 一からFPUを作るのは嫌なので、HardFloatを使って生成されたVerilogファイルをそのまま組み込みたい。 その場合の方法につい…
Wavedromやbit-fieldの機能を調べているうちにわかったのだが、RISC-V ベクトル拡張の仕様書はadocファイルからpdfを生成することができ、その際にビットフィールドなどの情報をbit-fieldプラグインを使用して上手く変換してくれるらしい。 すでにRISC-Vベク…
BOOMの分岐予測について、boom-docs.orgを読みながら解き明かしていこうと思う。 docs.boom-core.org いくつかテストパタンを作ってRASの挙動を確認してみることにした。作ってみたのは以下のようなマイクロベンチマーク。 .section .text dummy_call: ret .…
BOOMの分岐予測について、boom-docs.orgを読みながら解き明かしていこうと思う。 docs.boom-core.org BOOMのRASはMediumBoomConfigで32エントリ用意されていた。32エントリの内、最初の1エントリはどうも使われていないっぽい。 このエントリに情報が登録さ…
WaveDromからたどったのだが、npmのパッケージでbit-fieldというのがあり、JSONファイルを読み込ませればビットフィールドの構成画像を作ってくれるツールがあるらしい。 ローカルで試してみようと思ったが、残念ながら私のPCのnode.jsはぶっ壊れており、上…
BOOMの分岐予測について、boom-docs.orgを読みながら解き明かしていこうと思う。 docs.boom-core.org BOOMの分岐予測器は大きく分けて2種類に分類される。 Next Line Predictor (NLP) : 1サイクルで予測できる高速分岐予測器 分岐ターゲットバッファ(BTB)、…
最近は回路図やブロックダイアグラムを除いて、シーケンス図やステートマシンなどを図形エディタで書くのが面倒くさくなってしまっており、MarkdownエディタであるTyporaの図形描画機能を使っている。 ここのページに上手くまとめられている。 qiita.com 最…