FPGA開発日記

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

2021-08-01から1ヶ月間の記事一覧

CPU内のキャッシュラインを置き換えるためのフローについて考える

キャッシュの置き換えアルゴリズムというのはいろいろあるけれども、ここではそういう話ではなくて「どうアトミックにキャッシュを置き換えるか」ということを考えた。 つまり、キャッシュを掃き出してロードするまでには間隔があくわけで、それをきちんと実…

Digital Design and Computer Architecture RISC-V Edition を買った

Digital Design and Computer Architecutre というのは、通称Hariss & Harris と呼ばれ、デジタル回路、コンピュータアーキテクチャの基礎的な題材を取り扱う非常に有名な教科書だ。 これまで第1版、第2版と出てきて、さらにARM版も出てきている。これらは日…

ストアバッファについて考える

最近は色々あってCPUのストアバッファについて考えている。 ストアバッファは簡単に言えばコミット済みのストア命令を、STQ(Store Queue)から分離しL1Dキャッシュもしくは外部へ書き込むまでの生存管理を行うものだ。 STQによるLSUパイプライン実行とL1Dへの…

RVWMOにおけるリトマステストについて調べる

RISC-VはメモリコンシステンシモデルとしてRVWMO (RISC-V Weakl Memory Ordering)を採用している。 RVWMOについての説明はRISC-Vの仕様書のAppendixについて説明されているが、ここを読んでいくことにする。 RVWMOを理解するにあたって、リトマステストとい…

RISC-V 拡張命令の命名ポリシについて

RISC-Vの仕様書27章にある「ISA Extension Naming Convensations」が面白かったので纏めてみる。 RISC-Vの命名文字列(つまり、RV64IMAFDCやRV32IMCなど)は、大文字小文字を区別しない。 標準拡張、つまり以下の拡張命令には表記の順序がある。以下の表におい…

ELFからHEXに変換するためのツール

ModelSim(32-bit版)を使うにあたり、これまで使っていたlibelfが使用できなくなり、elfをhexに変換してRAMにロードする必要が生じた。 しかもRAMとしてシミュレーション用に連想配列を使っているので、readmemhで読み込む際にアドレス情報が必要になる。いく…

LLVM13でのAPI変更点について確認

LLVMバックエンドの開発で、これまで使用していたrelease/12.xブランチからrelease/13.xに移行したときのAPIの変更点について確認した。 今回はAPIの変更点が少ない。 namespace llvm { // 以下のコードを追加 class formatted_raw_ostream; MCTargetDesc/MY…

「RISC-VとChiselで学ぶはじめてのCPU自作」を献本頂きました

RISC-VとChiselで学ぶ はじめてのCPU自作 ――オープンソース命令セットによるカスタムCPU実装への第一歩作者:⻄⼭ 悠太朗,井⽥健太技術評論社Amazon 最近発売になった、「RISC-VとChiselで学ぶはじめてのCPU自作」を献本頂きました。@ciniml 様、ありがとうご…

自作CPUをVivado Simulatorでシミュレーションするための試行

これまで基本的に自作CPUのシミュレーションはVerilatorを使っていた。これには理由がある。 - ある程度の規模のデザインならばコンパイル時間も気にならない。 - SpikeとのDPI接続などの機能が豊富 - かなり攻めたSystemVerilogの構文もサポートしている し…

AMBA5 の CHI (Coherence Hub Interface)についての調査 (6. コヒーレンスプロトコル2)

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の仕様自体についてはあまり言及することはないのだが、仕様書には面白いことに「RISC-Vの拡張」関する取り決めをした章が設けられている。"Chapter26 Extending RISC-V"がそれに相当する。 …

AMBA5 の CHI (Coherence Hub Interface)についての調査 (5. キャッシュ状態とコヒーレンスプロトコル)

developer.arm.com developer.arm.com CHIのコヒーレンスプロトコルについて キャッシュラインの取りうる状態 キャッシュラインの状態の種類は、以下のようになっている。 状態 説明 補足? I (Invalid) キャッシュラインはキャッシュ中に存在していない Inv…

JSONベースで書ける波形表示ツールWaveDromがとても便利だった (2)

少し前にWaveDromというJSONで波形を表示するツールについて調査していたのだが、ある程度使いこなすことが出来るようになってきた。 今作っている自作RISC-V CPUの仕様書を書くために波形を書いているのだが、結構便利に使うことが出来ている。 例えば、以…

AMBA5 の CHI (Coherence Hub Interface)についての調査 (4. オーダリング制約)

developer.arm.com developer.arm.com CHIのオーダリングの章を読んでいたのだが、正直概念的な話が多すぎて良く分からん。 CHIのオーダリングについて CHIがオーダリングの要求をサポートするためのプロトコルのメカニズムについて説明する。 マルチコピー…

RTLの情報をC++プログラムにバックポートする方法の調査

自作CPUとかをやっていて、RTLとISS(命令セットシミュレータ)でどうしても誤差が生じる部分と言えば、真っ先に思いつくのがサイクル計測部分だ。 RISC-VのCPUとかを設計していると、ベンチマークを流している場合に必ずMCYCLEが一致しない問題にぶちあたる。…

AMBA5 の CHI (Coherence Hub Interface)についての調査 (3. トランザクション例)

developer.arm.com developer.arm.com いくつかの例に分けてCHIのトランザクションの例を見ていく。 まず、トランザクションには2種類ある。 DMT : Direct Memory Transfer スレーブノードはリクエストノードに対して直接データを転送することを許す DCT : D…

AMBA5 の CHI (Coherence Hub Interface)についての調査 (2. トランザクションの概要)

developer.arm.com developer.arm.com プロトコル層のトランザクションの種類 プロトコル層のトランザクションは以下のような種類が定義されている。 読み込み要求 ReadNoSnp, ReadNoSnpSep ReadOnce. ReadOnceCleanInvalid. ReadOnceMakeInvalid. ReadClean…

AMBA5 の CHI (Coherence Hub Interface)についての調査 (1. 概要)

developer.arm.com developer.arm.com AMBA5ではデバイス間のコヒーレンスを取るためのプロトコルとしてCHIが導入される。CHIはCoherent Hub Interfaceの略称で、AMBA4ではACEと呼ばれていたものを拡張したものになる。 ACEとCHIの違いはどのようになってい…

オープンソースの浮動小数点演算器FPNewの調査

前回、浮動小数点演算器のHardFloatを調査したが、そのままのデザインだとパイプラインレジスタが入っていないし、Rocket-Chip側のパイプライン形式のFPUを使うのも面倒なので、昔論文で読んだことのあったFPNewを使うとどんな感じだろうということでやって…

Chiselで記述された浮動小数点演算器HardFloatの調査

久しぶりに浮動小数点演算器を触っているのだが、自作CPUに浮動小数点演算器を組み込む場合にどうすればいいのかを調査している。 一からFPUを作るのは嫌なので、HardFloatを使って生成されたVerilogファイルをそのまま組み込みたい。 その場合の方法につい…

RISC-Vベクトル拡張仕様書の日本語版pdf生成試行

Wavedromやbit-fieldの機能を調べているうちにわかったのだが、RISC-V ベクトル拡張の仕様書はadocファイルからpdfを生成することができ、その際にビットフィールドなどの情報をbit-fieldプラグインを使用して上手く変換してくれるらしい。 すでにRISC-Vベク…

BOOMの分岐予測機構について調べる (2. BOOMのRAS実装を読む)

BOOMの分岐予測について、boom-docs.orgを読みながら解き明かしていこうと思う。 docs.boom-core.org いくつかテストパタンを作ってRASの挙動を確認してみることにした。作ってみたのは以下のようなマイクロベンチマーク。 .section .text dummy_call: ret .…

BOOMの分岐予測機構について調べる (2. BOOMのRAS実装を読む)

BOOMの分岐予測について、boom-docs.orgを読みながら解き明かしていこうと思う。 docs.boom-core.org BOOMのRASはMediumBoomConfigで32エントリ用意されていた。32エントリの内、最初の1エントリはどうも使われていないっぽい。 このエントリに情報が登録さ…

JSONファイルからレジスタビットフィールドテーブルを作ってくれるbit-field

WaveDromからたどったのだが、npmのパッケージでbit-fieldというのがあり、JSONファイルを読み込ませればビットフィールドの構成画像を作ってくれるツールがあるらしい。 ローカルで試してみようと思ったが、残念ながら私のPCのnode.jsはぶっ壊れており、上…

BOOMの分岐予測機構について調べる (1. BOOMの分岐予測の構成)

BOOMの分岐予測について、boom-docs.orgを読みながら解き明かしていこうと思う。 docs.boom-core.org BOOMの分岐予測器は大きく分けて2種類に分類される。 Next Line Predictor (NLP) : 1サイクルで予測できる高速分岐予測器 分岐ターゲットバッファ(BTB)、…

MarkdownエディタTyporaでMarkdownテキストを用いて図を書く方法

最近は回路図やブロックダイアグラムを除いて、シーケンス図やステートマシンなどを図形エディタで書くのが面倒くさくなってしまっており、MarkdownエディタであるTyporaの図形描画機能を使っている。 ここのページに上手くまとめられている。 qiita.com 最…