動かしてわかるCPUの作り方10講


動かしてわかる CPUの作り方10講


技術評論社


著者:井澤裕司


はじめに

第I部 シンプルなCPUを作ってみよう!
第1講 ソフトウェアからCPUの動作をイメージする
1.1 コンピュータの中はどのようになっているか?
1.2 CPUの設計手法
1.2.1 設計のトップダウン手法とボトムアップ手法
1.2.2 ソフトウェアからCPUの動作をイメージする
1.3 プログラムの開発環境
1.4 CPUの基本構成
1.4.1 簡単な演算のプログラム
1.4.2 より一般的なプログラムの例
1.4.3 CPUの基本構成
1.5 機械語とアセンブリ言語
1.6 アセンブリ言語x86の書式について
1.7 本書の構成について

第2講 シンプルなCPUのアーキテクチャを決定する
2.1 設計するCPUの特徴
2.2 命令セットの定義
2.3 命令コードとオペランド
2.4 1+2+・・・+10の計算例

第3講 C言語を用いてCPUの動作をエミュレートする
3.1 CPUエミュレータの構成
3.1.1 簡略型アセンブラによる機械語の生成
3.1.2 機械語の解読と実行
3.2 C言語によるCPUエミュレータ
3.2.1 CPUエミュレータのソースコード
3.2.2 ソースコードの補足説明
3.2.3 実行結果

第4講 論理回路の基礎を復習する
4.1 論理回路とは
4.1.1 論理回路の動作を関数で表す
4.1.2 出発点は真理値表
4.2 基本となる論理関数
4.2.1 1入力の論理関数
4.2.2 2入力の論理関数
4.2.3 3入力の論理関数
4.2.4 入力数が4以上のとき
4.3 有用な論理式表現
4.3.1 論理式は1通りではない
4.3.2 変形規則をまとめたブール代数
4.3.3 カルノー図を使って最も簡単な論理式を求める
4.4 組合せ回路の例
4.4.1 組合せ回路とは
4.4.2 エンコーダでデコーダ
4.4.3 7セグメントLED用デコーダ回路
4.4.4 加算回路
4.5 順序回路の例
4.5.1 順序回路とは
4.5.2 状態図と遷移表
4.5.3 フリップフロップ回路(FF)
4.5.4 順序回路の設計手順
4.5.5 D-FFを用いた設計事例(4ビット16進カウンタ)

第5講 ハードウェア記述言語のVHDLを用いて回路を表現する
5.1 ハードウェア記述言語とは
5.1.1 ハードウェア記述言語の例
5.1.2 代表的なハードウェア記述言語
5.1.3 HDLの特徴
5.2 VHDLにようる回路記述
5.2.1 回路本体の雛形
5.2.2 簡単な論理回路のVHDL
5.2.3 回路の階層化
5.3 組合せ回路の設計
5.3.1 半加算器(Half Adder)
5.3.2 全加算器(Full Adder)
5.3.3 4bit加算回路
5.3.4 ライブラリを用いた4bit加算回路
5.3.5 7セグメントデコード回路
5.4 順序回路の設計
5.4.1 Dフリップフロップ
5.4.2 Dフリップフロップを使用した10進周期カウンタ
5.4.3 パラメタライズによる汎用化

第6講 FPGA評価ボード上で簡単な回路を動作させる
6.1 FPGAとは?
6.1.1 FPGAのベンダーと開発用EDAツール
6.1.2 FPGA評価ボードDEOの仕様
6.1.3 FPGAシリーズと開発用EDAツール
6.2 大まかな開発の流れ
6.3 FPGA評価ボードによる回路の動作検証
6.3.1 FPGA評価ボードで使用するスイッチとLED
6.3.2 簡単な論理回路(and_or.vhd)
6.3.3 4ビット加算回路(adder_4bit_lib.vhd)
6.3.4 7セグメントデコード回路(dec_7seg.vhd)
6.4 RTLシミュレーション用テストベンチ
6.4.1 テストベンチの雛形について
6.4.2 簡単な回路のRTLシミュレーション
6.4.3 7セグメントデコード回路のRTLシミュレーション
6.4.4 10進数同期カウンタ回路のRTLシミュレーション

第7講 VHDLを用いてCPUを設計する
7.1 CPUの基本動作
7.1.1 CPUのステージ構成
7.1.2 CPUの全体構成
7.1.3 主信号のタイムチャート
7.1.4 各ステージの動作
7.1.5 フェッチステージ
7.1.6 デコードステージ
7.1.7 実行ステージ
7.1.8 ライトバックステージ
7.2 ブロック分割と各コンポーネントの仕様
7.3 CPUシミュレータのVHDLへの移植
7.4 CPU本体の設計(cpu15)
7.5 各コンポーネントの設計
7.5.1 clk_gen(4相クロックの生成)
7.5.2 fetch(PROMからの機械語の読み出し)
7.5.3 decode(命令コード等のラッチ)
7.5.4 reg_dc(レジスタの読み出し)
7.5.5 ram_dc(RAMの読み出し)
7.5.6 exec(ALU等を用いた実行)
7.5.7 reg_wb(レジスタへの書き込み)
7.5.8 ram_wb(RAMへの書き込み)
7.6 RTLシミュレーションによる動作検証
7.6.1 RTLシミュレーション用テストベンチの作成
7.6.2 RTLシミュレーション(テストベンチ)の実行結果

第8講 FPGA評価ボード上でCPUを動作させる
8.1 CPU単体のFPGA評価ボードへの実装
8.1.1 入出力の設定
8.1.2 入出力ピンの割り当て
8.1.3 FPGA評価ボード上でのCPU単体の実行結果
8.2 計算結果を10進数で表示する(cpu_dec)
8.2.1 全体構成(cpu_dec.vhd)
8.2.2 2進-10進変換のフローチャート
8.2.3 2進-10進変換回路のソースコード
8.2.4 10進表示機能を付加したCPUのソースコード
8.2.5 入出力ピンの割り当て
8.2.6 FPGA評価ボードへの実装
8.2.7 実行結果
8.3 計算の経過を10進数で表示する(cpu15_dec_show)
8.3.1 低速動作用バイナリカウンタの設計
8.3.2 計算結果を表示する低速動作CPUソースコード
8.3.3 実行結果
8.4 計算の上限値を入力スイッチで指定する
8.4.1 プログラムの修正(cpu_dec_slow改)
8.4.2 実行結果

第II部 より実用的なCPUを目指して!
第9講 プログラムを独立化しメモリを実装する
9.1 第I部で設計したCPUの問題点
9.1.1 ROM(プログラム)の記述について
9.1.2 RAMの記述方法について
9.1.3 RAMの構成法について
9.2 ROMメモリブロックの設計
9.2.1 ROMメモリブロックの初期データ
9.2.2 ROMメモリブロックの自動生成
9.2.3 ROMメモリブロックの記述例
9.2.4 ROMメモリブロックのRTLシミュレーション
9.2.5 ROMメモリブロックのタイミング・シミュレーション
9.3 配列表現を用いたRAMの設計
9.3.1 配列表現を用いたRAMの動作
9.3.2 配列表現を用いたRAMのRTLシミュレーション
9.4 第1修正版CPUの設計(cpu1_rom_ram)
9.4.1 全体構成(cpu15_rom_ram.vhd)
9.4.2 第1修正版CPUの全体設計
9.4.3 第1修正版CPUの評価
9.5 RAMメモリブロックの導入
9.5.1 RAMメモリブロックの生成
9.5.2 RAMメモリブロックの記述例(ram_1port.vhd)
9.5.3 RAMメモリブロックのRTLシミュレーション(ram_1port_sim.vhd)
9.6 第2修正版CPUの設計(cpu15_mega_ram)
9.6.1 第2修正版CPUのタイミング設計
9.6.2 RAMメモリブロックを用いたmega_ramコンポーネントの設計
9.6.3 mega_ramコンポーネントのRTLシミュレーション
9.7 第2修正版CPUの構成
9.7.1 全体構成(cpu15_mega_ram.vhd)
9.7.2 第2修正版CPUの設計
9.7.3 第2修正版CPUの評価

第10講 パイプライン処理により高速化する
10.1 パイプライン処理とは?
10.2 パイプライン・ハザードの原因とその対策
10.2.1 パイプライン・ハザードとは?
10.2.2 jump命令による分岐ハザード
10.2.3 データの因果関係に起因するデータ・ハザード
10.2.4 リソース競合による構造ハザード
10.2.5 パイプライン・ハザードの回避方法
10.3 パイプライン処理の構成法
10.3.1 命令セットの修正
10.3.2 プログラムの修正によるデータ・ハザードの回避
10.3.3 RAMの実装方法について
10.3.4 タイミング系の修正
10.3.5 全体構成
10.4 パイプライン処理CPUの設計(cpu15_pipeline)
10.4.1 n_reg__exコンポーネント
10.4.2 exec2コンポーネント
10.4.3 ram_dc_wb2コンポーネント
10.4.4 mega_ram2コンポーネント(参考)
10.4.5 CPU本体の設計(cpu15_pipeline.vhd)
10.5 次のステップを目指して
10.5.1 割り込み機能の実装
10.5.2 命令数およびメモリサイズの拡張
10.5.3 プログラム開発環境の整備
10.6 最後に-FPGAの特性を生かした応用について-

演習問題
演習問題解答例

付録1 C言語の開発環境について
1.1 Visual Studio Communityのインストール
1.2 Visual Studio Community 2019の使用法
1.2.1 プロジェクトの生成
1.2.2 ソースファイルの生成
1.2.3 ソースコードの記述
1.2.4 コンパイル
1.2.5 実行

付録2 FPGAの開発環境について
2.1 Quartus Prime(18.1)のインストール
2.2 Quartus Primeの使用法
2.2.1 新規プロジェクトの生成
2.2.2 VHDLコードの記述
2.2.3 VHDLコードの保存
2.2.4 プロジェクトへの追加
2.2.5 コンパイル
2.2.6 FPGAのピン配置
2.2.7 再コンパイル
2.2.8 FPGAへの書き込み

参考文献
索引

書籍目次

Posted by shi-n