開発手順

Tue, 21 Nov 2017 15:05:15 JST (24d)

大まかな開発段階

本課題では、プロセッサ設計の流れは大体以下のようになると思います。

  1. まず教科書などをみてCPU全体のハードウェアの構成を理解
  2. 全体を機能に区切ってVerilogで記述してシミュレーションで確認
  3. 徐々に機能を拡張

結局、Verilogで書いてみないことにはわからないことも多々あるので、 書いて修正してを繰り返すことになります。

プロセッサの構成

実装する際のモデルとしてブロック図はひとつ参考にするものを持っていた方が良いです。 下の図は一例としてのブロック図です。

ネットや教科書のものを参考にしてももちろんOKです。

CPU.png

上の図では動作を5つに分割しています。

各動作はすでに学んでいるはずなのでこのページでは省略します。 わからない人は各種教科書を参照してください。

この図は制御部(各レジスタの制御線など)や分岐命令時のPCへのデータパスなどは省略されています。


とりあえずの目標としては、このようなシングルサイクルプロセッサを作ることです。

シングルサイクルプロセッサとは、ひとつの命令を単一のサイクルで実行するプロセッサのことです。

天下り的に言えば、"パイプライン化される前のプロセッサ" ということです。

実装手順

VerilogでのCPU記述の完成像が大体想像できるような人は、

Fステージから順にガンガン記述して全体が完成してたらシミュレーション、と進めて良いと思います。


この実験で初めてCPUを記述するような人は、

動作ステージにこだわらずモジュール単位で段階的に機能を実装し、シミュレーションして動作を確認、

というように進めるのがある程度の動作を確認しつつ進められるので良いと思います。


大きなモジュール区分としては以下のようになります。

  • PC周辺
  • レジスタファイル
  • デコーダ
  • ALU
  • メモリ周辺

拡張による実装の一例


拡張していくときの一例を示します。

以下に示す図は、スペースの関係で、信号線と制御線を全て正しく書いているわけではないので注意してください。

Verilogに起こすためには細かい制御線などもう少し考えることがあります。


1.スタートとしてはVerilogに慣れるために作った Adder です。これに入出力を保存するためのレジスタをつけます。

1.png


2.次にRAMの書き方などを参考にしてこれらの入出力を、Register-Fileから行えるようにします。


2.png


3. Adderを拡張してALUにして様々な処理を行えるようにします。

3.png


4. レジスタのアドレスとALUに入力するOPを命令から読み出せるようにします。即値なども生成、オペランドとして選択できるようにします。

4.png


5. PCと命令キャッシュを追加して命令を読み出せるようにします。

一番最初に示した画像では命令とデータでメモリ空間を共有しています。

個人的には分けた方が実装が簡単だと思いますが好みの問題でもあります。

5.png


6. 分岐命令周りを追加します。

6.png


7. メモリ周りを追加します。

これでやっとプロセッサの完成です。

7.png


8. パイプライン化など発展課題を適当に選んで取り組みます。


添付ファイル: file7.png 206件 [詳細] file6.png 185件 [詳細] file5.png 192件 [詳細] file4.png 205件 [詳細] file3.png 191件 [詳細] file2.png 175件 [詳細] file1.png 138件 [詳細] fileCPU.png 247件 [詳細]