HDLって、そもそもナニ?

はじめに:ハードウエア(回路)をコードで書くとは?

「プログラミング」と聞くと、多くの人はPythonやJavaのようなソフトウェア向け言語を思い浮かべるでしょう。でも世の中には、ハードウエアの回路を記述するための言語があります。それが HDL(Hardware Description Language/ハードウェア記述言語) です。

「回路をコードで書く?」と不思議に思うかもしれません。でも実は、現代の電子機器に使われるFPGAやASICといった半導体チップは、HDLを使って設計されているのです。

HDLとは?

HDLを一言でいえば、「電子回路の動作や構造をテキストで表現するための専用言語」 です。

昔の回路設計は、エンジニアが紙や専用ツールの上で「論理ゲートを一個ずつ手でつなぐ」という作業をしていました。しかし回路が複雑になるにつれ、それでは手に負えなくなってきました。そこで生まれたのがHDLです。コードを書くことで、何万・何億個もの論理ゲートで構成される回路を効率よく設計・検証できるようになりました。

ソフトウエア言語との大きな違い

ソフトウェア言語(例:Python)HDL(例:Verilog)
動作の基本命令を上から順番に実行する回路ブロックが同時並行で動く
対象CPUの上で走るプログラムシリコン上に焼き付ける回路そのもの
「変数」の実態メモリ上のデータワイヤ(信号線)やレジスタ(フリップフロップ)

ここが最重要ポイントです。HDLでは「処理が並列に動く」という感覚が基本になります。現実の回路はすべての素子が同時に動いているので、それを素直に表現しているわけです。

代表的なHDL

現在よく使われるHDLは主に2つです。

  • Verilog HDL(べりろぐ)
    1984年にアメリカで開発されたHDLで、C言語に似たシンタックスが特徴です。記述が比較的シンプルで習得しやすく、特に北米・アジアで広く使われています。後に「SystemVerilog」として拡張され、検証(テスト)の用途にも広く使われるようになりました。
  • VHDL(ブイエイチディーエル)
    "VHSIC Hardware Description Language" の略で、1980年代に米国防総省の主導で開発されました。Ada言語に似た冗長気味なシンタックスが特徴で、型に厳格で堅牢な設計に向いています。ヨーロッパや防衛・航空宇宙分野での採用例が多いです。

実際にコードを見てみよう

「習うより慣れろ」精神で、同じ回路を両方の言語で書いてみましょう。題材は超シンプルな 「2入力ANDゲート」 です。

ANDゲートとは: 入力AとBが両方とも1のときだけ、出力Yが1になる論理回路です。

Verilog HDLの場合

コードの読み方

  • module ~ endmodule:回路ブロック(モジュール)の宣言。ひとつの部品に相当します。
  • input wire / output wire:信号の入出力と、それが「ワイヤ(配線)」であることを示します。
  • assign y = a & b:ワイヤの接続関係を定義する文。& はビット論理積(AND)です。assign 文は常時評価され、回路の「配線そのもの」を表します。

VHDLの場合

コードの読み方

  • VHDLは entity(外観) と architecture(中身) を分けて書くのが特徴です。
  • std_logic:VHDLで最もよく使われる信号型。0・1のほかに「不定(X)」「ハイインピーダンス(Z)」なども表現できます。
  • y <= a and b:信号の代入。<= は「信号代入演算子」で、英語そのままの and キーワードを使います。
  • -- がコメント(Verilogは //)。

HDLで書いたコードはどう使われるの?

HDLのコードが完成しても、それだけで回路が動くわけではありません。次のような工程を経て、実際のシリコンになります

この流れを RTL設計フロー(Register Transfer Level) と呼びます。HDLは、この中の「回路の動作を人間が読み書きできる形で表現する」ための言語という位置づけです。

まとめ

項目ポイント
HDLとは電子回路の動作・構造をテキストで記述する専用言語
Verilog HDLCライクで書きやすい。北米・アジア系で主流
VHDL型に厳格で堅牢。欧州・防衛系で主流
ソフトとの最大の違い並列動作が基本。信号はワイヤかレジスタ
利用シーンFPGA・ASIC設計、LSI検証など

HDLは「回路エンジニアにとってのプログラミング言語」です。一見とっつきにくいですが、「配線をコードで書いている」 というイメージさえつかめると、不思議とスラスラ読めるようになってきます。