コンピュータアーキテクチャ 第 7 回
演算回路(算術論理演算ユニットとシフタ) 算術論理演算ユニットの構成モジュール 加算器 足し算をつかさどる組み合せ回路 減算器にも拡張可 フリップフロップ を付け加えることでカウンタを構成 論理演算器(AND, OR, XOR) 論理加減算器(16 ビットの符号なし 2 進数の加減算) シフタ シフト演算を実現する組合せ回路 今回の内容 ~以下の各要素と全体構成の例~ 半加算器と全加算器: 並列加算器: 加減算器: カウンタ: 書き換え機能つきカウンタ,ダウンカウンタ シフタ: 1 ビットシフタに限定 * * *
ハードウェアモデルにおける位置付け * * *
半加算器 (HA: Half Adder) 演算データ a, b (1 ビット)を入力 演算結果 f, c を出力 c : 桁上げ出力 *
全加算器 (FA: Full Adder) 演算データ a, b, cin (1 ビット)を入力 演算結果 f, cout を出力 cin : 桁上げ入力, cout : 桁上げ出力 * *
論理演算の性質
演習問題 7.1
2進数の加算はどのように実行されるか? A + B = 3 + 2 = (0011)2 + (0010)2 4 ビットの例 (1) A + B = 3 + 2 = (0011)2 + (0010)2 * A ・・・ B ・・・ キャリー(桁上り) ・・・ 4 ビットの例 (2) A + B = 7 + 3 = (0111)2 + (0011)2 * A ・・・ B ・・・ キャリー(桁上り) ・・・
並列加算器(parallel adders) * リップルキャリー方式:
* *
ルックアヘッドキャリー (look-ahead carry) * *
演習問題 7.2 1
減算をどうやって実現するか? A – B = 7 – 5 = (0111)2 – (0101)2 4 ビットの例 A – B = 7 – 5 = (0111)2 – (0101)2 = (0111)2 + (0101)2 の2の補数 = (0111)2 + (0101)2 の1の補数 + 1 A ・・・ Bの1の補数 ・・・ キャリー(桁上り) ・・・ * +1
加減算器 (adder-subtractor) のとき加算器, のとき減算器 * * *
4 ビット加減算器の真理値表 *
演習問題 7.3 前記の 4 ビット加減算器において,A 入力または B 入力をすべて 1 としたとき,どのような演算が おこなわれるか?それぞれ s0, c0 の組み合せごと に示せ.また,それらを確かめる具体的な数値例を 示せ.
カウンタ (counter) (1) * (a)
カウンタ (counter) (2) * (b)
カウンタ (counter) (3) (c) インクリメンタ (incrementer) とも呼ばれる * インクリメンタ (incrementer) とも呼ばれる clock 信号がハイレベルに変わるごとに2進数 f3 f2 f1 f0 の値が 1 増加
演習問題 7.4 前述のように, 4 ビット 2 進数に 1 を加える加算器を,半加算器と基本ゲートによって置き換えられることを示せ.
書き換え機能つきカウンタ s がハイレベルのときは ,ローレベルのときは プログラムカウンタに使用される * * inc
書き換え機能つきダウンカウンタ s がハイレベルで ,ローレベルでは 本講義ではスタックポインタに使用 * * dcr
4 ビット書き換え機能つきカウンタのタイムチャート例
演習問題 7.5 右の 4 ビット ダウンカウンタの タイムチャート例を 完成せよ.
算術論理演算ユニット (ALU: Arithmetic Logic Unit) *
算術論理演算ユニットの真理値表
演習問題 7.6 4 ビットの符号なし 2 進数の減算は,5 ビットの符号つき 2 進 数の減算として実行できる.これが実際には, 4 ビットの符号 つき 2 進数用加減算器で実行可能であることを示せ.
シフタ (Shifter) データ幅 4 ビットの 1 ビットシフタ構成例 * *
データ幅 4 ビットの 1 ビットシフタの真理値表
シフト命令の実行概念 1ビットシフタ: * バレルシフタ(barrel shifter): 1 クロックで ハードウェア量大 *
算術左シフト命令実行例
演算回路の構成