変更要約: 初版
4.1論理回路
入力の組合せだけで出力が決まる組合せ回路と、過去の状態を記憶する順序回路の違い、カルノー図による論理式の簡単化、状態を保持するフリップフロップ、そしてクロック同期回路のセットアップ時間・ホールド時間制約を学び、組込みハードウェア設計の判断力を養います。
組込みハードウェアの設計者にとって、論理回路は「動くか動かないか」の二択ではなく、ゲート数(コスト・消費電力)とタイミング制約(動作クロック上限)の両方を満たす回路を作る作業です。同じ論理式でも実装によってゲート数が変わり、同じフリップフロップでもデータ到着タイミングを誤ると誤動作します。この節では、組合せ回路と順序回路の性質の違いを踏まえ、回路を簡単化し、かつ正しく同期させるという2つの判断軸を養います。
4.1.1組合せ回路と順序回路
- 組合せ回路=AND/OR/NOT等のゲートのみで構成され、出力が現在の入力だけで一意に決まり、過去の状態を一切記憶しない回路。加算器やデコーダ、マルチプレクサなどが代表例で、内部にフィードバック経路(自分の出力を自分の入力に戻す配線)を持たない。
- 順序回路=組合せ回路に記憶素子(フリップフロップ)とフィードバック経路を加えた回路で、同じ入力でも「今の内部状態」次第で出力が変わる。カウンタ・レジスタ・状態遷移を実装する有限状態機械(FSM)は順序回路の代表例。組込みのプロトコル処理や制御ロジックは基本的に順序回路として設計される。
4.1.2カルノー図による簡単化
- カルノー図=真理値表を格子状に並べ替え、隣接するマス(1ビットだけ異なる入力の組)を隣り合わせに配置することで、論理式の簡単化を視覚的に行う手法。隣接する1(真になる出力)を2の累乗個(1・2・4・8…)でグループ化すると、そのグループでは変化しない変数だけが残る積項として簡単化できる。
- カルノー図の効果はゲート数の削減=実装コストと消費電力の削減に直結する点にある。組込み機器はFPGA/ASICの面積制約やMCU内蔵の簡易ロジック(GPIO割込み条件生成等)でゲート数がそのままコストに跳ね返るため、代数的な簡単化(ブール代数の定理適用)より視覚的で見落としが少ないカルノー図が実務でも使われる。ただし変数が5つ以上になると格子が煩雑になり、実務ではツール(論理合成系の自動最適化)に委ねることも多い。
「組合せ回路=現在の入力だけで出力決定・記憶なし」「順序回路=フリップフロップ+フィードバックで内部状態を持つ」の対比、および「カルノー図=隣接1を2の累乗個でグループ化してゲート数を削減」が最頻出です。カウンタやFSMを「組合せ回路」と誤答しないこと——内部状態を持つ時点で順序回路です。
4.1.3フリップフロップとセットアップ/ホールド時間
- フリップフロップ(FF)=1ビットの状態を保持する記憶素子で、D-FFはクロックの立ち上がり(または立ち下がり)エッジでD入力の値を取り込みQ出力に反映する。RS-FFはセット/リセット入力で状態を直接制御し、JK-FFはRS-FFの禁止入力(S=R=1)を「トグル動作」に置き換えて解消した派生形。組込みのレジスタ・カウンタ・状態保持は基本的にD-FFの集合として実装される。
- セットアップ時間=クロックエッジが来る直前に、D入力が確定した値のまま安定していなければならない最小時間。ホールド時間=クロックエッジが来た直後に、D入力が値を変えずに安定していなければならない最小時間。どちらか一方でも守られないと、FFの出力が不定(メタステーブル)になったり誤った値をラッチしたりする——これが組込みボードで「たまに誤動作する」原因の代表例。
あるファームウェア開発者が、FPGA上に実装した通信インタフェース回路が、特定の温度条件下でのみ稀にビット化けを起こすという不具合を調査しているとします。回路自体の論理式(組合せ部分)はシミュレーションで正しいと確認済みで、疑うべきはクロック同期部分のセットアップ/ホールド時間違反です。温度が上がると信号の伝搬遅延が変化し(一般に温度上昇で遅延が増加する)、送信側の組合せ回路の出力が受信側FFのクロックエッジに対してセットアップ時間を割り込むタイミングでしか到着しなくなる――これが「特定条件下でのみ発生する」再現性の低さの正体です。対処は2通りあります。1つ目はクロック周波数を下げることで、クロック周期に対するセットアップ余裕を相対的に広げる方法(ただしスループットが落ちる)。2つ目は組合せ回路の段数を減らして伝搬遅延そのものを短縮する方法で、ここでカルノー図による論理簡単化が効いてきます――ゲート段数が減れば伝搬遅延も減り、同じクロック周波数でもセットアップ時間の余裕(タイミングマージン)が広がります。ここでの判断ミスとしてありがちなのが、「ビット化けだから通信プロトコル(パリティ/CRC等)の問題」と決めつけて上位層だけを疑うことです。タイミング違反は下位のハードウェア層で起きるため、プロトコルを見直しても再現性の低い不具合は解決しません。ハードウェア設計者は、稀な誤動作の原因調査でまずセットアップ/ホールドのタイミング解析(静的タイミング解析:STA)を疑う視点を持つ必要があります。
| 種別 | 出力の決まり方 | 代表例 |
|---|---|---|
| 組合せ回路 | 現在の入力のみで一意に決定 | 加算器・デコーダ・マルチプレクサ |
| 順序回路 | 現在の入力+内部状態(記憶)で決定 | カウンタ・レジスタ・状態遷移機械(FSM) |
ひっかけ: 「セットアップ時間はクロックエッジの後、ホールド時間はクロックエッジの前」は前後が逆で誤りです——セットアップ時間はエッジの直前、ホールド時間はエッジの直後が正しい定義です。また「稀にしか起きないビット化けは必ずプロトコル層の問題」も誤り=温度・電圧変動によるタイミングマージン違反(ハードウェア層)が典型的な原因であり、プロトコル層の見直しだけでは解決しません。
4.1.4この節のまとめ
- 組合せ回路は現在の入力のみで出力決定、順序回路はフリップフロップ+フィードバックで内部状態を持つ
- カルノー図は隣接1を2の累乗個でグループ化しゲート数(コスト・消費電力)を削減する
- セットアップ時間(エッジ直前)・ホールド時間(エッジ直後)の違反はFF出力を不定にし、稀な誤動作の原因になる
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. FPGA上の通信回路が特定の高温条件下でのみ稀にビット化けを起こす。組合せ回路の論理式はシミュレーションで正しいと確認済みである。原因調査で最初に疑うべき対象として最も適切なものはどれか。
Q2. ある順序回路の設計において、ゲート段数を減らすことでクロック周波数を維持したままタイミングマージンを広げたい。この目的に最も直接寄与する手法はどれか。
Q3. ある回路について「同じ入力の組合せを与えても、過去に与えた入力の履歴によって出力が異なることがある」という性質が観測された。この回路の分類として最も適切なものはどれか。

