電子工作とラズベリーパイ、そして FPGA の時代へ

投稿者: | 2019年11月21日

FPGA will be rapidly common tools for DIY engineers, I believe.

今回は珍しく、また柄にもなく論文風です。たまには、「です・ます調」ではく「だ・である」調で行ってみたいと思います。御笑納ください。 🙂

電子工作の黎明期とマイコンチップの普及

かつて、電子回路は全てディスクリート部品で組まれていた。論理回路においてもトランジスタによる実装から始まり、7400 や 4000 シリーズといった標準ロジック IC が使われるようになった。アマチュア工作家の間でも、7400 などを使った工作が流行した。もちろんコンピュータは知られていたが、それが半導体チップとして利用できるようになったのは 1970年代からである。

TI SN7400N Wikimedia Stefan506 さんより(CC BY-SA 3.0)

ElecCircuit: Simple IC-4011 LED flasher circuits より

その当時は、今のように LED チカチカのために 32ビットマイコンが使われるようになるとは誰も想像しなかっただろう。1980年代のマイコンチップ(Z80, 68000 など)では、外付けの回路が多く必要であり、特にバス配線を手ハンダで実装するのは厄介な仕事であった。そのうちに標準品的な Z80 マイコンボード(国内だと AKI-80 など)が現れたが、比較的高価なものであり、LED チカチカのために購入する人はなかっただろう。その後、マイコンはワンチップ化が加速した。商用設計だけでなく、アマチュア工作家の間で Microchip 社の PIC マイコンなどが多く使われるようになってきた。1995年前後のことである。

その後、2000年代半ばになると、Arduino と呼ばれるAtmel AVR マイコンボードと開発環境が現れた。ワンチップマイコンや Arduino がアマチュア工作家に受け入れられ、広く普及した背景には、

  • マイコンチップの劇的な低廉化: ATmega328 チップ単体であれば 100円強
  • 工作の容易さ: プログラミングでは、数〜数十行の本質的なコードだけを書けば良い。ブレッドボードも安価になり、ジャンパ線の配線で大抵の実験ができるようになった

があるだろう。それに加え、開発ツールが無償で利用できるということが大きい。かつて隆盛を誇った Microchip PIC も、開発ツール(コンパイラやプログラミングツール)でお金を取るという戦略が取れなくなり、多くのアマチュアは Arduino に移行してしまった。現在では 32ビットマイコン SAMD21 などでも、無償の GCC で開発できる(いや、32ビットマイコンのほうが GCC の対応は早かったかも知れない)。現在、開発ツールにお金を払うアマチュアはいない。プロの世界でも、もちろん開発費用の削減は嬉しいことである。

マイコンから FPGA の時代へ

これから先は、おそらく FPGA の時代へと繋がっていくと思われる。もちろん Arduino や Raspberry Pi で十分な工作家は多いだろうが、アマチュア工作家向けの環境が整備されるに連れて FPGA を利用する人が増えていくものと、私は予想している。

Alhambra board Wikimedia Eladio Delgado Mingorance さんより(CC BY-SA 4.0)

FPGA は新しい技術ではなく、Altera 社や Xilinx 社が創業したのは 1980年代前半であり、高価な工業製品や通信機器の世界で利用されてきたものである。一般のアマチュア工作家の間で利用されてこなかったのは、次のような理由だろう。

  • ソフトウェアのプログラミングと論理回路の設計では、異なるスキルを要求される。
  • 多くの工作では、マイコンのソフトウェアだけで実現できてしまう。
  • FPGA はマイコンに比べて高価だった(現在でもまだ、同じことを実現するのであれば、大抵の応用ではマイコンのほうが安価に実現できる)。
  • 開発ツール(EDA ツール)も基本的に高価であり、無償評価版もあるが、ライセンス形態が複雑で、ツールのサイズが非常に大きい(インストールのために数十 GB のディスクを要求されることもある)。
  • 開発ツールが複雑であり、覚えなくてはいけない技術も多い。
  • ネット上のコミュニティにおける情報が少ない(少なかった)。
  • 無償で使えるライブラリ(IP)やツールが少ない(少なかった)。

とろこが近年になって、変化が現れてきている。一つは、オープンソースでフリーソフトウェアの EDA ツールが手に入るようになってきたことである。もう一つは、ソフトコアプロセッサ(FPGA 上に実現できるマイコン IP)もオープンソースで入手可能となってきたことである。前者だけでなく後者も重要なことである。いくら FPGA チップが安価になったとしても、マイコン(MCU)を外付けで用意しなくてはならないのであれば、結局はコンパクトな実装には繋がらない。近年、フリーで利用できる ISA(命令セットアーキテクチャ)である RISC-V や、それを実装した無償のソフトコアプロセッサが手に入るようになり、アマチュア工作家の間で FPGA の認識は大きく変わり始めている。

いやいや、FPGA は消費電流が大きいんで。外付け Flash メモリも必要なんで。おまけにマイコンよりずっと高価ではないですか。ワンチップマイコンに取って変わることはありませんよ、という方もあるかも知れない。私はそうは思わない。1970年代、LED チカチカにマイコンを使うなんて非常識でしかなかったが、いまやマイコンの消費電力は、下手なディスクリート回路よりも小さくできるのである。世の中にニーズがあり、資金が流れ込んでくれば、世界はどんどん変わっていくのである。

もちろん、たとえば 4000系の C-MOS ロジック IC の静消費電流は 0.01uA(typ.)だそうなので比べることはできないが、Atmel の ATmega328P マイコンの power-down モード(WDT を有効)での消費電流は、電源電圧 3V、温度 25度の条件で 5uA 程度のようだ。(データシート 7810D-AVR-01/15 の 29.1.2 Power-down Supply Current 参照。)

つまり、仮にずっと power-down モードでいられるとすれば、同マイコンの最低動作電圧は 2.7V なので、CR2032 電池一つで 30000時間(約 3年)程度は維持できる計算である(参考資料)。仮に 0.1% の時間を active モード(消費電流 5mA)で動かさないといけないとしても、その半分の 15000時間は行けそうである。

ここで、最近人気を博している、アマチュア向けの小型 FPGA ボードをいくつか紹介しておきたい。詳細は、以下のリンクをクリックして見て頂きたい。探せばもっと見つかることだろう。

複雑になりすぎたアプリケーションプロセッサ

これからの時代に FPGA に期待がかかる、もう一つの要因がある。それは、近年のマイクロプロセッサ、特にアプリケーションプロセッサ(あるいは SoC)が、全ての顧客のニーズを満たそうとするあまりに「公倍数」的な製品となり、極めて複雑なプロセッサとなってしまったことである。マニュアルは数千ページに達することもある。伝統的な技術者は、製品を全て十分に理解してから設計に入りたいと考えるものだ。そのために技術者は、アプリケーションプロセッサのマニュアルを見て途方に暮れることになる。半導体メーカーや特約店の完璧な技術サポートに期待できる大手製造業者は良いだろうが、そうでない中小企業では、ほぼ絶望的な状況である。

一方で、最近の「Raspberry Pi ブーム」は良いことでもあるが、ある問題を生み出している。それは、多くのアプリケーションが Raspberry Pi で簡単に実現できてしまうために、多くの中小企業が「世の中の情報」と「自らの技術で出来ること」のギャップにはまりこんでしまっていることである。確かに、「Raspberry Pi で出来ること」は、簡単に実現できるのである。しかし、Raspberry Pi では容易に対応できないことを実現しようとすると、突然、困難がやってくるのだ。ある意味で、習熟度曲線が断絶してしまっているとも言えるだろう。われわれのように弱い立場にある技術者(中小企業やアマチュア工作家)にとって、コミュニティから得られる情報に、自分が実現したい本質的な設計だけを足し算して、自分たちの求める製品に仕立てたいのは当然の欲求である。多くの技術者が、痒いところに手が届かずに苦吟しているのが現状なのである。

少し技術的な話をしよう。アプリケーションプロセッサの複雑さの一つの要因は、上述の通り、全ての顧客のニーズを満たそうとしていることにあるが、その典型的な例がペリフェラル(周辺回路)である。特に分かりやすいのがシリアル通信機能だろう。一つのペリフェラルブロックで、UART、I2C、I2S、SPI などに対応できるのは半導体設計の視点からは優秀なことであるが、それは本当に利用者の使い勝手に繋がっているのだろうか。さらに加えて、特殊な使い方を想定して、クロックの極性、シリアルデータの MSB/LSB ファースト、あらゆるオプションをプログラム可能としているメーカーもある。実際には、プロトコルの標準から外れていて、滅多に使わないようなオプションすら存在する。(UART にワード長 5ビットモードや 1.5ストップビットなんてものが未だに必要なのか?) レジスタ一覧を見ると、どうしてこんなに多くのレジスタを設定しないと UART を利用できないのか、困惑する技術者は多いだろう。

もちろん、責任はプロセッサベンダだけにあるのではない。例えば、SPI の仕様を正しく理解せずに実装したとしか思えない「周辺デバイス」も世の中には存在する。実際、TI 社の DSP の SPI ではオプションレジスタ設定で対応できたが、ST 社の STM32 で困った、という経験がある。SPI ピンを GPIO モードに設定し、bit-banging で逃げることにした。送信レートが遅かったのでなんとかなった。受信だったら…、ボード上に論理インバータの追加が必要だったかも知れない。(悪夢のハード改修)

ソフトウェア側の問題もある。半導体ベンダのライブラリ(ドライバ)設計者は、ペリフェラルが提供する機能全てを、それも、割込を使う場合、DMA を使う場合など、あらゆるニーズを考慮して実現しようとする。いや、それが会社上層部の指示なのだろう。ドライバを設計するほうも大変であるが、使うほうはたまったものではない。そもそもドライバ(ソフトウェア API)というのは、ハードウェアの複雑さを隠蔽し、あるいは抽象化するためのものであった筈なのに、組込設計の世界では、ハードウェアマニュアルのペリフェラル説明を全て理解した上で、さらにドライバの使い方を理解しなければ、ソフトウェア設計に入れないのである。(TI 社の DSP でいうと EDMA がある。EDMA のドライバだけを調べて EDMA を使えたら天才である。EDMA のハードウェアマニュアルは 180ページある。少なくともその 1/3 程度を読みこなせなければ、EDMA の恩恵には与れない。)

余談であるが、割込コントローラなども、他社より優位性を持たせようとするあまり、それが複雑さにつながり、かえって顧客の負担となっているように思う。かつて、CISC 時代のプロセッサが自社考案の特殊なインストラクション(命令ニーモニック)を多用したために、命令デコーダの設計が複雑化し、RISC 時代に繋がっていったことと似ているかも知れない。

一方で、最近の Arduino ブームによって、基本的な通信プロトコル(UART、I2C、SPI)やタイマ機能のソフトウェア API に求められる機能が、(デバイスベンダ側からではなく)ソフトウェア設計者の視点から定義されるようになってきたのは良いことだ。Arduino のライブラリが(全てのニーズには応えられなくても)簡潔かつ抽象的に定義できている理由の一つは、Arduino の利用者の多くがアマチュア(初心者)であることが多いので、複雑な API を用意する訳にはいかないのである。もう一つの理由、これは後に多くのマイコンをサポートする必要性から生じたことだが、それら多くのマイコン全てで実現できるくらいの、「最大公約数」的で単純な API が必要だったのであろう。これらの理由から、Arduino ライブラリの優秀な設計者は、API の機能を、本質的かつ最小限のレベルまで削り落とした。極端なことを言えば、Arduino の API で使わない機能は、マイコン上のペリフェラルには要らないのである。また、Arduino の API が正しく動作することをベンダが保証するのであれば、ペリフェラルのハードウェアマニュアルだって要らないかも知れない。(上述の「周辺デバイス」のメーカーにしても、Arduino を繋いで動かしてみれば、自社デバイスの SPI インターフェイスの仕様が非標準であることに気づいただろう。)

ここまで書いてきたことは、私が長いこと、各種のマイコンや DSP を使ってきた経験から来ている。しかしベンダは言うだろう。実際には様々な顧客のニーズがあるので、そんな単純なペリフェルを提供する訳にはいかないのだ、と。そこに FPGA の価値が現れてくる。FPGA であれば、Arduino の API が必要とするだけの単純な通信ペリフェラルを、HDL ソースコード付きで開示してしまえば良いのである。ベンダ依存性は少なかろうから、フリーの実装も多く公開されるに違いない。そうして、ある顧客の特殊な要求仕様(うちはクロックの極性を逆にしたい)があれば、HDL の設計を変更すれば良いだけである。FPGA 時代では、あらゆるニーズに応えられるような複雑なペリフェラルを提供する必要はないのである。

ベンダに依存しない無償ソフトコアプロセッサ(CPU)

最近の、アマチュア工作家コミュニティにおける FPGA の動向に戻ろう。

最初の RISC-V 実装 Wikimedia Derrick Coetzeess さんより(CC0 1.0)

ソフトコアプロセッサとしては、現在でも FPGA メーカーが提供する MicroBlaze、Nios といったものがあるが、それらはベンダ間をまたがって利用できるものではない。しかし近年、命令セットアーキテクチャが無償で公開された RISC-V などが大きな潮流となり始めており、既に、それを HDL で実装したものが GitHub などで無償提供されている。一度そのような流れができると、その流れは加速度的になり、商用でも十分に利用できる完成度のものが入手可能になるだろう。もちろん無償でなくても良ければ、RISC-V の実装を商売とする新興企業(SiFive 社など)が、既に複数登場している。

そして無償の EDA(Electronic Design Automation)ツール

ここ数年のもう一つの流れとして、無償 EDA ツールが公開され始めたことがある。Verilog シミュレータなどだけに留まらず、既に Lattice 社の FPGA では Placing/Routing ツールも本格的に利用可能となっている。ここ数年、優秀なフリーソフトウェア開発者コミュニティの多くが FPGA に目を向け始めており、それら優秀な技術者は Verilog など HDL で書かれた IP を GitHub などで公開し始めている。彼らはもはや、自分達の活躍のフィールドとして Linux や Python、Arduino だけでは飽き足らなくなってきているようだ。確かに、ソフトウェア設計と論理回路設計では異なる発想と能力が要求されるが、優秀な技術者には難しいことではないだろう。2019年は、後になって無償 FPGA EDA ツール普及の元年と呼ばれるかも知れない。

icestudio のロゴ(GitHub: FPGAwars/icestudio より)

いずれは、ソフトコアプロセッサだけでなく、必要な IP コアはいくらでもネット上でフリーの実装が公開されるようになるだろう。(既に、USB CDC のサブセットが無償公開されている。)また、IP 間を繋ぐためのフリーな実装のインターコネクトも出てくるかも知れない。(既に David Williams さんという方が、IP 間を繋ぐためのインターコネクトとして、Pipe という概念を紹介し、HDL の実装を公開すると同時に背景となる考え方を説明している。)

HDL 実装の無償公開に併せて、ソフトコアプロセッサから利用できるソフトウェアライブラリも充実していくことだろう。 近い将来、まるで Arduino で数行のプログラムを書くようなイメージで、FPGA が利用される日が来るかも知れない。いや、きっと来るだろうと思う。

PMOD

話は変わるが、FPGA ボードの世界で PMOD という業界標準規格(デファクトスタンダード)がある。LCD インターフェイスや Ethernet、Wi-Fi、ADC/DAC などを共通のピン配置のブレークアウトボードで FPGA に繋げるようにしたものだ。このことも、アマチュア技術者が FPGA を利用しやすくしていると言えるだろう。複雑なインターフェイスを HDL で実装しなくても、それら PMOD を繋げば済む、という訳だ。

大手ベンダは流れを止められるか?

ところでこのような流れの中で、一つの副次的な効果が生まれる。それは、さまざまなベンダの FPGA を、共通のフロントエンドツールで利用できるということだ。現在では、ある FPGA ベンダ A 社の EDA ツールは、B 社の FPGA で利用することはできない。ツールはプロプリエタリでクローズなソフトウェアであり、非常に巨大である。無償の EDA ツールでは、同じ使い方で複数ベンダの FPGA に対応できるよう、多くの技術者が奮闘している。現在のソフトウェア設計の世界では、GCC でプログラムを書く人は、そのターゲットが x86 なのか ARM なのかを、ほとんど考えない。そのようなことが FPGA の世界でも常識になるかも知れない。

さらにもう一つの副次的な効果として、いずれは FPGA ベンダが無償 EDA を無視できなくなることが考えられる。特に Xilinx や Intel 以外の中小 FPGA ベンダは、コミュニティの力と彼らの設計資産を利用して、自社のシェア向上に努めてくる可能性が大いにある。情報公開に積極的なベンダが増えてくる可能性もある。いずれにしても、アマチュアが利用している商用 EDA(Vivado や Quartus)は無償提供版であろうから、フリーでソースコードが公開されている EDA が普及しても、FPGA ベンダの売上げにはほとんど影響がないはずである。

いま、多くの半導体企業の評価ボードを購入してみると、Arduino フォームファクタ(形状)に合わせたソケット(ピンヘッダ)を見ることが多いだろう。多くのデバイスベンダ(センサ IC などを含む)は、評価のための標準環境として Arduino を利用しているのである。アマチュア工作家のためのツールを、半導体ベンダが活用し始めているということである。

まとめ

既に RISC-V ソフトコアプロセッサの分野では、なにしろ ISA が無償で公開されており、GCC だけでなく Linux カーネルやディストリビューション(例えば Debian。現在は RV64GC のみ対応)も対応し始めたので、十分に利用可能である。無償 EDA については、多くの技術者がビットストリームファイル(FPGA の電源投入時に、回路構成を初期化するためのデータ)のリバースエンジニアリングに取り込んでいる。おそらく FPGA ベンダは苦々しく思うことはあっても、邪魔してくることはないであろう。優秀な技術者コミュニティを敵に回すのは危険なことである。(ここ 20年の間の Linux の普及がそれを物語っているだろう。) 技術コミュニティをうまく活用するほうがずっと賢い戦略である。10年後、いや 5年後に、アマチュア工作家や中小企業の技術者の間で、FPGA の世界がどのようになっているか、非常に興味深いところである。

堅苦しい文章は疲れますね。今日はここまで

Special thanks to helpful photos and images on the net.  Mainly used photos following Creative Commons licences, but put HTML links to other materials.  Please let me know if you don’t like that.  I will remove the links.