Show page source of FrontPage #36416

= Project !PuzzleBox - Processor for functional languages in Verilog HDL =

Project PuzzleBoxは,関数型言語で書かれたプログラムを高速かつ低消費電力で実行することのできるプロセッサと,そのプロセッサに最適な関数型言語を開発するプロジェクトです.プロセッサはVerilog RTLで提供され,IPとしてシステムに組み込むことができます.同時に,ヴァーチャルマシンとコンパイラも提供し,設計開発からデバッグまでの作業を一通り行うことができます.

プロジェクトの第一段階では,純粋非正格関数型言語'''LazyK'''で記述されたプログラムを,FPGA上で動かします.LazyKを遅延評価を用いながらFPGA上で実行するために,Graph Reduction MachineをVerilog RTLにて開発します.このGraph Reduction Machineを!PuzzleBox Iと呼びます.FPGA上でGraph Reduction Machineを実現し,LazyKで記述されたコードをこのマシン用のバイナリに変換,ロードさせることにより,LazyKのコードを高速かつ低消費電力で実行することを目標とします.また,LazyKに対し,基本データ構造であるConstant Applicative Form (CAF)の読み出し効率化や,チャーチ数ではないmachine integerのサポートや組み込み演算(加減乗除,比較,car, cdr, cons, if等)を追加することにより,プロセッシングをさらに高速かつ低消費電力で実現します.

このプロジェクト第一段階では,以下の成果物を配布します.

 * !PuzzleBox I コア (Graph Reduction Machine)
 * !PuzzleBox I ヴァーチャルマシン
 * LazyKコンパイラ for !PuzzleBox I
 * FPGA実装用サンプルシステム (Host CPU, Memory, BUS, etc...)
 * LazyKで書かれたシステム評価用ソフトウェア

このプロジェクトは未だアルファ段階です.ヴァーチャルマシンを利用したサンプルプログラムの動作まで実装してあります.作業中の!PuzzleBox Iコアは,svn:puzzlebox:/trunk から閲覧できます.READMEに,サンプルプログラムをヴァーチャルマシン上で動作させるための手順が記載されています.現状,ヴァーチャルマシンの動作およびサンプルプログラムのコンパイルには,以下のモジュールが必要となります.

 * SystemC 2.2
 * Verilator 3.700
 * CMUCL 19a

プロジェクトの進捗は,[http://lambda.cocolog-nifty.com/blog/ Project管理者のブログ]にて報告しております.将来的には,本サイトに全ての成果物を掲載する予定ですが,成果物がとぼしい現状では,こちらのブログより進捗を確認下さい.


TODO:


 * (済)アドレス空間の30bit化
 * オブジェクトフォーマットを決定
 * (済)コンパイラによる関数定義および再帰呼び出しサポート
 * 前記オブジェクトフォーマットに従ったコンパイラおよび再配置を行うリンカを作成
 * ローダ作成
 * (済)ヴァーチャルマシン作成 (SystemC+Verilator based)
 * (済)サンプルプログラムの作成(簡単編)
 * evaluation stackを合成可能なように修正
 * input/output streamを外部メモリアクセスへ変換するモジュールの作成
 * HOST CPU or 制御回路的なもの for FPGAデモ
 * FPGA simおよび合成
 * outputのリアルタイム音声化 or 画像化 for FPGAデモ
 * サンプルプログラムの作成(FPGAデモ編)
 * *コンビネータの追加
 * *applicative-orderの算術演算およびmachine integerのネイティブサポート
 * *プログラム空間とヒープ空間の分離
 * *ガベコレ
 * *外部メモリとPB_LASの間にキャッシュを作成
 * *DRAM controllerの追加
 * *evaluation stackと外部メモリの間にDMAC&制御回路を配置し,stack sizeを拡大
 * *CAF構造の再検討(複数termをまとめて扱えるとデータ転送効率がよくなる的な)
 * *struct sharingによるreductionとその性能評価
 * *ヴァーチャルマシン作成(C based)