Hardware Description Languages: Verilog, SystemVerilog, VHDL, and Modern HDLs
RTL設計の中核を担うHDL全体像を体系化。IEEE標準のVerilog/SystemVerilog/VHDLから、Scala埋め込みDSLのChisel/SpinalHDLまで、合成可能構文・検証機能・HLSとの関係を解説。RISC-VエコシステムでのChisel活用も扱う。
article technology ja 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 property・cover・シーケンス演算子(|->含意、##Nクロック遅延)。 - カバレッジグループ(
covergroup):機能カバレッジ収集の宣言的記述。
SystemVerilog は UVM(Universal Verification Methodology、tech-107 参照)の基盤言語として事実上必須。RTL 設計でも always_ff 等の安全構文は現代の業界標準。
VHDL:欧州・航空宇宙・防衛の強型付け言語
VHDL(VHSIC Hardware Description Language、IEEE 1076) は 1987 年に米国防総省が VHSIC プログラムの成果物として標準化。強型付け言語であり、型の不一致はコンパイル時にエラー。
特徴:
- 強い型システム(
std_logicvsintegerの混在を型変換なしに禁止) entity(インタフェース)/architecture(実装)の明確分離signal(並行処理、デルタサイクル遅延あり)/variable(手続き的、即時更新)の厳密な区別process(手続き記述)・concurrent signal assignment・component(階層化)
採用領域:
欧州航空宇宙(Airbus 系 DO-254 認証要件)、原子力・医療機器、防衛(NATO 標準)。VHDL-2008 で generic package・boolean 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。
Component・Bundle・Reg・Flow/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_integer・std_logic_vector 変換関数を習慣化 |
| HLS に全て委ねる | 面積/電力/周波数でNG | クリティカルパスは RTL へ降ろす設計分割を計画段階で決定 |