|
|
開発手順
|
|
|
============
|
|
|
|
|
|
## 大まかな開発段階
|
|
|
|
|
|
本課題における、プロセッサ設計の流れは大体以下のようになると思います。
|
|
|
|
|
|
1. まず教科書などを見て CPU 全体のハードウェアの構成を確認
|
|
|
1. 全体を機能に区切って、ひとつづつ Verilog で記述し、シミュレーションを行って正しく書けているかを確認
|
|
|
1. 書いたものを組み合わせて、シミュレーションで正しく動いているかを確認
|
|
|
1. FPGA に焼いてみて、プログラムが正常に動作するか確認
|
|
|
|
|
|
Verilog で書いてみないことにはわからないことも多々あるので、書いて修正して、を繰り返すことになります。
|
|
|
|
|
|
## プロセッサの構成
|
|
|
|
|
|
実装する際には、なにかひとつ、参考にするブロック図を持っていた方がいいです。下の図は、ブロック図の一例です。
|
|
|
教科書、インターネット上にも同様のものはありますから、それを参考にしても大丈夫です。自分で一から書いてみるのもよいでしょう。
|
|
|
|
|
|
![RISC-V_Block](uploads/e65c729f18d6dd35f8647ea70719609e/RISC-V_Block.png)
|
|
|
|
|
|
上の図では、動作を大きく五つに分割しています。詳細な動作は授業で習ったかと思いますので省略します。わからない場合、教科書を参照してください。
|
|
|
また、上の図では各種制御線(例えば、ALU 機能はどれを使うのかの指定など)は省略されています。
|
|
|
|
|
|
1. Fetch Instruction (F): 命令メモリにアクセスし、命令語をとってくる部分です。
|
|
|
2. Register Read(R): 命令語で指定された、必要なレジスタに書き込まれている値を取り出す部分です。それと並行して即値の解読や次の Execution ステージ用の制御線を作ることが多いので、Decode (D) ステージと呼ばれることも多いです。
|
|
|
3. Execution (X): 各種計算を行う部分です。
|
|
|
4. Memory Access (M): (必要であれば)データメモリへアクセスし、データを読み込んだり書き込んだりする部分です。
|
|
|
5. Write Back (W): 得られた結果をレジスタに書き戻す部分です。
|
|
|
|
|
|
とりあえずの目標としては、このようなシングルサイクルプロセッサを作ることです。
|
|
|
シングルサイクルプロセッサとは、一つの命令を単一のサイクルで実行するプロセッサのことです。
|
|
|
天下り的に言えば、「パイプライン化される前のプロセッサ」ということです。 |