30 / 63 · 概念
カウンタの次状態とリセットの優先順位
増加・保持・リセット・循環を一つの仕様にまとめ、エッジごとの結果を計算します。
レッスンは無料で読めます。受講登録すると進捗を保存できます。
まず次状態式で機能を定めます
ビットの自由増加カウンタに同期 reset と enable を加えると、次のようになります。
リセットリセット 状態を仕様で定めた初期値に戻す制御です。同期式か非同期式か、他の制御より優先されるかを合わせて定めます。が最優先で、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 |
|---|---|---|---|
| 1 | 1 | 3 | 0 |
| 2 | 0 | 0 | 1 |
| 3 | 0 | 1 | 2 |
| 4 | 0 | 2 | 3 |
| 5 | 0 | 3 | 0 |
下の各列は一つの立上りエッジの記録です。入力はエッジ直前、「更新後」の状態は更新直後です。列の並びはサンプル順で、物理的な伝搬遅延伝搬遅延 入力が変わってから、出力が正しい値に安定するまでの時間です。論理式の等価性と時間特性は別の性質です。 詳しく見るではありません。初期状態 3 から、最初のエッジではリセットが増加より優先されます。最後のエッジは 3 から 0 への循環です。
波形データを表示
| 信号 | 波形 | バスの値 |
|---|---|---|
| エッジ | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| 更新前 count | 23452 | 11 → 00 → 01 → 10 → 11 |
| 更新後 count | 23452 | 00 → 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 を保持するには、幅を広げるか、別の飽和・エラー方針が必要です。