Altifigence Academy

30 / 63 · 概念

カウンタの次状態とリセットの優先順位

増加・保持・リセット・循環を一つの仕様にまとめ、エッジごとの結果を計算します。

まず次状態式で機能を定めます

NN ビットの自由増加カウンタに同期 reset と enable を加えると、次のようになります。

Ck+1={0rk=1(Ck+1) mod 2Nrk=0, ek=1Ckrk=0, ek=0C_{k+1}=\begin{cases} 0&r_k=1\\ (C_k+1)\bmod2^N&r_k=0,\ e_k=1\\ C_k&r_k=0,\ e_k=0 \end{cases}

リセットリセット 状態を仕様で定めた初期値に戻す制御です。同期式か非同期式か、他の制御より優先されるかを合わせて定めます。が最優先で、enable が 0 なら保持します。

図の初期状態 q=11 で reset=1 を選ぶと、次状態だけが 00 に変わります。次のクロックへ進め、記憶値が変わる時点を確認してください。reset を解除して 00→01→10→11→00 と進め、enable=0 ではエッジ数だけ増え、q は保持されるか比べます。

立上りエッジ前後の状態を直接比較

同期 reset は enable より優先されます。enable=0 なら保持中の値を維持します。 q=11; q_next = (q + 1) mod 4

エッジごとの予測表を作る

初期状態 3、最初のエッジで reset=1、以降 reset=0 の 2 ビットカウンタなら、エッジ後の値は 0、1、2、3、0 です。エッジ間で reset を 1 にしても、立上りエッジ立上りエッジ クロックが 0 から 1 に変わる瞬間です。CLK=1 の区間全体を指すレベルとは区別します。 詳しく見る前に同期レジスタレジスタ 複数ビットの状態を記憶する回路です。このコースの同期式レジスタは、クロックエッジで定められた入力を記憶します。 詳しく見るの値が直ちに 0 にはなりません。

エッジエッジ直前の reset以前の C更新後 C
1130
2001
3012
4023
5030

下の各列は一つの立上りエッジの記録です。入力はエッジ直前、「更新後」の状態は更新直後です。列の並びはサンプル順で、物理的な伝搬遅延伝搬遅延 入力が変わってから、出力が正しい値に安定するまでの時間です。論理式の等価性と時間特性は別の性質です。 詳しく見るではありません。初期状態 3 から、最初のエッジではリセットが増加より優先されます。最後のエッジは 3 から 0 への循環です。

2 ビットカウンタのリセットと循環
波形データを表示
波形データ:各文字は一つの区間、ドットは前の状態の保持、p はクロック 1 周期を表します。
信号波形バスの値
エッジ23452E0 → E1 → E2 → E3 → E4
reset10...
更新前 count2345211 → 00 → 01 → 10 → 11
更新後 count2345200 → 01 → 10 → 11 → 00

reset の意味を混同しない

always_ff @(posedge clk) 内の if(rst) は同期リセットです。イベント一覧に reset のエッジを加える非同期リセットとは異なります。非同期 reset の解除には recovery/removal など別のタイミング条件があるため、早く 0 になるという理由だけで変えてはいけません。

周期的なパルスを出すカウンタなら、どの状態でパルスを出すかも定めます。最大値の間に 1 なのか、0 に循環するエッジ後の 1 サイクルで 1 なのかによって、出力式と観測時点が変わります。

自分で考えてみましょう

3 ビットカウンタが 7 です。最初のエッジが rst=0、en=0、次が rst=0、en=1 なら、各状態は何ですか。

解説を見る

最初のエッジは保持して 7、次は 3 ビット範囲を循環して 0 です。8 を保持するには、幅を広げるか、別の飽和・エラー方針が必要です。

選択はこのブラウザに適用されます。フッターからいつでも変更できます。