独自CPU開発で学ぶ コンピュータのしくみ

独自CPU開発で学ぶ コンピュータのしくみ
著者 伊藤剛浩
川田裕貴
ジャンル IT系書籍 > ハードウェア
書店発売日 2016/03/11
ISBN 9784798045368
判型・ページ数 B5変・440ページ
定価 3520円
(本体3200円+税10%)
在庫 品切れ・重版未定

この本に関するお問い合わせ・感想

OSをサポートできる、アウトオブオーダ実行に最適化したオレオレコンピュータを作りたい! そんな夢を2人の学生がかなえました。本書は、全く新たなCPUとコンピュータシステムそのものを開発・提供することを目的としたプロジェクト「Open Design Computer Project」の成果を、開発に携わった学生2人がまとめたテキストです。独自アーキテクチャのCPUをFPGA上に実装し、そのCPUのためのgccとbinutilsの移植方法について解説します。

【サポートはこちら】https://www.shuwasystem.co.jp/support/7980html/4536.html
ハードウェア編
1 CPUを自作するということ
2 開発環境を整えるということ
2.1 オリジナルCPUでソフトウェアを動かすためには
2.2 コンパイラとアセンブラの自作?
3 オープンソース・オープンハードウェア
4 本書の狙い
5 本書で扱う決まり事について
5.1 ハードウェア開発の環境と開発ツール
5.2 ハードウェア開発で使用するファイルのダウンロード
5.3 アセンブリ言語のフォーマットについて
5.4 ソフトウェア開発の環境と開発ツール
6 CPUの役割と動作原理
6.1 CPUの役割
6.2 IOの種類
6.3 超単純なCPUコア
6. 3.1 Register File
6. 3.2 PC
6. 3.3 ALU
6. 3.4 Flag Register
6. 3.5 Memory Access
6. 3.6 Writeback
6. 3.7 データの計算
6. 3.8 メモリ・外部デバイスへのLoad/Store
6. 3.9 分岐命令の実現
6. 3.10 条件分岐命令の実現
6.4 割り込みの対応
6. 4.1 割り込みについて
6. 4.2 コアに対する例外について
6. 4.3 割り込みに対応させたCPUコア
6. 4.4 分岐時の挙動
6. 4.5 割り込みのための準備
6. 4.6 割り込み時の挙動
6. 4.7 割り込みと分岐が同時に起きた場合の挙動
6. 4.8 割り込みからの復帰
6.5 命令表記のしかた
6.6 少し複雑な命令表記のしかた
6. 6.1 ディスプレイスメント付き命令
6. 6.2 コンディションコード付き命令
6.7 メモリと命令・データの配置
6.8 高速化の技術
6. 8.1 パイプライン化
6. 8.2 パイプラインフォワーディング
6. 8.3 分岐予測と分岐先予測
6. 8.4 命令・データキャッシュ
6. 8.5 スーパースカラ
6. 8.6 レジスタリネーミング・アウトオブオーダ実行
7 FPGA開発の基礎知識
7.1 回路記述の心得
7.2 組み合わせ回路
7.3 順序回路
7.4 同期回路
7.5 非同期回路
7.6 組み合わせ回路のサイズに要注意
7.7 ブロック図の設計
8 Verilog HDL入門
8.1 基本文法
8. 1.1 モジュール・ポート宣言
8. 1.2 パラメータ宣言
8. 1.3 ワイヤ・レジスタ宣言
8. 1.4 メモリ宣言
8. 1.5 組み合わせ回路
8. 1.6 always文の組み合わせ回路
8. 1.7 always文の順序回路
8. 1.8 function文
8. 1.9 連接演算子とビット抽出
8. 1.10 下位モジュールの接続
8.2 記述スタイル
8. 2.1 ファイルとモジュール定義
8. 2.2 always文の記述
8. 2.3 wire/reg宣言
8. 2.4 下位モジュール接続
8. 2.5 default_nettypeを設定する
9 RTLシミュレーション
9.1 テストベンチ
9.2 4bit加算回路のシミュレーション
9. 2.1 ModelSimのバッチファイル
9. 2.2 シミュレーションの開始
9. 2.3 波形の観測
10 FPGAボードの紹介
10.1 Terasic DE0-CV
10. 1.1 搭載デバイス
10.2 Terasic DE2-115
10. 2.1 搭載デバイス
11 論理合成と実機動作
11.1 プロジェクトの製作
11.2 FPGAのピンとVerilogのポートの対応付け
11.3 タイミング制約の追加
11. 3.1 クロックの制約
11. 3.2 入力ポートの制約
11. 3.3 出力ポートの制約
11. 3.4 タイミング制約の書き出しと設定
11.4 FPGAへ書き込み
11. 4.1 JTAGでの書き込み
11. 4.2 ASでの書き込み
11.5 IPの使用
12 MIST32アーキテクチャ
12.1 MIST32の特徴的な仕組み
12. 1.1 フラグの取り扱いと分岐の実現
12. 1.2 多倍長演算の実現
12.2 コンディションコード
12.3 レジスタ
12. 3.1 GR
12. 3.2 FLAGR
12. 3.3 PCR
12. 3.4 SPR
12. 3.5 PSR
12. 3.6 IDTR
12. 3.7 FI0R
12. 3.8 FRCR
12. 3.9 FRCLR
12. 3.10 FRCHR
12. 3.11 PFLAGR
12. 3.12 PPCR
12. 3.13 PPSR
12.4 メモリアクセス
12. 4.1 エンディアン
12. 4.2 メモリアクセスアライメント
12.5 命令フォーマット
12.6 命令一覧
12.7 割り込み
12. 7.1 割り込み番号
12. 7.2 割り込みディスクリプタ
12. 7.3 割り込みの手順
12.8 ソフトウェアに対する定義
12. 8.1 呼び出し規約
12. 8.2 分岐命令のスタイル
13 MIST32E10FA
13.1 パイプラインの詳細
13.2 ファイルの説明
13.3 信号名の規則
14 命令が実行される過程を確かめる ― MULL命令
14.1 MULL命令について
14.2 Fetchステージ
14.3 Decoderステージ
14.4 Instruction Bufferステージ
14.5 Allocateステージ
14.6 Executeステージ
14.7 Writebackステージ
15 命令が実行される過程を確かめる ― SRPSW命令
15.1 Decoderステージ
15.2 Executeステージ
15.3 Writebackステージ
16 命令が実行される過程を確かめる ― PUSH命令
16.1 Decoderステージ
16.2 Allocateステージ
16.3 Executeステージ
17 命令が実行される過程を確かめる ― B命令
17.1 分岐命令について
17.2 Decoderステージ
17.3 Allocateステージ
17.4 Executeステージ
17.5 Pipeline Control
18 命令が実行される過程を確かめる ― IDTS命令
18.1 Decoderステージ
18.2 Executeステージ
18.3 Pipeline Control
18.4 Interrupt Control
19 命令が実行される過程を確かめる ― 割り込み
19.1 Interrupt Control
19.2 Pipeline Control
19. 2.1 L_PARAM_IRQ_CALLの条件
19. 2.2 L_PARAM_ALU_JUMP_IRQ_CALLの条件
20 命令が実行される過程を確かめる ― 割り込みからの復帰(IB命令)
20.1 Decoderステージ
20.2 Executeステージ
20.3 Pipeline Control
21 実装の詳細について
21.1 インターロック付パイプラインの実装方法
21.2 コアパイプラインの実装
21.3 IBステージ(instruction_buffer.sv)
21.4 IDステージ(decoder.sv)
21.5 コアパラメータ定義ファイル(core.h)
21.6 IFステージ(fetch.sv)
21.7 ALステージ(allocate.sv)
21.8 EXステージ(execute.sv)
21. 8.1 Integer/Logic/Shift命令
21. 8.2 Load/Store命令
21. 8.3 Branch命令
21.9 パイプラインコントロール(pipeline_contro.sv)
21. 9.1 分岐命令実行時(EXステージからの信号)
21. 9.2 IDTS命令の実行時(EXステージからの信号)
21. 9.3 割り込みの開始(割り込みコントローラからの信号)
21. 9.4 割り込みと分岐命令の同時実行(割り込みコントローラ/EXステージからの信号)
21. 9.5 割り込みからの復帰(EXステージからの信号)
21.10 コアパイプラインモジュール(core_pipeline.sv)
21.11 分岐予測と分岐先予測について
22 CPUの検証
22.1 モジュールごとの機能テスト
22.2 基本機能のテスト
22.3 命令レベル検証
22.4 ファンクションレベル検証
22.5 システムレベル検証
23 疑似乱数命令の追加
23.1 追加命令について
23.2 変更箇所
23. 2.1 core.h
23. 2.2 decode_function.sv
23. 2.3 execute_mul.sv
23.3 シミュレーション
24 コンピュータシステムの実装について
24.1 MIST32 Type-E Reference System1
24. 1.1 階層について
24. 1.2 外部デバイス
24. 1.3 搭載メモリ
24. 1.4 外部デバイスの割り込み
24. 1.5 アドレスマップ
24. 1.6 外部デバイスバス
24.2 起動シーケンス
コンピュータシステムの論理合成と使用方法
25.1 論理合成
25.2 プログラムの書き込み
25.3 使用方法
周辺デバイスの開発
参考文献

ソフトウェア編
27 オリジナルCPUでソフトウェアを動かすためには
27.1 コンパイラとアセンブラ
27.2 GNU Compiler CollectionとGNU Binutils
27. 2.1 GNU Compiler Collection(GCC)を選択した理由
27. 2.2 GNU Binutilsを選択した理由
27. 2.3 その他、GCCとBinutilsでできること
27.3 その他に用意するべきツール
27. 3.1 シミュレータ・エミュレータ・デバッガ
27. 3.2 標準ライブラリやOSなど
27. 3.3 ファームウェア(BIOS)
28 GNU Binutilsの移植
28.1 Binutilsの入手
28. 1.1 Webサイトから入手
28. 1.2 Gitリポジトリから入手
28. 1.3 開発ブランチの選択と作成
28.2 Binutilsをコンパイル
28. 2.1 コンパイル前の準備
28. 2.2 configure && make
28. 2.3 コンパイルしたBinutilsの動作確認
28.3 MIST32向けBinutilsの整備
28. 3.1 MIST32向けBinutilsの入手
28. 3.2 MIST32向けBinutilsリポジトリの登録と取り込み
28. 3.3 MIST32向けBinutilsのコンパイル
28.4 Binutilsの構成
28. 4.1 Binutilsの構成要素
28. 4.2 Binary File Descriptor(BFD)ライブラリ
28. 4.3 CGENとは
28. 4.4 MIST32向けターゲット移植の差分
28.5 BFDライブラリとELF
28. 5.1 ELF:Executable and Linkable Format
28. 5.2 セクションとシンボル
28. 5.3 ldを利用したリンク
28. 5.4 リロケーション(再配置)
28. 5.5 リンカスクリプト
28.6 CGENとCPU定義ファイル
28. 6.1 CGENの入手
28. 6.2 CGENによるopcodesライブラリの生成
28. 6.3 CPU定義ファイル (.cpu ファイル)
28. 6.4 .opcファイルについて
28.7 BFDライブラリの移植
28. 7.1 アーキテクチャ情報の追加
28. 7.2 リロケーション情報の追加
28. 7.3 複雑なリロケーション
28. 7.4 リロケーションの対応付け
28. 7.5 その他
28.8 GASの移植
28. 8.1 tc-mist32.cの基本的な構成
28. 8.2 オペランドとリロケーションの対応付け
28.9 その他の追加コード
29 GNU Compiler Collection(GCC)の移植
29.1 GCCの入手
29. 1.1 Webサイトから入手
29. 1.2 Gitリポジトリから入手
29. 1.3 開発ブランチの選択と作成
29.2 GCCをコンパイル
29. 2.1 コンパイル前の準備
29. 2.2 configure && make
29. 2.3 コンパイルしたGCCの動作確認
29.3 MIST32向けGCCの整備
29. 3.1 MIST32向けGCCの入手
29. 3.2 MIST32向けGCCリポジトリの登録と取り込み
29. 3.3 MIST32 向けGCC のコンパイル
29.4 GCCの内部処理の流れ
29. 4.1 Cコンパイル時の処理の流れ
29. 4.2 GCCのオプションによる違い
29. 4.3 cc1内部の処理の流れ
29. 4.4 GENERICとGIMPLE:フロントエンドの中間表現
29. 4.5 RTL:バックエンドの中間表現
29.5 GCCの構成
29. 5.1 GCCの構成要素
29. 5.2 MIST32ターゲット移植実装の差分
29. 5.3 configureとMakefile関連のファイル
29. 5.4 Machine Description
29. 5.5 Target Hooks and Macros
29. 5.6 libgcc関連のファイル
29.6 Machine Description
29. 6.1 Machine Descriptionのファイル構成
29. 6.2 define_insn
29. 6.3 define_expand
29. 6.4 define_split
29. 6.5 条件付きブランチ命令
29. 6.6 関数呼び出し命令
29. 6.7 RTLテンプレートを記述するためのコツ
29. 6.8 Predicatesの定義
29. 6.9 Constraintsの定義
29. 6.10 Pipline Description
29.7 Target Description Macros and Functions
29. 7.1 gcc/config/mist32.h
29. 7.2 gcc/config/mist32.c
29.8 GCCのデバッグとtestsuite
29. 8.1 RTL生成時のエラー
29. 8.2 testsuite
30 ソフトウェア開発
30. 0.1 サンプルコード
30.1 MIST32シミュレータ
30. 1.1 MIST32シミュレータの入手
30. 1.2 MIST32シミュレータのコンパイル
30. 1.3 MIST32シミュレータの使い方
30.2 簡単そうに見えるHello world
30. 2.1 puts相当の関数を作る
30. 2.2 Hello worldを実行してみる
30.3 テトリス
30. 3.1 DISPLAYモジュールの利用
30. 3.2 KEYBOARDモジュールの利用
30. 3.3 ディスプレイとキーボードのテスト
30. 3.4 テトリスの作り方
30. 3.5 テトリスを動かす
30.4 画像スライドショー
30. 4.1 SDモジュール
30. 4.2 割り込み
30. 4.3 画像フォーマットとSDイメージの生成
30. 4.4 動作例
30.5 さいごに

Appendix
A.1 Quartus PrimeとModelSimのダウンロードとインストール
A.2 Cygwinのダウンロードとインストール

ご注文

シェアする

このエントリーをはてなブックマークに追加

関連書籍

同じジャンルの商品

お知らせ

一覧