工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> VHDL

VHDLプロセスにおける感度リストの活用:信頼性の高いRTL設計のために

感度リストとは

実用レベルのVHDLでは、プロセスは通常 wait 文ではなく 感度リスト(sensitivity list) によって駆動されます。感度リストは、プロセスを再開(ウェイクアップ)させるべきすべての信号を列挙します。

シミュレーションと合成の違い

wait on や wait until はシミュレーションでは便利ですが、合成可能なRTLではほとんど使用されません。合成ツールは wait 文を無視することが多く、予期しないハードウェアが生成される原因になります。一方、感度リストは組み合わせ回路またはクロック同期ブロックに直接マッピングされるため、合成ツールが確実に実装できます。

感度リスト付きプロセスの構文

process( signal1, signal2, ... ) is
begin
  -- メインのロジック
end process;

プロセス内で読み取られるすべての信号は感度リストに含める必要があります。VHDLコンパイラは欠落した信号を警告しませんが、省略すると合成後の動作が変わってしまいます。

VHDL-2008 の all キーワード

VHDL-2008 では process(all) と書くことで、読み取られるすべての信号を自動的に含められます。しかし、主要な商用合成ツールの多くはまだこの機能をサポートしていません。

演習:感度リストを用いたプロセスの例

添付のビデオチュートリアルでは、感度リストを使用するプロセスの構築を解説しています。

本レッスンで作成された最終的なVHDLスニペット:

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 を持つように振る舞うためです。

実務では、感度リストが合成可能なRTLのデファクトスタンダードです。設計意図が明確になり、合成ツールが正しいハードウェアを生成でき、wait 文がもたらす曖昧さを回避できます。

重要なポイント

  • 感度リスト付きプロセスは、wait on で終わるプロセスと機能的に同一です。
  • プロセス内で読み取るすべての信号を感度リストに記述しなければなりません。
  • シミュレーション専用コードには wait 文を、合成対象のRTLには感度リストを使用します。

次のチュートリアルへ こちら。

VHDL

  1. VHDLで文字列リストを作成する: ベスト・プラクティスと実装例
  2. Tcl駆動テストベンチでVHDLコード・ロック・モジュールを検証する
  3. VHDLでPWMコントローラを実装: 設計、シミュレーション、FPGAデモ
  4. ブロックRAMにおける堅牢なVHDLリングバッファFIFOの設計
  5. VHDLで自己検証テストベンチを構築する実践ガイド
  6. VHDLで保護型とアクセスポインタを用いた動的リンクリスト実装
  7. プロセス内プロシージャでVHDLステートマシンをクリーンに設計
  8. VHDLにおける不純関数の活用:FSMの可読性と保守性向上
  9. VHDL関数マスター:効率的な設計のための実践ガイド
  10. VHDLで有限ステートマシンを設計:信号機の実践例
  11. VHDLプロシージャ活用:再利用可能なコードで設計をシンプルに