FPGA実装言語: VHDLとVerilogからハイレベルC/C++まで
編集部注: スマート製品の高度なアルゴリズムは、重い処理負荷を処理できる組み込みシステムを要求します。FPGAは必要な性能を提供しますが、多くの開発者はFPGA設計を専門家の領域と見なしています。最新ハードウェアと強力な開発環境の組み合わせにより、FPGAプログラミングは民主化されました。『Architecting High-Performance Embedded Systems』第4章からの抜粋では、FPGAデバイス、実装に使用される言語、開発ワークフローを包括的に概説し、独自のFPGA設計構築を始めるための実践的ガイドを提供します。
1: ハードウェアリソース
2: 実装言語(本記事)
3: 開発プロセス
4: プロジェクトの構築
5: 実装
『Architecting High-Performance Embedded Systems』Jim Ledin著より抜粋・翻案
FPGA実装言語
FPGA向けの設計は、最終的にはデバイスの振る舞いを記述するために、1つ以上のハイレベルでHDL類似の言語を選択することを伴います。
伝統的な選択肢はVHDLとVerilogです。最新のツールチェーンは通常、両方に加え、ブロック図設定をサポートし、多くはC/C++を自動HDL生成のソースとして受け入れます。
VHDL
VHSIC Hardware Description Language(VHDL)—VHSICはVery High-Speed Integrated Circuitの略—は、1983年に米国国防総省の下で開発されました。その構文はAdaを彷彿とさせ、冗長で強く型付けされています。この言語は、boolean、bit、bit_vector、character、string、integer、real、time、arrayといった固定の基本型セットを提供し、他のすべての型はこれらのプリミティブ上に構築されます。
IEEE 1164は、VHDLの標準ライブラリを定義し、単一ビット信号を表す至る所で使われるstd_logic型を含みます。以下の表はstd_logicの論理値を示します:

Strong 0/1は駆動されたバイナリ状態を示し、弱い信号はバス上の競合を示します。Zはハイインピーダンス(CMOS出力切断)、Uはデフォルトの未初期化状態、Xはドライバなし、-は未使用入力を示します。
典型的なVHDL設計は、IEEE 1164ライブラリのインポートから始まります:
library IEEE;
use IEEE.std_logic_1164.all;
本章ではVHDLを例として使用しますが、VHDLとVerilogの両方が、FPGA合成可能なあらゆる設計を完全に表現できます。
Verilog
1984年に導入され、IEEE 1364(2005年)として標準化されたVerilogは、学習曲線を緩やかにするためCをモデルにしています。2009年にSystemVerilogと統合されIEEE 1800-2009となり、コアHDL構造の上に広範な検証機能が追加されました。
Verilogのwire型は、0、1、ドントケア(x)、ハイインピーダンス(z)の信号状態を表し、それぞれ強/弱の強度を持ちます。VHDLとVerilogの両方には、ハードウェア設計用の合成可能サブセットがあり、追加の構造がシミュレーションをサポートします。
例えば、非合成可能なforループはソフトウェアループのように順次反復動作します。合成可能なforループは、反復回数を反映して並列ハードウェアコピーに展開されます。
ブロック図
テキストベースのHDLに加え、最新のFPGAスイートはグラフィカルなブロック図エディタを提供し、設計者が低レベルコードを書かずに、マイクロプロセッサや高度なI/Oのような複雑なシステムを組み立てられるようにしています。図4.2は、MicroBlazeソフトプロセッサを備えたXilinx Vivadoブロック図を示しています。
クリックでフルサイズ画像
図4.2 – MicroBlazeソフトマイクロプロセッサを含むブロック図
MicroBlazeは、Artix-7や他のファミリで利用可能なXilinxのソフトコアプロセッサです。ブロック図はシステムレイアウトを簡素化しますが、ツールは最終的に背後でVHDLまたはVerilogを生成します。生成されたコード(例: design_1_microblaze_0_0_stub.vhdl)を調べると、HDLエンティティインターフェースが明らかになります:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity design_1_microblaze_0_0 is
Port (
Clk: in STD_LOGIC;
Reset: in STD_LOGIC;
Interrupt: in STD_LOGIC;
Interrupt_Address: in STD_LOGIC_VECTOR (0 to 31);
Interrupt_Ack: out STD_LOGIC_VECTOR (0 to 1);
Instr_Addr: out STD_LOGIC_VECTOR (0 to 31);
Instr: in STD_LOGIC_VECTOR (0 to 31);
このファイルはプロセッサのインターフェースのみを定義し、コアロジックはライセンスIPとして、多くの場合知的財産保護のためコンパイル済み形式で提供されます。
C/C++
複数のベンダーが、CまたはC++をHDLに変換するハイレベル合成(HLS)ツールを提供しており、開発者が既存アルゴリズムをFPGAハードウェアに移植できるようにしています。基盤となるFPGAは並列に動作しますが、生成される設計は順次的なC/C++ステートメントをステートマシンにマッピングすることが多いです。ソースコードが並列性の機会を提供する場合、FPGAは従来のプロセッサに対して大幅な高速化を提供できます。
最新のツールチェーンでは、VHDL、Verilog、ブロック図、HLS派生HDLが単一プロジェクト内で共存可能です。チームはスキルセットに基づいて言語を混在させられますが、メンテナンスオーバーヘッドを避け、将来の持続可能性を確保するためには慎重な計画が不可欠です。
次のセクションでは、コンセプトから実装までの標準的なFPGA開発プロセスを説明します。
Packt Publishingの許可を得て再録. Copyright © 2021 Packt Publishing
Jim Ledin氏はLedin Engineering, Inc.のCEOです。組み込みソフトウェアとハードウェアの設計、開発、テストのエキスパートであり、組み込みシステムのサイバーセキュリティ評価とペネトレーションテストにも精通しています。アイオワ州立大学で航空宇宙工学のB.S.、ジョージア工科大学で電気・コンピュータ工学のM.S.を取得。カリフォルニア州登録プロフェッショナル電気エンジニア、CISSP、CEH、CPT保持者です。
関連コンテンツ:
- FPGAを用いた組み込み設計: ハードウェアリソース
- オープンソースツールがFPGAプログラミングを簡素化
- FPGAやASICでの浮動小数点アルゴリズム実装
- AIアプリケーション向けGPUコードをFPGAに移行するソフトウェアツール
- FPGAがSubaru EyeSightビジョンベースADASでASICに取って代わる
- フラッシュベースFPGAが機能安全要件をどう簡素化するか
- インスタントオンFPGAのメリットを享受する
- 高速NORフラッシュを用いたFPGA設定
- FPGA技術が新しいミッドレンジシステム要件にどう対応するか
さらにEmbeddedの情報を得るには、Embeddedの週刊メールニュースレターを購読してください。
埋め込み
- 高度なアディティブ・マニュファクチャリング・ソフトウェアで生産を最大化
- 組み込みシステムプログラミング:言語、アーキテクチャ、応用
- 組み込みシステム設計:手順、原則、実世界での応用
- 組み込みAIでビッグデータを実用的なスマートインサイトに変換
- USB-Cをマスターする:高速データと電力のための設計課題と実践的ソリューション
- テクノロジーの未来を再構築する組み込み設計トレンド
- MIPIカメラ対応の高性能FPGAアクセラレーターで組み込みビジョンをエッジ処理
- Foundries.io、プロセッサ非依存のLinux & ZephyrでIoTのRed Hatを目指す
- Clientron PST650:ホスピタリティ&小売向け統合サーマルプリンタ搭載オールインワンPOSターミナル
- MAXREFDES220# - 光学センサーによるカフレス血圧モニタリング
- Microchip、防衛グレードPolarFire SoC FPGAを早期アクセスプログラムで提供開始