連載
» 2018年11月16日 10時00分 公開

新・いまさら聞けないFPGA入門(後編):FPGAの力を引き出す3種の開発ツールとは (2/3)

[小松洋一(インテル、アプリケーション・エンジニア),MONOist]

HLSコンパイラ

 ここでいうHLSコンパイラとは、一般的な高位合成(HLS:High-Level Synthesis)コンパイラのことを指します。HLSコンパイラは、クロックなどの時間概念がないCまたはC++コードをRTLコードに変換する機能を持ちます。ツール自身は目新しいものはなく、ASIC設計の世界ではかなり以前から複数の製品が実用化されてきました。

 これらのHLSコンパイラはそれぞれ特徴が異なり、SystemCのみサポートしているものや、C/C++のみサポートしているもの、SystemC、C/C++の両方をサポートしているものもあります。これらのHLSコンパイラのうち、EDA(電子設計自動化)ツールベンダーからリリースされているものは全て有償です。一方、FPGAベンダーからリリースされているHLSコンパイラは、FPGAの設計ツールに付随してくるので、FPGA設計ツールを既に持っている設計者は追加でライセンスを購入しなくてもHLSコンパイラを利用できます。

 FPGAの集積度が上がるにつれ、FPGAのリソース利用の難しさから単純にRTLをFPGAのツールで合成するだけでは所望のFmaxを得ることが難しくなってきており、ある程度デバイスごとの特性に沿ったRTLの記述を使う必要性が出てきました。HLSコンパイラは、設計時間や検証時間が短縮されるだけでなく、回路のFmax向上にも一役買ってくれるツールとなります。

 テストベンチも同時に記述することができ、シC言語ベースの高速なシミュレーションが実行可能です。C言語で作成したシミュレーション環境を、シームレスにRTLベースのシミュレーション環境を生成し、RTLの検証まで完了することができます。

OpenCLコンパイラ

 OpenCLは、クロノス・グループ(Khronos Group)によって管理/開発されている並列コンピューティングのためのオープンな仕様です。

 GPUが古典的な固定パイプラインアーキテクチャからマルチプロセッサによる処理に移行するに伴い、そのコンピューティングパワーをグラフィックスだけでなく汎用演算に使うというアイデアが生まれました。システムはホスト(CPU側)とデバイス(GPU/FPGA側)に分かれ、デバイス内部にはCompute Unitと呼ばれるプロセッサ群があるイメージになります。このCompute Unit内のProcessing Elementと呼ばれるプロセッサで実行されるのがOpenCLカーネルと呼ばれるプログラムで、Cライクな言語で記述されます。

 OpenCLの特徴は、CPUや GPU、FPGA など、さまざまな計算資源を同時に利用してプログラムを実行させたい時に、設計者に優しいプログラミングができるようにしてくれることです。CPUやGPUなどのさまざまな計算資源を同時に利用してプログラムを実行することをヘテロジニアスコンピューティングといいます。従来、このヘテロジニアスコンピューティングを行うためには、CPU、GPU、FPGAのためのプログラミング言語をそれぞれ覚えて、全て習熟する必要がありました。このことは困難かつ負担が大きく、プログラマーがヘテロジニアスコンピューティングを行いにくい障壁になっていたのです。OpenCLは、単一のプログラミング言語でヘテロジニアスコンピューティングを実現できる言語となります。

 前述のHLSコンパイラはFPGAのリソースを利用することしかできませんが、OpenCLはシステムとして設計することが可能となり、CPU、GPU、FPGAを用いてシステムを構築できます。今までは、個別にCPU、GPU、FPGAを分けて設計していました。前編でも説明しましたが、それぞれに得意、不得意な処理があります。OpenCLコンパイラは、それぞれの得意、不得意を含めて、システムとして最適化を図ってくれるツールなのです。また、HLSコンパイラで設計したものをOpenCLに部品として組み込むことも可能になっています。

Copyright © ITmedia, Inc. All Rights Reserved.