FPGA開発日記

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

CPU

L1キャッシュを制御するためのステートマシン調査

CPU

L1キャッシュは、具体的にはどのようにして制御をしたらいいのだろう? まずはサンプル回路を使って、制御シーケンスを調査してみよう。 対象とするのは、パタヘネで解説してあるL1キャッシュのシーケンサだ。 コンピュータの構成と設計 第5版 上作者: ジョ…

シンプルなL1キャッシュをVerilog実装する(1. シンプルなモデルを調査)

CPU

CPUにシンプルなL1キャッシュを実装する。単純なダイレクトマッピングで、最初はレイテンシについてもあまり考えない。 ヒットミス判定が正しく行え、正しくデータをパイプラインに流すことができることを至上命題としよう。 まず、いろいろ調査していると、…

Epiphany-V: A 1024プロセッサコアについて

CPU

Parallelaからリリースされた1024コアのプロセッサについて。 上記画像はAdaptevaのブログより引用。https://www.parallella.org/2016/10/05/epiphany-v-a-1024-core-64-bit-risc-processor/ Epiphany-V: A 1024-core 64-bit RISC processor | Parallella 10…

CPUのリネーミングを支えるユニット、フリーリスト

CPU

CPUのレジスタリネーミングでは、フリーリストと呼ばれる、空いているレジスタ番号を管理するためのFIFOキューが存在する。 フリーリストには、現在使用されていない物理レジスタ番号が格納されており、命令がデコードされ、レジスタ書き込みが必要な命令で…

ISSとRTLを比較するためのフレームワークの実装

CPU

CPU設計を行うにあたり、検証に必要なフレームワークを構築する。 RTLで記述されたCPUは、シミュレーション中にログを出力し、同じプログラムをISSでも実行する。 この2つのログを比較して、正しくRTLが動作しているかを検証する訳だが、この場合に何をどの…

リネームIDをISSでモデル化する

CPU

レジスタリネーミングでは、アーキテクチャレジスタと物理レジスタを接続するための仕組みだ。 レジスタに書き込みを行う命令が実行されると、アーキテクチャレジスタのIDはリネーミングレジスタのレジスタIDに置き換われる。 このレジスタリネーミングの仕…

AXIと接続するLSUの実装方法検討(1)

CPU

LSUとはLoad Store Unit(たぶん)のことで、メモリアクセスに関わるすべての操作を担当するユニットだ。最もシンプルなものであれば、キャッシュに対するロードストアが出来れば良い。 CPUのパイプラインからの要求に応じて、外部バスを操作してメモリにデー…

CPU開発に必須な検証手法の話

CPU

CPU開発をしていると、自分の設計したCPUが正しく動作しているかを検証する必要が必ず生じる。 プログラムを流して動作させているときに、そのプログラムが正しく動作したかを確かめるためには、いくつかの方法がある。 一つ目はプログラム自体に検証能力を…

AXIバスリクエスト中に命令フラッシュが入った場合を考慮した命令Fetcherの実装(1)

CPU

msyksphinz.hatenablog.com この話の続き。RISC-V対応のCPUの実装にあたり、足回りのAXIをどのように実装するか。 今のところ1次キャッシュは備えていないので(いずれは追加しないといけないが)、足回りのAXIは、 命令アドレスリクエスト用チャネル (IF_MAR)…

"RISC-Vについて"ページを更新、およびソフトバンクARM買収によるRISC-Vの立場について僕の(個人的な)意見

CPU

今日はすごいアクセス数が来ると思ったら、ソフトバンクのARM買収により代替手法としてのRISC-Vについていくつかのツイートで言及されたためか、RISC-V関連のアクセスが急上昇したため、コメントも含めて"RISC-Vについて"のページを更新しておいた。 msyksph…

プロセッサにおけるアウトオブオーダの考え方について(リネームレジスタの例外時の処理について)

CPU

趣味でCPUを作るのは楽しいもので、自作CPUを作成してベンチマーキングし、性能最適化していったり、高速化していくのは趣味の一つとして楽しめるものだと思う。 CPUを理解するのに、アウトオブオーダ処理、レジスタリネーミングについて理解するのは必須だ…

MIPSがGoogleのIoT向けOS「Brillo」をサポート

CPU

Imagination Technologyのプレスリリースより。 imgtec.com BrilloというのはGoogleの開発しているIoT向けのOSだ。GoogleのOSと言えばAndroidだが、IoT向けにはこちらが本命なのかな? Brilloのサポート環境としては、ARM, x86, そしてMIPSだ。Googleが何故M…

AXIルータ生成プログラムの作成(デコーダの記述)

CPU

AXIルータを自動生成できるよう、スクリプトを記述している。 今は、入力データに対して、どのようにアドレスデコーダを搭載して、パケットをルーティングするかというところだ。 $regions = Array[Array['START', Array['1011_1111_1100_XXXX_XXXX_XXXX_XXX…

MIPSのTLBについて勉強(シンプルなアドレス変換をISSに実行する)

CPU

MIPSのブートについて理解するためには、まずはMIPSアーキテクチャのメモリマップについて理解しなければ。 このあたりに、メモリマップの説明がある。 ファイル:MIPS32 MemoryMap.png - Wikipedia これを見ると、0xA000_0000-0xBFFF_FFFF, 0x8000_0000-0x9F…

HotChipsで発表されたRISC-V実装(解説編)

CPU

msyksphinz.hatenablog.com 前に日記に書いた、RISC-Vの名前を含むHotChipsの発表について、mynaviニュースのHisa Andoが記事を起こしていたので、読んでみた。 内容としては、淡々と発表内容を説明している感じだ。 news.mynavi.jp news.mynavi.jp news.myn…

CPUのランダムテスト生成について調査

CPU

せっかくISSが良い感じに仕上がってきたので、RTLを検証するためのツールの一つであるランダムテスト生成について調査してみた。 ランダムテスト生成として僕が知っているのは Obsidianくらいだが、これは確かARMに買収されてしまった。 ARM、将来のARMプロ…

中国製MIPS64 CPU "龍芯3号"

CPU

MIPSの動きが最近ちょっと面白い。 ARMとx86のコードが走る中国製の高性能MIPS64 CPU「龍芯3号」 - PC Watchpc.watch.impress.co.jp New MIPS64-based Loongson processors break performance barrier - Imagination Blogblog.imgtec.com 中国製のMIPS64対応…

HotChipsで発表されたRISC-V実装

CPU

HotChipsでRISC-Vのバリエーションについて発表されたそうな。 RISC-V at HotChips | RISC-V BLOG 内容については、RISC-V Workshopで発表されたものとほぼ同一なのだと思う。 2nd RISC-V Workshop http://riscv.org/workshop-jun2015/riscv-raven-workshop-…

自作RISC-V ISSでCoremarkが動作するようになった

CPU

という訳で、ISSをいろいろ修正して、無事にRISC-VのISSでCoremarkが動作するようになった。 あとは、これにいろいろデバッグ機能を足して、改良していく、という感じかな。 MIPS側のビルドもメンテナンスを行ったので、RISC-VとMIPS、どちらでも同じ機能が…

グローバル変数にアクセスしたときのアクセス情報をログに表示する

CPU

bfdのシンボルには、BSF_GLOBALとBSF_LOCALという、変数やセクション、各種定数を格納するためのセクションがある。 この中で、BSF_GLOBALはグローバル変数の情報が格納されており、取り扱うには一番簡単っぽいので試してみた。 関数のシンボルテーブルを作…

RISC-Vのトラップの処理方法の勉強(2)

CPU

RISC-Vのトラップの処理方法の勉強 - FPGA開発日記msyksphinz.hatenablog.com トラップの処理方法を勉強して、まずはrv32si-p-csrをパスするようにしたい... トラップが発生したときに、どのような処理が発生するか? RISC-Vのトラップは4種類用意されている…

RISC-Vのトラップの処理方法の勉強

CPU

新ISSでシステム命令系のパタンをパスさせようと奮闘中... システム命令は、以下の資料で定義されている。ただし、ユーザレベル命令と同様に、命令の説明を英語の文体で書いてあるため、理解に時間がかかる。 手っ取り早く、疑似言語とかで書いてくれればい…

新RISC-V ISSでの検証パタン実行結果

CPU

新RISC-V ISSの検証のために、まずはPrimitive命令の検証パタンを実行してみた。 msyksphinz/swimmer_riscvgithub.com 利用しているのは、RISC-Vが提供している以下のパタンだ。 riscv/riscv-testsgithub.com これのMakefileを一部書き換え、srecファイルが…

RISC-V用のCoremarkをビルドする(ISS動作確認用)

CPU

CoremarkのRISC-V版は、一度本ブログでビルドしている。 Rocket-Chip を ZedBoardにインプリしてCoremarkを測定する(クロスコンパイル編) - FPGA開発日記msyksphinz.hatenablog.com ただ、これはLinuxで動作させるためのもので、ISSで動作を確認するためのビ…

MIPS用ISSをRISC-Vでも動作するようにする

CPU

これで、ある程度PortableのISSが完成した。まだCoremarkが完走しないけど。 msyksphinz/swimmer_riscvgithub.com 同じリポジトリから、ベースを変えずにコンパイルオプションを変えるだけで、MIPSとRISC-VのISSがビルドすることができる。 RISC-Vのビルド方…

新ISSがどうにか動くようになった

CPU

昨日から本格的に実装を始めたMIPSの新ISSがなんとか動作するようになった。といっても、まだCoremarkくらいしか動作確認していないけど。 MIPS ISS実装中... - FPGA開発日記msyksphinz.hatenablog.com msyksphinz/swimmer_riscvgithub.com ビルド方法はまだ…

MIPS ISS実装中...

CPU

MIPSのISSを実装し直している。今回は、RISC-VのISSと共有できる形で実装を考え直し、C++で書き直している。 MIPSのISSの実装で問題になるのが、遅延スロットの問題である。私のISSの実装は、基本的に、 命令をシミュレートする。その際、レジスタの読み込み…

ISSからハードウェアデコーダを自動生成してみる(6)

CPU

さて、ハードウェアデコーダとして、制御信号を生成していこう。 命令毎のテーブルから、信号を取り出すために、以下のようなRubyのコードを用いて自動生成してみる。 msyksphinz/swimmer_riscvgithub.com inst_ctrl_fp.printf(mnemonic, max_ctrl_bitwidth)…

ISSからハードウェアデコーダを自動生成してみる(5)

CPU

続いて、制御信号を自動生成してみよう。 msyksphinz/swimmer_riscvgithub.com 基本的には、命令分類毎に必要な信号の種類がリストアップされているので、 命令分類毎に、各命令で制御信号が必要とされているかをチェックし、必要とされていれば信号線を生成…

ISSからハードウェアデコーダを自動生成してみる(4)

CPU

続いて、制御信号を自動生成に挑戦する。 ALU_ADD / ALU_SUB など、接頭語が同一ならば、同じビットフィールドとして宣言する。 それ以外の単発の名前であれば、固有に1ビットを割り当てる。 例: ALU_ADD/ALU_SUB/ALU_MUL/ALU_DIV/DST_EN/R1_EN/R2_EN の信号…