うんちく：アドレッシングモードの色々

うんちく：エリート官僚VHDLとVerilogおやじ

マキャベリは、ルネサンス時代のイタリアの二大都市ヴェネティアとフィレンチェを比較して、完全に性格の違う二人の人間のようだと評したとのことだが、ハードウェア記述言語の二大勢力であるVHDLとVerilogもまた完全に性格が違う二人の人間のようである。しかもなぜか両方共おっさんを連想させるが、これはそろって優雅さの欠片もないからだろう。

エリート官僚VHDL

こやつの特徴は、なんといってもその厳格さ、几帳面さにある。「例え中身が一行でもEntityはきっちり定義していただきます。」「右辺と左辺のビット数が違う？そんなもの接続できるわけないじゃないですか。自分で数えてちゃんとくっつけなさい。」「アドレスはカウントアップするもの。ビット方向にORを取りたければ、その前に型変換してもらう必要があります。」とにかく几帳面なのは、元々が仕様記述言語であったためで、きっちり記述する、というのはVHDLの生まれつきの特徴と言っていい。出自も確かである。アルゴリズム記述言語としてその名も高いALGOLに発してPLI、ADAの系譜に繋がっている。もっとも、この一族はプログラミング言語としては、そのあまりの面倒臭さが災いして滅亡してしまっているのだが、彼はそんなことは気にしない。国際的な衆智を結集して作った国際標準、米国国防省お墨付き、というのが彼の誇りである。

調子のいいおっさんVerilog　HDL

このおっさんの調子のよさったらない。「右辺と左辺のビット数が違う？あー、そんなの気にしなくてよろし。こっちで適当に０埋めときますんで、、」「変数なんか宣言せんでよろし。どうせ1ビットでしょ。宣言したことにしときましょう」みないな感じで、何でも受け付けてくれる。もちろん、このおっさんの口車に乗って、論理合成後に酷い目にあうこともあるので、十分注意が必要である。なんでも書けちゃうというのは、このVerilogが元々シミュレーション記述用言語であったためである。シミュレーション用の言語としては、何はともあれシミュレーションを実行して回路の様子を見ることができることが重要である。このおっさんは、出自も怪しい。PASCALに基づいている、と称しているのだが、文法はあまり似ていない、というか、全く違い、どちらかというと嘘八百に近い。ただ、おっさんはそんな細かいことは気にしていない。彼は国際標準には違いないのだが、デファクトスタンダードである。つまり、たたき上げなのだ。

なぜ、VerilogとVHDLが共存しているのか？

では、こんなに違った二つの言語がなぜ共存し、同じ程度使われているのだろう？一つの理由は、プログラミング言語という点でみると、両方とも同じ程度ダメだからだろう。VHDLは煩雑すぎるし、Verilog　HDLはあまりにいい加減である。どちらかに馴染むともう片方はとても使う気がしなくなるに違いない。もう一つの理由は、ハードウェアの設計時には、言語自体のシンタックスや書き方よりも、論理合成ツールの方が問題で、こちらをいかに使いこなすかによって出来が違う。つまりフロントエンドは何で書かれようとさほど重要ではないのである。三番目の理由は、論理合成系の発達により、通常は、どちらの言語も受け付けるようになったためである。場合によってはあるモジュールをVHDLで書き、別にVerilog　HDLで書いたモジュールとあわせて一つのシステムを設計することができる。世の中は完全にバイリンガルになっていて、どちらかが書ければ設計者は生きて行けるのである。

多分、近い将来において片方がどちらかを滅ぼしてしまうことはないように思える。僕は個人的にはVerilogのおっさんの方が好きで、最近はこちらばかり使っている。皆さんもどちらかのおっさんとうまく付き合っていければハードウェア設計はやっていける。

本当のことを言うと、個人的には、もっとも優れたハードウェア記述言語はSFLだと思っている。これは、本書の最初の版で設計用言語として使ったものであり、NTTにより設計された純国産製で、美しいシンタックスを持っている。残念ながらもう現場では使われていないが、VerilogやVHDLのおっさんたちだけを見て、ハードウェア言語ってこんなもんか、と思われるのは、本当は困るのである。一面、ハードウェア設計者は、僕も含めて言語なんて問題ではなく、本当に問題なのはそれで書く設計対象である、と思っているので、これが結果として、変なおっさんたちをはびこらせる結果となるのかもしれない。