デジタル論理回路
デジタル信号と AND・OR・XOR などの論理ゲートから始め、組合せ回路、ラッチ・フリップフロップ、カウンタ、状態機械を設計します。真理値表・数式・回路・波形を結び付け、RTL 実習で検証します。選択制の発展編ではデータパスとインターフェースまで広げます。
このコースで学ぶこと
- 論理値と電圧を区別し、8 種類のゲートの真理値表・記号・等価回路を説明する。
- 仕様から SOP・POS・カルノー図を使って組合せ回路を設計し、全入力組合せを検査する。
- エンコーダ・デコーダ・MUX・DEMUX・加算器・比較器の入力条件と境界値を定義する。
- ラッチとフリップフロップの違いを説明し、reset・enable・クロックによる更新規則を設計する。
- カウンタ・シフトレジスタ・状態機械を RTL で実装し、タイミング・非同期入力・デバウンスを解析する。
- 独立した参照モデルで設計を検証し、重なりを許す 101 パターン検出器を完成させる。
- 選択制の発展編で ALU・メモリ・FIFO・パイプライン・インターフェースへ展開する。
はじめる前に
ブラウザー演習は教育用モデルで、HDLのコンパイルや実行は行いません。配布ソースを別途実行する場合は、OSに合ったDigital Design Studioの手順に従い、必要な操作ではログインしてください。
インストールと初回起動 ↗ · ダウンロード ↗カリキュラム
- デジタル信号と数の表現
- デジタル信号:電圧を 0 と 1 として読む条件概念
論理値と電圧を区別し、入力しきい値・ノイズマージン・伝搬遅延を計算します。
- 数体系と固定幅の表現概念
基数変換にとどまらず、表現範囲・必要なビット数・切り捨てによる誤差を計算します。
- 論理ゲートと真理値表
- 基本ゲート:AND・OR・NOT・BUFFER概念
回路記号と真理値表を結び付け、複数のゲートで条件を構成します。
- NAND・NOR と否定記号の読み方概念
否定の範囲を区別し、ド・モルガンの法則で同じ機能の記号と式を結び付けます。
- XOR・XNOR:一致・不一致とパリティ概念
2 入力 XOR と多入力パリティを区別し、誤り検出の限界を説明します。
- 万能ゲート:NAND だけで回路を作る概念
NAND・NOR の機能的完全性を回路構成で示し、XOR の中間信号を検証します。
- 論理式から回路設計へ
- ブール代数・等価変形・実装コスト概念
ド・モルガンの法則と因数分解で回路を変形し、論理的等価性とタイミングを区別します。
- 真理値表から論理式へ:最小項・最大項・SOP・POS概念
出力が 1 の行と 0 の行から同じ関数を導き、カルノー図の表記と結び付けます。
- カルノー図とドントケアの条件概念
グレイコードの隣接性を使って論理式を減らし、使わない入力に関する仮定を明示します。
- 設計実習:仕様から 3 入力多数決回路へ実習
自然言語の仕様を完全な真理値表にし、最小化・実装・全数検査をつなげます。
- アドレスと選択回路
- デコーダ・ワンホット選択・有効な入力概念
二進アドレスを個別の選択線に変換し、enable・範囲・選択の不変条件を設計します。
- エンコーダと優先順位:複数の要求から一つを選ぶ概念
ワンホットエンコーダの入力仮定と、優先エンコーダの valid・選択結果を区別します。
- DEMUX とデコーダ:選択した経路へデータを送る概念
MUX・DEMUX・デコーダの方向と役割を比較し、ワンホット・ワンホットまたはゼロの条件を検証します。
- 信号とポート:幅・方向・時間の取り決め概念
インターフェースを読み、組合せ出力と状態出力の検証基準を分けます。
- 真理値表から MUX とシャノン展開へ概念
選択論理を式で導き、任意の論理関数を MUX で分解します。
- 算術回路と比較
- 加算器とキャリー伝搬構造概念
全加算器の式を導き、リップルキャリーの機能・幅・遅延を合わせて解析します。
- 2 の補数・符号拡張・オーバーフロー概念
式と反例を使い、ビット列の signed 解釈と加算のオーバーフロー条件を区別します。
- 比較器と境界値の仕様概念
同じビット列の unsigned・signed 比較を区別し、境界条件を検証します。
- ラッチ・フリップフロップと状態の記憶
- 記憶の始まり:フィードバックと SR・D ラッチ概念
交差結合の二つの安定状態を理解し、SR の禁止入力と D ラッチの透過期間を説明します。
- D フリップフロップ:レベルからエッジへ概念
ラッチとフリップフロップの更新時点を比べ、レジスタ・セットアップ・ホールドの意味を結び付けます。
- フリップフロップ・enable・制御の優先順位概念
保持・ロード・リセットを次状態式で定め、意図しないクロックゲーティングを避けます。
- 同期式の状態遷移とクロックの役割概念
同じ以前の状態を読むレジスタの集合として、同期システムを解釈します。
- MUX の RTL 実装と検証
- 組合せ選択とレジスタ出力の遅延概念
MUX の結果をレジスタに記憶したとき、インターフェースと遅延がどう変わるか解析します。
- 組合せ RTL と完全な代入概念
条件演算子と always_comb で同じ関数を表し、ラッチを生む代入漏れを見つけます。
- 実習:MUX の全数検査とレジスタ出力の解析実習
同じ入力を組合せ経路とレジスタ経路に与え、真理値表とサンプリング時点で結果を検証します。
- 波形のサンプリング時点と因果関係概念
組合せの安定化・クロックでの取込み・イベント順を分けて波形を読みます。
- MUX の検証:全数検査とプロパティ概念
組合せ入力の網羅性と記憶動作を別々に検査し、反例を最小化します。
- 設計確認:選択回路の等価性と観測時点理解度チェック
真理値表で十分な検証と、クロック観測が必要な検証を区別します。
- カウンタと同期式の状態更新
- 状態数・カウンタ幅・未使用コード概念
カウント範囲から記憶ビット数を求め、不正な状態からの回復方針を定義します。
- カウンタの次状態とリセットの優先順位概念
増加・保持・リセット・循環を一つの仕様にまとめ、エッジごとの結果を計算します。
- ノンブロッキング代入と同時状態更新概念
旧値と次の値を分け、パイプライン・カウンタ RTL を正確に解釈します。
- 実習:カウンタのリセット・循環・不変条件の検証実習
各立上りエッジの状態を参照モデルと照合し、初期値・リセット・ビット幅の影響を分けます。
- モジュロ・飽和カウンタと終了パルス概念
最大値の扱いと terminal-count 信号の正確なサイクルを設計します。
- カウンタのデバッグと最小反例概念
リセット・enable・循環境界の誤りを区別する短いテストを設計します。
- 設計確認:幅・優先順位・循環の境界理解度チェック
与えられた状態遷移の仕様から、境界値と同時制御入力を判断します。
- シフトレジスタとデータの流れ
- ベクトルのインデックス・ビット順・符号概念
ビット番号・シリアル転送順・算術解釈を分けてデータパスを読みます。
- シリアル入力とフレーム境界概念
入力順と有効エッジを定め、シリアル・パラレル変換のビット配置を計算します。
- シフトレジスタの状態方程式概念
ビット移動をベクトルの状態遷移で表し、記憶長と出力遅延を結び付けます。
- スライス・連結・繰返し演算の幅概念
連結する信号の総幅と値の保存条件を計算し、データパスを構成します。
- 実習:シリアルデータの移動とビット順の検証実習
ビット列と整数参照モデルを併用し、方向・失われるビット・リセット後の遅延を検証します。
- サイクル遅延とスループットの区別概念
N 段遅延線の観測基準を定め、レイテンシとスループットを定量的に計算します。
- シフト回路の検証とデータ・valid の整列概念
対称パターンに隠れる誤りと、valid 信号の 1 サイクルずれを見つけます。
- 設計確認:遅延・整列・入力の保存理解度チェック
シフト方向に加え、有効データの移動回数と観測基準を確認します。
- タイミング・実際の入力・状態機械
- セットアップ・ホールドとタイミング予算概念
最大・最小経路遅延を分け、クロック周波数とは別のホールド条件を計算します。
- 論理ハザードと等価式の限界概念
定常状態で等価な回路が、伝搬遅延により異なる過渡波形を作ることを解析します。
- クロック領域の境界とメタステーブル概念
2 段同期化回路の適用範囲を理解し、単一ビット・短パルス・多ビット転送を区別します。
- 実際のボタン入力:同期化・デバウンス・一回のイベント概念
非同期入力の同期化と接点バウンス除去を区別し、連続サンプルに基づくデバウンサを設計します。
- 状態機械:状態・遷移・出力を分ける概念
仕様表から FSM を書き、Moore・Mealy 出力、不正状態、要求の扱いを比較します。
- 検証計画・カバレッジ・独立した参照モデル概念
テスト通過と仕様充足を区別し、境界・交差条件・最小反例を検証計画に結び付けます。
- 総合設計:重なりを許す 101 パターン検出器概念
状態最小化・入力有効性・レジスタ出力・独立参照検証を一つの設計に適用します。
- 選択発展 · 算術データパス
- ALU と zero・negative・carry・overflow フラグ概念
共有加算器で ADD/SUB を構成し、キャリーと符号付きオーバーフローを分けて比較条件まで導きます。
- バレルシフタと段階的な MUX概念
可変シフトを 1・2・4・8 桁の MUX 段で実装し、方向共有・符号埋め・幅を超えるシフトを扱います。
- 固定小数点・丸め・飽和概念
W,F で数値範囲を定め、guard・sticky による偶数丸めと丸め後の飽和を設計します。
- 複数サイクルの unsigned シフト加算乗算器概念
部分積の累算を W クロックに分け、受付・完了時点、最後の加算、幅、不変条件を検証します。
- 選択発展 · メモリと FIFO
- 同期メモリと読み書き競合の契約概念
レジスタ付き読み出しの応答時点と read-first・write-first・no-change を区別し、valid とアドレス初期化の役割を分けて設計する。
- 2 読み出し・1 書き込みレジスタファイルとバイパス概念
独立した二つの読み出しポートと同期書き込みを実装し、ポートごとの競合バイパスと初期化・valid 方針を検算する。
- 単一クロック FIFO のポインタと境界条件の方針概念
深さ 4 の FIFO のポインタと occupancy を実装し、empty と full で同時 push/pop を受け付ける条件を明確にする。
- FIFO・メモリの検証計画と独立したスコアボード概念
実装のポインタに依存しない queue スコアボードを作り、境界・reset・valid・未初期化読み出しを検証計画へ結び付ける。
- 選択発展 · パイプラインとインターフェース
- Ready/valid と 1 要素のエラスティックバッファ概念
停止可能なデータパスで、欠落や重複のない転送条件と同時入出力を設計する。
- 乗加算パイプラインとデータの整列概念
演算をレジスタ境界で分割し、データ・valid・補助オペランドが同じトランザクションに属するよう設計する。
- 停止可能なパイプラインとバックプレッシャー概念
段ごとに ready を計算し、停止中や同時移動時のデータの欠落・重複・再計算を防ぐ。
- レジスタインターフェースと副作用の発生時点概念
アドレス・バイト書き込み・応答停止を定義し、一つの要求が正確に一度の状態変更につながるようにする。
- 総合実習:UART 送信器とフレームのタイミング概念
分周カウンタ・シフトレジスタ・フロー制御を組み合わせて 8N1 フレームを作り、ビット境界を検証する。