Hardware Description Languages: Verilog, SystemVerilog, VHDL, and Modern HDLs

article technology medium #hdl#verilog#systemverilog#vhdl#chisel#rtl#hardware-design#fpga#asic#risc-v
Created: 2026-05-31 Updated:

RTL設計の中核を担うHDL全体像を体系化。IEEE標準のVerilog/SystemVerilog/VHDLから、Scala埋め込みDSLのChisel/SpinalHDLまで、合成可能構文・検証機能・HLSとの関係を解説。RISC-VエコシステムでのChisel活用も扱う。

Hardware Description Languages: Verilog, SystemVerilog, VHDL, and Modern HDLs

ハードウェア記述言語:Verilog・SystemVerilog・VHDL・Chisel・SpinalHDL

HDL(Hardware Description Language)はデジタル回路の動作・構造をテキスト記述し、EDA ツールが論理合成・シミュレーション・検証に利用する形式言語群である。RTL(Register Transfer Level)記述が設計の中心となり、「イベント駆動シミュレーション」という独自の意味論を持つ。本記事は HDL のスペクトルを Verilog から現代的 Chisel まで俯瞰するマップ層記事。

RTL 抽象とイベント駆動シミュレーション

RTL(Register Transfer Level) は「クロックエッジに同期してレジスタ間でデータが転送される」抽象モデル。HDL での記述粒度は以下の 3 層に分かれる。

抽象レベル記述対象HDL 表現
行動レベルアルゴリズム・ステートマシンalways ブロック、task、function
RTLレジスタ転送・組み合わせ回路always @(posedge clk)、assign
ゲートレベル論理ゲット/フリップフロップセルインスタンス(合成後ネットリスト)

イベント駆動シミュレーション:信号の変化(イベント)が検出されたとき、そのイベントを参照する全てのプロセスが起動する。これは時分割処理(ステップ時刻→デルタサイクル→次のステップ時刻)で実現され、ハードウェアの並行動作を自然に表現できる。

合成フローでは RTL 記述を EDA ツール(Synopsys Design Compiler 等)が論理ゲートのネットリストへ変換し、さらにフロアプラン・配置・配線を経て GDSII になる(tech-106 参照)。

Verilog:最普及の RTL 記述言語

Verilog(IEEE 1364) は 1984 年に Gateway Design Automation が開発、1995 年に IEEE 標準化。Verilog-2001(IEEE 1364-2001)が現在最も広く使われるベースライン。

基本構文要素:

  • wire:組み合わせ論理の信号線(クロックなし)
  • reg:フリップフロップや手続き的代入先(実際は記憶要素とは限らない)
  • module:設計の基本単位(入出力ポートを持つ階層ブロック)
  • always / assign:手続き的記述 vs 継続的代入

合成可能サブセット(synthesizable subset):シミュレーション記述のうち合成ツールが回路へ変換できる部分。$display(テスト用)・initial(一部)・#delay(時間遅延)などは非合成。この区別が初学者の最大の落とし穴。

合成可能な典型記述例:エッジトリガFF

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) q <= 1'b0;
    else        q <= d;
end

非合成のシミュレーション専用記述:$dumpfile#10 clk = 1(テストベンチ内のみ使用)。

SystemVerilog:上位互換言語と UVM 基盤

SystemVerilog(IEEE 1800) は 2005 年に Verilog を拡張した上位互換言語。設計と検証の両方をカバーする。

設計機能の強化:

  • logic 型(wire/reg を統合。X/Z 伝播を保持)
  • 構造体(struct)・列挙型(enum)・typedef
  • interface(バス信号のまとめ)による配線記述の簡素化
  • always_ff / always_comb / always_latch(意図明示型 always。lint ツールが誤用を検出できる)

検証機能(UVM 基盤):

  • クラス(class):OOP 継承・ポリモーフィズム。テストベンチの再利用性向上。
  • ランダム化(rand / constraint:制約付きランダムスティミュラス生成。
  • アサーション(SVA: SystemVerilog Assertion)assert propertycover・シーケンス演算子(|-> 含意、##N クロック遅延)。
  • カバレッジグループ(covergroup:機能カバレッジ収集の宣言的記述。

SystemVerilog は UVM(Universal Verification Methodology、tech-107 参照)の基盤言語として事実上必須。RTL 設計でも always_ff 等の安全構文は現代の業界標準。

VHDL:欧州・航空宇宙・防衛の強型付け言語

VHDL(VHSIC Hardware Description Language、IEEE 1076) は 1987 年に米国防総省が VHSIC プログラムの成果物として標準化。強型付け言語であり、型の不一致はコンパイル時にエラー。

特徴:

  • 強い型システム(std_logic vs integer の混在を型変換なしに禁止)
  • entity(インタフェース)/ architecture(実装)の明確分離
  • signal(並行処理、デルタサイクル遅延あり)/ variable(手続き的、即時更新)の厳密な区別
  • process(手続き記述)・concurrent signal assignmentcomponent(階層化)

採用領域: 欧州航空宇宙(Airbus 系 DO-254 認証要件)、原子力・医療機器、防衛(NATO 標準)。VHDL-2008 で generic packageboolean vector 等が追加。冗長だが大規模チームでの型安全性・コードレビュー性は Verilog より高い。

Chisel:Scala 埋め込み DSL と生成的ハードウェア

Chisel(Constructing Hardware in a Scala Embedded Language) は UC Berkeley(SiFive の起源)が開発した Scala ベースの HDL フレームワーク。HDL 記述自体が Scala プログラムとして実行され、FIRRTL(Flexible Intermediate Representation for RTL)経由で Verilog/SystemVerilog を生成。

核心コンセプト:「ジェネレータ」

Scala の型システム・クラス・ジェネリクスをそのまま使って「パラメータ化されたハードウェアモジュール」を記述。width: Int パラメータを変えるだけで同一コードから複数チップ向けの Verilog を生成できる。

  • RISC-V コアの基盤:Rocket Core・BOOM(Berkeley Out-of-Order Machine)は Chisel で記述。SiFive の全チップ設計の基盤。累計 100 億+ コア出荷(RISC-V SiFive コア)。
  • テスト:ScalaTest で RTL モジュールのユニットテストが書ける(ソフトウェアTDDを RTL に適用)。
  • FIRRTL パイプライン:Chisel → FIRRTL(変換・最適化パス)→ Verilog → EDA ツール。FIRRTL パスでカスタム変換(デバッグ注入・パラメータスウィープ)が可能。

SpinalHDL:洗練されたシグナル処理と Clock Domain 管理

SpinalHDL は Charles Papon が開発した Chisel の代替 Scala HDL。

  • ComponentBundleRegFlow/Stream(ハンドシェイクプリミティブ)・StreamFifo 等の高水準プリミティブ。
  • Clock Domain 管理が Chisel より明示的(クロック境界の CDC を型レベルで表現)。
  • Blackbox(既存 Verilog との統合)の記述が洗練されている。
  • VexRiscv(高性能ソフトコア RISC-V)の実装に採用。
  • 欧州・個人開発者コミュニティで採用増。

Chisel vs SpinalHDL:前者は RISC-V International の公式感・エコシステム規模、後者は言語設計の洗練度・Clock Domain 安全性でトレードオフ。

合成可能構文 vs 検証専用構文

HDL の最大の罠:シミュレーション上は動くが合成するとエラーまたは期待と異なる回路になる記述。

構文合成可能?備考
always @(posedge clk)フリップフロップ
assign 継続代入組み合わせ論理
#delay(時間遅延)×テストベンチのみ
$display / $finish×シミュレーション制御
initial ブロックFPGA は一部可、ASIC 不可が多い
fork/join×テストベンチ並行処理

blocking(=)vs non-blocking(<=)代入:FF の always @(posedge clk) では必ず非 blocking(<=)を使用。blocking と non-blocking の混在は タイムステップ内の評価順依存のレース条件を生む。これが RTL バグの最頻出原因の一つ。

HLS(高位合成)との関係

HLS(High-Level Synthesis) は C/C++/SystemC などの高水準言語から RTL を自動生成。

  • Xilinx Vitis HLS / Siemens Catapult HLS / Cadence Stratus HLS
  • 設計抽象を上げて生産性を高めるが、最終 PPA は手書き RTL に劣ることが多い
  • DSP・画像処理・プロトコル処理に有効。演算ユニット(乗算器/FFT)では手書き RTL との PPA 差が 20〜50% 出ることもある

RTL と HLS の混用戦略:クリティカルパス(タイミング・電力の厳しい部分)は RTL 手書き、機能ブロック(データパスの一般部)は HLS で生産性確保。

2026 フロンティア

  • Chisel + RISC-V エコシステムの拡大:SiFive の 500+ 設計採用実績を背景に、オープン ISA コアの大半が Chisel/SpinalHDL で開発。RISC-V International のリファレンス実装も Chisel 採用。RVA23 プロファイル批准でサーバ市場への展開が本格化。
  • AI 支援 RTL 生成:LLM による Verilog コード生成・バグ検出の実用化が進む [VERIFY]。Synopsys.ai Copilot・Cadence JedAI が RTL コード補完・レビュー機能を提供中。
  • Veryl・Bluespec・HardCaml:型安全性・関数型アプローチの新興 HDL が研究・先行採用段階。Verilog の完全置換には至っていないが学術・スタートアップ領域で注目。

情報カットオフ ~2025-08、confidence: medium 固定。AI 支援 RTL 生成の定量的な生産性改善 [VERIFY] は 2026-05 時点で外部検証ができていない項目。

アンチパターン早見表

パターン問題対策
reg をフリップフロップと誤認combinational always の reg は FF にならないalways_ff/always_comb に移行
blocking/non-blocking 混在レース条件・シミュ/合成ギャップFF は <=、組み合わせは = に統一
非合成構文を RTL に混入合成エラーまたは意図しない回路Spyglass・Jasper 等の lint で early detection
VHDL で型変換を省略コンパイルエラー多発to_integerstd_logic_vector 変換関数を習慣化
HLS に全て委ねる面積/電力/周波数でNGクリティカルパスは RTL へ降ろす設計分割を計画段階で決定

Local graph