第7回 2006/6/12.

Slides:



Advertisements
Similar presentations
CPU設計と パイプライン.
Advertisements

VLSI設計論第4回 アキュムレータマシンと 仮遅延シミュレーション
計算機システムⅡ 主記憶装置とALU,レジスタの制御
情報システム基盤学基礎1 コンピュータアーキテクチャ編 第2回 命令
Ibaraki Univ. Dept of Electrical & Electronic Eng.
5.チューリングマシンと計算.
テープ(メモリ)と状態で何をするか決める
5.チューリングマシンと計算.
4. 順序回路 五島 正裕.
2012年度 計算機システム演習 第4回 白幡 晃一.
オリジナルなCPUの開発 指導教授:笠原 宏 05IE063 戸塚 雄太 05IE074 橋本 将平 05IE089 牧野 政道
計算機システムⅡ 命令セットアーキテクチャ
プロセッサ設計教育のための 命令セット・スーパースカラシミュレータの試作と評価
プログラムはなぜ動くのか.
計算機基礎Ⅱ,Ⅲ (指導書 pp. 76~94) 改訂:佐竹 純二 (作成:岡本 吉央).
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
第5回 CPUの役割と仕組み3 割り込み、パイプライン、並列処理
デジタル回路(続き) コンピュータ(ハードウェアを中心に)
2016年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
基本情報技術概論(第8回) 埼玉大学 理工学研究科 堀山 貴史
7. 順序回路 五島 正裕.
8. 順序回路の簡単化,機能的な順序回路 五島 正裕.
計算機入門I ハードウェア(1) 計算機のハードウェア構成 ~計算機のハードウェアとは何か~
組み込み向けCPU 小型デバイスに搭載されるCPU 特徴 携帯電話,デジタルカメラ,PDA,センサデバイスなど 小型 低消費電力 多機能
チューリング機械 状態の有限集合 ヘッドの方向を表す。 L:1コマ左へ R:1コマ右へ テープ記号の有限集合 入力記号の有限集合 動作関数
計算機システム 第1回 2006/04/22.
・ディジタル回路とクロック ・プロセッサアーキテクチャ ・例外処理 ・パイプライン ・ハザード
高速剰余算アルゴリズムとそのハードウェア実装についての研究
アドバンスト コンピュータ アーキテクチャ RISC と 命令パイプライン
勉強会その3    2016/5/1 10 8分35秒 データの表現 演算.
計算機システム 第2回 2011/05/02(月) 「コンピュータ・アーキテクチャへのいざない」
情報リテラシー2014 part 5/5 (亀田担当分最終回)
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
Advanced Computer Architecture
第6回 6/4/2011 状態遷移回路とシングルサイクルCPU設計
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
コンピュータの基本構成について 1E16M001-1 秋田梨紗 1E16M010-2 梅山桃香 1E16M013-3 大津智紗子
ディジタル回路の設計と CADによるシステム設計
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
計算機構成 第4回 アキュムレータマシン テキスト第3章
08. メモリ非曖昧化 五島 正裕.
計算機構成 第11回 マルチサイクルCPU 慶應大学 天野英晴.
情報とコンピュータ 静岡大学工学部 安藤和敏
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
コンピュータアーキテクチャ 第 11 回.
コンピュータアーキテクチャ 第 10 回.
09. メモリ・ディスアンビギュエーション 五島 正裕.
2010年度 情報科学序論 ~ 内部構造と動作の仕組み(2) ~.
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
Ibaraki Univ. Dept of Electrical & Electronic Eng.
コンピュータアーキテクチャ 第 9 回.
コンピュータアーキテクチャ 第 10 回.
コンピュータアーキテクチャ 第 2 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第一回 計算機の歴史、基本構成、動作原理
2013年度 プログラミングⅠ ~ 内部構造と動作の仕組み(2) ~.
2017年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
5.チューリングマシンと計算.
コンピュータアーキテクチャ 第 2 回.
コンピュータアーキテクチャ 第 5 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
第4回 CPUの役割と仕組み2 命令の解析と実行、クロック、レジスタ
プロセッサ設計支援ツールを用いた 独自プロセッサの設計
コンピュータアーキテクチャ 第 9 回.
コンピュータアーキテクチャ 第 5 回.
コンピュータアーキテクチャ 第 11 回.
コンピュータ工学基礎 マルチサイクル化とパイプライン化 テキスト9章 115~124
2014年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
情報システム基盤学基礎1 コンピュータアーキテクチャ編
2008年度 情報科学序論 ~ 内部構造と動作の仕組み(2) ~.
情報システム基盤学基礎1 コンピュータアーキテクチャ編
Presentation transcript:

第7回 2006/6/12

マルチサイクル (Multicycle)による設計 複数のクロックサイクルで、一命例を実行 命令の複雑さによって実行サイクル数が異なる 機能ユニットは、シングルサイクル設計から再利用する ALU は算術論理演算およびアドレス計算とPCのインクリメントに使用 メモリは命令とデータを保持する マルチサイクル実装では、シングルサイクル実装と異なり、命令語のみでは制御信号を決定することができない 例: ALUは引き算命令では何を行えば良いか? 先行するサイクルの状態にも依存 制御のために、有限状態機械( finite state machine)を用いる

有限状態機械について q∈Q δ a ∈Σ σ b∈Π 有限状態機械の定義: 状態集合 Q 入力アルファベット Σ、出力アルファベット Π 状態遷移関数(Next State Function) δ : Q × Σ → Q (次の状態は、現在の状態と入力によって決定) 出力関数 (output function) σ : Q x Σ →Π (出力も、現在の状態と入力によって決定) このような機械を、Mealy機械という(詳しくは別授業) c.f. Moore機械 N e x t - s a f u n c i o C r l k O p I σ δ b∈Π a ∈Σ q∈Q

マルチサイクル設計の基本 命令の処理を複数の段階に分ける。それぞれの段階での処理が1クロックサイクルかかるように設計 それぞれの段階での処理量をバランスさせる それぞれのサイクルでは一つの機能ユニットのみが動作するようにする それぞれのサイクルの終わりには 後のサイクルでの処理のため、処理結果を格納 中間結果を保持する「内部レジスタ」を導入 S h i f t l e 2 P C M m o r y D a W d u x 1 R g s 4 I n c [ 5 – ] 3 6 A L U Z B O

五段階の実行ステップ 1命令は実行するのに3-5サイクル程度かかる! シングルサイクル実装に対して有利? 命令フェッチ (Instruction Fetch) 命令デコードとレジスタ値のフェッチ (Instruction Decode and Register Fetch) 実行、メモリアドレス計算、またはブランチ処理 (Execution, Memory Address Computation, or Branch Completion) メモリアクセス、またはR-typeの命令の実行完了 (Memory Access or R-type instruction completion) (レジスタへの)結果の書き込み (Write-back) 1命令は実行するのに3-5サイクル程度かかる! シングルサイクル実装に対して有利?

第 1 ステップ: 命令フェッチ PCが指し示すメモリの番地から命令を読み込んで、命令レジスタに書き込む 第 1 ステップ: 命令フェッチ PCが指し示すメモリの番地から命令を読み込んで、命令レジスタに書き込む PCに4を加算して、結果を再びPCに書き込む(次の命令のアドレス) 以下の疑似コードで動作を説明できる: IR = Memory[PC]; PC = PC + 4; Q: どのように制御信号を操れば良いか? この段階でPCに加算をしておくメリットは?

第 1 ステップ: 命令フェッチ(続き) 起動されたデータパスと機能ユニット(赤で表示) ALUがPCの加算に使われていることに注意 P C 第 1 ステップ: 命令フェッチ(続き) 起動されたデータパスと機能ユニット(赤で表示) ALUがPCの加算に使われていることに注意 P C M I n s t r u c t i o n R e a d u A d d r e s s [ 2 5 – 2 1 ] r e g i s t e r 1 M u x I n s t r u c t i o n R e a d R e a d A x 1 M e m o r y Z e r o [ 2 – 1 6 ] r e g i s t e r 2 d a t a 1 1 M e m D a t a A L U R e g i s t e r s A L U A L U O u t I n s t r u c t i o n M W r i t e R e a d r e s u l t [ 1 5 – ] I n s t r u c t i o n u r e g i s t e r d a t a 2 B W r i t e I n s t r u c t i o n [ 1 5 – 1 1 ] x 4 1 M d a t a W r i t e r e g i s t e r 1 d a t a u 2 x I n s t r u c t i o n 3 [ 1 5 – ] M u x M e m o r y 1 d a t a 1 6 3 2 S i g n S h i f t r e g i s t e r e x t e n d l e f t 2

第 2 ステップ: 命令デコードとレジスタ値のフェッチ 命令レジスタに格納された命令語のビットフィールドで指定されるrs レジスタと rt レジスタを読み込んでおく (必要な場合のために←命令形式によっては必要ないかもしれないが) 命令がブランチ命令の場合に備えて、ブランチ先のアドレスを計算しておく 疑似コードでは: A = Reg[IR[25-21]]; (命令レジスタのビットフィールド25-21) B = Reg[IR[20-16]]; ALUOut = PC + (sign-extend(IR[15-0]) << 2); (ALUによるブランチ先アドレスの計算) ここでは、命令タイプによって制御信号を変えない (制御回路で命令デコードしているのに忙しい)

第 2 ステップ: 命令デコードとレジスタ値のフェッチ(続き) 起動されたデータパスと機能ユニット A = Reg[IR[25-21]]; B = Reg[IR[20-16]]; ALUOut = PC + (sign-extend(IR[15-0]) << 2); P C M I n s t r u c t i o n R e a d u A d d r e s s [ 2 5 – 2 1 ] r e g i s t e r 1 M u x I n s t r u c t i o n R e a d R e a d A x 1 M e m o r y Z e r o [ 2 – 1 6 ] r e g i s t e r 2 d a t a 1 1 M e m D a t a A L U R e g i s t e r s A L U A L U O u t I n s t r u c t i o n M W r i t e R e a d r e s u l t [ 1 5 – ] I n s t r u c t i o n u r e g i s t e r d a t a 2 B W r i t e I n s t r u c t i o n [ 1 5 – 1 1 ] x M d a t a W r i t e 4 1 r e g i s t e r 1 d a t a u 2 x I n s t r u c t i o n 3 [ 1 5 – ] M u x M e m o r y 1 d a t a 1 6 3 2 S i g n S h i f t r e g i s t e r e x t e n d l e f t 2

第 3 ステップ: 命令実行 (命令形式に依存) ALU は、命令形式の種類によって、以下の三つの異なる動作を行う (1) メモリ参照 (I-形式): ALUOut = A + sign-extend(IR[15-0]); (2) R-形式: ALUOut = A op B; (3) ブランチ: if (A==B) PC = ALUOut;

第 3 ステップ:命令実行 (1)メモリ参照 (I-形式) 起動されたデータパスと機能ユニット(赤で表示) ALUOut = A + sign-extend(IR[15-0]) P C M I n s t r u c t i o n R e a d u A d d r e s s [ 2 5 – 2 1 ] r e g i s t e r 1 M u x I n s t r u c t i o n R e a d R e a d A x 1 M e m o r y Z e r o [ 2 – 1 6 ] r e g i s t e r 2 d a t a 1 1 A L U M e m D a t a R e g i s t e r s A L U A L U O u t I n s t r u c t i o n M W r i t e R e a d r e s u l t [ 1 5 – ] I n s t r u c t i o n u r e g i s t e r d a t a 2 B W r i t e I n s t r u c t i o n [ 1 5 – 1 1 ] x 4 1 M d a t a W r i t e r e g i s t e r 1 d a t a u 2 x I n s t r u c t i o n 3 [ 1 5 – ] M u x M e m o r y 1 d a t a 1 6 3 2 S i g n S h i f t r e g i s t e r e x t e n d l e f t 2

第 3 ステップ:命令実行 (2) R-形式 起動されたデータパスと機能ユニット(赤で表示) ALUOut = A op B P C M I M I n s t r u c t i o n R e a d u A d d r e s s [ 2 5 – 2 1 ] r e g i s t e r 1 M u x I n s t r u c t i o n R e a d R e a d A x 1 M e m o r y Z e r o [ 2 – 1 6 ] r e g i s t e r 2 d a t a 1 1 A L U M e m D a t a R e g i s t e r s A L U A L U O u t I n s t r u c t i o n M W r i t e R e a d r e s u l t [ 1 5 – ] I n s t r u c t i o n u r e g i s t e r d a t a 2 B W r i t e I n s t r u c t i o n [ 1 5 – 1 1 ] x 4 1 M d a t a W r i t e r e g i s t e r 1 d a t a u 2 x I n s t r u c t i o n 3 [ 1 5 – ] M u x M e m o r y 1 d a t a 1 6 3 2 S i g n S h i f t r e g i s t e r e x t e n d l e f t 2

第 3 ステップ:命令実行 (3)ブランチ 起動されたデータパスと機能ユニット(赤で表示) if (A==B) PC = ALUOut Q. どこかにバグがある → 修正すべし!

第 4 ステップ: (R-形式 又は メモリ参照) ロード命令とストア命令によるメモリ参照 (1) MDR = Memory[ALUOut]; 又は (2) Memory[ALUOut] = B; R-形式命令の完了 (3) Reg[IR[15-11]] = ALUOut; メモリやレジスタへの書き込みは、実際はクロックサイクルの完了のエッジで行われる

第 4 ステップ:命令実行 (1)メモリ参照 (ロード) 起動されたデータパスと機能ユニット(赤で表示) MDR = Memory[ALUOut] P C M I n s t r u c t i o n R e a d u A d d r e s s [ 2 5 – 2 1 ] r e g i s t e r 1 M u x I n s t r u c t i o n R e a d R e a d A x 1 M e m o r y Z e r o [ 2 – 1 6 ] r e g i s t e r 2 d a t a 1 1 M e m D a t a A L U R e g i s t e r s A L U A L U O u t I n s t r u c t i o n M W r i t e R e a d r e s u l t [ 1 5 – ] I n s t r u c t i o n u r e g i s t e r d a t a 2 B W r i t e I n s t r u c t i o n [ 1 5 – 1 1 ] x M d a t a W r i t e 4 1 r e g i s t e r 1 d a t a u 2 x I n s t r u c t i o n 3 [ 1 5 – ] M u x M e m o r y 1 d a t a 1 6 3 2 S i g n S h i f t r e g i s t e r e x t e n d l e f t 2

第 4 ステップ:命令実行 (2)メモリ参照 (ストア) 起動されたデータパスと機能ユニット(赤で表示) Memory[ALUOut] = B P C M I n s t r u c t i o n R e a d u A d d r e s s [ 2 5 – 2 1 ] r e g i s t e r 1 M u x I n s t r u c t i o n R e a d R e a d A x 1 M e m o r y Z e r o [ 2 – 1 6 ] r e g i s t e r 2 d a t a 1 1 M e m D a t a A L U R e g i s t e r s A L U A L U O u t I n s t r u c t i o n M W r i t e R e a d r e s u l t [ 1 5 – ] I n s t r u c t i o n u r e g i s t e r d a t a 2 B W r i t e I n s t r u c t i o n [ 1 5 – 1 1 ] x M d a t a W r i t e 4 1 r e g i s t e r 1 d a t a u 2 x I n s t r u c t i o n 3 [ 1 5 – ] M u x M e m o r y 1 d a t a 1 6 3 2 S i g n S h i f t r e g i s t e r e x t e n d l e f t 2

第 4 ステップ:命令実行 (3) R-形式命令の完了) 起動されたデータパスと機能ユニット(赤で表示) Reg[IR[15-11]] = ALUOut P C M I n s t r u c t i o n R e a d M u A d d r e s s [ 2 5 – 2 1 ] r e g i s t e r 1 u x I n s t r u c t i o n R e a d R e a d A x 1 M e m o r y Z e r o [ 2 – 1 6 ] r e g i s t e r 2 d a t a 1 1 M e m D a t a A L U R e g i s t e r s A L U A L U O u t I n s t r u c t i o n M W r i t e R e a d r e s u l t [ 1 5 – ] I n s t r u c i o [ 1 5 – ] u r e g i s t e r d a t a 2 B W r i t e I n s t r u c t i o n x M d a t a 4 1 r e g i s t e r 1 W r i t e d a t a u 2 x I n s t r u c t i o n 3 [ 1 5 – ] M u x M e m o r y 1 d a t a 1 6 3 2 r e g i s t e r S i g n S h i f t e x t e n d l e f t 2

第 5 ステップ: Write-back step Reg[IR[20-16]]= MDR; 他の命令の場合は(算術演算、ブランチなど)? P C M I n s t r u c t i o n R e a d M u A d d r e s s [ 2 5 – 2 1 ] r e g i s t e r 1 u x I n s t r u c t i o n R e a d R e a d A x 1 M e m o r y Z e r o [ 2 – 1 6 ] r e g i s t e r 2 d a t a 1 1 M e m D a t a A L U R e g i s t e r s A L U A L U O u t I n s t r u c t i o n M W r i t e R e a d r e s u l t [ 1 5 – ] I n s t r u c i o [ 1 5 – ] u r e g i s t e r d a t a 2 B W r i t e I n s t r u c t i o n x M d a t a 4 1 r e g i s t e r 1 W r i t e d a t a u 2 x I n s t r u c t i o n 3 [ 1 5 – ] M u x M e m o r y 1 d a t a 1 6 3 2 r e g i s t e r S i g n S h i f t e x t e n d l e f t 2

まとめ:

ここでの問題: 以下のコードを実行するのに、何サイクルかかるか? lw $t2, 0($t3) lw $t3, 4($t3) beq $t2, $t3, Label #ブランチしないと仮定 add $t5, $t2, $t3 sw $t5, 8($t3) Label: ... 実行時の第 8 サイクルには、何が起こっているか? $t2と$t3の加算は第何サイクルに実行される?

制御回路の実装 機能ユニットの制御信号は、以下のものに依存する: 実行する命令 命令の第何ステップを実行しているか 今までのデータパスの制御の仕様を基に、有限状態機械を設計する 有限状態機械を図示するか、 マイクロプログラミングの手法を用いる

有限状態機械の図的表現 状態を表現するには、何ビット必要? s t r u c i o n d e / g f h J m p l B a x M y R - W b k ( O = ' L ) S U S r c B = 1 A L O p R e g D s t W i M m o a d I P C u n f h 1 状態を表現するには、何ビット必要? S t a r t p e ) ' ) y Q ) - t ' B E J ' = ' = p p ( O O ( P C W r i t e S o u c = 1 A L U B O p n d R g D s M m I a 2 6 8 9 ) ( ' O W p L = ' ' S = W p ' ) O ( 3 5 7 4

制御用の有限状態機械の設計 制御回路 (組合せ回路部分) 出力 入力 q a 実装: P C W r i t e o n d I D M m g S u c A L U O p B s N 3 2 1 5 4 a 制御回路 (組合せ回路部分) 出力 入力 a q I n p u t s e g i s t e r o p c o d e f i e l d

PLA (Programmable Logic Array)による実装 有限状態機械(Mealy機械)の遷移関数と、出力関数を直接的に表現 ROMによる実装も可能だが通常はPLAが有利 右の図の読み方 上半分の横方向の入力信号線に対し、縦線とオレンジ色の点で結合しているのが積(and)であり、つまり縦線が積項。 それらの複数の積項が和(or)で下半分の横線と黒い点結合し、出力されている。

マイクロプログラミング (Microprogramming) C.f. ハードワイア (Hardwired logic) 有限状態機械の挙動を「プログラミング」する 独自の内部プログラムカウンタや簡単なALUを持つ 命令は、機能ユニットの制御に特化(マイクロ命令) 出力として、機能ユニットの制御線を持つ 算術命令などは普通ない 複数の制御線の計算を並列に行う(水平マイクロプログラミング) マイクロプログラムはしばしばチップ外のROMかRAMに マイクロプログラム部分をプログラマブルにすることにより、命令の追加や変更が可能

マイクロプログラミング (Microprogramming) マイクロ命令は、どのような形式 ?

マイクロ命令 (Microinstructions) PLAなどによる直接実装に比較して 多数の命令数、アドレッシングモード、サイクルのとき適切 マイクロ命令により、信号線を記号的に指定(マイクロアセンブラ)

マイクロ命令の形式

マイクロコード: トレードオフ 仕様上の有利さ: デザインが簡単→CISCの複雑な命令も可能 マイクロコード: トレードオフ 仕様上の有利さ: デザインが簡単→CISCの複雑な命令も可能 アーキテクチャとマイクロコードの設計を同時に行なえる 実装上の有利さ (プロセッサチップ外ROM/RAMにプログラム) プログラムがチップ外にあるため、変更が容易 他のアーキテクチャのエミュレーションを可能 実装上の不利さ - 遅くなる。: 制御回路を単一チップに収めないと、遅くなる ROM はRAMに対して、遅い (昔は速かった) 現在では、複雑な命令にのみ用いる (c.f., RISC vs. CISC)