nakajolab / b4smt Goto Github PK
View Code? Open in Web Editor NEWLicense: BSD 2-Clause "Simplified" License
License: BSD 2-Clause "Simplified" License
CSRの実装
各種ドキュメントを追加する
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
現在の実装ではステージ数が少ないことにより、FPGA上での動作周波数がとても遅くなっている。(Nexys 4で10MHz。)そこで、クリティカルパスを短くする。
クリティカルパスはVivadoのImplementationのTiming画面で確認することができる。
修正内容が難しく、テストを増やさないといけない
実行中のプロセッサのメモリを書き換えられる機構を実装
検討中(UART?)
まだわからない。何か考えがあればこのIssueに追記する。
Verilatorを使用する前提で進める
検証にはriscofを使用その際にシミュレータのバイナリ化が必要
命令メモリにhexファイルの内容を入れているように、データメモリにもデータを入れておけるようにしておきたい。
これを活用すればできそう
https://www.chisel-lang.org/chisel3/docs/explanations/memories
とくになし
すべてのモジュールをまとめて一つのCPUとして動かせるもの
データメモリの実装
LSQの実装
モジュールを作成していく中で変更された箇所をmiroで直す
メモリ接続をAXIに対応させると、Vivado上でBRAMを作って接続ができるようになるので実機でのテストがよりかんたんになる。
AXIの仕様を読み込んでインターフェイスを実装する。
AXIはかなり複雑な規格なので、まずはAXI Liteに対応させることから始めると良いかもしれない。
同時発行数1、最大コミット数1の場合はロードストアが正しく機能するが、数値を上げると正しく機能しない。
LSQのロジックを修正することで解決すると考えている。
LSQでまだ準備ができていない命令もキャッシュに送ってしまっているような状況だと疑っている。
命令キャッシュ部分の実装
命令メモリ、データメモリを統一してお互いのアドレスにアクセスできるようにする。
できそうであればこのモジュールから他のメモリマップドIOにアクセスできるようにする。
単一のメモリアクセス用のモジュールを作成し、BRAMもしくはDRAMに接続するようにする。
ChiselのMemではなく、AXI経由で接続できる方が他のIOを接続できるので拡張性が高いが、実装が難しくなる。
RISC-Vテストの実行
データキャッシュ部分の記述
投機的な実行
現時点の実装では分岐が来るとすべて停止するような設計になっているので投機的な実行ができるようにする
Fetch部分の改善
他のモジュールへの影響が大きい。
実装が難しい
実行ユニットの実装
例外処理系の命令(ecall、ebreak)に対応させる
例外命令が来た際にはリオーダバッファの動作を例外まで進めてから停止して、例外処理を行うようにする。
#11 が必要になるかもしれない。
これが実装できるとかなり動作が改善されると考えている。
ひとまず、tag幅2, offset幅2で実装してみる?
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.