最新ツール『SLX FPGA』でHLS設計フローにおける課題へ取り組む

Silexica プロダクトマーケティング マネージャーLoren HobbsはHLSを使ってFPGAを設計する際に直面する5つの問題について注目しています。彼はFPGAプロジェクトの生産性の向上をさせ、FPGAの使用をより広いスキルセットのエンジニアに対して広げるための新しいツールの使用方法を検討しています。

C/C++ ソースコードをVerilog/VHDLに変換するHLS (High-Level Synthesis: 高位合成)は15年以上前から市販されています。FPGAまた EDAベンダー のHLSツールはより高度な抽象化、検証の高速化、および設計の反復の迅速化によって生産性の向上が見込まれています。例えばC/C++によるデザインシミュレーションをする場合、RTL(レジスタ転送レベル)でシュミレーションするよりも10倍から100倍高速になりえます。また、画像処理やコンピュータービジョンの多くのアプリケーションでは視覚的な検証が必要とされてます。RTLシミュレーションを実行する場合、このような検証は設定が困難ですが、Cレベルで簡単に実装できます。 HLSベースの手法を使用しながらシミュレーションのスピードを上げることで、設計の反復が速くなり生産性の向上に大きく貢献します。迅速なシミュレーションでより速い設計の繰り返しをもたらすからです。

HLSを利用することで、組み込みソフトウェアプログラミングを専門にしているより多くのエンジニアによるFPGAの使用が注目を集めるかもしれません。従来のFPGA 設計方法はVerilog やVHDLなどハードウェア記述言語(HDL)で設計をするため、非常に特殊なスキルセットと熟練度が必要でした。このスキルセットは、組み込みソフトウェア開発者と比較して非常にまれであり、FPGAの使用がHDLでのコーディング経験のあるものに限定されてしまいます。

HLSを使用することによって、組み込みソフトウェア開発者(およびハードウェアエンジニア)は、C / C ++など高水準言語を用いてハードウェアでのアルゴリズムの実装が可能になります。

 

FPGA設計にHLSの使用がそれほど重要なのであれば、どうしてC/C++でFPGA設計をすることが標準的な設計入力方法にならなかったのでしょうか?

簡単な答えとしてはHLSの設計方法の導入は現実的に設計の過程で考えを要し、取り除かなければなならない特有な課題が存在しているからです。これらの課題は設計者により多くの負担をかけてしまい、開発時間に影響がでることでHLSの生産性が否定されてしまいます。

これら5つの課題を見ていきましょう。

1.HLSコンパイラーによって合成不可能なC/C++コード

HLSコンパイラーのC/C++コードガイドラインは広範囲にわたります。HLS合成のためのCコードの記述やリファクタリングをする際に理解しなければならない資料は1000ページ以上に上ることもあります。例として、HLSは動的サイズの配列内の変数に対するメモリアクセスのサポートはしていません。また、特定のFPGAデバイス内のメモリ容量は固定されています。つまり、malloc、calloc、newなどの関数への呼び出しで可変サイズのオブジェクトを動的に割り当てるコードはサポートされていません。HLSツールは、効率的なハードウェア実装を実現するために、コンパイル時にアルゴリズムが要する必要なメモリリソースを知っている必要があります。

 

2.ハードウェアに対応していないC/C++コード 

ハードウェア実装を考慮に入れない、さまざまなメモリ構成、データ型などを使用してC / C ++コードを作成すると、デバイスリソースの肥大化やパフォーマンスの低下など、意図しない結果を招く可能性があります。非常に大きく、かつ不要なデータ型を用いらないよう注意が必要です。例えばソフトウェアで10ビット整数のみが必要な時に、標準プロセッサではレジスタまたはメモリ位置がすでに固定サイズであるため、32ビット整数型の使用はそれほど問題ではありません。しかし、ハードウェアで使われていないビットを用いて実装すると、FPGAの場合は貴重なFPGAリソースを無駄に消費することになります。

 

3. 並列化の特定

C/ C ++コードは通常、標準的なプロセッサで順次実行されますが、論理ゲートで機能を実装すると、操作を並列に実行できるため、ハードウェアでのコードの実行が高速化されます。設計内で並列処理の可能性を見つけることは、アルゴリズム、関数、コードベースの複雑さが増すにつれ極めて難しく、時間がかかる可能性があります。

 

4. ソフトウェアとハードウェアの分割

ヘテロジニアス(この場合エンベデッドプロセッサを搭載したFPGA)設計の場合、HLSを介してFPGAファブリックの並列性を利用するためにプロセッサ上で実行するものと、ハードウェアに移行するものを特定する作業でかなりの時間と作業の繰り返しが必要になります。合成前のシミュレーションをしている場合もです。

 

5. C / C ++コードへのHLSコンパイラ プラグマやディレクティブの挿入

HLSコンパイラがソフトウェアをハードウェアに効果的に実装するためには、ユーザはプラグマまたはディレクティブの形式でコンパイラにガイダンス情報を提供する必要があります。

例えば、 プラグマを使用するタイミング、パラメータの設定方法、コード内の挿入場所、およびアプリケーション内でシステムレベルでプラグマを最適化する方法を決定するのは、困難で時間がかかります。

つまり、HLS設計の利点を活用したい人にとって、これらの課題は大きな壁となっています。

HLSベンダーは顧客を教育するため、様々な資料やトレーニングによってどのようにこれらの問題に取り組めばいいのかを伝えていますが、今だ手作業の過程が残っているため、習得するのに時間がかかります。

SilexicaのSLX FPGAツールは、10年以上にわたるコンパイラテクノロジの研究に基づいており、HLS設計プロセスの各ステップを通じてこれらの課題一つ一つに取り組むことで、先ほど述べた問題に対する実用的なソリューションを提供します。

まず、SLX FPGAはC / C ++ソースコードの合成可能性を解析し、合成不可能なコードのリファクタリングを自動で行い、コードリファクタリングのヒントとなる情報を提供します。 SLXは、合成不可能なコードの各セクション情報をユーザーに知らせ、コードを自動的に変換するか、コードを合成可能にリファクタリングする方法などのヒントを与えてくれます。

 

FPGA BLOG 01-

今後発売されるSLX FPGAでは、効率の悪いハードウェア実装をもたらすハードウェアに不向きなデータ構造を特定します。 SLXツールは、どのようなさまざまなデータ型オプションがより効率的な実装に適しているかを確認するために、高速の「what if」分析を実行する方法を提供します。また、新しいSLXでは合成不可能なコードに対し、パフォーマンスや、リソース使用率の見積もりを提供する機能のサポートを追加し、合成可能にするためのコードリファクターすることなく、アプリケーションの細かな情報を提供します。

SLX FPGAが次に取り組む課題は、逐次実行から並列実行またはパイプライン実行に変換できる並列処理についてアルゴリズムまたはアプリケーションを分析することです。並列処理を識別することで、SLXはC / C ++コードの最も効率的なハードウェア実装を提供します。組み込みプロセッサを搭載したFPGAシステムを使用する場合、SLX FPGAはソフトウェア ドメインとハードウェアドメイン間でコードの効率的な分散のヒントを提供するでしょう。

FPGA BLOG 02-

ソフトウエアとハードウエアの分割が定義された後、SLX FPGAはプラグマをコードに挿入し、C / C ++コードのコンパイル時にHLSコンパイラがハードウエア上に最適化されたシステムを実装できるようになります。

FPGA BLOG 03-

SLX FPGAはHLS設計フローを使用する際の課題に直接取り組む業界初のツールです。C/C++コードを最適化されたハードウェア実装に変換するための実用的な洞察を提供することで、習得にかかる時間を削減します。

ご興味があればいつでもご連絡ください。

ご連絡はこちらまで

LOREN HOBBS

Intel、Altera、Cypress、NXPなど世界的に有名なトップ企業で20年以上のエンジニアリングおよびマーケティングを経験。多くの主要デバイスの製品設計、定義、また販売に携わってきた。現在はSilexicaのプロダクトマーケティングを統括している。彼は今の課題にとどまらず、今後の様々な課題に対応できる新しい製品をお客様に伝えることに情熱を注いでいる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です