調べたこと、作ったことをメモしています。
こちらに移行中: https://blog.shimazu.me/

CPUの設計

前の実験で行った「マイクロプロセッサの設計と実装」のレポートを書いているので、書こうとしていることをまとめてみる(´◔౪◔)۶ヨッシャ!

ちなみに、gitに置いてあるから興味のある方はどうぞ。ぜひコメントください。

git clone git://ccv.kuroaka.net/experiment/cpu/cpu

やることはIA-32zというサブセットの実装。IA32は命令長が1byteや2byteだったり4byte/6byteだったり可変で厄介なので、それを4byte幅にそろえてくれたもの。足りない部分はNOP(0x90)で埋めてあったり、レジスタの指定位置がir[21:19]とir[18:16]にそろえてあったりする。

で、最終目標をパイプラインの実装に据えて行ったところ、パイプラインレジスタの実装はでき、データハザード・制御ハザードの処理もできた。データフローチャート(後述)におけるrespをフォワーディングしていないが、それ以外の部分のフォワーディングも行うことができたので、わりと目標を達成したと言えるのではないだろうか。

ということで、まずはデータフローチャート。最初に上げたやつとちょっと変わってる。

Lucid ChartっていうChromeのアプリで書いてみたんだけど、無料版でおけるオブジェクト数いっぱいいっぱい使ってしまった。しかも結構メモが間違っていて、書いたverilogを参照しながらがんばった。

次にフェーズフローチャートはこんな感じ。

あと、ハザード検出器はこんなかんじ

next_なんとかが1のときは次にそのステージを行うという意味。

wステージなんかはハザードなんてないから常に1。

ForwadingはALUに突っ込む値はどのステージのものですか、というもの。

program counterのものもブロック図かいた。

こんなん。