1
第5章 コントローラの設計
2
5.1 コントローラの構成
データパスでのマイクロ操作を実行するには マイクロ操作の入力データをデータパスに供給 それを実行するために必要な
制御信号をデータパスに与える
2
3
コントローラは 一連のマイクロ操作を 実行するための制御信号の系列を
生成する順序回路
命令コードを 命令デコーダで解読し
制御信号生成回路で 制御信号を発生
ゲートやフリップフロップで コントローラを構成する
結線制御
結線制御
4
結線制御
3
5
結線制御は有限状態機械(FSM)で記述されることが多いので FSMコントローラ と呼ぶこともある
コントローラを設計する方法を説明するために
最大公約数 (GCD, greatest common divisor) を計算するシステム を例にそれを設計
5.2 結線制御の設計
6
entity gcd is port ( clk : in bit;
din : in bit; xin : in integer; yin : in integer; dout : out bit; zout : out integer ); end gcd;
GCD システムの設計
インタフェースをハードウェア記述言語VHDLで記述
4
7
GCD システムの設計
最大公約数を計算する アルゴリズム
8
GCD システムの設計
動作記述をVHDLで記述
architecture behavior of gcd is begin
process
variable x, y : integer; begin
calculation : loop
wait until ((din ='1') and (clk = '1' and clk'event)); dout <= '0';
x := xin; y := yin;
while (x /= y ) loop if ( x < y ) then y := y - x; else x := x - y; end if;
end loop;
wait until ((din = '0') and (clk = '1' and clk'event)); dout <= '1';
zout <= x; end loop; end process; end behavior;
5
9
GCD システムの設計
10
GCD システムの設計
6
11
GCD システムの設計
12
GCD システムの設計
7
13
GCD システムの設計
14
GCD システムの設計
8
15
GCD システムの設計
16
GCD システムの設計
9
17
GCD システムの高位合成結果
architecture behavior of gcd is begin
process
variable x, y : integer; begin
calculation : loop
wait until ((din ='1') and (clk = '1' and clk'event)); dout <= '0';
x := xin; y := yin;
while (x /= y ) loop if ( x < y ) then y := y - x; else x := x - y; end if;
end loop;
wait until ((din = '0') and (clk = '1' and clk'event)); dout <= '1';
zout <= x; end loop; end process; end behavior;
18
GCD システムの高位合成結果
10
19
GCD システムの高位合成結果
20
5.3 マイクロプログラム制御
いくつかの制御信号を1語にまとめたのを制御語
一連の制御語をROMやRAM(PLAも可能)などのメモリに格納しておき それを順次取り出すことにより制御信号列を生成する制御方法を
マイクロプログラム制御
メモリ内の各制御語をマイクロ命令
マイクロ命令の列をマイクロプログラム
マイクロプログラムを格納したメモリを制御メモリ
マイクロプログラム制御方式は
1951年、英国のウィルクス(M.V.Wilkes)により考案
11
21
5.3 マイクロプログラム制御
一連のマイクロ操作列を実行するために
対応するマイクロ命令の列
(マイクロプログラム:ファームウエア) を制御メモリに書き込んでおき
制御メモリからマイクロ命令を読み出し 制御信号としてマイクロ操作を実行
22
5.4 マイクロ命令
12
23
5.4 マイクロ命令
24
データパスの制御信号
13
25
マイクロプログラム制御
26
マイクロ命令
14
27
マイクロ命令
28
マイクロ命令
15
29
5.5 マイクロプログラムの設計
開始アドレスの設定
!"#$%& ''''''''' ()
* + , - , . / 0 / 1 * 2 3
30
5.5 マイクロプログラムの設計
加算命令
R1 ← R1 + R2, CAR ← CAR + 1
001 010 001 101 0 00 0 000 000000
A B C S Cin W M1 M2 ADR
R1 選択
R2 選択
R1 選択
加算 CARを
1増加
16
31
5.5 マイクロプログラムの設計
論理和演算と無条件分岐
R1 ← lsr (R1 ∨ R2), CAR ← 40
001 010 001 001 0 10 0 001 101000
A B C S Cin W M1 M2 ADR
R1 選択
R2 選択
R1 選択
論理和
ロード 右シフト
内部アドレス 選択
40
32
5.5 マイクロプログラムの設計
条件分岐
R1 ← R1 + R2,
if (Z=1) then (CAR ← 26) else (CAR ← CAR + 1)
001 010 001 101 0 00 0 101 011010
A B C S Cin W M1 M2 ADR
R1 選択
R2 選択
R1 選択
加算
Z選択
内部アドレス 選択
26
17
33
5.5 マイクロプログラムの設計
外部アドレスへ分岐
R1 ← R1 + R2, CAR ← 外部アドレス
001 010 001 101 0 00 1 001 000000
A B C S Cin W M1 M2 ADR
R1 選択
R2 選択
R1 選択
加算
ロード
外部アドレス 選択
26
34
演習問題
つぎのレジスタ転送命令を図5.14 のマイクロ命令で記述せよ
(a) R3 ← R1 + R2, CAR ← 20
(b) R2 ← lsr (R1 ‒ R2), CAR ← CAR + 1
(c) if (P = 1) then (CAR ← 外部アドレス) else (CAR ← CAR + 1)
(d) R2 ← lsl (R1 + R2),
if (V = 1) then (CAR ← 13) else (CAR ← CAR + 1)
18
35
演習問題
(a) R3 ← R1 + R2, CAR ← 20
36
演習問題(解答)
A B C S Cin W M1 M2 ADR 001 010 011 101 0 00 0 001 (20)2 (a) R3 ← R1 + R2, CAR ← 20
19
37
演習問題
(b) R2 ← lsr (R1 ‒ R2), CAR ← CAR + 1
38
演習問題(解答)
(b) R2 ← lsr (R1 ‒ R2), CAR ← CAR + 1 A B C S Cin W M1 M2 ADR 001 010 010 1101 10 - 000 ---
20
39
演習問題
(c) if (P = 1) then (CAR ← 外部アドレス) else (CAR ← CAR + 1)
40
演習問題(解答)
(c) if (P = 1) then (CAR ← 外部アドレス) else (CAR ← CAR + 1)
A B C S Cin W M1 M2 ADR --- --- --- --- - -- 1 100 ---
21
41
演習問題
(d) R2 ← lsl (R1 + R2), if (V = 1) then (CAR ← 13) else (CAR ← CAR + 1)
42
演習問題(解答)
A B C S Cin W M1 M2 ADR 001 010 010 1010 01 0 010 (13)2
(d) R2 ← lsl (R1 + R2), if (V = 1) then (CAR ← 13) else (CAR ← CAR + 1)