eXCite C言語設計事例 Vol:001 eXCite を用いた基本設計編 「Avalon インタフェースを持った回路設計」 C言語高位合成 eXCite を用いてハードウェ アへ実装する手順をご紹介します。 eXCite はC言語を入力として、論理合成可 能な RTL HDL を生成するC言語高位合成ツ ールです。本資料では、ANSI-C で記述され たソートアルゴリズムを例題に、アルテラ社 Avalon インタフェースを持った回路に実装 する一連の設計ステップをご紹介します。 図1:設計ステップ ■ 設計ステップ 作業 C言語でハードウェアを設計する場合、図1にあるようなステ ップを経て設計を行います。eXCite で設計する場合、C言語上 検証 Cアルゴリズム設計 Cアルゴリズム設計 と分割Cファイルによる動作検証を行います。 Cアルゴリズムとして問題が無ければ高位合成を eXCite で行 い、生成された RTL HDL とテストベンチを用いて HDL シミュ C設計 で アルゴリズムの設計&検証を行った後、合成対象部分の選択 Cファイル Cファイル Cアルゴリズム検証 Cアルゴリズム検証 合成対象部分選定 合成対象部分選定 レータで検証し、合成結果の品質や内容を確認します。 HDL 設計 高位 設計 分割 分割 Cファイル Cファイル 実機 設計 出来上がる HDL はCアルゴリズムの機能モジュールです ので、それを必要な周辺回路と接続し、通常の論理合 成、配置配線とハードウェア設計を進めることになりま す。なお、今回ご紹介のアルテラ社 Avalon インタフェー スを生成した場合、周辺回路との接続はアルテラ社 SOPC Builder で行うことになり、HDL を書くこと無しに設計を 進めることも可能です。 1 分割 分割 Cアルゴリズム検証 Cアルゴリズム検証 高位合成 高位合成 RTL RTL HDL HDL & & Testbench Testbench HDL HDL 検証 検証 論理合成 論理合成 P&R P&R FPGA FPGA 等 等 実機検証 実機検証 図2:クイックソート関数例 ■ オリジナルソースコードの確認 ハードウェアへの第一歩はC言語上での分割検討から始まり void func_quick_sort(unsigned short sort_data[SORT_SIZE]) { int axis, lp, rp, left, right, depth, mem_right[32]; unsigned short low=0, high=0; left = 0; right = SORT_SIZE-1; depth=0; ます。合成対象部分のどの変数が外部と通信する必要がある のか、またその通信をどの様なインタフェースにするかを決 める必要があります。合成対象部分を決定したら、その記述 while(1){ axis = sort_data[ (left + right)>>1 ]; lp = left-1; rp = right+1; が参照している変数を確認します。 今回の例題である「func_quick_sort」関数(図2)は外部と のやり取りが必要な変数は関数の引数である配列変数 while(1){ while(1){ lp++; if( (high=sort_data[lp]) >= axis) break; } while(1){ rp--; if( (low=sort_data[rp]) <= axis) break; } 「sort_data[SORT_SIZE]」のみであることが分かります。今 回はこの配列変数を通信するインタフェースを検討すること にします。 ■ Cファイルの分割 if(lp >= rp) break; sort_data[lp] = low; sort_data[rp] = high; オリジナルのCアルゴリズムから合成対象部分を切り出しま す。合成対象部分は eXCite で合成するために図3にあるよ } if(sort_data[left] == sort_data[right]){ depth--; left = right+1; if(left>=SORT_SIZE) break; right = mem_right[depth]; }else{ mem_right[depth] = right; depth++; right = rp; } うに3つの約束ごとがあります。まず、処理部分は 「while(1)」内に記述すること。次に「通信が必要な変数に 合成指示子を設定」すること、そして通信 API が宣言されて いる「#include "yx_bcl.h"」を呼ぶことです。 今回は、通信が必要な配列変数をメモリ系通信として指示 し、同期用の信号として「start」、「done」という変数に同 期系通信を割り付けています。同期用通信は、通信位置を固 } } 定するために「tmp=start」、「done=1」のような記述をし ています。 次に切り出した側であるオリジナルのCファイル向けには、 図3の変数宣言一覧と同様の記述から通信用 API を生成する コマンドがある。生成した API は合成部分記述を抜き出した 場所へ記述することで分割後のオリジナルCファイルが完成 する。また、図3の記述からもコマンドにより API が記述さ れた分割Cシミュレーションファイルを作成することがで き、それぞれのCファイルを Visual C++などのCコンパイラ 図3:eXCite 入力用C記述 #include "yx_bcl.h" void main(void) { //yx channel_transform 1 message blocking read unsigned char start; //yx channel_transform 2 message blocking write unsigned char done; //yx channel_transform 10 memory unsigned short sort_data[SORT_SIZE]; でコンパイルし、実行ファイルし動作を確認できる。 なお、分割C検証を行うと eXCite が RTL HDL 検証向けに 生成するテストベンチのテストベクタが自動的に作成され る。これを用いることでCでの動作との差異や性能比較が可 能となる。 2 unsigned char tmp; while(1){ tmp=start; func_quick_sort(sort_data); done=1; } 図4:eXCite 合成エンジン 最適化 最適化 ■ C高位合成 eXCite の高位合成エンジンは、通信合成エンジン、IP 再利 IP IP 再利用 再利用 用データベース、および各種最適化などを同時に行うこと で、C記述でも高品質なハードウェアの合成を実現していま 通信 通信 合成 合成 高位 高位 合成 合成 す。ツールの操作は、基本的にボタンを上から順に押してい くだけです。合成後には、論理合成可能な VHDL、Verilog を ツール ツール 連携 連携 生成します。また、同時にテストベンチも生成します。 解析 解析 ■ 通信合成 eXCite は入力記述で指定した各変数の ID に通信制約を割り 図5:通信合成制約 付けることで各種インタフェースを自動生成することができ ます。図5の例では図3で設定した ID にアルテラ社の Avalon インタフェースを割り付けた例です。合成後にはアル テラ社 SOPC Builder で読込みかつ接続可能な機能 IP が生成 されます。 ■ テストベンチを用いた RTL 検証 eXCite は合成対象記述を検証するためのテストベンチを自動 生成します。このテストベンチは、VHDL または Verilog で 記述され、特殊な環境を必要としません。各種 HDL シミュ レータで動作を確認できます。シミュレーションが終了する と、図6にあるようにソフトウェアと同じ処理をした場合の サイクル数やソフトウェア結果との差異の有無などがレポー トされています。これにより、合成結果の等価性と品質を確 認できます。 オリジナル Cファイル 非ハード用 Cファイル 図6:HDL シミュレーション結果 ハード用 Cファイル HW 部分 非ハード部分 通信 テストベンチ HDL 実装用 HDL 通信 通信ログ 分割C検証 3 HDL シミュレータ HDL 性能検証 図7:SOPC Builder へ読み込み ■ Avalon インタフェースと SOPC Builder Avalon インタフェースを持った回路を合成した場合、アルテ ラ社 SOPC Builder で部品として読み込むことができます。 SOPC Builder はアルテラ社が提供する様々なペリフェラル IP と容易に接続することができます。これにより、HDL 設 計無しの FPGA 設計も可能となります。図7は SOPC Builder の画面ですが、今回合成したモジュールを result とい う名前で部品化し、メモリなどに接続しています。 ■ まとめ eXCite が提供する環境は、ソフトウェア設計者でもハード ウェアを設計可能にする様々な工夫があります。まず、特殊 なC言語ではなく標準のC言語を採用しています。また、ハ ードウェアを確実に設計するために、設計と検証をステップ 毎に行えます。デバイスや FPGA への実装向けには Avalon インタフェースなどを利用することで HDL 設計レスの設計 も可能です。これらの技術により、今まで FPGA 設計は難し いとあきらめていた方もハードウェア設計より身近なものに することができます。 本資料に関するお問い合わせ: 株式会社ソリトンシステムズ 組み込みシステム部 eXCite 担当 Email:[email protected] TEL::+81-3-5360-3851 4
© Copyright 2024 ExpyDoc