290 likes | 431 Views
CNP 実験 (P 実験 ) 第 2 回. 簡単なモジュールの設計 (Mi n IPS の基礎 ). はじめに. 今回から実際にプロセッサの設計を始める。設計するプロセッサは、 32bit RISC プロセッサの MinIPS である。この MinIPS は、名前からも分かるように MIPS の縮小版である。これを設計することによりプロセッサの動作を理解することが、第一の目的である。 また、プロセッサの完成時には他で同時進行しているコンパイラや IP スタックを実行させる共同実験を行う。これが第二の目的である。. 設計の流れ.
E N D
CNP実験 (P実験) 第2回 簡単なモジュールの設計 (MinIPSの基礎)
はじめに 今回から実際にプロセッサの設計を始める。設計するプロセッサは、32bit RISC プロセッサのMinIPSである。このMinIPSは、名前からも分かるようにMIPSの縮小版である。これを設計することによりプロセッサの動作を理解することが、第一の目的である。 また、プロセッサの完成時には他で同時進行しているコンパイラやIPスタックを実行させる共同実験を行う。これが第二の目的である。
設計の流れ • Quartusの使い方 (1回) ↓ • 簡単なモジュールの設計 (2回) *今回 ↓ • MinIPSのアーキテクチャ (3回) ↓ • MinIPSの設計 (2回) ↓ • MinIPSシステムの設計 (2回) ↓ • C-N-P 結合実験 (2回)
プロセッサとは プロセッサは、コンピュータの頭脳にあたる部分で、これが無いとコンピュータは、計算をすることも、ファイルを開くこともできない。そもそも、コンピュータは動くことすらできないのである。 裏を返すとプロセッサは、計算を行ったり、データを取り出したりしていることになる。 動け!!! ・・・・
プロセッサの動作 • メモリから命令を取り出す ↓ • 命令を解釈する ↓ • 命令を実行する ↓ • メモリアクセスを行う ↓ • レジスタへ書き込みを行う
命令フェッチ(Instruction Fetch) 命令メモリから、PC (プログラムカウンタ) の指し示す命令を取り出す 次はこの命令 命令 命令メモリ PC
命令デコード(Instruction Decode) 命令を解釈し、各モジュールに制御信号を発信する あれと、あれを動かして、こいつを選択すればよいのかな 命令 コントローラ 制御信号
実行 (EXecution) レジスタファイルから読み出した値をコントローラの指示で計算する レジスタファイル 値1 解 値2 例: 加算をしなさい 指示
メモリアクセス(MEMory access) レジスタファイルのデータをメモリに格納、 または、メモリからデータの読み出しを行う ストア レジスタファイルの データ ロード 読み出したデータ データメモリ 注)演算結果をそのまま 格納することはできない
書き込み (Write Back) 演算の結果や、データメモリから読み出したデータを レジスタファイルに格納する レジスタファイル 書き込み 演算結果 or 読み出しデータ
MinIPSの構成 演算器 レジスタファイル レジスタファイル データメモリ 命令メモリ デコーダ プログラムカウンタ
この実験で設計を行うモジュール 以外全部
今回作成する回路 マルチプレクサ 16ビットシフタ 比較器 符号拡張と2ビットシフタ レジスタ 加算器
加算器 c = a + b a c b
問題1 (加算器の設計) 下記のソースは、8bitの加算を行うものである。Quartusを用いて論理合成を行い、シミュレーションで動作の確認をせよ。また、32bitの加算器Add.v を作り、同様に論理合成、シミュレーションを行え。 module Add (in1, in2, out); input [7:0] in1, in2; output [7:0] out; assign out = in1 + in2; endmodule
マルチプレクサ a (sel = 0) c = b (sel = 1) a 0 c b 1 sel
問題2 (マルチプレクサの設計) 下記のソースは、32bit 2セレクトのマルチプレクサである。Mux2to1.v というファイル名で保存、論理合成し、シミュレーションで動作の確認をせよ。また、32bit 4セレクトのマルチプレクサ Mux4to1.v、及び、5bit 3セレクトのマルチプレクサ Mux3to1bw5.v を作り、論理合成、シミュレーションを行え。 module Mux2to1 (in0, in1, out, select); input [31:0] in0, in1; input select; output [31:0] out; assign out = select ? in1 : in0; endmodule
定数シフト 2ビット左シフト 1010011101・・10111101010 00 1010011101・・10111101010 10011101・・1011110101000 10
問題3 (定数シフタの設計) 下記のソースは、入力された値を 2bit 左にシフトするものである。Shift_left2.v というファイル名で保存、論理合成し、シミュレーションで動作の確認をせよ。また、16bit 左にシフトする回路 Shift_left16.v を作り、論理合成、シミュレーションを行え。 module Shift_left2 (in, out); input [31:0] in; output [31:0] out; assign out = in << 2; endmodule
比較器 0 (a ≠ b) c = 1 (a = b) a c b
問題4 (比較器の設計) 32bit の2入力を持ちその値が等しければ1を、等しくなければ0を出力する回路cmp.vを作れ。また、論理合成を行い、シミュレーションで動作の確認をせよ。 端子は下記のようにせよ。 module cmp (in1, in2, equal); input [31:0] in1, in2; output equal;
符号拡張 16ビットのものを32ビットに拡張する ?010011110110101 ? = 1 上位16ビットを1で埋める ? = 0 11111111111111111010011110110101 00000000000000000010011110110101 上位16ビットを0で埋める
問題5 (符号拡張器の設計) 16bit 1入力の符号拡張を行い、32bitとして出力する回路Sign_extend.v 作れ。また、論理合成を行い、シミュレーションで動作の確認をせよ。 端子は下記のようにせよ。 module Sign_extend (in, out); input [15:0] in; output [31:0] out;
レジスタ in out clock clock hold in out hold reset flush reset flush
問題6 (レジスタの設計) 次のソースは、1bit 入力のレジスタである。reg1.v というファイル名で保存し、論理合成を行い、シミュレーションで動作の確認をせよ。また、最後に入力された値を保持し続けるhold信号と、保持している値を初期値(0)に戻すflush信号を追加し、論理合成、シミュレーションを行え。優先順位は、resetとflushが同等に高く、次にholdとなる。 同様に、2bit 入力、3bit 入力、5bit 入力32bit 入力のレジスタ (reg2.v reg3.v reg5.v reg32.v) を作れ。
問題6 (続き) module reg1 (in, out, clock, reset); input in; input clock, reset; output out; reg out; always @(posedge clock) begin if (reset) out <= 1’b0; else out <= in; end endmodule
問題6 (続き) hold信号と、flush信号を追加する場合、端子の順番は下記のようにせよ。 module reg1 (in, out, hold, flush, clock, reset); input in; input hold, flush, clock, reset; output out; reg out;