目次

まえがき

第1章 FPGAの特徴と用途

1.1 論理回路を構成する半導体チップ
1.2 論理回路/デジタル回路とは何か
1.3 プログラム可能なゲートアレイ
1.4 各社色々FPGA
1.5 CPUやマイコンとの違い
1.6 FPGAのエッジコンピューティングへの活用

第2章 TANG PriMERの特徴

2.1 価格が安い
2.2 シンプルな構成
2.3 FPGAボードの特徴

第3章 FPGA開発の概要

3.1 FPGA開発のフロー
3.2 論理回路の設計
3.3 HDLとは何か
3.4 シミュレーションによる設計検証
3.5 インプリメンテーション

第4章 論理回路/デジタル回路の基礎

4.1 正論理と負論理
4.2 組み合わせ回路と順序回路
4.3 同期回路と非同期回路
4.4 クロックとは
4.5 タイミングチャート
4.6 Setup/Hold Time
4.7 並列に動作する

第5章 開発環境の構築

5.1 インストール環境
5.2 Tang Dynastyインストーラーの入手
5.3 インストールの実行
5.4 Tang Dynastyの起動
5.5 デバイスドライバーのインストール

第6章 開発環境の使い方

6.1 Tang Dynastyプロジェクトの準備
6.2 外部端子の設定
6.3 プロジェクトのコンパイル
6.4 プロジェクトの書き込み
6.5 プロジェクトの動作確認

第7章 Verilog HDLの基礎

7.1 Verilogファイルの構成
7.2 NOT回路
7.3 OR回路
7.4 AND回路
7.5XOR回路
7.6 セレクタ回路
7.7 デコーダ回路
7.8 フリップフロップ
7.9 カウンタ
7.10 リセット信号の入力
7.11 レジスタに初期値を設定する
7.12 RGB-LEDの点灯色が自動で変わる回路
7.13 シフトレジスタ
7.14 回路の階層化

第8章 Icarus Verilogによる回路シミュレーション

8.1 回路のシミュレーションとは
8.2 検証対象の回路
8.3 Icarus Verilogのインストール
8.4 Icarus Verilogの起動
8.5 GTKWaveの起動
8.6 テストベンチの用意
8.7 コンパイル
8.8 シミュレーションの実行
8.9 信号波形の確認

付録A 2入力回路実習の準備

A.1 ジャンパーワイヤーの準備
A.2 2つの入力ポートの準備
A.3 ジャンパーワイヤー接続端子の設定
A.4 入出力を正論理に対応付ける
A.5 ジャンパーワイヤーによる入出力と論理の対応のまとめ

参考書籍

あとがき

まえがき

 最近はAIが大流行しています。「AI」と一言でまとめてしまうと漠然とした概念のように感じられますが、AIを支えている技術について少し掘り下げていくと「ディープラーニング」や「機械学習」といったワードが出てきます。ここで、さらに掘り下げてみます。ディープラーニングや機械学習は、コンピュータのリソースを使って多くの計算をさせるため、より早く大量の計算をするためには計算機(ハードウェア)の性能が重要になってきます。ここで、GPUやFPGA、ASICといったワードが出てきます。

 GPUはプロセッサであり、FPGA、ASICはロジックデバイスです。GPUにせよ、FPGAやASICにせよ、これらのハードウェアは計算のリソースとして使用されます。GPUは仮想通貨のマイニングがブームになった時に、計算用途のGPUボードが話題になりました。秋葉原では中古のGPUボードがたくさん出回っていたようで、後からHDMIコネクタをはんだ付けしてグラフィックボードとして使うユーザーもおり、楽しそうでしたね。GPUはNVIDIAのものが有名で、AI開発に特化したGPUボードも続々販売されています。

 一方、FPGAやASICはGPUに比べるとあまり話題が盛り上がっていないように感じられるかもしれません。しかしFPGAやASICは消費電力や計算速度の面でGPUよりも優れているとされており、 並列処理にも大きな強みがあります。また、IoTやクラウド技術が進むに連れ、「エッジコンピューティング」という概念も出てきました。これは大量の計算処理を全てクラウド側で行うのではなく、端末側でも計算処理を行って負荷分散することでクラウド側やネットワークの負荷を減らし、全体としてデータの最適化を行おうとする考え方です。このエッジコンピューティングにおいて、端末で計算処理を行う役割としてFPGAが注目されています。

 このように注目されることが増えてきたロジックデバイスですが、その入門のハードルが少々高いように筆者には感じられます。ASICに至っては個人レベルの範疇を大きく超えています。このため、個人レベルで扱うロジックデバイスは現実的にはFPGAをターゲットにすることになりますが、電子工作やマイコンの入門として話題に上がるArduinoやRaspberry Piに比べると、その入門のハードルは高いことだと思います。その理由として、FPGAボードはマイコンボードに比べて価格が高い傾向にある、ホビー界隈ではマイコンに比べると人気が無いために情報が少なく取っ付きづらいなど、様々な理由がハードルになっていると考えています。特に、「FPGAをちょっと試してみたい」と考えて書店に並んでいるFPGAの入門書を手に取ったとしても、そこで紹介されたターゲット評価ボードの価格を見て「おっと…」となり、財布の神様と相談した結果ボードの購入を見送るパターンが多いのではないでしょうか(あくまでも筆者の想像です)。

 しかし最近、Sipeedから小型のFPGAボードが販売されました。それが「TANG PriMER FPGA Dev. Board」です。価格は2,500円程度と低価格であり、FPGAとボード自体もシンプルな構成で、Arduino UNOのようにボードひとつでプログラムの書き込みも行えます。特に価格の面で入門のターゲットとして嬉しいボードです。筆者がこのボードを手に入れた当初は日本で取り扱っているお店は少なく、数少ない取扱店であったスイッチサイエンスにて購入しました。しかし最近になって秋葉原の秋月電子通商にも入荷されたことを確認しましたので、ますます入手しやすくなってきていると思います。

 本書では、この「TANG PriMER FPGA Dev. Board」をターゲットに、TANG PriMER固有の開発環境の構築の仕方から、他のFPGAにも使える汎用の開発言語Verilog HDLの基礎についてご紹介したいと思います。本書の内容はFPGA上に機械学習の回路を構築することではなく、あくまでFPGAを扱うための「Hello World」的な初歩の内容です。このボードでハードウェア的に不足を感じることが出てきたら、大手メーカーのFPGAボードにステップアップしていくと良いと思います。その際には、本書でご紹介するVerilogの知識を活かせることと思います。本書を通して、是非FPGAを体験してみてください。

本書の対象者

 ・FPGAを体験したい方

 ・TANG PriMERを使ってみたい方

 ・FPGAを動かしながらVerilog HDLを学びたい方

本書で得られること

 ・「Sipeed TANG PriMER FPGA Dev. Board」や、その開発環境の使い方の知識

 ・Verilog HDLの基礎知識

必須となる前提知識

 ・2進数の知識

 ・ブール代数の知識

あれば良い前提知識

 ・論理回路の知識

 ・C言語の知識や経験

実習を行う上で必要となるもの

 下記のものは、本書で紹介する実習を行う上で必要となるものです。実習を行わない場合は不要です。

 ・ジャンパーワイヤ(オス-オス)

 さらに、実習を行うにあたって下記のものがあればなお良いです。

 ・ブレッドボード

 ・ハンダゴテ類(ハンダ付けが可能な環境)

第1章 FPGAの特徴と用途

 まずは導入として、FPGAの特徴やその用途のポイントを簡単に押さえておきましょう。

1.1 論理回路を構成する半導体チップ

 FPGAの説明は、おなじみのWikipediaを参考にします。

 参考サイト : "FPGA" - Wikipedia, https://ja.wikipedia.org/wiki/FPGA (閲覧日:2020/02/14)

 FPGAを一言で説明するならば、「論理回路をプログラムし構成する半導体チップ」と言えるのではないでしょうか。もちろん、一言では表せない部分が多々あります。「論理回路を構成する」と言っても、これが何をするものかわからないと思いますので、 まずはこの点についてご紹介します。

1.2 論理回路/デジタル回路とは何か

 電気や情報系の大学で学んだ方であれば、一度は「論理回路」についての授業を受けた経験があるでしょう。「AND」や「OR」、「NOT」といった素子が登場し、これらを組み合わせて「フリップフロップ」や「加算器」等を構築する方法について学んだことと思います。電子工作の経験がある方には、汎用ロジックICとして74シリーズはおなじみかもしれません。論理回路は、論理の真(1)/偽(0)を電気信号(電圧のHigh/Low)に対応づけて回路を構築することで、「デジタル回路」になります。FPGAは、その内部にある半導体素子で論理回路(デジタル回路)を構成することができます。

 では、そのデジタル回路でどんなことができるでしょうか。一言で言えば、主にデジタル信号処理を行うことができます。特に、高速かつ並列に計算を行う場面で強みを発揮します。例えば画像(映像)処理や通信処理の用途です。映像処理を高速なデジタル回路で行うことによって、フレームレートを落とさずに処理することができます。最近の流行で言えば、仮想通貨のマイニングやニューラルネットワークの処理なども、高速なデジタル回路の用途として注目されています。

1.3 プログラム可能なゲートアレイ

 では、そのデジタル回路を構成するFPGAというデバイスについてもう少し詳しく見ていきましょう。FPGAは、「Field-Programmable Gate Array」の略称です。ゲートアレイの一種であり、頭に付いているField-Programmableという言葉は「現場でプログラム(書き換え)可能」であることを意味しています。ではゲートアレイは何かというと、論理回路やトランジスタ等を並べた半導体チップです。工場でこのチップ上の回路の配線を目的に応じてつなぐことで、機能をもった半導体チップになります。ゲートアレイを使って特定用途向けに回路を構成されたチップは「ASIC」と呼ばれますが、こちらは通常プログラムの書き換えができません。これに対してFPGAはプログラムの書き換えが可能な半導体チップであり、これがFPGAの強みのひとつです。FPGAに比べるとASICの方が小型であり、性能や消費電力の面でもASICの方が優位です。しかし、ASICはFPGAに比べて製造コストが大きいというデメリットがあります。ASICよりコストを押さえてデジタル回路を構築できる点もFPGAの特徴のひとつです。

1.4 各社色々FPGA

 世界にはFPGAメーカーが色々とありますので、ここで代表的なメーカーとその製品をご紹介します。

 まずは「Xilinx」。「ザイリンクス」と読みます。こちらはアメリカの大手FPGAメーカーで、創設者のひとりがFPGAの発明者です。現在販売されている製品シリーズは「Virtex」、「Kintex」、「Artix」といったものがあります。この中では「Artix」シリーズが低価格であり、評価ボードを購入しやすいです。また、「Zynq」というシリーズがあり、こちらはFPGAとARM CPUコアが1チップに収められたものです。

 つぎに、「Intel」です。Intelといえば言わずとしれたCPUメーカーですね。Core i7等でおなじみだと思います。実はもともと「Altera」というFPGAメーカーがあり、Intelはこれを買収しました。製品シリーズには「Stratix」、「Arria」、「Cyclone」といったものがあります。「MAX 10」というシリーズは、1チップにコンフィグレーションメモリが搭載されています。

 つぎに「Lattice Semiconductor」です。こちらもアメリカの企業です。XilinxやIntelに比べるとミッドレンジやローエンドといった低コストの製品が多いです。製品シリーズには「ECP5」、「LatticeECP3」、「iCE40」といったものがあります。

1.5 CPUやマイコンとの違い

 ここまでFPGAの特徴をいろいろと述べてきました。「FPGAがプログラム可能だ」というと、ArduinoやRaspberry PiでおなじみのCPUやマイコンを思い浮かべる方も多いのではないでしょうか。C言語等で記述したコードをコンパイルし、そのプログラムをマイコンチップに書き込むことでマイコンは動作します。ここだけを見るとCPUとFPGAとの違いは無いように思えます。しかし、CPUとFPGAとでは動作の仕方が違います。

 CPUはメモリに書き込まれた命令に従って、基本的には順番に逐次処理を行います。C言語でプログラムコードを記述するときも、基本的にはコードの上から下に向かって1本の処理が進むことを考えて記述すると思います。しかし、FPGAの動き方は違います。FPGAの中身はデジタル回路です。よって、命令に従うのではなく、構築された通りにAND、ORといった素子やフリップフロップ等からなる回路が動きます。このとき、(作り方にもよりますが)1本の処理ではなく並列に回路を動作させることができます。この特徴が信号処理や計算の高速化に繋がっており、FPGA(デジタル回路)の大きな利点といえます。

 こういった動作の仕方の点でFPGAとCPUやマイコンを比べると、FPGAの方が設計するレイヤーが低いことがわかると思います。CPUに比べると、よりバイナリに近い世界で設計を行うことになります。また、ここまでの説明でお気づきの方もいるかもしれませんが、FPGAで論理回路を組むことでFPGA上にCPUを作ることも可能です。実際に大手FPGAメーカはFPGA上で動作するCPUコアをサポートしていたり、最近流行の兆しがあるRISC-VもFPGA上に構築した例があったりします。

1.6 FPGAのエッジコンピューティングへの活用

 前述した「並列処理」や「高速処理」といったFPGAの利点を、最近のトレンドであるIoTとAIに絡めてエッジコンピューティングに活用する動きが出てきています。IoTにおいてエッジ側で取得した画像データやセンサ情報をクラウドサーバー上で処理したいとき、取得したデータをそのままクラウド上のサーバーに送るとするとデータサイズが多くなる程インターネット回線の帯域を圧迫し、クラウドサーバーのリソースの消費も大きくなりやすいです。このため、クラウドサーバーにデータを渡す前に、前処理をエッジ側で行うことでインターネット回線に乗せるデータ量を減らし、システム全体のリソースの最適化しようとする手法が「エッジコンピューティング」です。このとき、エッジ側にAIを持たせてデータを処理する手法は「エッジAI」と呼ばれています。

 株式会社リコーでは、FPGA上で動作する機械学習のアーキテクチャを開発し、CPU/GPUを用いたソフトウェアライブラリーと比べて26倍以上の学習速度の高速化を実現し、電力効率も良くなったとしています。

 参考サイト : "AIモデルの学習を26倍高速化、学習電力効率を90倍に" - 株式会社リコー ニュースリリース 2018年12月26日, https://jp.ricoh.com/release/2018/1226_1.html (閲覧日:2020/05/01)

 XilinxではARMコアを搭載したロジックデバイスであるZynqを用い、CPUとFPGAを連携させることでFPGA上でPythonを動かして機械学習やAIのシステムを動作可能とするフレームワークを提供しています。この場合は、ソフトウェア分析をプロセッサで効率的に実行することを目的として、センサーなどのデータの前処理にFPGAを活用するとしています。

 参考サイト : "エッジ AI" - Xilinx アプリケーション, https://japan.xilinx.com/applications/industrial/analytics-machine-learning.html (閲覧日:2020/05/01)

 同様に、IntelにおいてもFPGA上でAzure IoT Edgeを動かす事例があります。

 参考サイト : "Azure IoT Edge をインテル︎ SoC FPGA で動かす! 開発フローのご紹介" - de:code 2019 セッション詳細, https://www.microsoft.com/ja-jp/events/decode/2019session/detail.aspx?sid=IT83 (閲覧日:2020/05/01)

 エッジコンピューティングにFPGAを活用した具体的な事例もひとつご紹介したいと思います。川崎重工業株式会社では、電車のドアに物が挟まっていないか「戸挟み検知」をするAIシステムを研究開発し、検知にかかる時間を抑えるためにエッジAIを活用したとのことです。

 参考サイト : "川崎重工がエッジAIを活用する理由――電車のドアに挟まる物を検出、伝達まで猶予は2秒" - @IT, https://www.atmarkit.co.jp/ait/articles/1905/08/news001.html (閲覧日:2020/05/01)

試し読みはここまでです。
この続きは、製品版でお楽しみください。