← ブログに戻る組合せ論理

組み合わせ論理における静的ハザードと動的ハザード

経路遅延の不一致が静的・動的・機能的ハザードを生む仕組み、コンセンサス項で 2 段静的ハザードを除く方法、物理実装の検証方法を解説します。

DennyDenny
読了まで約10分
Chalkboard feature illustration for “組み合わせ論理における静的ハザードと動的ハザード”

**要点:**静的ハザードは、入力遷移中に本来一定であるべき出力にパルスが生じ得る現象です。動的ハザードでは、本来 1 回だけのはずの出力遷移が複数回発生します。単一入力変化を仮定した 2 段 SOP ネットワークでは、隣接する 1 セルの各対を共通の含意項で覆います。追加するコンセンサス項はブール関数を保ったまま、危険な受け渡しを閉じます。この証明は、複数入力の変化、多段マッピング、非同期フィードバック、または冗長論理を取り除く合成には自動的に及びません。

真理値表が規定するのは、安定した入力値と出力値です。異なる遅延をもつゲートを信号が通過している最中に何が起こるかは規定しません。したがって、同じブール関数を実装した 2 つの回路でも、すべての安定状態では一致する一方、入力が変化してから数ナノ秒の挙動は異なり得ます。

この過渡的な振る舞いは、非同期制御、クロックまたはリセット入力、外部ピン、レベル感応の状態要素、サンプリングエッジに到達する場合に重要になります。

ハザード、グリッチ、レース

レース は、関連する 2 本以上の信号経路が時間的に競合するときに存在します。ハザード は、許容される経路遅延の順序のいずれかで、望ましくない出力遷移を発生させ得る回路構造と遷移です。グリッチ は、実際のあるタイミング条件で観測されるパルスです。

この区別は有用です。

  • ゼロ遅延シミュレーションではハザードが隠れることがあります。
  • ある遅延の組合せにはハザードがあっても、パルスが現れないことがあります。
  • プロセス、電圧、温度、配置、配線によって、どちらの経路が先に到達するかが変わり得ます。
  • 「グリッチを見なかった」は、ハザードフリーである証明ではありません。

静的ハザード

静的 1 ハザード は、出力が 1 のまま保たれるべきなのに、一時的に 0 へ落ちる可能性がある現象です。一般に 2 段の積和形(SOP)ネットワークで解析します。

静的 0 ハザード はその双対で、出力が 0 のまま保たれるべきなのに、一時的に 1 へ上がる可能性があります。一般に 2 段の和積形(POS)ネットワークで解析します。

教科書的な K マップ手順は、次を仮定します。

  1. ネットワークが述べた 2 段形式で実装されている。
  2. 一度に変化する入力変数は 1 つだけである。
  3. ゲートと相互接続には任意の正の遅延があり得る。
  4. 安定した入力値が意図したブール関数を満たす。

これらの仮定を変えるなら、証明も変えなければなりません。

静的 1 ハザードの例

次を考えます。

F=AB+A‾CF = A B + \overline{A} C

B=C=1B=C=1 のとき、AA のどちらの値でも安定出力は 1 です。

  • A=1A=1 では、項 ABAB が OR 出力を高く保ちます。
  • A=0A=0 では、項 A‾C\overline{A}C が OR 出力を高く保ちます。

AA が 1 から 0 へ遷移する間、直接経路が ABAB を無効化した後に、インバータ経路が A‾C\overline{A}C を有効化することがあります。

区間AA 経路A‾\overline{A} 経路ABABA‾C\overline{A}CFF
遷移前の安定状態10101
起こり得る受け渡しの空白00000
遷移後の安定状態01011

中央の行は、真理値表にある別の入力状態ではありません。実装内部で到着時刻が等しくないことを表しています。

カルノー図で継ぎ目を見つける

変数 AA、BB、CC について考えます。

              BC
        00   01   11   10
      +----+----+----+----+
 A=0  |  0 |  1 |  1 |  0 |
      +----+----+----+----+
 A=1  |  0 |  0 |  1 |  1 |
      +----+----+----+----+

元の SOP は次を使います。

  • A‾C\overline{A}C は、C=1C=1 の上段セルを覆います。
  • ABAB は、B=1B=1 の下段セルを覆います。

セル A=0, B=1, C=1 と A=1, B=1, C=1 は、A だけが異なるので隣接しています。しかし、選択されたどの含意項も両方を覆っていません。A が変化するとき、出力を維持する責任は一方の積項からもう一方へ移ります。この覆われていない隣接関係が、静的 1 ハザードの継ぎ目です。

コンセンサス項を加える

ABAB と A‾C\overline{A}C のコンセンサスは BCBC です。

Fhf=AB+A‾C+BCF_{\text{hf}} = AB + \overline{A}C + BC

コンセンサス定理は次の通りです。

XY+X‾Z+YZ=XY+X‾ZXY + \overline{X}Z + YZ = XY + \overline{X}Z

したがって、追加した項はどの安定した真理値表の結果も変えません。しかし、B=C=1B=C=1 の危険な遷移中には BCBC が 1 のままなので、OR 出力を高く保ちます。

K マップでは、BCBC は 2 つの隣接セルにまたがる縦のグループです。一般的な 2 段 SOP の手順は次の通りです。

  1. 許可される、隣接した 1 セル間のすべての単一変数遷移を特定する。
  2. 実装したカバーに、各セル対をまたぐ含意項があるか調べる。
  3. 覆われていないセル対ごとに、適切なコンセンサス項またはカバー項を追加する。
  4. 合成と物理実装が意図した構造を保つことを検証する。

双対の手順では、POS 実装で隣接した 0 セルを覆い、静的 0 ハザードを防ぎます。

最小論理とハザードフリー論理は異なる目的を最適化する

最小 SOP の項数が少ないのは、BCBC がブール代数上は冗長だからです。ハザードフリー SOP は、物理的な冗長性を意図して残します。

ここで実装上の問題が生じます。論理合成器は通常、ブール関数を変えない項を削除できます。また、式を多段ネットワークへ因数分解したり、内部挙動が異なる LUT やセルへマッピングしたりすることもあります。

ハザードフリー性が要件であるなら、次のことを行います。

  • コメントではなく実装制約として表す。
  • ベンダーが文書化した保持またはハザードフリーの手法を使う。
  • 合成済みネットリストを検査する。
  • マッピング後の設計に対してタイミングを考慮した検証を行う。
  • 対象フローが対応する場合、最終配置配線済み実装を検証する。

RTL の式だけでは、物理的なコンセンサス経路が最適化後も残ることを保証できません。

動的ハザード

動的ハザード は、正しい出力が 1 回だけ変化するはずなのに、安定するまでに複数回変化し得るときに起こります。たとえば 0 → 1 → 0 → 1 のような遷移です。

動的ハザードには複数の相互作用する遅延が必要であり、多段かつ再収束する論理に関連します。単一入力変化モデルの下で該当する静的ハザードがないと証明された 2 段ネットワークは解析しやすい一方、因数分解または技術マッピングされた実現形は、もはやその構造を保っていないことがあります。

任意の動的ハザードに対する、万能な「項を 1 つ追加する」修正方法はありません。実践的な対応には次のものがあります。

  • ハザードフリー性を証明できる形へ再設計または再合成する。
  • 結果が感度の高い消費先に到達する前にレジスタへ格納する。
  • 非同期動作向けに設計したハンドシェイクまたは状態機械方式を使う。
  • ターゲット固有のグリッチフリー MUX/クロック制御セルを使う。
  • 実装後の遅延挙動を検証する。

パスを「均衡化」するために任意の遅延バッファを追加するのは、設計手法が有界遅延に明示的に依存し、それを制約していない限り、プロセス、電圧、温度、配線の違いに対して脆弱です。

複数入力の変化と機能的ハザード

K マップの隣接関係は、1 つの変数が変化することを表します。独立した 2 つの入力が近い時刻に変化し得る場合、回路は複数の中間的な安定組合せのいずれかを通ることがあります。単一入力の静的ハザードがないネットワークでも、機能的ハザード を生じることがあります。

たとえば 00 から 11 への遷移は、物理的には 01 または 10 を経由する可能性があります。ブール関数がそれらの中間行で異なるなら、関数を変えずに両経路を等価にする冗長ゲートはありません。

システムレベルの選択肢には次のものがあります。

  • 単一入力変化プロトコルを強制する。
  • 適切な場合には、一度に 1 ビットだけが変化するよう遷移を符号化する。
  • 関連する制御信号を同期化してレジスタに格納する。
  • 要求/応答ハンドシェイクを使う。
  • 有効信号の後にのみ、一貫したデータ束を取り込む。
  • 同時入力変化を組み合わせ的に解釈しないよう、インターフェースを再設計する。

グレイコードは特定の隣接状態の問題には役立ちますが、任意のバスに対する万能薬ではありません。

同期論理でグリッチを閉じ込める場合

組み合わせ結果がフリップフロップの D 入力だけを駆動し、サンプリングエッジの前にセットアップマージンをもってネットワークが安定し、ホールド時間の間も安定しているなら、内部グリッチがアーキテクチャ状態になる必要はありません。

ただし、この説明には限界があります。

  • グリッチは依然として動的電力を消費する。
  • 異なるタイミングをもつ別の経路へ伝播することがある。
  • 非同期リセット、セット、クロック、イネーブル、ハンドシェイクでは危険である。
  • タイミングマージンが縮むと取り込まれる可能性がある。
  • ピンやチップセレクト信号で外部から見えることがある。

通常の組み合わせネットワークに論理を通してクロックを生成してはいけません。集積クロックゲーティングセル、FPGA のクロック制御リソース、またはイネーブルベースの同期設計を使います。

非同期ハザードと本質的ハザード

非同期順序回路では、グローバルなサンプリングエッジなしに遷移が状態へ影響することを意図的に許します。そのため、遅延仮定、状態符号化、ハンドシェイク、ハザードフリー条件を明示した設計手法が必要です。

本質的ハザード は、非同期フィードバック実装で入力が不均等に伝播することにより、入力変化が必要なすべての点に到達する前に内部状態が進んでしまう現象に関係します。これは単なる組み合わせ回路の静的グリッチの別名ではなく、コンセンサス項で一般に除去できるものでもありません。

本質的ハザードの扱いは、非同期機械の仕様と実装に属します。多くの場合、フィードバック遅延の仮定または別の回路構造が関わります。同期論理へ切り替えることは選択肢の一つですが、すべてのハザードが消える証明ではありません。

適切なモデルをシミュレーションする

ゼロ遅延のデジタルシミュレータは、通常、依存ノードを同じシミュレーション時刻内で変化させるため、パルスが見えないことがあります。ハザードを調べるには、モデルに不均等な伝播遅延を含める必要があります。

  1. F=AB+A‾CF=AB+\overline{A}C を構築する。
  2. B=C=1B=C=1 を保持する。
  3. 直接 A 経路と反転 A 経路の間に、文書化した遅延差を割り当てるか導入する。
  4. A だけをトグルする。
  5. モデル化した遅延より細かい時間分解能で F を観察する。
  6. BCBC を追加して繰り返す。

シミュレータのバッファ部品が論理的にゼロ遅延なら、バッファを連結しても何も証明できません。遅延を考慮する機能、ゲートレベルのタイミングシミュレーション、または物理測定を使ってください。

ある遅延割当てでパルスが現れなかったことは、その実行についての証拠であり、許容されるすべての遅延に対する証明ではありません。

検証チェックリスト

  • どの入力が同時に変化することを許されているか。
  • 出力は一定である必要があるか、それとも 1 回遷移すべきか。
  • 実装したネットワークは 2 段、因数分解済み、LUT/セルマップ済みのどれか。
  • 関連する隣接 K マップ対のすべてがカバー項を共有しているか。
  • 合成は冗長性を削除または再因数分解できるか。
  • 出力はレジスタ化された D 入力だけを駆動するか、それとも感度の高い制御を駆動するか。
  • マッピングおよび配線後に最小遅延と最大遅延を確認したか。
  • 非同期フィードバックと本質的ハザードを、認められた手法で扱っているか。

次のステップ

クロックスキューのガイドでは、クロック到着時刻の不一致がセットアップマージンとホールドマージンをどう変えるかを説明します。カルノー図におけるドントケア条件では、未指定の入力組合せを最小化に活用できる場合を説明します。ただし、ハザード解析で使う前に、ドントケアはシステム契約によって正当化されていなければなりません。

主要参考文献

アイデアを実際に動く回路にしましょう。