1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

高位合成って何?HLS開発の全体像と検証ステップ

Last updated at Posted at 2025-04-15

はじめに

FPGAを使った開発に取り組んでいると、HLS(高位合成)、CSIM、COSIM、といった聞きなれない言葉に出会います

さらに、HLSの結果とOpenCVの結果を比較しているシーンを見て、「なんでソフトウェアとハードウェアで結果を比べてるの?」と疑問に思う方も多いのではないでしょうか

この記事では、そうした疑問に答えるかたちで、高位合成の基本的な考え方と、CSIMやCOSIMの役割、OpenCVとの関係性をわかりやすく解説していきます

高位合成(HLS:High Level Synthesis)とは?

従来、FPGAで何か処理をしたい場合は、VerilogやVHDLといったハードウェア記述言語(HDL) でロジックを1から設計する必要がありました

しかし、それは非常に手間がかかる作業

HLSは、C/C++などの高級言語で記述したアルゴリズムを自動的にハードウェア化してくれる技術です

これにより、ソフトウェアエンジニアでもFPGAの設計に参加しやすくなりました

全体のロードマップ

まずは、HLSを用いたFPGA開発の一般的な流れを俯瞰してみましょう

各ステップの目的と意味

① CSIM(C Simulation)

  • 目的: C/C++コードが正しく動くかをソフトウェア上で確認
  • 内容: ロジックミスや入出力ミスを検出する
  • 実行例:
    make run CSIM=1
    

この段階では、ハードウェアは一切関係ありません


② CSYNTH(C Synthesis)

  • 目的: C/C++コードをFPGA向けのRTL(Verilog/VHDL)に変換
  • 内容: パイプライン化やリソースの使用量などがここで決まる
  • 実行例:
    make run CSYNTH=1
    

出力されるのはFPGAに載せるための回路図的なもの(RTL) です


③ COSIM(Co-Simulation)

  • 目的: 合成されたRTLがC/C++の動作と一致しているか確認
  • 内容: C/C++とRTLを比較し、差がないかシミュレーション
  • 実行例:
    make run COSIM=1
    

ここで差異があれば、CSYNTHの設定やCコードを見直す必要があります


④ VIVADO_SYN(Vivado Synthesis)

  • 目的: RTLコードをFPGA向けのネットリストに変換
  • 内容: 論理ゲートレベルでの設計を作成
  • 実行例:
    make run VIVADO_SYN=1
    

Vivado HLS から Vivado Design Suite にバトンタッチするイメージ


⑤ VIVADO_IMPL(Vivado Implementation)

  • 目的: 実際のFPGA上のリソースに配置・配線
  • 内容: クロック制約・タイミング制約の検証もここ
  • 実行例:
    make run VIVADO_IMPL=1
    

ここまで完了すれば、FPGAに書き込めるbitstreamが生成されます!


ゴール:実機での動作確認

最終目標は、生成されたbitstreamを使ってFPGAに実装し、外部入力に応じて意図した処理ができるかどうかを検証することです

たとえばカメラ画像に対してフィルタ処理を行う場合、

  • OpenCV:ソフトウェアでの「正しい」結果
  • FPGA出力:ハードウェア実装の実際の出力

この2つを比較することで、FPGAが想定通りに動作しているかが確認できます


OpenCVの結果と比較する理由

  • OpenCVで出力された画像は、“期待される理論値” として扱えます
  • HLSやFPGAから出力された画像と比べることで、数値の誤差や設計ミスを検出できる からです
ソフトウェア(OpenCV) = テストの正解例
ハードウェア(HLS, FPGA)= 作った回答

この2つを比較することで、FPGAが想定通りに動作しているかが確認できます

ここで重要なのは、ソフトウェア(OpenCV)とハードウェア(HLS/FPGA)で出力結果が完全に一致しないこともあるという点です

これは、以下のような理由から発生します

  • ハードウェア合成時に固定小数点演算へ変換され、丸め誤差が生じる

  • パイプライン処理や並列化による処理順序の違い

  • メモリアクセスや境界処理の違い(たとえば画像端の扱い)

このような背景があるため、HLS開発では “許容誤差の範囲で一致しているか” を確認することが大切です

まとめ

ステップ 内容 目的
CSIM Cシミュレーション ロジックバグの早期発見
CSYNTH 高位合成(C→RTL変換) RTLの生成、性能見積もり
COSIM 協調シミュレーション 合成RTLとCの結果の一致確認
VIVADO_SYN 論理合成(ネットリスト) FPGA向けの論理回路作成
VIVADO_IMPL 配置配線 FPGAリソースに割り当て、タイミング調整
実機実装 FPGA書き込み 実環境での動作確認

おわりに

開発の最初から実機動作までには、複数のチェックポイントが存在することが分かりました

それぞれのステップでの検証が、後戻りコストを減らし、高信頼なFPGA設計につながります

※ 本稿は以下のサイトを参考にしています
https://xilinx.github.io/xup_high_level_synthesis_design_flow/Lab4.html

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?