凄いよハードウェア記述言語

いやぁ、ようやく続きが書けます。
こないだのタネは、m.ukaiさんのコメントの通り、標準入出力とか検証用・シミュレーション用の書き方であって、論理合成*1するためのものじゃないです。
さて、ハードウェア記述言語。
http://vhdl.org/からhttp://vhdl.org/comp.lang.vhdl/FAQ1.htmlへ来て私の大好きな改定ネタでhttp://www.eda.org/vhdl-200x/へ飛びます。Enhancement Requestから一般の要望も受け付けてるのかしらすげーなんて横目で見つつ、改定案のわかりやすいドキュメントを探しました。
http://www.accellera.org/apps/group_public/download.php/934/date_vhdl_tutorial.pdf

  • Records of Unconstrained Arrays
  • Case With Don't Care
  • Conditional Assignments*2

あたりはふつーにAdaにも欲しいぞ。
……いや、そうじゃなくて。
ハードウェア記述言語は、NANDがどう並ぶかイメージできる式での記述と、access*3まで使えたりする?手続き的な記述とをごちゃまぜにしつつ、なるべく面積を少なくする回路を探しながら、ハードウェアに落とし込むわけですよ!全部静的に!同じソースからいろんなハードウェアに向けて!しかも言語そのものはシミュレーション用にとはいえプログラミング言語の機能までフルセットで持ってるわけですよ!
ほとんど関数の中しか考慮せずほぼ機械的機械語に落として行くだけで充分とされ、CPU自体インタプリタのようなものなのにその上にインタプリタを重ね、その上でJITだから高速とか言ってる現行のプログラミング言語って、もしかしてすごいぬるま湯の中にないですか……?
そんなことをふと思い冷や汗が出たハードウェアなひと月。
CPUの横にFPGA*4が付いていて、__attribute__((pure))な関数はハードウェアに変換されて1クロックになってしまうなんて構成こそ、真のJITなどと妄想。(どっかがもう作ってると思いますが)

*1:酷い説明をしますとコンパイル〜リンクのハードウェア版の用語みたいな。

*2:三項演算子

*3:酷い説明をしますと、Adaでのポインタの呼び方。VHDLにもあります。

*4:酷い説明をしますと、回路構造を外部メモリから読んで使うLSIみたいなもの。