実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢...

20

Transcript of 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢...

Page 1: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

実践コンピュータ アーキテクチャ

工学博士坂井 修一 著

(改訂版)

コロナ社

コロ

ナ社

Page 2: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

 「コンピュータを作る」とは,マイクロプロセッサの中身を作ることである。Intelや

AMDの既存のマイクロプロセッサチップを既存のマザーボードに載せることではない。こ

の意味で,世界中のほとんどの若者が,コンピュータを作ることをしていない。これは,未

来の情報科学やコンピュータ産業にとって,たいへんな問題である。

 この本では,コンピュータアーキテクチャとは何かを学びつつ,実際にコンピュータを設

計する。幸い,いまは開発環境として,CAD(computer aided design)が充実しており,

FPGA(field programmable gate array)によるハードウェア実験も容易となった。だれでも

コンピュータが設計・試作できる時代なのである。実際,この本を使ってコンピュータを

作ってみれば,それがいかに簡単なことかわかるだろう。

 私の先の教科書『コンピュータアーキテクチャ』(電子情報通信学会編,コロナ社発行)

では,コンピュータがなぜプログラムを実行できるのか,その一点を徹頭徹尾簡明に述べ

た。本書は,この教科書で学んだコンピュータをほぼそのままの形で実際に設計してみる。

どんな分野でも読書による理解と実験・製作は不可分のものである。もちろん,コンピュー

タでもそうである。

 本書は独立した本であり,これだけ単独で使っていただければと思う。『コンピュータ

アーキテクチャ』を読み通した方には,本書の 1章,5章,6 .1 ~ 6 .4 節は復習である。こ

れらを読み飛ばして 2 ~ 4 章,6 .5 節,それに 7~ 9章を学習し,実践していただければと

思う。逆に本書から始められる方は,本書をクリアしたところで,『コンピュータアーキテ

クチャ』の 4 章から読み始めていただければと思う。本書の範囲の外にあるパイプラインの

技術や,キャッシュ,仮想記憶,並列処理,アウトオブオーダ処理などの技術を学ぶことが

できると思う。

 1章では,1本の線による 1ビットの表現から組合せ回路,順序回路,コンピュータの計

算サイクルまでを概説した。続いて,2章では CADを使った回路入力の初歩を示した。こ

の本では,Altera社の Quartus IIという CADツールを用いており,回路入力はおもに

Verilog HDLによる。他社の CADツールを使い,他の HDLを用いる場合でも基本的には同

じ手順を踏むことになる。3章では Verilog HDLを概説している。続いて 4章では,Verilog

ま え が き

コロ

ナ社

Page 3: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

ii   ま え が き 

HDLによるシミュレーション記述について学び,これを動作させる環境として Modelsimを

導入する。ここまでで CADの準備を一通り終えた後,5章で RISC型マイクロプロセッサの

アーキテクチャの基本を学ぶ。6章では命令セットの設計とアセンブラの実装を学ぶ。命令

セットアーキテクチャは,『コンピュータアーキテクチャ』のそれと同じものである。アセ

ンブラは文字列処理に適した Perl言語で作成した。7章では基本プロセッサの設計を行う。

続いて 8章では,基本プロセッサをシミュレーションによって検証し,最後に 9章で FPGA

評価ボードの上に実装する。

 以上,読者は,1本の線の実装からマイクロプロセッサまで,順番に設計し,シミュレー

ションし,最後は FPGA上に実装することになる。その過程で Verilog HDL,Quartus II,

Modelsimといくつか CADツール群を使うことになる。焦らず,じっくりとエンジョイして

ほしい。途中でさぼるのはかまわないが,忘れてしまわないうちに戻ってくること。

 本書は大学の学部学生の実験のための教科書として書かれた。東大での実験にあたって,

アドバイスいただいた五島正裕准教授,TAを務めてくれた坂井・五島研究室の塩谷亮太君,

金大雄君,杉本健君,履修した電子・情報系の学生諸君にはお礼をいいたい。前著に続いて

本書の出版をお引き受けいただいたコロナ社の皆様にも感謝申し上げる。

 2009 年 2 月

坂井 修一 

改訂版にあたって

 2015 年 12 月,Altera社が Intel社に買収されたことにより,CADツールである Quartus

のバージョン,ダウンロード法が変わり,表示される画面が全部変更になった。また,新し

い FPGA評価ボードも販売された。このため,本書もこれに合わせて,ダウンロードサイ

トの変更,設計やシミュレーションの図を差し替え,FPGA評価ボードの変更などの改訂を

行った。

 2020 年 3 月

坂井 修一 

コロ

ナ社

Page 4: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

1 . は じ め に

1 .1 ディジタルな表現 1

1 .1 .1 1 本の線=1ビットの信号 11 .1 .2 n本の線=nビットの信号 21 .1 .3 負  の  数 21 .1 .4 実     数 3

1 .2 組合せ論理回路=計算の実現 41 .2 .1 計算とは何か 41 .2 .2 1 ビットの加算 51 .2 .3 nビット加算器 61 .2 .4 減 算 の 実 現 61 .2 .5 ALU 7

1 .3 順序回路=記憶を含む論理回路 81 .3 .1 フリップフロップ 91 .3 .2 レ ジ ス タ 101 .3 .3 レジスタと ALUの結合 11

本章のまとめ 12

演 習 問 題 12

2 . ディジタル回路の入力

2 .1 ディジタル回路の設計とは 132 .1 .1 CAD 132 .1 .2 設 計 の 流 れ 132 .1 .3 CADツールの導入 14

2 .2 組合せ論理回路の設計 152 .2 .1 図式入力による半加算器の設計 152 .2 .2 HDL入力による半加算器の設計( 1) 17

目     次

コロ

ナ社

Page 5: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

iv   目 次 

2 .2 .3 HDL入力による半加算器の設計( 2) 18

2 .3 順序回路の設計 182 .3 .1 図式入力による 3ビット同期式カウンタの設計 182 .3 .2 HDL入力による 3ビット同期式カウンタの設計( 1) 192 .3 .3 HDL入力による 3ビット同期式カウンタの設計( 2) 21

2 .4 図式入力と HDL入力 22

本章のまとめ 22

演 習 問 題 22

3 . ハードウェア記述言語 Verilog HDL

3 .1 モジュール構成と宣言 233 .1 .1 モジュール構成 233 .1 .2 宣  言  部 243 .1 .3 2 次元配列の宣言 253 .1 .4 名前・文字・予約語 25

3 .2 値  と  型 263 .2 .1 値 263 .2 .2 型 263 .2 .3 定     数 27

3 .3 素子とライブラリ 283 .3 .1 基 本 素 子 283 .3 .2 3 状 態 素 子 293 .3 .3 回路ライブラリ 30

3 .4 演     算 303 .4 .1 演  算  子 303 .4 .2 リダクション演算 313 .4 .3 条 件 演 算 323 .4 .4 連 接 演 算 323 .4 .5 優 先 順 位 32

3 .5 回 路 記 述 部 333 .5 .1 assign 文 333 .5 .2 function 343 .5 .3 if 文 343 .5 .4 case 文 343 .5 .5 always 文 353 .5 .6 モジュール呼出し 363 .5 .7 コ メ ン ト 37

3 .6 Quartusにおける設計の流れ 37

コロ

ナ社

Page 6: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

 目 次   v

3 .6 .1 プロジェクト起動 373 .6 .2 回 路 入 力 393 .6 .3 論 理 合 成 40

本章のまとめ 41

演 習 問 題 41

4 . シミュレーションによる動作検証

4 .1 Verilog HDLによるテスト生成 424 .1 .1 Verilog HDLによるシミュレーション記述 424 .1 .2 モジュールの内部構成 44

4 .2 Verilog HDLによるテストパターン生成と結果の表示 454 .2 .1 遅     延 454 .2 .2 initial文とテストパターン入力 454 .2 .3 繰返し文と wait文 464 .2 .4 シミュレーションで用いるデータ型 464 .2 .5 タ  ス  ク 464 .2 .6 システムタスク 47

4 .3 シミュレーション環境の整備 484 .3 .1 ModelSimの導入 484 .3 .2 シミュレーションの波形出力 50

本章のまとめ 52

演 習 問 題 52

5 . データの流れと制御の流れ

5 .1 主 記 憶 装 置 535 .1 .1 主記憶装置の導入 535 .1 .2 メモリの構成 545 .1 .3 メモリの分類 565 .1 .4 レジスタファイル 565 .1 .5 主記憶装置の接続 57

5 .2 命令とは何か 585 .2 .1 命     令 585 .2 .2 命令実行のしくみ 595 .2 .3 算術論理演算命令の実行サイクル 605 .2 .4 メモリ操作命令の実行サイクル 60

5 .3 シ ー ケ ン サ 61

コロ

ナ社

Page 7: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

vi   目 次 

5 .3 .1 シーケンサとは何か 615 .3 .2 コンピュータ中枢部の構成 625 .3 .3 条件分岐命令の実行サイクル 63

本章のまとめ 64

演 習 問 題 64

6 . 命令セットアーキテクチャとアセンブラ

6 .1 命令の表現形式とアセンブリ言語 656 .1 .1 操作とオペランド 656 .1 .2 命令の表現形式 656 .1 .3 命令フィールド 666 .1 .4 アセンブリ言語 66

6 .2 命 令 セ ッ ト 686 .2 .1 算術論理演算命令 686 .2 .2 メモリ操作命令 696 .2 .3 分 岐 命 令 71

6 .3 アドレシング 726 .3 .1 アドレシングの種類 726 .3 .2 バイトアドレシングとエンディアン 736 .3 .3 ゼロレジスタと定数の生成 74

6 .4 サブルーチンの実現 746 .4 .1 サブルーチンの基本 746 .4 .2 サブルーチンの手順 756 .4 .3 スタックによるサブルーチンの実現 766 .4 .4 サブルーチンのプログラム 77

6 .5 命令セットアーキテクチャの設計とアセンブラ 776 .5 .1 命令セットの設計 776 .5 .2 アセンブラの製作 77

本章のまとめ 81

演 習 問 題 82

7 . 基本プロセッサの設計

7 .1 設 計 の 流 れ 837 .1 .1 モジュールへの分割 837 .1 .2 入出力信号の設定 857 .1 .3 設計の試行錯誤 86

コロ

ナ社

Page 8: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

 目 次   vii

7 .2 構成要素の設計 877 .2 .1 命令フェッチ部 877 .2 .2 デ コ ー ド 部 877 .2 .3 実  行  部 877 .2 .4 書 戻 し 部 917 .2 .5 レジスタファイル 92

7 .3 基本プロセッサ 927 .3 .1 Verilog HDLによる全体設計 937 .3 .2 論 理 合 成 93

本章のまとめ 94

演 習 問 題 94

8 . 基本プロセッサのシミュレーションによる検証

8 .1 シミュレーションの手順 95

8 .2 命令フェッチ部 958 .2 .1 アセンブラによる機械語プログラムの生成 968 .2 .2 機械語プログラムを命令メモリにロードする 968 .2 .3 メモリ内容の表示と修正法 98

8 .3 データメモリ 99

8 .4 実  行  部 1018 .4 .1 opr_gen 1018 .4 .2 ALU 1028 .4 .3 結果データの生成・分岐・書込みレジスタの選択 105

8 .5 書 戻 し 部 107

8 .6 レジスタファイル 109

8 .7 基本プロセッサの全体シミュレーション 1118 .7 .1 トップモジュールのテスト法 1118 .7 .2 1+1=2 の実行 1138 .7 .3 個々の命令のテスト 1138 .7 .4 階和計算のプログラム 115

本章のまとめ 116

演 習 問 題 116

9 . FPGAによる実装

9 .1 FPGA の 原 理 117

コロ

ナ社

Page 9: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

viii   目 次 

9 .2 設 計 の 手 順 1189 .2 .1 手順の具体化 1189 .2 .2 デザイン入力 1199 .2 .3 論 理 合 成 1199 .2 .4 機能シミュレーション 1199 .2 .5 配 置 配 線 1199 .2 .6 タイミング解析・シミュレーション 119

9 .3 FPGA上の実装 1209 .3 .1 FPGA ボ ー ド 1209 .3 .2 実装用の設計の修正( 1) ―命令メモリとプログラムのロード― 1209 .3 .3 実装用の設計の修正( 2) ―データメモリ― 1219 .3 .4 実装用の設計の修正( 3) ―結果の表示― 1219 .3 .5 Quartus Primeライブラリを用いたときの ModelSimの使い方 1259 .3 .6 ピ ン 割 付 け 1259 .3 .7 設計データの FPGAボードへのダウンロード 126

9 .4 FPGAボード上のプログラム実行例 1279 .4 .1 1+1=2 の実行 1279 .4 .2 階 和 計 算 128

9 .5 改     良 1289 .5 .1 設 計 の 改 良 1289 .5 .2 アーキテクチャの改良 129

本章のまとめ 129

演 習 問 題 129

付     録

A. Quartus 130

B. ModelSim 131

C. 基本プロセッサの Verilog HDL記述 133

D. FPGA ボ ー ド 136

E. FPGAにダウンロードする基本プロセッサ(Verilog HDL) 139

引用・参考文献 147

演習問題解答 148

あ と が き 153

索     引 154

コロ

ナ社

Page 10: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

は じ め に コンピュータ設計は,2進数によるディジタルな表現から始まる。本章では,ディジタルな表現とは何か,基本論理素子,組合せ論理回路,フリップフロップ,順序回路,計算のサイクルについて学ぶ。

1 .1 ディジタルな表現

1 .1 .1 1本の線=1ビットの信号

 今日,ほとんどのデータ(data)は一度ディジタル(digital)な表現に整形されてから用

いられている。そして,ディジタルなデータを記憶したり,整形したり,計算したり,入力

したり,出力したりする主役が,この本で登場するディジタルコンピュータ(digital

computer)である。本書では,単にコンピュータ(computer)といえばディジタルコン

ピュータを指すとする。

 本書で設計するコンピュータは,2値論理をとる。現行のほぼすべてのコンピュータがこ

の方式である。このコンピュータでは,1本の線で,0,1 の 2 種類のデータを表現する。1

本の線が運ぶ情報量を,1ビット(bit)と呼ぶ。

 ディジタルな表現では,図 1 .1のように信号の「値」を定義する。線の上の信号は,電

圧で表される。電圧が高いとき,値を 1とし,電圧が低いときに値を 0とする。電圧の「高

い」,「低い」を決める値をしきい値(threshold)と呼び,図では Vthで表している。

 1本の線の設計とは,電気の通る導線をもってくるだけのことである。この導線に信号を

書き込んだり,導線づたいに信号を遠くへ運んだり,この導線から信号を読み出したりす

る。書き込んだ信号は,遅延なくそのままの電圧で読み出されるのが理想である。

図 1 .1 1 本 の 線

コロ

ナ社

Page 11: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

2   1 . は じ め に 

1 .1 .2 n本の線=nビットの信号

 2進数で桁の数を表現するには,n本の線を使う(図 1 .2参照)。これで nビットが表現

されたという。図 1 .2 では,2進数の 0101,すなわち 10進数の 5を表現している。2進数は

ある数を表現するのに多くの桁を必要とするが,一つ一つの桁は 0か 1となって単純である。

 基準となる桁数 nはコンピュータによって異なるが,パソコンやサーバ(server)で使わ

れているマイクロプロセッサ(microprocessor)の場合,これは 32 または 64 であることが

多い。組込み型 CPU(central processing unit)の場合,これは 8や 16 のこともある。基準

となる nビットのデータのことを語(word)と呼び,nを語長(word length)と呼ぶ。

 n本の線では,0から 2n-1までの数を表すことができる。

1 .1 .3 負  の  数

 2進数で負の数を表すためには,補数(complement)表示を用いる。補数表示とは,最

上位のビットが符号を表すものとし,これが 0のとき正の数,1のとき負の数とみなすとい

う数の表現法である。補数表示によって,電子計算機の中では,加減算はすべて正の加算と

わずかな補正だけで行えるようになる。現在のコンピュータでは,2の補数(2ʼs comple-

ment)によって負の数を表す(図 1 .3参照)。

 2の補数表示では,負の数-xを表すのに,2n-xを用いる。2の補数は,xの各桁の 1と

0 を反転し,結果に 1を加えたものとなる。2の補数表示をとった場合,-2n-1 から 2n-1

-1 までの数を表すことができる。

図 1 .2 n本の線(例では n=4)

コロ

ナ社

Page 12: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

 1 . 1 ディジタルな表現   3

 いま,3桁の数を例として考えると,-6の 2の補数表示は 1010 となる。

1 .1 .4 実     数

 実数の表現法には,大きく分けてつぎの二つがある。

 〔 1〕 固定小数点による表現  整数の表現と同じだが,何桁目かに小数点があると約束

しておく。

 特別な回路を用意する必要はないが,演算(特に乗算と除算)をするたびに小数点の位置

合わせのためのシフト(shift,桁移動)が必要になる。シフトはプログラマがプログラムし

てやらなくてはならない。

 〔 2〕 浮動小数点による表現  符号,数値,桁数をそれぞれ決められたビット数で表現

する。

 ふつう,演算のために特別な回路を用意する。そうすれば,演算に際して,プログラムに

よる補正は不要となる。

 図 1 .4に,32 ビットで有効数字 23 桁,2 進数で±127 桁を浮動小数点によって表現した

ものを示す。

 固定小数点・浮動小数点のどちらをとるにしても,有効桁数以上の精度で実数を表現する

ことはできないため,これを超える数については近似値で表す。近似によって生じる誤差に

ついては,プログラムを作るときに十分に神経を使わなければならない。

図 1 .3  2 の補数による負の数の表現

図 1 .4  32 ビットの浮動小数点による実数の表現

コロ

ナ社

Page 13: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

4   1 . は じ め に 

1 .2 組合せ論理回路=計算の実現

 1ビットのデータ,あるいは nビットのデータを足したり引いたりして,計算することを

考える。計算は論理式で表現され,組合せ論理回路として実現される。

1 .2 .1 計算とは何か

 計算とは,1個以上のデータから新たなデータを作ることである。コンピュータではすべ

てのデータは 2進数で表されるから,これは,1個以上の 2進数から,新たに 1個以上の 2

進数を作る関数を定義することになる。こうした関数を論理関数(logic function)といい,

論理関数を実現する回路のことを組合せ論理回路(combinatorial logic circuit),または組合

せ回路(combinatorial circuit)という。

図 1 .5 代表的な組合せ論理回路の基本素子

コロ

ナ社

Page 14: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

 1 .2 組合せ論理回路=計算の実現   5

 組合せ論理回路の設計の一般論は,論理回路の教科書にゆずるが,ここではつぎの 2点だ

けを確認しておく。

① すべての組合せ論理回路は,数種類の基本素子を用いて作ることができる。

②  組合せ論理回路は,一定の手順によって簡単化できる。ここで簡単化とは,回路

規模を小さくし,遅延を短くすることをいう。

 図 1 .5に代表的な組合せ論理回路の基本素子を示す。図で,W,X,Yが入力であり,Z

が出力である。素子の図の右に記した表は,与えられた入力に対する出力の値を示したもの

で,真理値表(truth table)と呼ばれる。各素子は数個のトランジスタを組み合わせた簡単

な電子回路として作ることができる。

1 .2 .2 1ビットの加算

 加算はすべての演算の基本である。図 1 .6に 1ビットの加算を行う回路を示す†。図( a)

は下位の桁からの桁上がり(carry in,図では Cin)がない場合,図( b)は下位の桁からの

桁上がりがある場合である。

 1 ビットの加算の回路は,入力 X,Y(と Cin)を足し合わせて,和 Sと桁上がり出力

Coutを得るものである。

 † 図で小さな白丸は NOTを表す。

図 1 .6 1ビットの加算を行う回路

コロ

ナ社

Page 15: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

あ と が き

 これは,「コンピュータを作る」本である。1本の線から始めて,32 ビットのマイクロプ

ロセッサまでをすべて自力で設計し,実際に FPGAの上にこれを実装する。読者=実践者

の皆さんは,1からコンピュータを作るおもしろさや難しさを味わわれたことだろう。特に

基本プロセッサが動作した瞬間には快哉をあげられたことではないかと思う。

 この先に,パイプライン処理,スーパスカラや VLIWなどの並列処理,投機処理,マルチ

コア,ベクトルパイプラインなどのより進んだコンピュータの設計がある。私の研究室で

は,こうしたプロセッサの設計・ FPGAによる実装を行っているので,これら進んだ技術の

実現についても,いずれ新しい本を書くことになるかもしれない。

 ここまで進まれた読者の皆さんの努力に敬意を表するとともに,コンパイラや OSの技術

についても同じように身に付けていただくことを希望する。

 コンピュータの技術,特に基本的なアーキテクチャやソフトウェアの技術は,もうほとん

どが出尽くされたという人もいる。私はそれは違うと思う。並列処理やキャッシュなどの技

術は 20 年前に比べて確かに深く成熟した感もあるが,省電力や高い安全性・信頼性の支援

といった 21 世紀の情報化社会に最も重要なテーマは,広々と私たちの前に横たわっている。

この本を読まれた皆さんの中から,次代をリードする優れたコンピュータアーキテクトが登

場することを,著者として心から楽しみにしている。コロ

ナ社

Page 16: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

索     引

【あ】アウトオブオーダ処理 129アセンブリ言語 67アドレシング 72アドレス 54アドレス線 55

【う】ウィンドウ 15

【え】エッジトリガ 9

【お】オペランド 65

【か】解 釈 59回路ライブラリ 30返り値 75書込み 54, 60仮想記憶 129型 26

【き】記憶装置 9機能シミュレーション 13基本素子 28キャッシュ 129

【く】組合せ回路 4組合せ論理回路 4クロック 10, 85

【け】計 算 54桁上がり 5桁移動 3結果の格納 60

【こ】語 2, 55

語 長 2固定小数点 3コメント 37コーラセーブ方式 75コーリセーブ方式 75コール 74コンピュータ 1

【さ】最下位のバイト 73最上位のバイト 73サーバ 2サブルーチン 46, 74算術論理演算命令 58, 68算術論理ユニット 73 状態素子 29

【し】しきい値 1シーケンサ 61システムタスク 47実 行 60シフト 3シミュレーション 14シミュレーション用モジュール

44ジャンプ命令 62主記憶装置 53出力ポート 24順序回路 8条件演算 32条件分岐 34条件分岐命令 62, 71真理値表 5

【す】スイッチ 117図式入力 15スタック 76スタックポインタ 76ストア命令 69

【せ】制御線 55

セ ル 55ゼロレジスタ 74宣言部 24

【そ】操 作 65 ―の対象 65操作コード 58, 65双方向ポート 24即 値 65即値アドレシング 73ソースオペランド 65

【た】タイミング解析 14ダウンロード 126タスク 46

【ち】遅 延 45置数器 10

【て】ディジタル 1ディジタルコンピュータ 1定 数 27デコーダ 55デコード 59デザイン入力 13デスティネーションオペランド

65テストパターン 42データ 1データ線 55データメモリ 59

【と】同期式カウンタ 18特権命令 129

【な】7 SEGディスプレイ 137, 138

コロ

ナ社

Page 17: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

 索 引   155

【に】2 の補数 2入出力ポート 24入力ポート 24

【ね】ネット型 26ネット宣言 24ネットリスト 13

【の】ノンブロッキング代入文 36

【は】配置配線 14パイプライン 129ハードウェア記述言語 13, 15パラメータ宣言 25半加算器 15番 地 54

【ひ】引き数 75ビッグエンディアン 73ビット 1ピンプランナー 125

【ふ】ファイル記述子 48フィールド 58, 65プッシュ 76浮動小数点 3ブランチ命令 62プリチャージ 56フリップフロップ 9プログラム 58プログラムカウンタ 61プログラム格納型コンピュータ

62

プロジェクト 37ブロッキング代入文 36分岐命令 58, 68

【へ】ベース相対アドレシング 73

【ほ】補 数 2ポップ 76ポート 56ポート宣言 24

【ま】マイクロプロセッサ 2

【む】無条件分岐命令 62, 71

【め】命 令 58命令形式 65命令語 58, 65命令デコーダ 59命令デコード 60命令フェッチ 59, 60命令メモリ 59命令レジスタ 59命令レベル並列処理 129メガファンクション 125メモリ 9メモリ操作命令 58, 68

【も】モジュール 23モジュール識別子 23モジュール分割 83

【ゆ】優先順位 32

ユニット 43

【よ】読出し 54, 60予約語 25

【ら】ライト 55

【り】リセット 85リダクション演算 31リターン 74リード 54リード /ライト選択信号 55リトルエンディアン 73リフレッシュ 56

【る】ルックアップテーブル 117

【れ】レジスタ 10レジスタアドレシング 73レジスタ型 26レジスタ宣言 24レジスタファイル 56連接演算 32

【ろ】ロード 96ロード命令 69論理関数 4論理合成 13論理値 26論理ブロック 117

【わ】ワード 55

【A】A型 66abs 68add 68addi 68address 54addressing 72ALU 7always文    35

and 68andi 68argument 75arithmetic logic unit 7assembly language 67assign文    33assign statement 33

【B】beq 72

big endian 73bit 1ble 72blocking assignment 36blt 72bne 72

【C】CAD 13calculation 54

コロ

ナ社

Page 18: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

156   索 引 

callee save method 75caller save method 75carry in 5case文 34central processing unit 2clock 10combinatorial circuit 4combinatorial logic circuit 4complement 2computer 1computer aided design 13CPU 2

【D】data 1data memory 59decode 59decoder 55design entry 13destination operand 65digital 1digital computer 1div 68divi 68DRAM 56dynamic RAM 56

【E】edge trigger 10eq 68eqi 68

【F】fabs 68fadd 68fdiv 68field 58, 65field programmable gate array

14file descriptor 48flip flop 9fmul 68for文 46forever文 46FPGA 14, 117fsub 68function 33functional simulation 13

【H】hardware description language

13HDL 13

【 I】I 型 66if文 34immediate 65initial文 45inout 24input 24instruction 58instruction decoder 59instruction fetch 59instruction format 65instruction memory 59instruction register 59instruction word 58, 65integer型 46

【J】j 71jal 71jr 71

【L】last in first out 76layout 14lb 70LB 117ld 70least significant byte 74LED 137lh 70LIFO 76little endian 73load 96load instruction 69logic block 117logic function 4logic value 26look up table 117LSB 74LUT 117lw 70

【M】main memory 53memory 9

microprocessor 2MIL記法 13module identifier 23most significant byte 73MSB 73mul 68muli 68

【N】nand 68nandi 68netlist 13non-blocking assignment 36nor 68nori 68not 68

【O】operand 65operation 65operation code 58, 65or 68ori 68output 24

【P】PC相対アドレシング 73Perl言語 79pin planner 125pop 76port 56primitive gate 28program 58program counter 61push 76

【R】R型 66RAM 56rambus DRAM 56random access memory 56RDRAM 56read 54read only memory 56register 10register file 56rem 68remi 68repeat文 46reserved word 25return value 75

コロ

ナ社

Page 19: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

 索 引   157

ROM 56

【S】sb 70schematic entry 15sd 70SDRAM 56sequencer 61sequential circuit 8server 2sh 70shift 3simulation 14sla 68sll 68source operand 65sp 76sra 68SRAM 56srl 68stack 76stack pointer 76static RAM 56stored program computer 62store instruction 69sub 68subi 68subroutine 46, 74sw 70SW 117SWitch 117synchronous DRAM 56synthesis 13system task 47

【T】task 46threshold 1timing analysis 14tri-state gate 29truth table 52ʼs complement 2

【U】unit 43

【V】von Neumann computer 62

【W】while文 46window 15word 2, 55word length 2write 54

【X】xor 68xori 68

【Z】zero register 74

<= 31>= 31+ 31- 31?: 31* 31< 31

% 31/ 31> 31<< 31== 31!= 31>> 31&(リダクション演算子) 31~ & 31~| 31|(リダクション演算子) 31~^(リダクション演算子) 31^(リダクション演算子) 31{, } 31&& 31! 31|| 31&(ビット演算子) 31$display 47$fclose 47$fdisplay 47$fmonitor 47$fopen 47$fwrite 47$monitor 47~ 31|(ビット演算子) 31$readmemb 47$readmemh 47$stime 47$time 47$write 47$writememb 47$writememh 47~^(ビット演算子) 31^(ビット演算子) 31コ

ロナ

Page 20: 実践 コンピュータアーキテクチャ (改訂版)...ivyyy èÍ y . yHDL Ö t RC +w -¢ £ 18 . y q s Ïw - 18 . . y $Ü Ö t Ï¿Ä 8Ü ¢ï»w - 18 . . yHDL Ö t Ï¿Ä

実践 コンピュータアーキテクチャ(改訂版)Computer Architecture:Principles and Practices(Revised Edition) Ⓒ Shuichi Sakai 2009 

2009 年 4 月 30 日 初版第 1刷発行2020 年 4 月 30 日 初版第 3刷発行(改訂版)

検印省略著  者 坂

さか

   井い

   修しゅう

   一いち

発 行 者 株式会社  コ ロ ナ 社 代 表 者  牛 来 真 也印 刷 所 萩 原 印 刷 株 式 会 社製 本 所 有限会社  愛千製本所

112⊖0011 東京都文京区千石 4⊖46⊖10発 行 所 株式会社 コ ロ ナ 社

CORONA PUBLISHING CO., LTD.Tokyo Japan

振替 00140⊖8⊖14844・電話(03)3941⊖3131(代)ホームページ https://www.coronasha.co.jp

 ISBN 978⊖4⊖339⊖02906⊖2 C3055 Printed in Japan (横尾)  <出版者著作権管理機構 委託出版物>

本書の無断複製は著作権法上での例外を除き禁じられています。複製される場合は,そのつど事前に,出版者著作権管理機構(電話 03-5244-5088,FAX 03-5244-5089,e-mail: [email protected])の許諾を得てください。

本書のコピー,スキャン,デジタル化等の無断複製・転載は著作権法上での例外を除き禁じられています。購入者以外の第三者による本書の電子データ化及び電子書籍化は,いかなる場合も認めていません。落丁・乱丁はお取替えいたします。

1981 年 東京大学理学部情報科学科卒業1986 年 �東京大学大学院工学系研究科専門課程修了(情報工学)

工学博士1986 年 通商産業省工業技術院電子技術総合研究所入所1996 年 筑波大学助教授1998 年 東京大学助教授2001 年 東京大学教授    �現在に至る

――著 者 略 歴――

コロ

ナ社