VHDLプロセスにおける感度リストの活用:信頼性の高いRTL設計のために
実用レベルのVHDLでは、プロセスは通常 プロセス内で読み取られるすべての信号は感度リストに含める必要があります。VHDLコンパイラは欠落した信号を警告しませんが、省略すると合成後の動作が変わってしまいます。 VHDL-2008 では 添付のビデオチュートリアルでは、感度リストを使用するプロセスの構築を解説しています。 本レッスンで作成された最終的なVHDLスニペット: コンソール出力から、 実務では、感度リストが合成可能なRTLのデファクトスタンダードです。設計意図が明確になり、合成ツールが正しいハードウェアを生成でき、 次のチュートリアルへ こちら。感度リストとは
wait 文ではなく 感度リスト(sensitivity list) によって駆動されます。感度リストは、プロセスを再開(ウェイクアップ)させるべきすべての信号を列挙します。シミュレーションと合成の違い
wait on や wait until はシミュレーションでは便利ですが、合成可能なRTLではほとんど使用されません。合成ツールは wait 文を無視することが多く、予期しないハードウェアが生成される原因になります。一方、感度リストは組み合わせ回路またはクロック同期ブロックに直接マッピングされるため、合成ツールが確実に実装できます。感度リスト付きプロセスの構文
process( signal1, signal2, ... ) is
begin
-- メインのロジック
end process;
VHDL-2008 の
all キーワードprocess(all) と書くことで、読み取られるすべての信号を自動的に含められます。しかし、主要な商用合成ツールの多くはまだこの機能をサポートしていません。演習:感度リストを用いたプロセスの例
entity T09_SensitivityListTb is end entity;
architecture sim of T09_SensitivityListTb is
signal CountUp : integer := 0;
signal CountDown : integer := 10;
begin
-- wait 文を使用するプロセス
process is
begin
CountUp <= CountUp + 1;
CountDown <= CountDown - 1;
wait for 10 ns;
end process;
-- wait on を使用するプロセス
process is
begin
if CountUp = CountDown then
report "Process A: Jackpot!";
end if;
wait on CountUp, CountDown;
end process;
-- 感度リストを使用する等価なプロセス
process(CountUp, CountDown) is
begin
if CountUp = CountDown then
report "Process B: Jackpot!";
end if;
end process;
end architecture;
シミュレーション結果(ModelSim)
VSIM 2> run
# ** Note: Process A: Jackpot!
# Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb
# ** Note: Process B: Jackpot!
# Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb
解説
wait on プロセスと感度リストプロセスが同一条件で発火することがわかります。この等価性は、感度リストがプロセスの末尾に暗黙の wait on を持つように振る舞うためです。wait 文がもたらす曖昧さを回避できます。重要なポイント
wait on で終わるプロセスと機能的に同一です。wait 文を、合成対象のRTLには感度リストを使用します。
VHDL
- VHDLで文字列リストを作成する: ベスト・プラクティスと実装例
- Tcl駆動テストベンチでVHDLコード・ロック・モジュールを検証する
- VHDLでPWMコントローラを実装: 設計、シミュレーション、FPGAデモ
- ブロックRAMにおける堅牢なVHDLリングバッファFIFOの設計
- VHDLで自己検証テストベンチを構築する実践ガイド
- VHDLで保護型とアクセスポインタを用いた動的リンクリスト実装
- プロセス内プロシージャでVHDLステートマシンをクリーンに設計
- VHDLにおける不純関数の活用:FSMの可読性と保守性向上
- VHDL関数マスター:効率的な設計のための実践ガイド
- VHDLで有限ステートマシンを設計:信号機の実践例
- VHDLプロシージャ活用:再利用可能なコードで設計をシンプルに