FPGA開発日記

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

2021-01-01から1年間の記事一覧

MICRO 2021の論文を読む (Software Defined Vector (1))

MICRO 2021 の論文が Free Access になっているので、興味のあるものを読んでいくことにした。 最初はSoftware-Defined Vector から。読んでいると、これは中規模なDynamically Reconfigurable Processorな気がしてきた。タイルの規模が大きいけど、やりたい…

T-Head(Alibaba)のRISC-Vコアデザインの試行 (3. シミュレーション動作)

アリババのRISC-Vコアデザインのオープンソース化があった。中身を見てみるとビルドスクリプトにも思いっきりT-Headって書いてあるのでT-Headでいいでしょう。 一応Coremarkのコンパイルは上手く行っているみたいで、シミュレーションを流し直している。 し…

T-Head(Alibaba)のRISC-Vコアデザインの試行 (2. Coremarkコンパイルエラーの修正)

アリババのRISC-Vコアデザインのオープンソース化があった。中身を見てみるとビルドスクリプトにも思いっきりT-Headって書いてあるのでT-Headでいいでしょう。 T-HeadのGCCを取ってくるのは面倒くさいので、crt0とGCCのオプションをいじって無理よりCoremark…

T-Head(Alibaba)のRISC-Vコアデザインの試行

アリババのRISC-Vコアデザインのオープンソース化があった。中身を見てみるとビルドスクリプトにも思いっきりT-Headって書いてあるのでT-Headでいいでしょう。 初期のcloneしたデザインからいくつかコメントアウトとPATHの追加削除を行っている。なんでcshの…

SystemVerilog の Streaming演算について勉強 (Verilatorでの生成結果)

SystemVerilogのStream演算について、念のためVerilatorでどのように生成されているのか確認しておこうと思った。 まず、簡単な構成として以下のようなStream演算をコンパイルしてみた。 initial begin static bit [7:0] value_a = 8'h8C; static bit [7:0] …

SystemVerilog の Streaming演算について勉強

SystemVerilogのStreaming演算について、あまり良く知らなかったのでいろいろ勉強しようと思った。 Streaming演算では、任意のサイズでのビット列の反転ができるらしい。以下のサイトが参考になる。 https://www.amiq.com/consulting/2017/05/29/how-to-pack…

GTKWaveとVerilatorはSystemVerilogのunion型をどのように扱っているのか

ふと気になって、SystemVerilogのunion型をどのように扱っているのか調査しようと思った。現在私のデザインではunion型は使っていないけれども、今後使うことになるとデバッグ時にGTKWaveで波形を観察することになる。GTKWaveがどのようにunion型を扱ってい…

IBM z15の分岐予測器の論文を読む

www.computer.org ISCAの上記の論文を読む。現在は入手不可能になっているが、ISCAの時は特別に公開されていたようだ。あんまり詳細は記述できないのだがサマリだけをメモ的にアップロードしていく。 最新のエンタープライズクラスのIBM z15分岐予測器の設計…

自作RISC-V OoOコアの分岐予測性能解析 (RASの論文を読む)

分岐予測は設計経験がないうえにいろいろ試行錯誤しながら作っているのだが、なかなか性能が伸びない。 時間を見つけて実装の見直しを行っているが、独自にいろいろやってもらちが明かないので論文を読んでみることにした。 参考にしたのは以下の論文「Impro…

自作RISC-V OoOコアの分岐予測性能解析 (RASの性能解析)

分岐予測は設計経験がないうえにいろいろ試行錯誤しながら作っているのだが、なかなか性能が伸びない。 とりあえず試行錯誤したバージョンは意外と性能が伸びていない。 RASのインデックスがずれてしまうのが問題のようだ。投機的にRASのインデックスが更新…

自作RISC-V OoOコアの分岐予測性能解析 (RASの設計仕様)

分岐予測は設計経験がないうえにいろいろ試行錯誤しながら作っているのだが、いくつか設計メモを残しておこう。 まずそもそもフェッチの動作だが、大きく分け3つのステージに分けている。 s0ステージ 命令キャッシュおよびTLBに対して仮想アドレスのリクエス…

自作RISC-V OoOコアの分岐予測性能解析 (RASのデバッグ)

ちまちまと自作RISC-Vコアを実装している。RASの検討をしたので実装を行っている。 問題となるのはBIMとの共用だ。BIMの方がキャッシュライン上の前のビット列でヒットすればそちらを採用し、RASの方がヒットすればそちらを採用する。 基本的な流れはこうだ…

自作RISC-V OoOコアの分岐予測性能解析 (RASの実装検討)

ちまちまと自作RISC-Vコアを実装している。DhrystoneがPASSできるようになったが、まだまだ性能的にはひどいもんだ。 次に検討するのはRAS (Return Address Stack)の実装だ。 RASはJALRやJAL命令などのCALL系命令でスタックに戻り値を置き、RET命令がフェッ…

自作RISC-V OoOコアの分岐予測性能解析 (BIMによる性能向上解析)

ちまちまと自作RISC-Vコアを実装している。DhrystoneがPASSできるようになったが、まだまだ性能的にはひどいもんだ。 BTBとBIMがDhrystoneをある程度動かせるようになってきたので、性能を見てみた。 Dead状態になるコミットはかなり減ってきた。ただしまだ…

自作RISC-V OoOコアの分岐予測性能解析用Performance Monitorの作成2

ちまちまと自作RISC-Vコアを実装している。DhrystoneがPASSできるようになったが、まだまだ性能的にはひどいもんだ。 分岐予測の性能を向上させるためにBTBとBIMのデータ幅を増やしている。最初の方はかなり性能が上がってきた。 " 20386" : { "commit" : { …

自作RISC-V OoOコアの分岐予測性能解析用Performance Monitorの作成

こういう波形見ると頭がバグってきますよね。 ちまちまと自作RISC-Vコアを実装している。DhrystoneがPASSできるようになったが、まだまだ性能的にはひどいもんだ。 特に分岐予測器を入れていないのがひどい。現在簡単なBTBとBimodal Predictorを実装している…

LLVMに新しいPassを追加してみる試行 (依存関係のあるAnalysisを呼ぶ方法2)

Writing LLVM Passを読んで、LLVMのPassの追加方法が少しわかったので、今度は別のPassを追加してみよう。 参考にしたのは以下のPDF資料。ここでは、BBinLoopsと呼ばれるPassを新たに作成している。 - Writing an LLVM Pass https://www.inf.ed.ac.uk/teachi…

LLVMに新しいPassを追加してみる試行 (依存関係のあるAnalysisを呼ぶ方法)

Writing LLVM Passを読んで、LLVMのPassの追加方法が少しわかったので、今度は別のPassを追加してみよう。 参考にしたのは以下のPDF資料。ここでは、BBinLoopsと呼ばれるPassを新たに作成している。 - Writing an LLVM Pass https://www.inf.ed.ac.uk/teachi…

LLVMに新しいPassを追加してみる試行 (CountOp Passを追加する試行)

Writing LLVM Passを読んで、LLVMのPassの追加方法が少しわかったので、今度は別のPassを追加してみよう。 参考にしたのは以下のPDF資料。ここでは、OpCountと呼ばれるPassを新たに作成している。 - Writing an LLVM Pass https://www.inf.ed.ac.uk/teaching…

LLVMのPassManagerを試す

Writing LLVM Passをまあまあ読んだので、いくつかサンプルプログラムを試してみたくなった。 ドキュメントに書いてあるhello Passを試してみよう。LLVMのリポジトリの中でrelease/13.xブランチで試してみる。 llvm.org LLVMのrelease/13.xブランチをビルド…

riscv-arch-test (RISC-V Architecture Test SIG) を試す

riscv-arch-testは、riscv-testsとは別に管理されているRISC-Vのテストスイートである。 github.com これまでちゃんと使ったことが無かったので、ここら辺で少し触ってみておこうと思う。 まずはSpikeでの動作確認から。 リポジトリをクローンする。 git clo…

RISC-V spec 20210922でPublic Reviewになったいくつかの新規命令について

RISC-Vの仕様において、20210922でいくつかの新規拡張命令がPublic Reviewになっている。 これらの命令について、存在は知っていたし概要は知っていたのだけれども、そろそろマニュアルを眺めてどういうものなのか確認することにした。 Zfh : 半精度浮動小数…

自作RISC-V OoOコアの性能解析用Performance Monitorの作成

ちまちまと自作RISC-Vコアを実装している。DhrystoneがPASSできるようになったが、まだまだ性能的にはひどいもんだ。 一つの要因としては分岐予測を全く実装していないこと。これでは分岐が成立すると殆どの命令を破棄することになってしまう。まずは分岐予…

LLVMのPassの作り方について学ぶ(ドキュメントを読む4)

https://llvm.org/docs/WritingAnLLVMPass.html LLVMについて、バックエンドの部分はある程度勉強したけど、そういえばPassの作り方をまじめに勉強したことが無かった。 LLVMと言えばPassだろう!ということでPassの作り方について勉強することにした。これ…

LLVMのPassの作り方について学ぶ(ドキュメントを読む3)

https://llvm.org/docs/WritingAnLLVMPass.html LLVMについて、バックエンドの部分はある程度勉強したけど、そういえばPassの作り方をまじめに勉強したことが無かった。 LLVMと言えばPassだろう!ということでPassの作り方について勉強することにした。これ…

TerosHDL for Visual Studio Code を試してみる

ネットで回ってきたVisual Studio Code用のVerilog/VHDLの総合開発環境プラグインTerosHDLが気になったので少し試してみた。 github.com インストールはVisual Studio Codeのプラグイン環境で簡単にインストールすることができた。 私はWSL2の環境(とリポジ…

LLVMのPassの作り方について学ぶ(ドキュメントを読む2)

https://llvm.org/docs/WritingAnLLVMPass.html LLVMについて、バックエンドの部分はある程度勉強したけど、そういえばPassの作り方をまじめに勉強したことが無かった。 LLVMと言えばPassだろう!ということでPassの作り方について勉強することにした。これ…

LLVMのPassの作り方について学ぶ(ドキュメントを読む1)

https://llvm.org/docs/WritingAnLLVMPass.html LLVMについて、バックエンドの部分はある程度勉強したけど、そういえばPassの作り方をまじめに勉強したことが無かった。 LLVMと言えばPassだろう!ということでPassの作り方について勉強することにした。これ…

自作RISC-V OoOコアでDhrystoneが完走した

ちまちまと自作RISC-Vコアを実装している。riscv-testsがかなり通っているので、Dhrystoneを実行することにした。 実はDhrystoneは少し前に動かしていたのだけれども、L1Dキャッシュのデータリプレースの部分になかなか難しいバグがあり、難しくなっていた部…

RISC-V Vector Extension v1.0がリリースされた

これまでのものはv1.0のRC1だったりRC2だったりするけど、いよいよv1.0正式バージョンについてのPublic Review版がリリースされた。 一応差分をチェックしてみたが、本文内の曖昧の所を明文化したようなところが多い。 以下にまとめたのはRC1→RC2からのさら…