2019-03-01から1ヶ月間の記事一覧
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io LLVMには独自のIRを定義できる仕組みがあり、それを使って命令を変換したりして最終的に命令を生成する…
リソースの一部を公開するとアナウンスしたMIPSだが、この度一部の資料が公開されたようだ。 www.mipsopen.com ダウンロードできる資料も増えたようだ。 https://www.mipsopen.com/ ダウンロードできる資料としては、 MIPS Open Architecture (仕様書) Basel…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 関数コールもかなり動くようになってきて、これまでに多くのテストパタンを確認してきたのだが、リグレ…
Rustで作るRISC-Vシミュレータ。基本的な形が出来上がった。トレースファイルも出せるようになったので、MMUを実装してテストパタンを実行して確認しよう。 MMUを動かすテストパタンは、rv{32,64}u{imfda}-v-xxxという形で表現されている。-v-というテストパ…
Rustで作るRISC-Vシミュレータ。基本的な形が出来上がった。MMUの変換処理は、まだデバッグ中だ。しかしデバッグするためには、トレースデータを出力できるようにする必要がある。 トレースデータを出力するためには、RISC-Vシミュレータが実行した情報をト…
ChiselでSHA256の回路を設計するプロジェクト、Scalaでの検証用コードと、Chiselで書いたハードウェアを検証する。 Chiselで書いたハードウェアは、SHA256のアルゴリズムで64回分ループを回す部分を展開し、パイプライン化した。 これにより、1サイクル毎にS…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第9章は、関数コールの実装だ。関数コールの実装は量が多すぎてまだ理解が及んでいないが、とりあえずJu…
SHA256の回路をChiselで開発しようプロジェクト、とりあえず基本的な回路は記述したので、次に検証用のテストコードを書いていく。 検証用のテストコードはScalaで書く。その方がChiselと親和性が良いし、検証が行いやすいと思う。 という訳で、とりあえずSc…
Vivado-HLSで観察していたビットコインマイニング回路の開発、面白そうなのでChiselに移植してみることにした。 勘違いしがちだがChiselは高位合成システムではなく、基本的にRTLの記述レベルを維持しつつ、Scala言語の良いところを取り入れてよりソフトウェ…
releases.llvm.org LLVM 8.0がリリースされたので、さっそくダウンロードしてビルドしてみた。 これまで通り、GitHub経由でダウンロードしていたので、タグをrelease_80にアップデートするだけである。 $ cmake -G Ninja -DCMAKE_CXX_COMPILER=${HOME}/other…
ビットコインといえば一昨年くらいから急に盛り上がりだして、猫も杓子もビットコインという状態になりかけたけれども急にまた暴落して皆辞めてしまったという悲しい技術ではあるが、私も流行に乗ってビットコインについて勉強した手前、なにか自分で手を動…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第8章の後半は、Conditional Moveの実装を行っていく。 Cpu0のConditional Moveはどのように指定実装し…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 8.2 章 Long Branchのサポート 第8章の前半はLongBranchのサポート。これは読んでみたがあまりよく分か…
どうやら2020年度から小学校にプログラミング教育が必修となるらしく、どこもかしこもプログラミング教育でアツい。 小学生向けのプログラミング教室も盛況らしく、英語に加えて、新しい教育の投資先としても注目されているようだ。 しかし、小学生に対して…
Rustで作るRISC-Vシミュレータ。基本的な形が出来上がったので、今度はOSを動かすためのMMUとスーパバイザモードの実装に移っていく。 基本的なところは、C++で作った実装をコピーしていき、Rustに移植するだけでよいと思っている。 メモリアクセスを実行す…
Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 現在の悩みどころはメモリアクセスの制御だ。CPUはワードアクセス以外に、ハーフワード、バイトアクセスなども発生する。 Vivado-HLSのモジュールのインタフェースはAXIだけれども、C言語でこれをどの…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第8章は制御構文の追加。手始めにまずは分岐命令を実装していく。 分岐命令を生成させるためには、分岐…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第7章の残りに取り組む。 浮動小数点の実装はとりあえず省略。RISC-Vではclzもclo命令も存在しないので…
arxiv.org GIGAZINEでも紹介された新たなCPUの脆弱性の論文"SPOILER"が発表された。GIGAZINEがこのような記事を公開するのは珍しいなと思いつつ、面白そうなので読んでみることにした。 ちなみに、筆者は例によってセキュリティの専門家ではないし、CPUアー…
Rustで作るRISC-Vシミュレータ。基本的な形が出来上がったので、次に命令を追加してテストパタンをパスさせていく。 次に追加するのは乗除算命令だ。RV32には以下のテストパタンが用意されているので、それぞれ実装していく。 rv32um-x-mulhsu rv32um-x-mulh…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 32bit環境でのlong longの乗算についての実装を行っている。ISDで言うと所の、SMUL_LOHIとUMUL_LOHIの実…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第7章では、long long(64-bit)の対応も含まれている。解説の中では、MIPSのようなHIレジスタとLOレジス…
BOOMメーリングリストで正式リリースのあった、BOOMコアのFPGA対応、ビルドが完了したのでFPGA(ZedBoard)で動かしてみる。 github.com Windows Subsystem on Linux上で作業しているのだが、SDカードへの書き込みなどの作業は問題なく行うことができる。 Dド…
BOOMメーリングリストで正式リリースのあった、BOOMコアのfpga-zynqリポジトリ対応、面白そうだ。 BOOMというのはRISC-Vのオープンソースアウトオブオーダプロセッサで、GitHubから入手でき、だれでも手を加えることができるプロセッサだ(ただしChiselで記述…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第7章は、int型以外の各種変数型に対応させる。 github.com diff --git a/lib/Target/MYRISCVX/MYRISCVX…
Rustで作るRISC-Vシミュレータ。基本的な形が出来上がったので、次に命令を追加してテストパタンをパスさせていく。 必要なのは命令を追加するだけなので、どんどん追加していく。 今回は特にハマるところはなく命令を追加していくことができたのだが、やは…
半導体設計者あるあるだが、一回に流れるジョブが長すぎて、別の作業をしているとそのジョブが完了していても忘れることがある。 つまり長いジョブを流す場合、ジョブが完了したときに通知が来ればよいのだが、いちいちメールを飛ばすようにしているとメール…
Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 すべてのテストパタンを通したいのだが、バスをどのように作ればよいのか迷っている。 これまでは32bitでバスを作っていた。これは通常のLW/SW命令だとよいのだが、HalfWord, Byteのロードストアでは…