プロセッサの設計と実装 後期実験 プロセッサの設計と実装 1
コンピュータの論理設計 「コンピュータを作る」 –仕様設計 –論理設計 –回路・レイアウト –物性・デバイス 後期実験 プロセッサの設計と実装 2 この実験では 課題として IA-32 サブセット仕様が与えられる 各自 RTL 設計 → ツールで論理合成 FPGA を対象とした配置配線をツールが算出 FPGA ボードへのダウンロード QuartusIIModelsim テスト
実験の流れ Wiki – 1.環境構築,FPGA動作テスト 2.ハードウェア記述入門 3.プロセッサ設計の理解 4.プロセッサ実装 1.カウントアッププログラム 2.フィボナッチ数計算プログラム(再帰) 3.エラトステネスのふるい 5.最終報告,アピール 後期実験 プロセッサの設計と実装 3
スケジュール:1日目 講義:実験の流れ インストールと動作 –Quartus2 –ModelSim –7segを光らせるソースをDL 開発環境への読み込み FPGAボードの動作確認 後期実験 プロセッサの設計と実装 4
スケジュール:2日目 講義:前回のVerilogソースコード説明 各自改変して好きな物を表示してみる 必要ファイルや手順の把握 –シミュレーション,ダウンロード 後期実験 プロセッサの設計と実装 5
スケジュール:3日目 講義:プロセッサの設計と今回の仕様 仕様の把握 目標バイナリの確認 –3種類 モジュール構成の設計 後期実験 プロセッサの設計と実装 6
スケジュール:4日目 講義:モジュールとその機能 モジュールを一つ実装してみる –モジュール単位のテストのやりかたを身につける 後期実験 プロセッサの設計と実装 7
スケジュール:5日目~8日目 必要モジュールを実装する 順次統合 –レジスタ –デコーダ –フェッチユニット(無条件分岐にも対応) –ALU までできればカウントアップは動くはず –メモリまわり までできればfibが動くはず –条件分岐まわり までできればエラトステネスが動くはず 後期実験 プロセッサの設計と実装 8
スケジュール:9日目 デバッグ,追い込み 後期実験 プロセッサの設計と実装 9
最終日 デバッグ,追い込み 発表,愛機のアピールプレゼン 後期実験 プロセッサの設計と実装 10
アーキテクチャ仕様 IA-32の独自サブセット –IA-32z-4B(6B) IA-32のイヤな部分をできるだけ解消 –(でもフラグレジスタとか残ってる) –固定長 –一命令で単一操作 –ロードストアアーキテクチャ 仕様はWikiに 後期実験 プロセッサの設計と実装 11
主記憶,レジスタ,フラグ 12 主記憶 2 32 Bytes (最大) 32bit x 8 本 eax, ebx, ecx, edx, esi, edi, esp, ebp 順番に注意 マクロの引数は e 抜きで フラグ Sign, Zero, Carry, Overflow rg1/rg2Name 000ax 001cx 010dx 011bx 100sp 101bp 110si 111di
命令の種類 13 分類: 1. ロード / ストア命令 2. 演算命令 1. 算術論理演算 (ALU: Arithmetic Logic Unit) 2. シフト 3. 制御移譲 (control transfer) 命令(広義の分岐命令) 1. 分岐 (branch) 命令: PC 相対 2. ジャンプ命令 :絶対 4. プッシュ / ポップ (オプション) 5. コール / リターン (オプション) 6. その他
14 命令フォーマット opop opop rg1 rg2 imm opopop code: rg2: dst reg # rg1: src reg # imm1 824 imm1: immediate 1 imm0: immediate 0 opop opop rg1 rg2 imm imm1 24 imm2 0 imm B : 6B : 40
1. ロード / ストア命令 ロード命令 zLD sim8/32, rg2, rg1# r[rg1] = *(r[rg2] + sim8/32) ストア命令 zST rg1, sim8/32, rg2# *(r[rg2] + sim8/32) = r[rg1] 15 opop opop rg1 rg2 sim nop 824 opop opop rg1 rg2 simm B : 6B : 40
1. 即値ロード命令 即値ロード命令 zLI im32, rg2# r[rg2] = im32 zLIL im16, rg2# r[rg2] = (r[rg2] & 0xFFFF0000) | im16 little-endian のため, im16 は, [15:8] が下位, [7:0] が上位 16 opop opop rg1 rg2 im opop opop rg1 rg2 im B : 6B : 40
2. 演算命令 レジスタ ― レジスタ 算術論理演算 ( ALU, Arithmetic Logic Unit) 命令 zADD rg1, rg2 # r[rg2] += r[rg1] zSUB rg1, rg2 # r[rg2] -= r[rg1] zCMP rg1, rg2 # r[rg2] - r[rg1] # 比較のみ zAND rg1, rg2 # r[rg2] &= r[rg1] … 17 opop opop rg1 rg2 sim nop 824 opop opop rg1 rg2 simm B : 6B : 40
2. 演算命令 レジスタ ― 即値 算術論理演算 ( ALU, Arithmetic Logic Unit) 命令 zADDI sim8/32, rg2# r[rg2] += sim8/32 … シフト命令 zSLL sim8/32, rg2# r[rg2] <<= sim8/32 … 18 opop opop rg2 sim nop 824 opop opop rg2 simm B : 6B : 40
3. 制御委譲命令 (条件)分岐命令 zBcc tttn, sim8/32# if (tttn) PC = PC + 3/6 + sim8 19 opop opop tttn sim nop 824 opop opop tttn simm B : 6B :
nop 3. 制御委譲命令 ジャンプ命令(レジスタ間接) zJR rg2 # PC = r[rg2] 20 opop opop rg2 nop nop 824 opop opop rg B : 6B : nop 40
nop 4. プッシュ / ポップ プッシュ命令 zPUSH rg2# sp -= 4; rg2 = *sp ポップ命令 z POP rg2# *sp = rg2; sp += 4 21 opop opop rg2 nop nop 824 opop opop rg B : 6B : nop 40
5. コール / リターン 22 PC 相対コール命令( 6B エンコーディングのみ) zCALLsim32# zPUSH PC; PC = PC sim32 レジスタ間接ジャンプ & リンク命令 zJALR rg2# zPUSH PC; PC = r[rg2] リターン命令 z RET# PC = z POP;
プロセッサの実装 モジュール構成 各モジュールの実装 後期実験 プロセッサの設計と実装 23
命令の実行フェーズ 24 1.F 命令フェッチ 2.R 命令デコード / レジスタ読み出し 3.X 実行 4.M メモリ・アクセス 5.W レジスタ書き戻し (Write-Back)
コンポーネント 25 略称 名称 説明 アーキテクチャ ステート RF レジスタ・ファイル PC プログラム・カウンタ MM メイン・メモリ メモリ・バス MA メモリ・アドレス・バス MD メモリ・データ・バス アーキテクチャ ステートではない レジスタ IR 命令レジスタフェッチした命令を格納 SR ソース・レジスタソース・オペランドを格納 TR ターゲット・レジスタ ※ 1 ↑ DR データ・レジスタ演算の結果を格納 MAR メモリ・アドレス・レジス タ ※ 2 ロード / ストア命令で MM へのアドレスを格納 MDR メモリ・データ・レジスタロード命令で MM から読み出したデータを格納 ※ 1 : ターゲット・レジスタという名称は必ずしも一般的ではない. ※ 2 : この資料のブロック図では DR で代用している.
26 DR MDR PC Main Memory MA MD FF RR XX MM WW IR Reg File rg1 rg2 SRTR flags
27 DR MDR PC Main Memory MAMD FF RR XX MM WW IR Reg File rg1 rg2 SRTR flags MAR
28 DR PC Main Memory MAMD FF RR XX MM WW IR Reg File rg1 rg2 SRTR flags DR2 SR2
29 実行例 zADDI 1, dx 100zLD cx, 8, dx 104 # r2 += 1 # r2 = *(r1 + 8)
DR MDR PC Main Memory 1000 MA MD FF RR XX MM WW IR Reg File rg1 rg2 104 SRTR add221ld flags DR ld
DR MDR PC Main Memory 1000 MA MD FF RR XX MM WW IR Reg File rg1 rg2 104 SRTR add221ld flags DR2 31 ld
DR MDR PC Main Memory 1000 MA MD FF RR XX MM WW IR Reg File rg1 rg2 104 SRTR 200 add221ld flags DR2 32 ld
DR MDR PC Main Memory 1000 MA MD FF RR XX MM WW IR Reg File rg1 rg2 104 SRTR 200 add221ld flags DR ld
DR MDR PC Main Memory 1000 MA MD FF RR XX MM WW IR Reg File rg1 rg2 104 SRTR add221ld flags DR ld218
DR MDR PC Main Memory 1000 MA MD FF RR XX MM WW IR Reg File rg1 rg2 104 SRTR 1000 add-21ld flags DR ld218 add-21
DR MDR PC Main Memory 1000 MA MD FF RR XX MM WW IR Reg File rg1 rg2 104 SRTR add-21ld flags DR add
DR MDR PC Main Memory 1000 MA MD FF RR MM WW IR Reg File rg1 rg2 104 SRTR add-21ld flags DR2 37 XX add-21
DR MDR PC Main Memory 1000 MA MD FF RR XX MM WW IR Reg File rg1 rg2 104 SRTR add-21ld flags DR add
DR MDR PC Main Memory 1000 MA MD FF RR XX MM WW IR Reg File rg1 rg2 104 SRTR add-21ld flags DR add
フェーズ・フロー・チャート 40
PC 周辺 41 F フェーズ インクリメント W フェーズ 分岐成立なら, DR をロード 1 dr[31 : 2] we ct_taken phase[`ph_f] pc[31:2] phase[`ph_w]
PC 周辺 (Verilog) 42 module pc(phase, ct_taken, dr, pc, clk, n_rst); input [`ph_w : `ph_f]phase; // フェーズ信号. input ct_taken;// 分岐成立. zB, zJR などでも 1 input [31:0] dr;// 分岐先 output [31:0] pc;// PC 本体の出力 input clk, n_rst;// リセットは負論理 reg [31:0] pc; clk or negedge n_rst) begin if (n_rsts == 0) pc <= 0; else if (phase[`ph_f] == 1) pc <= pc + 4; else if (phase['ph_w] == 1 && ct_taken == 1) pc <= dr; end // always endmodule
教科書に良くあるシングルサイクルプロセッサ (ただしこの絵はMIPS風 ) 後期実験 プロセッサの設計と実装 43 PC 4 命令メモ リ #rs1 npc inst. [31-0] データメモリ ALU memData aluFunc Taken (br & 0) #rs2 [25-21] [20-16] rd result [15-11] [15-0] sign ext. rs1 rs2 << regDestregWrite srcImm memRead memWrite
レポートについて 1.紙媒体 –レポート表紙 2.ソースコード –TAさんに提出 3.レポート本文 –PDFまたはtxt サブジェクトを必ず「2015PEX-(学籍番号)」とすること –設計の概要,とくに工夫/苦労した実装について詳細,性能評価 簡潔でOK ただし上の3点が分かるようになっていること 〆切:実験終了から2週間後 後期実験 プロセッサの設計と実装 44
性能評価? まずは課題プログラムがどこまで動いたか,正確 な結果がでたか 性能評価指標…? –クロック数 –プログラム毎のMIPSとか 性能改善にむけて –どのようにすればどれくらい良くなりそうか –実際にやってみた結果 後期実験 プロセッサの設計と実装 45
提出方法 紙媒体 –表紙だけなのでできれば最終日に提出 –そこで出し損ねたら研究室まで ソースコード –とりあえず最終日に回収 –その後もコーディング続けたければ研究室までどうぞ で,二週間後に提出 レポート –サブジェクトに気をつけてメールで提出 後期実験 プロセッサの設計と実装 46
研究室での継続・提出 11F112B ふらっと来てくれて構いませんが 入江までアポイントとってからの方が確実です 後期実験 プロセッサの設計と実装 47