ブログ

FPGAコード開発の簡素化: ChatGPTの効果

AIのパワーと柔軟性を活用し、Pythonを使ってFPGAプログラミングの複雑な世界を打破する

VHDL などのハードウェア記述言語 (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 を数回繰り返すと、これまでに使用した中で最も便利なペア プログラマになるでしょう。

例: FPGA で平方根を求める

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

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

これを使用して、Python でアルゴリズムの 2 つを作成してテストすることができます (図 XNUMX を参照)。これは、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 クロック サイクルごとに XNUMX つの値でした。 

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

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

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

Moku Cloud Compile を使用して開発したいカスタム インストゥルメントについて質問がありますか?お問い合わせ先 support@liquidinstruments.com エンジニアとつながるために。

波形発生器の一覧に戻る