01signal.com

FPGA 設計者になりたいと思っていますか?

このページは、プロの FPGA 設計者になるための全 5 ページのシリーズの 1 ページ目です。まずは全体像と、始め方についてのいくつかの提案から書いていきます。

はじめに

このシリーズは、FPGA 設計を学びたいと思っている方、とくにそれを仕事にしたいと考えているのに、世の中にあふれる情報の海で迷子になっている方に向けたものです。チュートリアル、ブログ記事、動画講座、フォーラムのスレッドなど、山のようにあります。しかも今では、その多くが AI によって生成されています。どれが道を知っている人の書いたものなのか、それともプロっぽく見えるだけの無価値な言葉なのか、見分けるのは困難です。

「これを学ばなければ」と言われて圧倒されてしまう――その気持ち、決してあなただけではありません。習得すべきことのリストは本当に長く、どれが本当に重要なのか、どれがただのノイズなのかを見極めるのは難しいものです。

私がここで伝えたいのは、こうしなさいという指示でも、一字一句従わなければならないカリキュラムでもありません。それぞれのスキルの目的と重要性を説明し、何をいつ優先するかを自分で判断できるようにしたいのです。それだけでも大変なことです。無駄な回り道をせずに目標にたどり着けるなら、それに越したことはありません。

ただし、面接を突破することだけが目的なら、残念ながらあまり力になれません。面接は予測不能な生き物です。面接官はそれぞれ独自の評価基準を持っていて、しばしば「自分に似た人」を探しています。だって、誰だって自分が一番賢いと思っていますよね? それに、単純な考え方が案外うまくいくのかもしれません。実力があれば、仕事は見つかるのです。

FPGA は何に使われるのか?

スキルの話に入る前に、この職業が実際に何をするものなのかに少しだけ触れておきましょう。人は FPGA で何を作り、どのように、そしてなぜ作るのでしょうか?

状況はこうです。誰かが新製品向けのプリント基板を必要としています。その基板上の部品のほとんどは市場で購入できます。メモリ、電源、コネクタなどです。しかし、そのすべての動作の中心あたりに、世界のどの部品でも担えない機能があります。少なくとも、その製品が必要とする形そのままでは存在しません。そこで、自分でチップを設計することにします。それが ASIC で、本当に、本当に高価です。製造サイクルには家 1 軒以上のお金がかかることもあり、その後でバグを見つけたら、できるのはエラッタレポートを出すことだけです。そして、経済的な正当性があれば、しばらくして新しいバージョンを出すことになります。

この高価でリスクの高い設計サイクルに代わるものが FPGA です。この種のチップは、シリコン片の上の電子工作キットのようなものです。たくさんの小さな構成ブロックと、特定のつながり方を持たない配線が入っています。代わりに、FPGA がどう振る舞うべきかという情報を含む大きなデータの塊があります。このデータはビットストリーム (bitstream) と呼ばれます。ビットストリーム内の情報は、FPGA 内部の小さな構成ブロックをそれぞれ設定し、内部の配線がどう接続されるかも決めます。

ビットストリームが FPGA にロードされると、ASIC に似たものが出来上がります。自分たちの目的のためにシリコンを製造したかのように振る舞うチップです。ただし、速度は遅く、消費電力は大きく、部品そのもののコストも量産 ASIC より高くなります。

ビットストリームをソフトウェアと混同してはいけません。何か問題が起きたときに、コードを 1 行直して再コンパイルできることが多いという点では似ています。しかし、FPGA はプロセッサではありません。何かを「実行」するわけではありません。FPGA を、小さな論理マシンが大量に並んだものと考えてください。ビットストリームは、それら小さなマシンそれぞれに何をすべきかを指示します。

この点をまとめると、FPGA は電子機器プロジェクトに欠けている 1 つのレンガです。ASIC が欲しいけれど、開発リスクとコストを下げるために、部品ごとのコストを多く払い、性能を低く受け入れるほうを選ぶ場面で使われます。それでもリスクとコストは高いままですが、いくらかは下がります。

FPGA 設計者の主な仕事は、ビットストリームを生み出す設計タスクです。これは、ソフトウェア設計者がコードを書き、最終的に実行可能なソフトウェアバイナリを手にすることに似ています。しかし、FPGA は電子機器プロジェクトの一部なので、FPGA 設計者の役割はそこで終わりません。それについては後で触れます。

プロジェクトが組み込みプロセッサを必要とする場合、その部分も FPGA の一部であることがよくあります。プロジェクトによっては、プロセッサを別部品として持つことを選びます。どちらにせよ、プロセッサは単純なタスクを実行することもあれば、Linux や別のオペレーティングシステムを動かす本格的なコンピュータのように振る舞うこともあります。

ただ、かつてはデータセンターで FPGA をコプロセッサやハードウェアアクセラレータとして使うという話が盛んに取り上げられました。AI に FPGA を使うという話もありました。今でもそう宣伝している企業はあります。私としては、それは昔からナンセンスだと思っていましたし、今では、とくに AI 関連では GPU のほうが優れていることは明らかです。ですから、そういう話に乗せられないようにしてください。FPGA は電子機器プロジェクトに欠かせない重要なピースとして使われるもので、ときに非常に高度な用途もありますが、それ以外に使われることはごくまれです。

なぜ難しいのか?

こう言いましょう。良い FPGA 設計者になるために 5 ページも書こうとしているなら、そこにはおそらく多くの要素があるということです。

FPGA 設計者の報酬が高いのは、それが複雑な職業だからです。その理由は、3 つのスキルを同時に求められることにあります。

1 つ目のスキルはエレクトロニクスです。最終的には、PCB 上に載るものを作っているわけで、基板上の他の部品とやり取りしなければなりません。プロジェクトにはピン、電圧、コネクタ、クロック発振器など、ありとあらゆるものが含まれます。あなたが作るロジックは、実際の基板上の実際の部品と、実際の電圧・実際の温度の下で会話します。

2 つ目のスキルは「ソフトウェア」です。あなたが書いて扱うのは、ソフトウェアによく似たファイルです。Verilog ファイル、制約ファイル、コンパイルスクリプト (script) などです。しかし、この種の「ソフトウェア」を扱うのははるかに難しいです。その理由は後で述べます。いわばコンパイラが、ソフトウェアのコンパイラのようにあなたの味方をしてはくれませんし、デバッグに使うツールも同じです。

3 つ目のスキルはアプリケーションに関する知識です。FPGA 設計者として、プロジェクトに関連する高度なテーマ(あるいは過去の経験や学習ですでに知っているテーマ)を、自分で学ばなければならないことがよくあります。信号処理、ネットワークプロトコル、コンピュータとのインターフェースプロトコル、コンピュータモニタ向けのデータ符号化規格など、実際に開発する製品に関わる分野が延々と続きます。新しい通信プロトコル、新しい安全規制、奇妙なインターフェース要件を持つ新しい部品……学ぶべきことは常にあります。

しかし FPGA 設計者の大きな挑戦はここにあります。プロジェクトの主要な専門テーマは、しばしば FPGA 設計そのものと密接に関わっています。つまり、自社が扱う主要技術の専門家にならなければならない可能性があるのです。典型的な例は、FIR や IIR といったデジタルフィルタ、FFT、デシメーションとインターポレーション、オーディオ・映像処理、ワイヤレスとソフトウェア無線、レーダー、医療画像、ネットワーキングとパケット処理、Ethernet、PCIe と USB、HDMI・DisplayPort・SDI・MIPI といった映像規格(映像タイミングや色空間の複雑さも含めて)、そして制御システムなどです。もちろん、それだけではありません。

FPGA 設計者になるために、これらすべてを知っている必要はありません。でも、進めていくうちにかなりの数を学ぶことになります。ですから、常に新しい技術を学び続けるという考えが悪夢のように思えるなら、こう尋ねたいです。ええと、本当に FPGA の世界に飛び込んで大丈夫ですか?

エレクトロニクスの達人である必要はある?

良いニュースが 1 つあります。FPGA プロジェクトのロジックは大まかに 2 種類に分けられ、そのうちの 1 つはエレクトロニクスの知識がまったく不要です。

1 つ目はインターフェース用のロジックです。外部部品、あるいはハードでもソフトでも IP コア (IP core) とやり取りするロジックです。映像信号や無線信号を入力・出力するチップ、RAM チップなどを思い浮かべてください。この種のロジックはそうした部品と接続し、この接続部分こそ FPGA が物理世界と出会う場所です。この種のロジックを実装するには、電圧レベル、タイミングバジェット、ジッタ (jitter) といったものを理解する必要があります。

2 つ目は処理用のロジックです。実際の計算が行われる場所です。映像の画質改善、デジタルフィルタ、ネットワークプロトコルに従ったデータストリームの整理や解析などです。この種のロジックは通常、2 つのモードのどちらかで動作します。FIFO やその他のメモリ要素からデータを読み書きする場合は、「純粋なロジック」プロジェクトと呼べるでしょう。あるいは、データフローに同期して動く場合もあります。たとえば無線信号からサンプルを受け取り、入力サンプル 1 つにつき出力サンプル 1 つをパイプライン (pipeline) 遅延付きで生成するデジタルフィルタのようなものです。後者のほうが実装が難しいことが多く、各ステージがストリームに追いつかなければなりません。

ここで大事なのは、処理用ロジックの実装にはエレクトロニクスの知識がまったく不要だということです。私が「純粋なロジック」と呼んだものであっても、外部のデータフローに同期するものであっても変わりません。すべては FPGA の内部で起きることなので、ロジック設計にとって外の世界は関係ありません。したがって、これが FPGA の世界への最も易しい入り口です。ただし落とし穴があります。プロジェクトの中にこの種のロジックがそれほど多くないこともあるのです。しかも、小さな会社では何でも少しずつやることが求められます。逃げられません。

「典型的なプロジェクト」なんてものはない

FPGA プロジェクトの進め方を調べると、きれいな図がたくさん出てきます。それらは割り引いて受け取りましょう。現実はもっと混沌としています。理由は次のとおりです。

まず、PCB は何をするのか正確に決まる前に開発されることがよくあります。正気の沙汰ではないように聞こえますし、実際そうなこともありますが、これは FPGA の美点、つまり柔軟性の結果でもあります。ハードウェアがその柔軟性を閉じ込めてしまわない限り、基板が何をするのかは後から決められます。

次に、FPGA プロジェクトの機能はほぼ常に段階的に開発されます。まず最小限の機能があり、時間とともに機能が追加されていきます。管理職はたいてい何か動くものを見たがりますし、要件は常に変わりがちだからです。新しい機能要件に対応したり、ハードウェアのバグを解決したりするために、プロジェクトとともに PCB が改造されることも珍しくありません。

3 つ目に、ゼロから始めるよりも既存プロジェクトを続けることのほうが一般的です。まったく新しく見えるプロジェクトでも、既存の FPGA 設計と既存の PCB を新要件に合わせて作り変えるところから始まることがよくあります。ソフトウェア開発を経験した人にはおなじみかもしれませんが、それは偶然ではありません。

ですから、「典型的な FPGA プロジェクトの流れ」という話に出会うかもしれません。仕様策定、アーキテクチャ、RTL、シミュレーション、論理合成、実装、タイミングクロージャ (timing closure)、ビットストリーム (bitstream)、立ち上げ、検証といった流れです。あるいはそれに似た何かです。それが完全にデタラメだとは言いませんが、こう言っておきます。私はそんなふうに進むプロジェクトに一度も参加したことがありません。これらの段階のいくつかは互いに溶け合い、いくつかは完全に飛ばされ、たいていはすべてが同時に起きます。FPGA エンジニアであるというのは、すべてが並行して進むことに慣れているということなのです。

要点はこうです。会社では、既存プロジェクトに機能を追加するところから始める可能性が高いということです。そしてそのプロジェクトがよく構造化されていれば(まあ、めったにそうではありませんが)、初日からすべてを知っている必要はありません。

どう始めればいい?

FPGA 設計の学習は、理論的なスキルの習得と、実際に手を動かす力の獲得の組み合わせです。先に電子工作で遊ぶか、先に理論を学ぶか、あるいは両方を少しずつ進めるかは、あなた次第です。どのアプローチでもうまくいきます。

ただし 1 つ警告したいことがあります。FPGA ホビイストから学ばないよう気をつけてください。これは本当に逆効果になりえます。FPGA の仕事で最大の難しさは、信頼できる設計を得ることです。ホビイストはたいていそれを気にしません。10 年間現場で動き続ける製品を作っているわけではないからです。そのため、彼らは手っ取り早い近道を提示しがちで、プロの FPGA 設計に必要な小さくても決定的なディテールを飛ばしてしまいます。彼らから学ぶと、本当に悪い癖が身につきます。

ホビイストと、学ぶべき人との違いはどう見分けるのか? 自分自身に知識がないうちは、何が正しく何が間違っているかを知るのは難しいものです。ただ、その書き手が FPGA 設計に対して正しい誠実さ(細部まで丁寧な姿勢)を持っているかどうかで、なんとなく察することはできます。正しいタイプの人物像については、このシリーズの最終回で説明します。

それはさておき、実際に手を動かす方法を提案します。

インターネットにはサンプルプロジェクトがあふれています。たいていは、自分のボード専用に用意された FPGA プロジェクトから始めるのが一番簡単です。そうしたプロジェクトは、まさにこのハードウェアを買ってほしいという意図で、パッケージの一部として提供されていることがよくあります。

まずは LED を点滅させるだけのシンプルなプロジェクトから始めましょう。LED の点滅が面白いからではなく、実装からビットストリーム書き込みまでの最初の 1 サイクルを一通り経験できるからです。ツールをインストールし、ビットストリームが生成されるのを目にし、ボード上で何かが起こるのを確認できます。それ自体が 1 つのマイルストーンです。

次に、他のサンプルプロジェクトを試してみましょう。そうしたプロジェクトの価値は、あなた自身がそこから何を理解するか、そしてもっと重要なのは、プロジェクトに意味のある変更を加えて何が起きるかを見る力にあることを忘れないでください。変更できないプロジェクトは、何も学べなかったプロジェクトです。

ついでに言うと、長々とした操作手順が付いてくるベンダーのデモプロジェクトには注意してください。ここをクリック、あそこをクリック、最後にはボードがすごいことをする、というやつです。途中で何も理解できておらず、プロジェクトが複雑すぎて理解も改造もできないなら、そのプロジェクトはあなたにとってまったく無価値です。それはデモであって、設計例ではありません。

最後の、そして最も難しい段階は、自分で決めたプロジェクトに挑戦することです。インターネット上の既存プロジェクトからいくらでもヒントは得られますが、本当に大事なのは、すべてを自分ひとりでやることです。公開されているプロジェクトの多くと違い、あなたのプロジェクトのアイデアは無意味でくだらなくてもかまいません。LED とボタンでくだらないゲームを作る、ボードを楽器にする(PWM でアナログっぽい出力信号を作る)、LED をさまざまなパターンで明滅させる……思いついたもので何でもいいのです。そういうプロジェクトは普通公開されません。誰が、意味のない結果のためにくだらないアイデアに時間を費やしたいと思うでしょうか? でも、スキルを練習するためにやるなら、結果が役に立たなくても問題ありません。大事なのは、それが正しく動くこと、そして正しい手法でそれを達成したことです。LED とボタンから、もっと挑戦的なものへと登っていきましょう。

FPGA に関する短い動画は役に立ちます。とくにハードウェアで特定のことを行う方法を示すものは有用です。長い動画は一般に学習効率が悪く、冗長で焦点がぼやけがちです。

最も重要なのは、学習のプロセスを自分でコントロールすることです。どのスキルを身につけたいかを決め、それを身につけるのに役立つリソースを見つけましょう。チュートリアルや動画のシリーズに、鼻を引っ張られるように従ってはいけません。

どんなボードを買えばいい?

それは、どの道から始めたいかによります。「処理ロジック」か、それとももっとエレクトロニクス寄りの実験か。それぞれの可能性を以下で論じますが、まずはどちらの場合にも当てはまるアドバイスを 2 つ。

まず第一に、安いボードを選ぶことです。これを最初のボード、そして最後ではないボードと考えてください。小さな FPGA、少ないロジックセル、たいして凄くもない性能のシンプルなボードであっても、原理はどのボードでも同じです。高価なボードでしかできない派手なプロジェクトは、たいてい教育的な価値がほとんどありません。最初は基本をきちんと押さえる必要があり、そのためにはほぼどんな FPGA でも十分です。最初のボードでは物足りなくなったと感じたときには、次に何を選ぶべきかずっとよく分かっているはずです。

次に、AMD の FPGA を搭載したボードを選びましょう。他のボードのほうが安かったり技術的に優れていたりするかもしれませんが、FPGA 市場は AMD が支配しているので、彼らの FPGA と開発ツールスイート(Vivado)の経験が将来役に立つ可能性が最も高いです。

さらに、他の FPGA ベンダーも AMD から自社 FPGA への移行をできるだけスムーズにしようと努めていて、とくに Vivado に似た開発ツールを提供しています。ですから、最終的に別ベンダーの FPGA を扱うことになっても、良いスタートを切れています。AMD の FPGA がすべてのアプリケーションにとって最良の選択だと言うつもりは毛頭ありませんが、AMD は学習の出発点として最適です。たとえ後で別のベンダーに移るとしてもです。

AMD が提供する FPGA ファミリの中でも、私は Artix-7 か Spartan-7 を強くおすすめします。FPGA 内部の ARM プロセッサを試したいなら、Zynq-7000 ファミリがおすすめです。これらのデバイスの安価なラインは、実は Artix-7 FPGA に ARM プロセッサを追加したものです。ですから、これを 1 つ手に入れれば、Artix-7 として使うこともできますし、ARM プロセッサと組み合わせて使うこともできます。Zynq-7000 は 2 台分が 1 台になったものです。

Artix-7、Spartan-7、Zynq-7000 はかなり古い FPGA ファミリです。しかし、それらと市場に出ている最新の FPGA との違いは、性能(とくにクロック周波数)と、FPGA 初心者には意味のない多くの特殊なロジックブロックだけです。Artix-7(または Spartan-7)のすべての機能を使ってプロジェクトをきちんと完成させられれば、ほぼすべてをカバーしたことになります。Ultrascale、Ultrascale+、Versal に手を出す必要はありません。

Artix-7、Spartan-7、Zynq-7000 のもう 1 つの利点は、これらの FPGA をターゲットにする場合、Vivado(Windows でも Linux でも)を完全に無料で使って、Verilog からのビットストリーム生成、FPGA への書き込み、設計のシミュレーションができることです。これらのデバイスでは幅広い IP ブロックも無料で利用でき、ソフトウェア開発キットも同様です。つまり、ソフトウェアにお金を払わずに Vivado でかなりのところまで進められます。実際、ほぼすべての FPGA ベンダーが、よりシンプルな FPGA ファミリ向けの開発ツールの無償利用を認めています。

より新しい、より「重い」FPGA ファミリのボードを選びたい場合は、その FPGA で Vivado を動かすために有償ライセンスが必要かどうかを必ず確認してください。

「本格的に」FPGA を学ぶための機材

本気で FPGA に取り組むなら、小さな電子工作ラボを作る必要があります。といっても大した話ではなく、必要なもののほとんどは安価で、どの電子工作ショップでも手に入ります。小さな抵抗、Dupont ワイヤなどです。シンプルなデジタルマルチメータも必ず用意しましょう。一番簡単なものでも役に立ちます。はんだ付け用の基本的な道具もあったほうがいいでしょう。

私が購入をおすすめする高価なものは、シンプルなオシロスコープです。これは電圧を時間の関数として表示する測定器です。これにより、FPGA の物理的な入力ピンと出力ピンの信号を見ることができます。アナログ電子信号、たとえばスピーカーを駆動する電圧なども見ることができます。

オシロスコープは重要です。この測定器を使って設計を確認し、デバッグする方法を学ぶべきだからです。便利なのは単体のオシロスコープです。ただし、コンピュータに接続し、コンピュータ上で動くプログラムで信号を見る「USB オシロスコープ」もあります。どちらでもかまいません。どちらも使えます。凝った機能も必要ありません。

ただし、オシロスコープのアナログ帯域幅が十分であることを確認してください。アナログ帯域幅は、見ている信号がどれだけ速く変化できるかの限界です。これはオシロスコープのサンプルレートではありませんので注意してください。サンプルレートは、ときどき(おそらく買う人を混乱させるために)「帯域幅」と略して呼ばれることもあります。デジタル信号がアナログ帯域幅に近いレートで変化すると、実際にはシャープで速い立ち上がりでも、画面にはなまったエッジで表示されます。これより速いデジタル信号は、まったく区別できないかもしれません。

ですから、安く始めたいなら、アナログ帯域幅 10 MHz のものを選びましょう。これは、ロジック設計のクロック周波数を 10 MHz より高くすべきではないという意味です。そうしないと、出力信号がオシロスコープの画面に正しく表示されない可能性があります。実際には 5 MHz 以下に抑えるほうがよいでしょう。FPGA にとっては非常に低い周波数ですが、最初の一歩を踏み出す目的では何の問題もありません。唯一の問題は、低い周波数でしか動かないような、とてもお粗末に作られたロジック設計でも通ってしまうことです。ですからこの道を行くなら、クロックを 100〜200 MHz に上げて、タイミング制約 (timing constraints) が満たされているかを確認し、自分の設計が非常に低いクロック周波数に縛られていないことを確かめてください。

価格差が大きくないなら、アナログ帯域幅 50〜100 MHz のオシロスコープが見つかれば、それを選ぶことをおすすめします。私自身は、アナログ帯域幅 100 MHz 未満のオシロスコープは自分のために買いません。

もう 1 つ確認したいのは、オシロスコープに少なくとも 2 つの入力チャンネルがあり、2 つの波形を同時に見られることです。意外に思われるかもしれませんが、実用的な場面のほとんどでは波形 2 つで十分です。私のオシロスコープは 4 入力チャンネルで、3 つ使うことはときどきありますが、4 つすべてを使うことはめったにありません。

オシロスコープについて最後にもう 1 つ。プローブも必ず購入してください。通常はオシロスコープと一緒に買います。10 MHz で動かしているうちはそれほど重要ではないかもしれませんが、周波数が高くなるほど、プローブを使うことの重要性が増します。

では…… FPGA ボードはどうする?

実験用の機材がそろったら、どの FPGA ボードを買うかを選べます。答えはとてもシンプルです。AMD の FPGA を搭載した安いボードを選びましょう。多くの場合、Artix-7 か Spartan-7 ベースのボードになります。次のセクションで述べる利点が欲しいなら Zynq-7000 です。ここからはエレクトロニクス寄りの FPGA 環境に焦点を当てます。

最も注意すべきは、そのボードに FPGA を書き込むための USB インターフェースがあるかどうかです。これを説明するために、JTAG について少し話します。

ビットストリームを FPGA に書き込むために、FPGA には実験用として JTAG と呼ばれるいくつかのピンがあります。このインターフェースは他の仕掛け(とくに ILA)にも役立ちますが、最も重要な目的はコンピュータから FPGA へビットストリームを送り込むことです。昔は、コンピュータに USB で接続する小さな独立した箱(「JTAG ケーブル」や「JTAG ライタ」と呼ばれることが多い)がありました。この箱の反対側は何本かのワイヤになっていて、FPGA ボード上のピンヘッダに接続しました。

現在では、多くの FPGA 開発ボードにこの機能が内蔵されています。つまり、この「JTAG ライタ」は不要で、FPGA ボードを Vivado が動いているコンピュータに直接接続し、自分の設計のビットストリームで FPGA をコンフィギュレーションできます。簡単で便利です。

よりシンプルで安価な FPGA ボードにはこの機能がなく、JTAG ライタを別途購入する必要があります。公式の JTAG ライタはかなり高価で、非公式のものは安定して動くかどうか分かりません。ですから最初のボードでは、この問題をまるごと避けるために少し余分にお金を払う価値があると思います。少なくとも、ワークフローに慣れるまでは。あるいは、ビットストリームを microSD カードから読み込める Zynq ボードを選ぶのも手です。

JTAG の話はこれくらいにして、次はボード自体の機能です。

ボードには、何か意味のあるものに接続できる I/O があるべきです。学習の過程では、ボードを別の小さな電子機器、たとえば何かのアナログ部品の開発ボードなどに接続することに大きな価値があります。最高の学習プロジェクトは、自分で実際に何かを作るものです。ですから私は、Dupont ワイヤで何にでも接続できる汎用ピンヘッダを備えたボードを好みます。

私はたいてい、直接操作できるように LED と押しボタンがたくさん載ったボードを好みます。最初のプロジェクトには 7 セグメント表示器も便利です。

ボードには独自の周辺部品がいくつか載っていることがよくあります。それらを使って小さなプロジェクトが作れるか、それとも複雑すぎるかを考えてみましょう。たとえば、多くの FPGA ボードには HDMI 出力端子があります。これを使えば、通常のコンピュータモニタに直接届く出力信号を生成できます。ピクセルを映像信号に変換する部分はとても複雑なので、たいていは既成のロジックブロックを使うことになるでしょう。つまり HDMI 出力それ自体から学べることは多くありません。一方で、映像出力に映像パターンを作ることはかなり学べます。簡単なテキスト表示を作ってみる? ビデオアート? フラクタル? 100x100 ピクセルの画像を画面上の 768x768 ピクセルの領域に、正しい線形補間で表示する? それを正しくできたら、かなりのものです。

では、どのボードを選ぶべきでしょうか? そのボードで何をしたいか、どんな機材を持っているかを考えてみてください。そして、あまり高くないボードを選びましょう。繰り返しますが、このボードは最初のボードであり、最後のボードではないと考えてください。

Zynq-7000 搭載ボード

すぐにはエレクトロニクスに飛び込みたくない人でも、FPGA で面白いことをする方法があります。コツは、ロジックを物理的な信号ではなくプロセッサとやり取りさせることです。エレクトロニクスと格闘する必要はありません。考え方は、組み込みプロセッサを搭載した FPGA、たとえば Zynq-7000 を使うことです。

しかし、組み込みプロセッサがあると、なぜ出発点が楽になるのでしょうか? プロセッサ関連の話や、ロジックファブリック(つまり「FPGA 部分」、PL と呼ばれます)とのやり取りに飛び込まなければ、楽になります。代わりに、その部分向けの既成キットを使って、簡単な手段でロジックとやり取りしましょう。プロセッサ部分の詳細に飛び込みたければ、後でいくらでも時間があります。

これを実現する最も簡単な方法は、Xillinux から始めることです。これは、microSD カードを手軽にセットアップして、ボードを Linux が動く小さなコンピュータにするパッケージです。ボードにキーボード、マウス、コンピュータモニタを接続すると、シンプルなグラフィカルデスクトップが使え、ターミナルウィンドウもグラフィカルエディタも開けます。ボード上のプロセッサで gcc と Makefile を使って C プログラムを直接コンパイルできますし、プロセッサ上でスクリプト (script) も実行できます。

しかし Xillinux の本当のポイントは、「FPGA 部分」(Verilog で書くロジック)とシンプルなインターフェースで通信できることです。Xillybus をベースにしており、ソフトウェア側は単純なファイル I/O でデータを送受信し、ロジック側は同じ目的で標準的な FIFO を使います。このデータ交換方法の重要な点は、学習のための人工的な仕掛けではないということです。FIFO は FPGA プロジェクトでデータをやり取りする一般的な方法です。

ですから、「処理ロジック」(データを入力として受け取り、処理して出力データを生成するロジック)の設計に興味があるなら、最初から正しいやり方で進められます。「実際の」FPGA プロジェクトでは、この種のロジックは通常 FIFO を通して処理対象のデータを受け取り、結果を別の FIFO へ出力します。「実際の」FPGA プロジェクトでは、これらの FIFO の反対側には通常、別のロジックコンポーネントがあります。Xillybus を使う場合は、代わりにプロセッサ上でソフトウェアが動いています。あるいは、ファイルと FPGA の FIFO との間でデータを直接コピーする簡単なシェルコマンドだけでもかまいません。

まとめると、Xillinux と Xillybus を使うとスムーズにスタートでき、最初のロジックに集中し、コンピュータのようなインターフェースで簡単にテストできます。さらに、この環境ではプロセッサからシンプルなコンピュータプログラムやスクリプトでロジックを直接制御するのも簡単です。そして最も重要なのは、この構成が外部世界とのインターフェースを伴わないプロジェクトにとってとても自然だということです。

Xillinux を使うのに特に関連する開発ボードが 2 つあります。Smart Zynq と Z-Turn Lite です。どちらも低価格なボードで、Xillinux をセットアップするための既成キットが用意されています。このウェブサイトにも、Smart Zynq ボードでできることを紹介したいくつかのページがあります。

Linux に慣れていない人にとっては、Zynq-7000 プロセッサ上で動く Linux システムを使って Xillybus 経由で「FPGA 部分」とやり取りするのは難しいと感じるかもしれません。この比較的シンプルな Linux ディストリビューションをソフトウェアの開発や実行に使うのも、敷居が高いかもしれません。

Linux や Windows が動く「本物の」コンピュータのほうがよければ、PCIe インターフェースを備えた FPGA ボードを使って、同じシンプルな Xillybus ベースの構成を実現できます。こうしたボードはより高価ですが、Linux や Windows が動くコンピュータに挿し込み、まったく同じ方法で FPGA とデータをやり取りできます。この場合、Artix-7 で間違いなく十分ですが、対応する FPGA ファミリの一覧についてはXillybus のダウンロードページを参照してください。

Artix-7 といえば、安価な Zynq-7000 デバイスは ARM プロセッサを載せただけの Artix-7 FPGA だということを繰り返しておきます。ですから、プロセッサを無視して、Zynq ボードを通常の Artix-7 ボードのように使うことも可能です。

1 つ違うのは、Zynq-7000 FPGA はビットストリームを microSD カードから取得する機能も持っていることです。したがって、ビットストリームを更新するのに必要なのは、USB 用の microSD アダプタだけです(お使いのコンピュータやノート PC にその機能がすでにあれば別ですが)。実は、U-Boot を使って TFTP で Ethernet ネットワーク経由でビットストリームを取得することもできますが、サーバーをセットアップする必要があるので、最も簡単な方法ではありません。

Zynq-7000 FPGA にも、どの FPGA と同じように JTAG インターフェースがありますが、めったに使われず、ボード上のピンに接続されていないこともあります。

情報が多かったので、まとめます。

FPGA と AI(LLM)

最後に、誰もが気にしている話題、AI について話しましょう。

AI は主にインターネット上の公開された素材から学びますが、その大部分はホビイストか AI 自身によって書かれたものです。そのため、この分野における AI の提案の品質は、たとえばソフトウェアに関する回答よりも明らかに低くなります。ソフトウェアの回答もいつも素晴らしいわけではありませんが、それはまた別の話です。

では AI は FPGA という職業を殺すのでしょうか? 未来がどうなるかは誰にも分かりません。ただ、1980 年代のコンピュータとロボットの導入から何を学べるか考えてみましょう。注目に値するパターンがいくつかあります。

コンピュータとロボットは、愚かで反復的な作業を置き換えました。多くの人が実際に職を失いましたが、それはそうした作業を担っていた人たちでした。知的な仕事をしていた人はその立場にとどまり、さらに効率的で、より高い報酬を得るようになりました。

同時に、機械の活用は理論上可能な範囲よりはるかに狭いものです。工場では、ロボットに置き換えられてもおかしくない手作業を人間が行っており、それは自動車製造でも同じです。建設現場、大工仕事、パン屋などでも同じです。その理由についての私の推測はこうです。ロボットやコンピュータを使いこなせるほど賢い人が足りず、自分の手を使って作業を覚えられる人はいくらでもいる、ということです。

LLM ベースの AI の導入も、おそらく同じ道をたどるでしょう。反復的で愚かな作業は AI に置き換えられますが、賢い作業は AI を道具として使う人間が行います。

ですから、将来の FPGA 設計者であるあなたにとっての結論はシンプルです。この職業を徹底的に深く学びましょう。Verilog を知っているだけでは足りません。FPGA 設計者であることは、決して Verilog のコーディングだけではありませんでした。AI も、非常に具体的な指示を与えられれば Verilog を書けます。FPGA 設計とは主に、そうした指示を生み出す賢明な判断を下すことです。それをコードにするのは最も簡単な部分です。

AI が置き換えられないのは、より深い理解と優れた判断力です。少なくとも今のところは。そして、いつか人間の判断を機械で置き換えることが可能になったとしても、それは最後に置き換えられるものです。AI がこれまでの技術と同じように導入されるなら、人間の判断は依然として人間が行います。

もう 1 つ。たとえ AI が Verilog コードやタイミング制約を書き、その他の作業もこなすとしても、行われたことが正しいか、そしてそれが前進するうえで有益な道であるかを検証する人間は必ず必要です。LLM はある種の脳活動のシミュレータなので、人間と同じように間違いを犯す傾向があります。そのため、AI を導き、AI の出力が適切かどうかを確認する、有能で賢明な人間が必要です。つまり、将来の設計者は今日のエンジニア以上にプロフェッショナルである必要があります。凡庸なエンジニアは AI に置き換えられますが、それは優秀なエンジニアが AI を制御している場合にのみ成り立ちます。そしてそうしたエンジニアを見つけるのは難しいので、この業界で AI が大規模に使われることはないかもしれません。伝統的な産業に今でも手作業で働く人がいるのとまったく同じです。

結論としてはこうです。何を学ぶにしても、徹底的に深く学びましょう。そうしなければ、いつか LLM に尻を蹴飛ばされることになります。もしかすると、その日はすでに来ているのかもしれません。

以上でこのシリーズの最初のページを終わります。次のページでは、私が重要だと思う理論的スキルについて扱い、なぜそれらを学ぶ価値があると思うのかも説明します。

このページは英語から機械翻訳されたものです。不明な点があれば、原文を参照してください。
Copyright © 2021-2026. All rights reserved. (852e87d4)