14 / 37 · 概念
フリップフロップ・enable・制御の優先順位
保持・ロード・リセットを次状態式で定め、意図しないクロックゲーティングを避けます。
レッスンは無料で読めます。受講登録すると進捗を保存できます。
レジスタは次状態関数の結果を記憶します
クロックエッジ直前の値を 、エッジで取り込む入力を 、更新後を とします。reset を優先し、その次が enable のレジスタレジスタ 複数ビットの状態を記憶する回路です。このコースの同期式レジスタは、クロックエッジで定められた入力を記憶します。 詳しく見るは次の式に従います。
enable が 0 なら、入力 D が変わっても記憶値は保たれます。順序 RTL でこの保持経路を省略することと、組合せ回路で代入を忘れることは異なります。順序ブロックの保持動作はレジスタ仕様の一部です。
module enabled_register (
input logic clk, rst, en,
input logic [7:0] d,
output logic [7:0] q
);
always_ff @(posedge clk) begin
if (rst) q <= 8'b0;
else if (en) q <= d;
end
endmoduleこれは同期式 active-high リセットです。reset と enable が同時に 1 のエッジでは、0 が記憶されます。順番を変えると機能も変わるので、優先順位はコメントだけでなくコードとテストにも残します。
下の各列は一つの立上りエッジ立上りエッジ クロックが 0 から 1 に変わる瞬間です。CLK=1 の区間全体を指すレベルとは区別します。 詳しく見るの観測記録です。入力はエッジ直前、名前に「更新後」とある状態は更新直後の値です。列の並びはサンプル順を示し、物理的な伝搬遅延伝搬遅延 入力が変わってから、出力が正しい値に安定するまでの時間です。論理式の等価性と時間特性は別の性質です。 詳しく見るを描いたものではありません。初期 Q=0xA5 で、最初の列は保持、次は書込み、三つ目は reset と enable の同時有効です。
波形データを表示
| 信号 | 波形 | バスの値 |
|---|---|---|
| エッジ | 2345 | E0 → E1 → E2 → E3 |
| reset | 0.10 | |
| enable | 01.0 | |
| D | 2.34 | 3C → 99 → 77 |
| 更新後 Q | 234. | A5 → 3C → 00 |
enable はクロックを直接切る信号ではありません
gated_clk = clk & en のような組合せ式を勝手にクロックにすると、en の変化で短いパルスや予期しないエッジが生じる場合があります。clock enable の RTL をどのセルへ割り当てるかは合成・実装フローの役割です。省電力のクロックゲーティングは、適切なセルとタイミング検証を前提に別途設計します。
優先順位は reset・load・enable などの制御が重なるときに現れます。一つずつ有効にするだけでは不十分です。例えば q=A5 で en=0、d=3C なら保持し、次のエッジで en=1 なら 3C を記憶しなければなりません。
自分で考えてみましょう
q=0xA5 から rst=1、en=1、d=0x3C のエッジを通り、その次を rst=0、en=0 とします。各エッジ後の q は何ですか。
解説を見る
最初のエッジではリセットが優先され 0、次は enable が 0 なのでそのまま 0 です。リセットを en の内側に実装すると en=0 でのリセットを見逃すため、その組合せも別途検査します。