29 / 37 · 概念
総合設計:重なりを許す 101 パターン検出器
状態最小化・入力有効性・レジスタ出力・独立参照検証を一つの設計に適用します。
レッスンは無料で読めます。受講登録すると進捗を保存できます。
まず要求を固定します
valid=1 の立上りエッジ立上りエッジ クロックが 0 から 1 に変わる瞬間です。CLK=1 の区間全体を指すレベルとは区別します。 詳しく見るで bit_in を一ビット受け入れます。受け入れた列の末尾が 101 なら、そのエッジ後の一サイクル hit=1 とします。重なりを許すので、10101 は第 3・第 5 ビットで hit が必要です。valid=0 なら状態を保持して hit=0、reset なら状態と hit を初期化します。
必要な過去情報だけを記憶する
S0 は一致する接頭部なし、S1 は末尾が 1、S10 は末尾が 10 を意味します。101 完成後の最後の 1 は次パターンの始まりにもなるので、S1 に戻ります。
| 現在状態 | 受入ビット 0 | 受入ビット 1 |
|---|---|---|
| S0 | S0, hit=0 | S1, hit=0 |
| S1 | S10, hit=0 | S1, hit=0 |
| S10 | S0, hit=0 | S1, hit=1 |
下の各列は立上りエッジの記録です。入力はエッジ直前、「更新後」の状態は更新直後です。並びはサンプル順で、物理的な伝搬遅延伝搬遅延 入力が変わってから、出力が正しい値に安定するまでの時間です。論理式の等価性と時間特性は別の性質です。 詳しく見るではありません。リセット後の S0 から始め、全列で valid=1 です。第 3 ビットの検出後に S1 を残すため、第 5 ビットも検出できます。
波形データを表示
| 信号 | 波形 | バスの値 |
|---|---|---|
| 受入ビット | 10101 | |
| 更新後 state | 23452 | S1 → S10 → S1 → S10 → S1 |
| 更新後 hit | 0.101 |
レジスタ化した検出出力を実装する
module pattern_101 (
input logic clk, rst, valid, bit_in,
output logic hit
);
typedef enum logic [1:0] {S0, S1, S10} state_t;
state_t state;
always_ff @(posedge clk) begin
if (rst) begin
state <= S0;
hit <= 1'b0;
end else begin
hit <= 1'b0;
if (valid) begin
case (state)
S0: state <= bit_in ? S1 : S0;
S1: state <= bit_in ? S1 : S10;
S10: begin
state <= bit_in ? S1 : S0;
hit <= bit_in;
end
default: state <= S0;
endcase
end
end
end
endmodulehit は状態とそのエッジで受け入れた入力から計算した結果を、レジスタレジスタ 複数ビットの状態を記憶する回路です。このコースの同期式レジスタは、クロックエッジで定められた入力を記憶します。 詳しく見るに記憶します。単純な組合せ Mealy 出力のように、エッジ間の bit_in 変化へ即応しません。この例は一般の SystemVerilog として検討し、提供する単一クロック実習エンジンの対応構文と実行証拠は別途確認します。
合格基準を独立に計算する
受け入れたビットだけで文字列を作り、長さが 3 以上なら末尾三文字が 101 か比較すると参照モデルになります。FSM状態機械 記憶した状態と入力から、次状態と出力を決めるモデルです。状態遷移・出力・リセット規則を合わせて定義します。 詳しく見る の状態符号化をコピーする必要はありません。
- 101 → 検出位置 3
- 10101 → 検出位置 3、5
- 11101 → 検出位置 5
- 1001 → 検出なし
- 1,0 の後に reset、その後 1 → 検出なし
- 1,0 の間または後に valid=0 を挿入 → 受入番号での結果は同じ
下のビット列実習は、連続する有効入力の機能を確認します。reset・valid 停止・物理タイミングまで検証した結果とは解釈しないでください。
入力を変えて確認
自分で考えてみましょう
101 検出後に S0 へ戻るコードにすると、元仕様と異なる最短の入力列は何ですか。
解説を見る
10101 です。正しい回路は第 3・第 5 入力を検出します。S0 に戻ると、最初の検出の最後の 1 を次パターンの先頭として再利用できず、第 5 入力の検出を逃します。