Chisel3
今月中にQuartus Primeユーザー向けにもまとめを書きます。ご期待いただければ。この記事はChiselサイドから見たブログ記事にしたいと思います。Alternative HDLとしてそこそこ使えるじゃん!という手応えを感じたのとriscv-testsにFPGA実機上でもパスできる…
Intel Hexファイルの生成 Intel FPGAで初期値をRAMに与えたい場合、インテルHEXかMIFファイルにしておく必要があります。 https://www.intel.co.jp/content/dam/altera-www/global/ja_JP/pdfs/literature/ug/ug_ram_rom_j.pdf今後、OpenOCDでデバッグできるI…
メモリを同期読み込み書き込みにする 製作してきたChiselプロジェクトをFPGAに実装してみました。 Chiselを使ったRISC-Vの勉強(1)から目標にしていたようにAvalon-MM Masterとして動作させようとすると、 命令フェッチ時にデータ取得が1クロック遅れる ロー…
riscv-testsクリア riscv-testsのリグレッションテストを全てクリアしました。(fence.i命令は除外しました。RISC-Vの基本Iアーキテクチャでは必須ではなくなったからです。) クリアしたからと言って「バグがない」とは言えないので、ランダム実行テストをす…
riscv-testsのリグレッションテストコードを自動生成 あまり記事にするほど内容は厚くないのですが備忘録として。一つのテストコードをpassできても、今までpassできていたものがfailしてしまうロジックを埋め込んでしまう可能性は否めません。 全てのリグレ…
実装中のRV32I RISC-V CPUですが、5段パイプラインのまま継続するか、6段パイプラインに増やすか見積もるため、Load/Storeを真面目に実装していませんでした。(今まで対応していたのは32bit長のlw/swのみ) 結論から申しますと、5段パイプラインのまま継続す…
外部割り込みを実装しました。 RISC-Vに実装する割り込みはCPU外部からの割り込みだけ(あるいは各割り込み入力をマルチプレクスしてここへ入力、または割り込み信号の判別だけできるようにして入力を増やしていく感じで)でいいかな、と思ってきた次第です。…
riscv-testsをパスしたい RV32Iと謳うにはriscv-testsのテストパタンセットのうちRV32I ISAに要求されているリグレッションテストをパスするのが望ましいと言えます。CSR周りはその限りではありません。(picorv32などの特権命令非搭載かつ例外処理が独自、と…
MEMステージの実装中です。 制御ハザードはすでに分岐命令を実装した時点で実装しており、パイプライン化をしても特筆すべき点はありません。 ここではデータハザードを直していきます。 データハザードの解決が終わると、MEMステージをこのままにするか、も…
突然ですがいままでシングルラインで組んでいたCPUプロジェクトをいきなり5ステージパイプラインにしました。いきなり!ステージ すまんこれがやりたくてステージングしたわけじゃないんだ信じて欲しい。このクソコラ作るのがこの記事書く時に一番時間かかっ…
前回の記事と分けてしまったら内容がほとんど皆無になってしまいました。 ないようがないよう (この辺りでみんなブラウザ閉じる) 年取るってこういうことなんだなぁ。 さて、本題です。 前回riscv-asからアセンブルした機械語をChiselプロジェクトにワンスト…
今更ながら環境を整える VSCodeにChiselプラグインを入れつつ頑張っていたのですが、IDEがオブジェクトやクラスの階層を把握していないため、補完機能が乏しいことなどから限界を感じてました。いつも参考にさせていただいている、diningyo氏(id:diningyo-kp…
githubを巡回してみていろいろな実装を見て作戦を練っていました。 これまでRISCVの命令セットを見る限り、opcode(7bit) + funct3(3bit)で判別して適当に実装できるかなと考えていました。(10bitなら単純計算で1023命令は用意できるし) ALUへの演算命令、2…
汎用レジスタ(x0-x31)の実装 RISC-V(RV32I)の汎用レジスタは32bit長で32個あります。 下記Manualのpp.10(Fig2.1)参照 https://content.riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdfまずRISC-Vの命令デコードには必須なのでこちらを用意します…
前回紹介したようにプロトタイプ用のFPGAができて, その後USB Type-C化などもいたしました。 これで電力問題が解決したため、FPGA基板からRaspiに給電かつ給電時の衝突防止までできるようFETを追加する改造もしました。 さて、とても使いやすいRISCVのSCR1を…