C2VerilogでLegUpを使おうかと思ったんだけど、ドキュメントを読めば読むほど、う〜ん・・・って、感じでダメかな?
まずは、OnLine Demoのサンプルソース。
こういうソースをハードにするぐらいだったら普通にCPUでまわせばいい。
#名古屋大がサンプルを提供したかどうかわからないんだけど、ここに名古屋大のサンプルがあることで俺の中では名古屋大とこの研究室のポイントはかなり下がった。
C言語をハード化するってのはCPUを作るというのと違うと思うんだが・・・
何を勘違いしてるんだろうか?>LegUpと名古屋大
それにドキュメントを読んでいると、元のCソースに手を付け加えなければいけないようだ。
それだったら、別にどのC2Verilog化のコンパイラでもいいかな?
LegUpがいいわけじゃないなさそうだなぁ。
手を付け加えるのなら、独自仕様より知られている仕様のほうがいい。
今のところ、OpenCL+Clang+LLVM+バックエンド+Verilog+IP-XACTなのかなと思っている。
ここで抜けているのが「バックエンド」で、ここはなんか作るしかないのかな?と、いう感じで。
バックエンドでするのは並列化なんだけど、ここで並列化は大きく2つ分ければいいと考えている。
ひとつは、スレッド化のような処理をするモジュール。
もうひとつは純粋に並列処理するモジュール。
前者は、小さなCPUをたくさん並べるようにして、兵隊を増やせばいいタイプ。
後者は、唯一のスペシャリストを作るタイプ。
小さな兵隊さんは一つのCPUで一つのスレッドだと、CPUを速くしようとする反面、回路が大きくなってもったいないのでひとつのCPUで複数タスクを並列化して動かせばCPUの無駄遣いにもならないだろう。
CPUを作るのは簡単なんだけど、難しいのは純粋に並列処理するモジュール。
できなくはないんだけど、LLVMのバックエンドとして作るなら難しいのかな?
LLVM-IRからどう変換かけていくか考えなければならないなぁ。