この記事では、ChatGPTがFPGAコード開発を簡素化する方法を説明します。 Python スクリプトを HDL に変換し、カスタム FPGA プログラミングをより簡単に行えるようにします。AI を活用して迅速なプロトタイピングとカスタム機器の作成を行う方法を学びます。

VHDLやVerilogといったハードウェア記述言語(HDL)は、習得が非常に難しいことで知られています。複雑ではあるものの、これらの強力なツールは、Liquid Instrumentsの再構成可能なMokuテストデバイスなど、フィールドプログラマブルゲートアレイ(FPGA)を用いてカスタムアルゴリズムを実行するために不可欠です。Pythonなどの他の言語は、豊富な情報に簡単にアクセスできるため、調査、学習、習得が容易です。ChatGPTのような高度な言語学習モデルのおかげで、Pythonのような使いやすく一般的なプログラミング言語でスクリプトを入力し、構文レベルだけでなく動作レベルでもFPGAコードに素早く変換できるようになりました。これにより、テスト目標の達成を加速させる新たな可能性が開かれます。

この新しい機能を使用すると、コードが FPGA 上でどのように実行されるかを完全に理解する必要はありません。むしろ、必要なコードを作成するには、基本的なコンピューター プログラミングを知っていれば十分です。人工知能 (AI) を使用して FPGA コード開発を加速するのは便利ですが、ChatGPT などのツールで発生する可能性のある一般的なエラーに注意してください。この例では、平方根関数を変換する方法を示し、ChatGPT を使用して Python から FPGA コードを作成する際の最も重要な考慮事項の概要を説明します。 その前に、FPGA コードを記述する際の課題を確認してみましょう。

  • プログラミングのパラダイムは、CやPythonのような一般的な言語の手続き的実行とは大きく異なる。
  • あまり一般的なスキルではないため、Stack Overflowの投稿やサンプルデザインなどのリソースもあまり一般的ではない。
  • デバッグが難しい。FPGA上で動作するデザインを構築するには比較的長い時間がかかるため、反復作業が制限される。FPGA上で動作するように設計を構築するには比較的長い時間がかかる。一方、非常に単純な新人のミスかもしれないものを明らかにするために、高品質のシミュレーションをセットアップするには多くの時間がかかる。

FPGAプログラミングの仕組み

FPGA プログラミングをコンピューター プログラミングに近づけることは、メーカーの長年の目標でした。高位合成 (HLS) ツールを使用すると、C または同様の言語でコードを作成し、それを FPGA 上で実行できますが、手作りの HDL の実行の効率には決して達していません。 MathWorks HDL Coder™やMyHDLのようなツールでは、それぞれMATLABやPythonで特別に設計されたコードを書くことができ、FPGA上で実行できるように変換してくれます。しかし、これらのプログラムの設計が特殊であるため、FPGAプログラミングのパラダイムを理解する必要があります。

ChatGPTのような大規模言語モデル(LLM)の登場により、あるパラダイム(Pythonの手続き型コードのような)で書かれたプログラムを、何を達成しようとしているのかを理解し、別のパラダイム(FPGAのハードウェア記述言語のような)でコードを書き換えることができるシステムにアクセスできるようになりました。これは、高位合成問題への根本的なアプローチ方法であり、大きな利点もありますが、興味深い欠点もあります。

  • 好きなプログラミング言語でアルゴリズムを作成できる。
  • 単純なprint文から完全な対話型デバッガまで、あなたが期待するすべての機能を使って、同じ言語でアルゴリズムをデバッグすることができる。
  • 変換が最初から完璧でなくても、ChatGPTの出力を、完璧に作成されたサンプル コードのように扱うことができる。 そこから学習すれば、問題とその解決策をよりよく理解できるようになる。

もちろん、落とし穴があります。FPGA の概念には、必ずしも手続き型コードで表現できないものがあります。 したがって、ChatGPT が適切なコードを生成するとどうやって期待できるのでしょうか? そこでChatGPTの会話型インターフェースが活躍します。ChatGPTに何をすべきかを伝えるだけです!プロンプトに好きなだけ情報を追加することができます。ChatGPTと何度か繰り返すうちに、最も便利なペアプログラマになるでしょう。

例: FPGA で平方根を求める

FPGA で平方根を求める例を見てみましょう。これは、通常は浮動小数点演算を使用する適度に複雑な演算ですが、どちらも FPGA で処理するのは簡単ではありません。図 1 に示すように、問題へのいくつかのアプローチを考えるのに ChatGPT をプロンプトすることから始めます。

図 1: 整数演算で平方根を計算する一般的なアルゴリズム

これを使用して、Python でアルゴリズムの1つを作成してテストすることができます (図 2を参照)。これは、GitHub Copilot や AWS CodeWhisperer などの専用の AI コーディング ツールを試すチャンスです。

図 2: 16 ビットの精度の決定

Python でコードをデバッグし、正しいビット数の精度と期待される出力値が維持されていることを確認します。次に、図 3 に示すように、変換を実行します。

図3: Python 関数を VHDL エンティティに変換する

作業内容の確認

多くの場合、FPGA コードは最初は正しく実行されます。ただし、ChatGPT が変換を行うときによくある間違いがいくつかあります。

  • 精度の正しいビット数が維持されていないため、出力が常にゼロに切り捨てられたり、最大値に切り上げられたり、単に詳細が不十分になったりする。
  • 信号の作成時にビット幅を適切に追跡していない。 HDL では、すべての変数のビット幅を手動で正確に指定する必要があるが、Python ではこれを気にする必要はない。入力信号と出力信号に必要な精度のビット数に関する情報をプロンプトに明示的に追加することで、この問題を軽減できるが、それでも一致しない場合には合成エラーが発生する場合がある。
  • 単純な変換エラー (左シフトから右シフトへの変換、アルゴリズムを狂わせる中間変数の追加など)。

これはすべて、ChatGPT がソリューションを完璧に仕上げることを期待するのではなく、ChatGPT と協力してソリューションに取り組んだときに最良の結果を達成できることを示しています。

それでも、常に改良されています。例として、Python の for ループを見てみましょう。これは VHDL の for ループに変換できますが、実際には意味的には大きく異なります。 Python では、各反復は次々に発生しますが、VHDL では、各反復は異なる論理ゲートのセットで同時に発生します。

ChatGPT の現在の無料バージョンはその違いを理解しておらず、Python の for ループを VHDL の for ループに直接変換していました。

現在の GPT4 モデルはステートマシンを正しく推論し、ループの各繰り返しを次々と実行し、ループの各呼び出しを次々に実行しました。 たとえば、反復平方根アルゴリズムが完了するまでに16回の反復がかかった場合、前の入力が完了するまで別の入力の処理を開始できず、スループットは16クロック周期ごとに1つの値でした。

GPT4 モデルは、完全にパイプライン化された実装を発行できます。このアルゴリズムでは、引き続き16クロック周期のレイテンシーが発生しますが、16の計算がすべて同時に進行し、クロック周期ごとに16の新しい結果が得られます。

ChatGPT の機能のこうした急速な改善により、Python またはその他の一般的なプログラミング言語での FPGA コードの記述がより高速かつ効率的になり、より多くのユーザーがカスタム テスト機器、プロトタイプ、その他のアルゴリズムをユーザーがプログラム可能な FPGA で実装できるようになりました。カスタム プログラマビリティを備えた FPGA へのアクセスが容易になるため、HDL の専門家でない人でも、FPGA によって可能になるタイム クリティカルな処理と並列処理の恩恵を受けることができます。のようなツールを使用して、 Mokuクラウドコンパイル Liquid Instruments の場合、これらの設計をソフトウェア定義のテストおよび測定機器と並行してテストできます。 オシロスコープ, スペクトラムアナライザ, PIDコントローラー カスタマイズされた完全に統合されたシステムを単一のデバイスに作成します。

Moku Cloud Compile で ChatGPT を使用する方法のその他の例については、 ウェビナーを見る。複数の例を掲載した詳細なブログもご覧ください。 こちら (カスタム一時的障害検出) および こちら (絶対値)。

Moku Cloud Compile を使用して開発したいカスタム計測器について質問がありますか?エンジニアとのご相談は、support@liquidinstruments.comまでご連絡ください。


Mokuをデモモードで試す

macOSとWindows用のMoku:アプリをダウンロードできます こちら.


よくある質問への回答

デバイスや機器に関する質問と回答は、 ナレッジベース .


Mokuユーザーとつながる

プログラムに参加する(英語) ユーザーフォーラム 新しい機能をリクエストしたり、サポートのヒントを共有したり、世界中のユーザー コミュニティとつながったりできます。