14.高速化改善
高速化改善は、次の機会にしたいと思いますが、改善策としては次が考えられます。
プリフェッチ
さて、高速化の方法についてですが、簡単には、3ステート命令以上の命令のみ有効ですが、プリフェッチする手があります。全ての命令でフェッチに1ステート食っています。命令デコードが終わると現在の命令バイト数が分かりますからそれ以降なら次の命令をフェッチ可能で、次の命令のステートまで待つ必要はありません。(できない命令もあります。) プログラムアドレスとデータアドレスは分かれているので(2ポート、ハーバードアーキテクチャ)データをアクセスしながら、次プログラムアドレスをいじくることは、マイクロコード上も可能になっています。ただし、この方法は、3ステート以上の命令のみ有効で、2ステート命令では、間に合いません。今回の設計では、2ステート命令が多くなってしまっているので、この方法の改善効果はあまり期待できないかもしれません。
パイプライン化
次に考えられるのが、パイプライン化です。デコードと実行を同じステートでやっていますが、これを分けて、3ステートにします。即ち、フェッチ、デコード、実行です。 こうすると、最初の命令こそ、3クロックかかるものの、以降は2クロック相当で実行できることになります。
1 | 2 | 3 | 4 | 5 | 6 | 7 |
Fetch | Decode | Execute | ||||
Fetech | Decode | Execute | ||||
Fetch | Decode | Execute |
また、一段あたりの遅延時間も減少するので、現在の34MHzから、改善が期待できます。うまくいけば50MHz位は行くかもしれません。