第11回「誤ってラッチを生成する記述」(201303)

組み合わせ回路を記述したつもりが、シミュレーションでラッチ動作になってしまったり、論理合成でラッチが生成されてしまうなんてことがあります。今回は誤ってラッチを生成しないための組み合わせ回路記述の注意点について触れてみます。




●センシティビティリストの漏れに注意

センシティビティリストとは、シミュレーションにおいてprocess文(VHDL)やalways文(Verilog HDL)の起動条件を意味します。組み合わせ回路を記述する場合、入力となるすべての信号を列挙しなければなりません。センシティビティリストが不足していると、入力信号の値が変化しても出力信号の値が変化しないことになり、シミュレーションにおいてラッチ動作となるわけです。一方、論理合成ツールではセンシティビティリストが不足していても正しく組み合わせ回路が生成されます。なお、Verilog HDL(2001)やSystemVerilogの各言語では、このような記述上の誤りを防止するため、センシティビティリストの簡略化(@ *)や、組み合わせ回路専用のalways文(always_comb)が用意されています。



●if文、case文の条件漏れに注意

組み合わせ回路は入力が変化すれば、出力も変化するという特徴があります。すなわち記述では全ての入力信号の条件が記述されていなければなりません。 if文やcase文の条件に漏れがあれば、シミュレーションではラッチ動作、論理合成の結果もラッチが生成されることになります。 if文では必ずelse項を、case文ではothers項(VHDL)またはdefault項(Verilog HDL)を忘れずに記述します。



●代入文の記述漏れに注意

1つのprocess文やalways文で複数の信号を生成している場合、全ての条件において全ての出力信号の代入を行わなければなりません。出力信号の記述漏れがあるとシミュレーションでラッチ動作となり、論理合成でラッチが生成されます。極力1つのprocess文やalways文では1つの信号を生成すると考えた方が安全と言えます。



今回組み合わせ回路を記述する際の注意点についてまとめてみました。上記注意事項は、すべて守らなければ、正しい組み合わせ回路記述にはなりませんので徹底してください。 なお回路記述が完成したら、シミュレーションや論理合成の各ツールにかける前にリントツールで記述チェックを行うことをお勧めします。リントツールは入力したHDL記述を設計スタイルガイドにある設計ルールと照合し、記述上問題のある箇所についてレポートしてくれます。



今回ご紹介した内容は以下の講座で詳しく説明しています。


RTL設計初級


設計スタイルガイドセミナー


XILINX
教育サービス
HDLABトレーニング(SystemC)
HDLABトレーニング(SystemVerilog)
HDLABトレーニング(Verilog HDL)
HDLABトレーニング(フレッシュマン向け)
HDLABトレーニング(専門分野)
HDLABトレーニング(組込み分野)
HDLABトレーニング(XILINX認定)
HDLABトレーニング日程表
HDLABトレーニング開催リクエスト
設計スキルアセスメント
設計技能検定試験「ESA」
設計技能検定試験「ESA Basic」
設計・コンサルティング
ARM CPUモデル環境
SystemC
Design Style Guide
e-Learning System「STIL」
設計・検証のワンポイント
購入・見積もり
ダウンロード
お問い合わせ

XAP