以下のコードは、クロック ゲートを備えたライブラリでこれを示す必要があります。シミュレーション結果は同じになり、フォーマル検証はこれらの両方が同一であることを証明します。ただし、最初のものは消費電力と面積が少なくなる可能性があります。
//Instances 1 clock gate
reg [7:0] value;
always @(posedge i_clk)
if(enable)
value <= new_value;
//Instances 8 muxes
always @(posedge i_clk)
if(enable)
value <= new_value;
else //Exhaustive so assignment always occurs
value <= value;
最初の例では、8 つの DFF すべてへのクロックに 1 つのクロック ゲートを使用します。2 番目の例では、8 つのマルチプレクサを使用して、各 DFF からの出力をその入力にループ バックします。クロック ゲートとマルチプレクサの面積と消費電力の比率によっては、その差が大きくなる可能性があります。これは Talus でテストされました。
もちろん、2 番目の例の else 句は役に立ちませんが、この実験のポイントは、ツールが複雑な casez/x ステートメントをどの程度うまく処理し、always ブロック全体で有効化を共有できるかを確認することでした。FSM の場合、FSM が検出される限り、構文は重要ではありません。これは、XST がそれらを処理する方法に基づいており、ステート マシンの最適化は非常に成熟したトピックです。