書籍概要

【改訂2版】FPGAボードで学ぶ 組込みシステム開発入門
[Intel FPGA編]

著者
発売日
更新日

概要

Terasic社の学習/評価用ボード,DE0-CV / DE10-Lite / DE1-SoCを題材にしたFPGAの解説書です。前版[Altera編]をベースに,最新の開発ソフトウェア・FPGAボードに更新しただけでなく,μClinux環境の構築に変えてCMOSカメラの制御を取り上げるなど,より現代的な使い方に即した内容にしています。紹介しているFPGAボードを使うと,半田付けの必要もなく電源もUSBから取ることができるので,すぐに学習をはじめられます。本書で解説している技術やノウハウは実際の設計現場でも役立つので,初心者FPGAエンジニア向けのハンドブックとしてもお使いいただけます。

こんな方におすすめ

  • 初心者FPGAエンジニア

サンプル

samplesamplesample

目次

第1章 FPGAの内部といろいろなFPGAボード

1-1 FPGAとは

  • 1-1-1 論理回路とは
  • 1-1-2 論理回路の実現方法
  • 1-1-3 HDLによる論理回路の表現
  • 1-1-4 FPGA内部の基本構造
  • 1-1-5 回路情報をFPGAに書き込むことで動作する
  • 1-1-6 本書で用いたFPGAの規模
  • 1-1-7 内蔵メモリの構成

1-2 各種FPGAボードの紹介

  • 1-2-1 入手しやすくなったFPGAボード
  • 1-2-2 かつては雑誌の付録にもなったFPGAボード
  • 1-2-3 学習に適したFPGAボードの条件
  • 1-2-4 FPGAボードの比較

1-3 回路情報のダウンロード

  • 1-3-1 コンフィグレーション方法
  • 1-3-2 USB-Blasterは多機能だけど高価

1-4 第1章のまとめ

コラムA Altera FPGAからIntel FPGAへ

第2章 FPGAの回路設計を体験

2-1 開発ソフトウェアQuartus Prime

  • 2-1-1 Quartus Primeとは
  • 2-1-2 FPGAの開発手順
  • 2-1-3 開発ソフトウェアや設計データのダウンロード

2-2 回路設計とコンパイル

  • 2-2-1 7セグメントデコーダの設計
  • 2-2-2 プロジェクトの作成
  • 2-2-3 ピンアサイン
  • 2-2-4 コンパイル
  • 2-2-5 コンパイルエラーの対策

2-3 コンフィグレーションと回路の拡張

  • 2-3-1 FPGAボードの準備
  • 2-3-2 コンフィグレーションの実施
  • 2-3-3 1秒桁への拡張
  • 2-3-4 1秒桁回路のコンパイルと動作確認

2-4 第2章のまとめ

  • 2-4-1 まとめ
  • 2-4-2 課題

コラムB 各操作の目的とアウトプットを意識して操作しよう

第3章 もう少し進んだ回路設計

3-1 1時間計の作成

  • 3-1-1 1時間計の設計仕様
  • 3-1-2 ブロックごとにモジュールを分けた回路記述
  • 3-1-3 プロジェクトを作成して動作確認

3-2 状態遷移を回路で実現

  • 3-2-1 時刻合わせ機能の仕様
  • 3-2-2 ステートマシンの回路構造

3-3 時刻合わせ機能付き時計の設計

  • 3-3-1 全体ブロックと各カウンタの作成
  • 3-3-2 修正桁点滅の実現
  • 3-3-3 制御部と最上位階層を作成
  • 3-3-4 コンパイルし動作を確認
  • 3-3-5 実用的な拡張案

3-4 第3章のまとめ

  • 3-1-1 まとめ
  • 3-4-2 課題

第4章 波形観測による回路デバッグ

4-1 ロジックアナライザとは

  • 4-1-1 デバッグの基本は波形観測
  • 4-1-2 ロジックアナライザの基本動作
  • 4-1-3 FPGAの中にロジックアナライザを組み込む

4-2 SignalTap IIを組み込んで波形観測

  • 4-2-1 SignalTap IIの組み込み
  • 4-2-2 SignalTap IIによる波形観測

4-3 第4章のまとめ

  • 4-3-1 まとめ

コラムC FPGAは本当に高性能なのか?

第5章 FPGA内蔵CPUを試す

5-1 Nios IIプロセッサとは

  • 5-1-1 FPGA にCPUを内蔵させるメリット
  • 5-1-2 ソフトマクロとハードマクロ
  • 5-1-3 Nios IIプロセッサの概要と種類
  • 5-1-4 数多く用意されている周辺回路

5-2 Nios IIシステムの構築

  • 5-2-1 Nios IIに7セグメントLEDとスイッチを接続
  • 5-2-2 Qsysでシステムを構築
  • 5-2-3 最上位階層の作成とコンパイル

5-3 プログラムの作成と実行

  • 5-3-1 プログラムの作成
  • 5-3-2 Nios II EDSによるビルド
  • 5-3-3 回路のコンフィグレーションとプログラムのダウンロード
  • 5-3-4 プログラムの実行

5-4 第5章のまとめ

  • 5-4-1 まとめ
  • 5-4-2 課題

第6章 自作周辺回路の接続とAPIの利用

6-1 Nios IIのバス

  • 6-1-1 バスとはなにか
  • 6-1-2 Nios IIシステムのバス「Avalonバス」
  • 6-1-3 Avalon バスの主要信号とタイミング
  • 6-1-4 バス幅の違いを吸収するスイッチ・ファブリック

6-2 自作周辺回路の設計と接続

  • 6-2-1 自作PIOに7セグメントLEDとスイッチを接続
  • 6-2-2 自作周辺回路をQsysに組み込む
  • 6-2-3 制御プログラムの作成と実行

6-3 タイマー割り込みによるAPI活用例

  • 6-3-1 作成システムの仕様とタイマーブロックの構造
  • 6-3-2 タイマー内蔵のNios IIシステムを構築
  • 6-3-3 ポーリングによるプログラム例
  • 6-3-4 割り込みを使ったプログラム例
  • 6-3-5 HAL APIを使ったプログラム例

6-4 第6章のまとめ

  • 6-4-1 まとめ
  • 6-4-2 課題

コラムD プログラムをダウンロードできない!?

第7章 いろいろな周辺回路を設計

7-1 キーボードとマウス接続回路

  • 7-1-1 PS/2インターフェースの仕様概要
  • 7-1-2 PS/2インターフェース回路の設計
  • 7-1-3 Nios IIシステムへの組み込み
  • 7-1-4 キーボードのテストプログラム
  • 7-1-5 サンプリングクロックを工夫して波形観測
  • 7-1-6 マウスのテストプログラム
  • 7-1-7 スクロールホイールへの対応

7-2 VGA文字表示回路

  • 7-2-1 VGAインターフェースの仕様概要
  • 7-2-2 VGA文字表示回路の設計仕様
  • 7-2-3 ブロック図とタイミングチャート
  • 7-2-4 IP Catalogによるメモリの生成
  • 7-2-5 Qsys階層の作成とシステムの完成
  • 7-2-6 Nios II EDSにより動作確認

7-3 第7章のまとめ

  • 7-3-1 まとめ
  • 7-3-2 課題

第8章 外部メモリを用いたグラフィック表示回路

8-1 外部SDRAMの制御

  • 8-1-1 SDRAMの概略
  • 8-1-2 SDRAMのテストシステムを構築
  • 8-1-3 SDRAMコントローラとPLLの接続
  • 8-1-4 SDRAMテストプログラムによる動作確認

8-2 グラフィック表示回路の作成

  • 8-2-1 Avalon-MMのマスター
  • 8-2-2 グラフィック表示回路の仕様
  • 8-2-3 グラフィック表示回路の構成と回路記述
  • 8-2-4 FIFOの作成
  • 8-2-5 グラフィック表示回路システムの構築
  • 8-2-6 リンカスクリプトを修正してビルドし動作確認

コラムE 画像ファイルの表示

8-3 第8章のまとめ

  • 8-3-1 第8章のまとめ
  • 8-3-2 課題

第9章 CMOSカメラの接続と応用

9-1 カメラモジュールの概要と接続

  • 9-1-1 CMOSカメラモジュールの概略
  • 9-1-2 OV7725の画像系タイミング
  • 9-1-3 SCCB仕様と主要レジスタ
  • 9-1-4 カメラモジュールの接続

9-2 キャプチャ回路

  • 9-2-1 キャプチャ回路システムの概略
  • 9-2-2 キャプチャ回路の詳細

9-3 SCCBコントローラの作成とシステムの構築

  • 9-3-1 SCCBの詳細タイミング
  • 9-3-2 SCCBコントローラの構成
  • 9-3-3 システムの構築とテストプログラムの作成

9-4 動画録画機能の実現

  • 9-4-1 動画記録と再生の仕組み
  • 9-4-2 動画記録再生のプログラム

9-5 第9章のまとめ

  • 9-5-1 第9章のまとめ
  • 9-5-2 課題

コラムF 制約ファイルの読み方書き方

Appendix I 開発環境の構築

I-1 開発ソフトウェアのダウンロードとインストール

  • I-1-1 Quartus Primeのダウンロード
  • I-1-2 Quartus Primeのインストール

I-2 USB-Blasterドライバのインストール

Appendix II 各FPGAボード利用上の注意点

II-1 DE10-Lite

  • II-1-1 3個目のプッシュスイッチの代わりにスライドスイッチを割り当て
  • II-1-2 PS/2コネクタをArduino 端子に接続
  • II-1-3 内蔵メモリを使う際の設定
  • II-1-4 PLLが異なる

II-2 DE1-SoC

  • II-2-1 コンフィグレーションでは一手間必要
  • II-2-2 画像用のD/Aコンバータを搭載
  • II-2-3 ARMコアを内蔵したSoC FPGAチップを搭載

II-3 設計データの利用方法

  • II-3-1 設計データの内容
  • II-3-2 設計データ利用上の注意点
  • II-3-3 Quartus Primeを立ち上げずに動作を確認する方法
  • II-3-4 Quartus Primeでプロジェクトを作成して動作を確認する方法

Appendix III 回路データおよびプログラムのROM化

III-1 各FPGAボードごとのROM化方法

  • III-1-1 DE0-CV
  • III-1-2 DE10-Lite
  • III-1-3 DE1-SoC

III-2 Nios IIプログラムのROM化

  • 参考文献
  • 索引

サポート

ダウンロード

3種類のFPGAボード用設計データ

(2020年3月5日更新)

本書の例題や課題解答例の設計データです。3種類のFPGAボード(DE0-CV,DE10-Lite,DE1-SoC)用のデータを用意してあります。ダウンロードしてご使用ください。なお下記正誤表の内容は反映済みです(2020年3月5日現在)。
利用方法に関して本書Appendix IIに補足説明がありますのでご確認ください。

ダウンロード
FPGAボード用設計データ

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2020年3月5日最終更新)

P.336 最下行


/* BUSYフラグ読み出し */
reg    sccbbusy;
assign readdata = (address==1'b0 && read==1'b1) ? {15'b0, sccbbusy}: 16'b0;


/* BUSYフラグ読み出し */
reg    sccbbusy;
assign readdata = (address==1'b1 && read==1'b1) ? {15'b0, sccbbusy}: 16'b0;


P.344 9~10行目


{
    while ((IORD_ALTERA_AVALON_PIO_DATA(SCCBSTAT) & SCCBBUSY) != 0);
    IOWR_ALTERA_AVALON_PIO_DATA(SCCBREG, data);
}


{
    while ((IORD_16DIRECT(SCCBSTAT, 0) & SCCBBUSY) != 0);
    IOWR_16DIRECT(SCCBREG, 0, data);
}

(以下2018年9月10日更新)

P82 4行目~13行目


CNT60 SECCNT( .CLK(CLK), .RST(RST), .CLR(clr), .CEN(en1hz),
              .INC(secup), .QH(sec10), .QL(sec1), .CA(cout) );
CNT60 MINCNT( .CLK(CLK), .RST(RST), .CLR(clr), .CEN(cout),
              .INC(minup), .QH(min10), .QL(min1), .CA(dummy) );


/* 7セグメントデコーダの接続 */
SEG7DEC d0( .SW(sec1),   .HEX0(HEX0) );
SEG7DEC d1( .SW(sec10),  .HEX0(HEX1) );
SEG7DEC d2( .SW(min1),   .HEX0(HEX2) );
SEG7DEC d3( .SW(min10),  .HEX0(HEX3) );



CNT60 SECCNT( .CLK(CLK), .RST(RST), .CLR(clr), .EN(en1hz),
              .INC(secup), .QH(sec10), .QL(sec1), .CA(cout) );
CNT60 MINCNT( .CLK(CLK), .RST(RST), .CLR(clr), .EN(cout),
              .INC(minup), .QH(min10), .QL(min1), .CA(dummy) );


/* 7 セグメントデコーダの接続 */
SEG7DEC d0( .DIN(sec1),  .nHEX(HEX0) );
SEG7DEC d1( .DIN(sec10), .nHEX(HEX1) );
SEG7DEC d2( .DIN(min1),  .nHEX(HEX2) );
SEG7DEC d3( .DIN(min10), .nHEX(HEX3) );

商品一覧