« 英語の勉強 | Main | CとGNU開発ツールによる組み込みシステムプログラミング »

2007.06.26

Bluespecは凄い!

関数型言語で高位合成をがすでにプロダクトになっていた。

まずはこのPDF見て欲しい。
Future Programming of FPGAs
英語だけど、10ページくらいしかないから大丈夫。
40年前の話を持ち出して、ソフトウェアの世界では、FortranとCは成功したけどLisp/Prologは失敗したよね。
でもハードウェアの世界は違うよ。C/C++/Javaが失敗して、Bluespecが成功するよ。からプレゼンは始まる。

最後は、ソフトウェアの歴史から学んだ教訓を忘れるな!で終わる。
cf. why Fortran and C succeeded
cf. why Lisp/Prolog/Functional Languages (mostly) failed
cf. why automatic parallelization (mostly) failed

トレーニングの資料も公開されているので見てみる。
slideの2にGCDの回路があるので紹介。

Complete Codeだからこれで全部らしい。左がテストベンチ、右上がインターフェイス、右下が実際の回路に見える。
なんと言っても、CLKとループが存在しないのが衝撃。これでワンプッシュでハードまで落ちるのだろうか?
仕組み的には、計算が終わるまでbusy bitを立てて、ふるいにかけ終わるまで引き算を続けているように見える。

SystemCで動きそうだから、もうちょっと突っ込んで調べよう。
この会社を知っただけでも、ESL D&Vを買った甲斐があった。7000円の元は取ったぜ。

|

« 英語の勉強 | Main | CとGNU開発ツールによる組み込みシステムプログラミング »

Comments

bluespec は、出た当初、達人方が激賞していた覚えがあります。
ただ、プータローとしては、土俵は無条件公開でないと、
応援もできないっす...
どんな運命を辿るのかは watch してみようかと。

Posted by: noboshemon | 2007.06.29 at 07:22 PM

noboshemon さん

やっぱり有名だったのですか。
SystemC部分はある程度動きそうな気もするのですが、
AVM片付けたら挑戦してみます。

日本ではセキュリティ等のキラーアプリが無いと売れないでしょうね。
SystemCでも十分敷居が高いのに、rule-basedというのは受け入れられない
気がします。

Posted by: なつたん | 2007.06.30 at 05:11 PM

私もBlueSpecは気になっています。
日本法人が無いのでなかなか情報が入ってきません。

上の例題をSystemCのコードにすると、こんな感じになるので、
確かにコード量は少ないですね。
決め手は、ESL_RULE部分かな。。。。。

注意)、半角の<にすると、正しく表示されないよ!


class ArithIO_ifc : public sc_module {
private :
int x, y;
bool busy;
void rule_swap( void ) {
int tmp = x; x = y; y = tmp;
}
void rule_decr( void ) {
y = y - x;
}
void main( void ) {
if( (x>y) && (y!=0) )
rule_swap();
if( (x<=y) && (y!=0) )
rule_decr();
}

public :
void start( int num1, int num2 ) {
x = num1 ; y = num2 ; busy = true;
}
int return_v( void ) {
busy = false; return x;
}

sc_in<bool> CLK;

SC_HAS_PROCESS(mkGcd);
mkGcd(sc_module name name) : sc_module(name),
x(0), y(0), busy(false), CLK("CLK") {

SC_THREAD(main);
sensivite << CLK.pos();
}

};

class mkTb : public sc_module {
private :
int arg1, arg2;
ArtihIO_ifc gcd_inst;
void rule_send( void ) {
if( arg1> 100 ) sc_exit();
cout << "Tb:rule_send << arg1 << "" <<arg2 << endl;
gcd_inst->start(arg1, arg2);
arg1 + =3; arg2 += 2;
}
void rule_print( void ) {
cout << "Tb:rule_print:result is "
<< gcd_inst->result() << endl;
}
void main( void ) {
if(true)
rule_send();
if(true)
rule_print();
}
public:
sc_in<bool> CLK;
mkTb( sc_module_name name ) : sc_module( name ),
arg1(7), arg2(3), CLK("CLK") {
gcd = new gcd_inst("GCD1");
SC_THREAD(main);
sensitive << CLK.pos();
}
~mkTb() { delete gcd; }
};

Posted by: 原山みや | 2007.07.01 at 05:02 PM

原山みやさん

こんにちは。
面白そうな回路ありがとうございます。さすがVerification 3.0。
動かしてみたいのですが、いまちょっとSystemCの環境がないんですよ。
作ったら早速動かしてみます。

Posted by: なつたん | 2007.07.02 at 09:50 PM

BlueSpecは、BlueSpec SystemVerilog(SystemVerilog)とESE(SystemCベース)の
記述からHDL-RTLへ変換ツールを提供しています。

SystemC記述をHDL-RTLに変換するツールを提供している他のベンダーと比較し、
入力言語を変換ツールが理解しやすいものにしている点ではないでしょうか?
つまり、汎用言語ではなく、専用言語。

最終的にHDL-RTLになればいいのですから。。。

Posted by: 原山みや | 2007.07.03 at 12:47 PM

ああ、なるほど。
ルールベースにすることで、合成可能なSystemCの全機能をインプリする
必要がなくなるのですね。
たしかにそうかもしれません。

Posted by: なつたん | 2007.07.04 at 07:49 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/15566354

Listed below are links to weblogs that reference Bluespecは凄い!:

« 英語の勉強 | Main | CとGNU開発ツールによる組み込みシステムプログラミング »