計算機構成 第11回 マルチサイクルCPU 慶應大学 天野英晴.

Slides:



Advertisements
Similar presentations
プロセッサの設計と実装 後期実験 プロセッサの設計と実装 1 コンピュータの論理設計 「コンピュータを作る」 –仕様設計 –論理設計 –回路・レイアウト –物性・デバイス 後期実験 プロセッサの設計と実装 2 この実験では 課題として IA-32 サブセット仕様が与えられる 各自 RTL 設計 →
Advertisements

CPU設計と パイプライン.
計算機工学特論A 10/17  テキスト内容 1.1~1.4.
計算機システムⅡ 命令レベル並列処理とアウトオブオーダ処理
07. 値予測 五島 正裕.
07. 値予測 五島 正裕.
VLSI設計論第4回 アキュムレータマシンと 仮遅延シミュレーション
平成21年度卒業研究  16bitCPUの製作               福永研究室                   家村 光                   唐木 靖雅                   木次 遼太.
計算機システムⅡ 主記憶装置とALU,レジスタの制御
5.3 各種カウンタ 平木.
高性能コンピューティング学講座 三輪 忍 高性能コンピューティング論2 高性能コンピューティング論2 第4回 投機 高性能コンピューティング学講座 三輪 忍
Handel-C基礎 および 7セグとマウスのハンドリング
Verilog HDL 12月21日(月).
テープ(メモリ)と状態で何をするか決める
2012年度 計算機システム演習 第4回 白幡 晃一.
オリジナルなCPUの開発 指導教授:笠原 宏 05IE063 戸塚 雄太 05IE074 橋本 将平 05IE089 牧野 政道
計算機構成 第7回 サブルーチンコールとスタック テキストp85-90
コンピュータ工学基礎 パイプラインハザード テキスト9章 115~124
VLSI設計論第2回 組み合わせ回路の記述と 論理シミュレーション
4.2.2 4to1セレクタ.
プロセッサ設計教育のための 命令セット・スーパースカラシミュレータの試作と評価
プログラムはなぜ動くのか.
計算機構成 第9回 POCOの性能評価と論理合成 テキスト7章
第5回 CPUの役割と仕組み3 割り込み、パイプライン、並列処理
Ibaraki Univ. Dept of Electrical & Electronic Eng.
2005年11月2日(木) 計算機工学論A 修士1年 No, 堀江準.
第7回 2006/6/12.
計算機工学特論A 第4回 論理合成 山越研究室 増山 知東 2007年11月7日 .
計算機入門I ハードウェア(1) 計算機のハードウェア構成 ~計算機のハードウェアとは何か~
ハードウェア記述言語による 論理回路設計とFPGAへの実装 2
計算機構成 第1回 ガイダンス VerilogHDLのシミュレーション環境
OpenMPハードウェア動作合成システムの検証(Ⅰ)
Advanced Computer Architecture
・ディジタル回路とクロック ・プロセッサアーキテクチャ ・例外処理 ・パイプライン ・ハザード
コンピュータアーキテクチャ: ここでやったこと これからやること
アドバンスト コンピュータ アーキテクチャ RISC と 命令パイプライン
勉強会その3    2016/5/1 10 8分35秒 データの表現 演算.
第6回 dc_shellを使った論理合成 慶應義塾大学 理工学部 天野.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
Advanced Computer Architecture
Advanced Computer Architecture
第6回 6/4/2011 状態遷移回路とシングルサイクルCPU設計
Advanced Computer Architecture
計算機構成 第6回 分岐命令とプログラムの実行 テキスト第5章
ディジタル回路の設計と CADによるシステム設計
計算機構成 第2回 ALUと組み合わせ回路の記述
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
計算機構成 第4回 アキュムレータマシン テキスト第3章
VLSI設計論第3回 順序回路の記述と論理合成
08. メモリ非曖昧化 五島 正裕.
計算機構成 第8回 POCOの構造とVerilog記述 テキスト第5章-第6章
計算機構成 第5回 RISCの命令セットアーキテクチャ テキスト第4章
コンピュータアーキテクチャ 第 10 回.
09. メモリ・ディスアンビギュエーション 五島 正裕.
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
Ibaraki Univ. Dept of Electrical & Electronic Eng.
計算機工学特論 スライド 電気電子工学専攻 修士1年 弓仲研究室 河西良介
コンピュータアーキテクチャ 第 10 回.
コンピュータアーキテクチャ 第 2 回.
コンピュータアーキテクチャ 第 4 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第一回 計算機の歴史、基本構成、動作原理
コンピュータアーキテクチャ 第 5 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
コンピュータアーキテクチャ 第 4 回.
第4回 CPUの役割と仕組み2 命令の解析と実行、クロック、レジスタ
計算機工学論A P46~P49 クロック、リセット、クロック・イネーブルのセット 状態の出力値の指定 ステート・トランジョンの指定
コンピュータアーキテクチャ 第 5 回.
コンピュータアーキテクチャ 第 11 回.
コンピュータ工学基礎 マルチサイクル化とパイプライン化 テキスト9章 115~124
情報システム基盤学基礎1 コンピュータアーキテクチャ編
Presentation transcript:

計算機構成 第11回 マルチサイクルCPU 慶應大学 天野英晴

1サイクルCPUの問題点 クリティカルパスが長い 資源の共用ができない → マルチサイクル化 全ての処理を1サイクルで実行 全ての命令が最長の命令遅延に合わせる 動作周波数を上げることが難しい 資源の共用ができない ALUの使いまわし 命令メモリとデータメモリの共用 → マルチサイクル化

クリティカルパスの切断 Y S ext ext11 A B + + ext ext0 PC 7ns EX 実行 … … 命令メモリ IF ‘0’ 2:0 00 Y THB 01 S 00 01 10 pcsel ext ext11 ADD 10 A B alu_bsel + comsel zero 7:0 10:0 00 01 10 ‘1’ zero + ext ext0 7:0 rf_a rf_b 1 pcjr aadr 10:8 badr PC cadr 1 ‘7’ rf_c rwe rf_csel casel 00 01 10 7:5 idatain 7ns ddatain EX 実行 iaddr … … ddataout daddr 命令メモリ IF 命令フェッチ データメモリ we

命令フェッチ

実行(LD命令)

コントローラの状態遷移 rst_n = L 命令フェッチ 実行 IF EX 共用メモリから EX(実行) 命令を取ってきて IR(命令レジスタ) に格納 EX(実行) IR中の命令に従って 実行

always @(posedge clk or negedge rst_n) begin 命令フェッチ IF 実行 EX rst_n = L 状態遷移の Verilog記述 reg [`STAT_W-1:0] stat; ... always @(posedge clk or negedge rst_n) begin if(!rst_n) stat <= `STAT_IF; else case (stat) `STAT_IF: stat <= `STAT_EX; `STAT_EX: stat <= `STAT_IF; endcase end

One-Hot Counter 状態数だけビットを使う 〇どの状態にあるかを検出するのが容易  stat[`IF] が1ならばIF状態、stat[`EX]が1ならばEX状態 〇割り当てが容易 ×ビット数が多い △状態遷移が2ビット変化 `define STAT_W 2 `define STAT_IF `STAT_W'b01 `define IF 1'b0 `define STAT_EX `STAT_W'b10 `define EX 1'b1

2サイクル版POCOのVerilog記述 状態に応じて制御を切り替える デコード信号はEX状態でのみ有効にする やや見難くなってしまうが、stat[`IF]とstat[`EX]に注目!

2サイクルPOCOの Verilog記述 命令レジスタ 状態遷移 命令フェッチの時はpc 実行の時はrf_b module poco( input clk, rst_n, input [`DATA_W-1:0] datain, output [`DATA_W-1:0] addr, output [`DATA_W-1:0] dataout, output we); reg [`DATA_W-1:0] pc; reg [`DATA_W-1:0] ir; reg [`STAT_W-1:0] stat; wire [`DATA_W-1:0] rf_a, rf_b, rf_c; wire [`DATA_W-1:0] alu_a, alu_b, alu_y; wire [`OPCODE_W-1:0] opcode; wire [`OPCODE_W-1:0] func; wire [`REG_W-1:0] rs, rd, cadr; wire [`SEL_W-1:0] com; wire [`IMM_W-1:0] imm; wire [`JIMM_W-1:0] jimm; wire pcset, rwe; wire st_op, bez_op, bnz_op, bmi_op, bpl_op, addi_op, ld_op, alu_op; wire ldi_op, ldiu_op, ldhi_op, addiu_op, jmp_op, jal_op, jr_op, b_op, j_op; assign dataout = rf_a; assign addr = stat[`IF] ? pc: rf_b; assign {opcode, rd, rs, func} = ir; assign imm = ir[`IMM_W-1:0]; assign jimm = ir[`JIMM_W-1:0]; 命令レジスタ 状態遷移 命令フェッチの時はpc 実行の時はrf_b

assign b_op = bez_op | bnz_op | bpl_op | bmi_op; 実行状態でのみ デコード結果は有効 // Decorder assign st_op = stat[`EX] & (opcode == `OP_REG) & (func == `F_ST); assign ld_op = stat[`EX] & (opcode == `OP_REG) & (func == `F_LD); assign jr_op = stat[`EX] & (opcode == `OP_REG) & (func == `F_JR); assign alu_op = stat[`EX] & (opcode == `OP_REG) & (func[4:3] == 2'b00); assign ldi_op = stat[`EX] & (opcode == `OP_LDI); assign ldiu_op = stat[`EX] & (opcode == `OP_LDIU); assign addi_op = stat[`EX] & (opcode == `OP_ADDI); assign addiu_op = stat[`EX] & (opcode == `OP_ADDIU); assign ldhi_op = stat[`EX] & (opcode == `OP_LDHI); assign bez_op = stat[`EX] & (opcode == `OP_BEZ); assign bnz_op = stat[`EX] & (opcode == `OP_BNZ); assign bpl_op = stat[`EX] & (opcode == `OP_BPL); assign bmi_op = stat[`EX] & (opcode == `OP_BMI); assign jmp_op = stat[`EX] & (opcode == `OP_JMP); assign jal_op = stat[`EX] & (opcode == `OP_JAL); assign we = st_op; assign b_op = bez_op | bnz_op | bpl_op | bmi_op; assign j_op = jmp_op | jal_op ;

assign alu_a = (stat[`IF] | b_op | j_op | jr_op ) ? pc : rf_a; EXは今まで通り assign alu_a = (stat[`IF] | b_op | j_op | jr_op ) ? pc : rf_a; assign alu_b = stat[`IF] ? 16'b1:   (addi_op | ldi_op | b_op) ? {{8{imm[7]}},imm} :   (addiu_op | ldiu_op ) ? {8'b0,imm} :   (j_op) ? {{5{jimm[10]}},jimm} :   (ldhi_op) ? {imm, 8'b0} : rf_b; assign com = (stat[`IF] | addi_op | addiu_op | b_op |j_op ) ?`ALU_ADD:   (ldi_op | ldiu_op | ldhi_op) ? `ALU_THB:   (jr_op) ? `ALU_THA : func[`SEL_W-1:0]; assign rf_c = ld_op ? datain : jal_op ? pc : alu_y; assign rwe = ld_op | alu_op | ldi_op | ldiu_op | addi_op | addiu_op | ldhi_op | jal_op ; assign cadr = jal_op ? 3'b111 : rd; alu alu_1(.a(alu_a), .b(alu_b), .s(com), .y(alu_y)); rfile rfile_1(.clk(clk), .a(rf_a), .aadr(rd), .b(rf_b), .badr(rs), .c(rf_c), .cadr(cadr), .we(rwe)); IFでは加算

3サイクル化 rst_n = L その他 命令フェッチ 命令デコード IF 実行 ID EX ジャンプ系 分岐命令は別の加算器で早めに終了 クリティカルパスをさらに切る

クリティカルパスの切断 Y S ext ext11 A B + + ext ext0 PC 7ns EX 実行 … … 命令メモリ IF ‘0’ 2:0 00 Y THB 01 S 00 01 10 pcsel ext ext11 ADD 10 A B alu_bsel + comsel zero 7:0 10:0 00 01 10 ‘1’ zero + ext ext0 7:0 rf_a rf_b 1 pcjr aadr 10:8 badr PC cadr 1 ‘7’ rf_c rwe rf_csel casel 00 01 10 7:5 idatain 7ns ddatain EX 実行 iaddr … … ddataout daddr 命令メモリ IF 命令フェッチ データメモリ we

演習 1.2サイクル版POCOにJALRを実装せよ。 2.論理合成し、面積×クロック周期が最も小さくなるように、調整せよ。