nakajolab / b4smt Goto Github PK
View Code? Open in Web Editor NEWLicense: BSD 2-Clause "Simplified" License
License: BSD 2-Clause "Simplified" License
投機的な実行
現時点の実装では分岐が来るとすべて停止するような設計になっているので投機的な実行ができるようにする
Fetch部分の改善
他のモジュールへの影響が大きい。
実装が難しい
メモリ接続をAXIに対応させると、Vivado上でBRAMを作って接続ができるようになるので実機でのテストがよりかんたんになる。
AXIの仕様を読み込んでインターフェイスを実装する。
AXIはかなり複雑な規格なので、まずはAXI Liteに対応させることから始めると良いかもしれない。
データキャッシュ部分の記述
Chisel 3.5.3 にアップデート
build.sbtの編集
特になし。
8, 16, 32bit幅でのバーストのサポート
SimpleAXIMemoryWithSimulationIO.scala
でのreadAddrの計算が8Byteごとにインクリメントされているため,readならばここを修正するべき?
when(!readState.empty) {
when(readState.output.bits.address === memAddrMask) {
readAddr := readState.output.bits
.address(63, 3) + readBurstLen + (axi.read.ready && readDone).asUInt
実行ユニットの実装
すべてのモジュールをまとめて一つのCPUとして動かせるもの
命令キャッシュ部分の実装
命令メモリにhexファイルの内容を入れているように、データメモリにもデータを入れておけるようにしておきたい。
これを活用すればできそう
https://www.chisel-lang.org/chisel3/docs/explanations/memories
とくになし
同時発行数1、最大コミット数1の場合はロードストアが正しく機能するが、数値を上げると正しく機能しない。
LSQのロジックを修正することで解決すると考えている。
LSQでまだ準備ができていない命令もキャッシュに送ってしまっているような状況だと疑っている。
例外処理系の命令(ecall、ebreak)に対応させる
例外命令が来た際にはリオーダバッファの動作を例外まで進めてから停止して、例外処理を行うようにする。
#11 が必要になるかもしれない。
モジュールを作成していく中で変更された箇所をmiroで直す
Verilatorを使用する前提で進める
検証にはriscofを使用その際にシミュレータのバイナリ化が必要
命令メモリ、データメモリを統一してお互いのアドレスにアクセスできるようにする。
できそうであればこのモジュールから他のメモリマップドIOにアクセスできるようにする。
単一のメモリアクセス用のモジュールを作成し、BRAMもしくはDRAMに接続するようにする。
ChiselのMemではなく、AXI経由で接続できる方が他のIOを接続できるので拡張性が高いが、実装が難しくなる。
実行中のプロセッサのメモリを書き換えられる機構を実装
検討中(UART?)
まだわからない。何か考えがあればこのIssueに追記する。
CSRの実装
データメモリの実装
RISC-Vテストの実行
これが実装できるとかなり動作が改善されると考えている。
ひとまず、tag幅2, offset幅2で実装してみる?
現在の実装ではステージ数が少ないことにより、FPGA上での動作周波数がとても遅くなっている。(Nexys 4で10MHz。)そこで、クリティカルパスを短くする。
クリティカルパスはVivadoのImplementationのTiming画面で確認することができる。
修正内容が難しく、テストを増やさないといけない
LSQの実装
各種ドキュメントを追加する
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.