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のものもブロック図かいた。
こんなん。