ラッチ、フリップフロップ、レジスタ、カウンタ、有限状態機械を含む順序(ステートフル) 論理回路を構築する。SRラッチ、DおよびJKフリップフロップ、バイナリ/BCD/リング カウンタ、クロック信号とタイミング分析を伴うMealy/Moore FSM設計をカバーする。 回路が過去の入力を記憶する必要がある時、イベントをカウントする時、 状態依存の制御シーケンスを実装する時に使用する。
必要なメモリと状態タイプを特定し、状態図と遷移表を構成し、選択したフリップフロップタイプの励起方程式を導出し、フリップフロップと組み合わせ論理を使用してゲートレベルで回路を実装し、タイミング図分析と状態シーケンスシミュレーションによって正確性を検証することで、順序論理回路を設計する。
回路が記憶する必要があるものと必要な異なる状態の数を判定する:
## State Requirements
- **Number of states**: [N]
- **State encoding**: [binary / one-hot / Gray]
- **Flip-flops needed**: [count and type]
- **Machine type**: [Mealy / Moore]
- **Inputs**: [list with descriptions]
- **Outputs**: [list with descriptions]
- **Reset behavior**: [synchronous / asynchronous / none]
期待結果: 符号化が選択され、フリップフロップタイプが選択され、機械がMealyまたはMooreに分類された完全な状態インベントリ。
失敗時: 仕様から状態数が不明確な場合、回路のメモリ深度までのすべての可能な入力シーケンスを追跡して状態を列挙する。数が実用的な限界を超える場合(手動設計で16状態以上)、相互作用するより小さなFSMへの分解を検討する。
回路の動作を状態図と等価な表形式として形式化する:
## State Transition Table
| Present State | Input | Next State | Output |
|--------------|-------|------------|--------|
| S0 | 0 | S0 | 0 |
| S0 | 1 | S1 | 0 |
| S1 | 0 | S0 | 0 |
| S1 | 1 | S2 | 0 |
| ... | ... | ... | ... |
- **Unreachable states**: [list, or "none"]
- **Equivalent state pairs**: [list, or "none"]
期待結果: すべての現在状態/入力組み合わせをカバーする完全な状態遷移表で、初期状態からすべての状態が到達可能。
失敗時: 遷移表に欠落エントリがある場合、仕様が不完全。要件に戻って曖昧さを解決する。到達不能状態がある場合、それに到達する遷移を追加するか、削除して状態符号化を縮小する。
遷移表からフリップフロップ入力方程式(励起方程式)を計算する:
## Excitation Equations
- **Flip-flop type**: [D / JK / T]
- **State encoding**: [binary assignment table]
| Flip-Flop | Excitation Equation |
|-----------|------------------------------|
| Q1 | D1 = [minimized expression] |
| Q0 | D0 = [minimized expression] |
## Output Equations
| Output | Equation |
|--------|------------------------------|
| Y | [minimized expression] |
期待結果: 各フリップフロップの最小化された励起方程式と各主出力の出力方程式で、すべてのドントケアが活用されている。
失敗時: 励起方程式が過度に複雑に見える場合、状態符号化を再考する。異なる符号化(例: バイナリからワンホットへの切り替え、または状態コードの再割り当て)が組み合わせロジックを劇的に簡素化できる。少なくとも2つの符号化を試みてリテラル数を比較する。
フリップフロップと組み合わせ論理ゲートから完全な回路を構築する:
## Circuit Implementation
- **Flip-flops**: [count] x [type], [edge type]-triggered
- **Combinational gates for excitation**: [count and types]
- **Combinational gates for output**: [count and types]
- **Total gate count**: [flip-flops + combinational gates]
- **Reset mechanism**: [asynchronous CLR / synchronous mux / none]
期待結果: フリップフロップ、励起ロジック、出力ロジック、クロック配分、リセットメカニズムを含む完全なゲートレベルネットリストで、すべての信号が正確に1つのドライバーを持つ。
失敗時: 実装にフリップフロップ外のフィードバックがある場合、組み合わせループが導入されている。同期順序回路のすべてのフィードバックはフリップフロップを通過しなければならない。問題のパスを追跡してレジスタを通じてルートを変更する。
複数のクロックサイクルにわたって回路が正しく動作することを確認する:
## Timing Verification
| Cycle | Clock | Input | Present State | Next State | Output |
|-------|-------|-------|---------------|------------|--------|
| 0 | rst | - | - | S0 | 0 |
| 1 | rise | 1 | S0 | S1 | 0 |
| 2 | rise | 1 | S1 | S2 | 0 |
| ... | ... | ... | ... | ... | ... |
- **All transitions match state diagram**: [Yes / No]
- **Setup/hold violations**: [None / list]
- **Reset verified**: [Yes / No]
期待結果: タイミング図のすべてのサイクルが状態遷移表と一致し、すべてのサイクルで出力が正しく、タイミング違反がない。
失敗時: 状態遷移が間違っている場合、その特定の現在状態と入力組み合わせの励起ロジックを追跡する。出力が間違っているが遷移は正しい場合、エラーは出力ロジックにある。回路が意図しない状態に入る場合、不完全なリセットまたは未使用状態コードからの欠落遷移を確認する。
design-logic-circuit -- 組み合わせ励起および出力ロジックブロックを設計するsimulate-cpu-architecture -- CPUデータパスで順序ブロック(レジスタ、カウンタ、制御FSM)を使用するmodel-markov-chain -- 有限状態機械は離散時間マルコフ連鎖の形式的フレームワークを共有する