「Avalon インタフェースを持った回路設計」

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