Recent Changes

2009-04-09

Latest File Release

This Project Has Not Released Any Files

Wiki Guide

Side Bar

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

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

TODO:

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