Chapter 12
タイミング・消費電力・メタステーブル
この章がなぜ必要なのか——「なぜか動かない」の物理的な原因がここにあるから.
- 「同じ回路なのに、個体によって動いたり動かなかったりする」
- 「温度が上がると誤動作する」
- 「非同期の信号を取り込むと、たまに変な値になる」
- 「クロックを上げたら動かなくなった」
これらは全部、タイミングの問題である。 そしてタイミングの問題は、確率的にしか現れないので極めて厄介である。
この章で使う既出の用語(定義は各リンク先). LED(04 章 4 節)、制御(06 章 6 節)、PLL(09 章)、インバータ(09 章 2 節)、ループ帯域(09 章 3 節)、\(V_{DD}\)(11 章 3 節)、プロセスばらつき(11 章 3 節)、温度(11 章 3 節)、発熱(11 章 5 節)
1. フリップフロップとタイミング制約
D フリップフロップ
クロックの立ち上がりで、D の値を取り込んで Q に出す。
3 つのタイミング制約
| 制約 | 記号 | 意味 |
|---|---|---|
| セットアップ時間 | \(t_{su}\) | クロックの前に、D が安定していなければならない時間 |
| ホールド時間 | \(t_{h}\) | クロックの後に、D を保持しなければならない時間 |
| クロック・ツー・Q | \(t_{cq}\) | クロックから Q が変化するまでの遅延 |
セットアップ違反とホールド違反
セットアップ制約:
ホールド制約:
| 違反 | 原因 | 対策 |
|---|---|---|
| セットアップ違反 | 論理が遅すぎる/クロックが速すぎる | クロックを下げる、論理を分割(パイプライン化) |
| ホールド違反 | 論理が速すぎる/クロックスキュー | 遅延を挿入する。クロックを下げても直らない |
決定的な違い: セットアップ違反はクロックを下げれば直るが、 ホールド違反は直らない.
ホールド制約の式に \(T_{clk}\) が現れないからである。
だから——
- 「クロックを下げたら動いた」→ セットアップ違反だった
- 「クロックを下げても動かない」→ ホールド違反(設計の見直しが必要)
FPGA / ASIC の設計では、ホールド違反は必ずゼロにしてから出す。 動作周波数を変えても直らないからである。
タイミング制約を確かめる
論理遅延・クロック周期・スキューを変えて、 セットアップ/ホールドのマージンを確かめられる。
2. クロックスキューとジッタ
| 用語 | 意味 |
|---|---|
| スキュー | 空間的なずれ。別々の FF に届くクロックの時刻差 |
| ジッタ | 時間的な揺らぎ。同じ点でのクロック周期のばらつき |
スキューは「良い方向」にも働く.
受信側のクロックが遅れて届けば、セットアップ時間に余裕ができる。 一方でホールドは厳しくなる。
意図的にスキューを与える(useful skew)という最適化手法もある。
ただし組み込みの基板設計では—— クロック配線を等長にして、スキューを最小にするのが基本である(23 章)。
ジッタの種類
| 種類 | 原因 |
|---|---|
| ランダムジッタ (RJ) | 熱雑音など。ガウス分布。BER で規定する |
| 決定論的ジッタ (DJ) | 電源変動、クロストーク、ISI(符号間干渉)。有界 |
| 周期ジッタ | PLL のループ帯域内のノイズ |
高速シリアル通信(20 章)では、ジッタバジェットが設計の中心になる。
3. メタステーブル(準安定状態)
セットアップ/ホールドを守れないと、FF の出力が中間電位で止まることがある。
なぜ起きるか
FF の中身は正帰還ループ(2 つのインバータが向かい合っている)である。 これは双安定だが、その中間にも平衡点がある(不安定な平衡)。
入力が閾値付近だと、この不安定平衡に乗ってしまう。
確率的な性質
メタステーブルは「起きるかどうか」ではなく「どれくらい長く続くか」の問題である。
| 記号 | 意味 |
|---|---|
| \(t_r\) | 解決に許される時間(次段までの余裕) |
| \(\tau\) | FF の解決時定数(プロセス依存。数十〜数百 ps) |
| \(T_0\) | メタステーブル窓(数十〜数百 ps) |
| \(f_{clk}\) | クロック周波数 |
| \(f_{data}\) | データの変化頻度 |
\(t_r\) が指数の肩にいる、というのが決定的である.
待ち時間を少し増やすだけで、MTBF が桁違いに改善する。
例: \(\tau = 100\) ps、\(T_0 = 100\) ps、\(f_{clk} = 100\) MHz、\(f_{data} = 1\) MHz
(分母は \(T_0 f_{clk} f_{data} = 10^{-10} \times 10^8 \times 10^6 = 10^4\) /s)
\(t_r\) MTBF 1 ns \(e^{10} / 10^{4}\) ≈ 2.2 秒 2 ns \(e^{20} / 10^{4}\) ≈ 13 時間 3 ns \(e^{30} / 10^{4}\) ≈ 34 年 5 ns \(e^{50} / 10^{4}\) ≈ 1.6 × 10¹⁰ 年(宇宙年齢を超える) 3 ns で数十年、5 ns 余裕を持たせれば実用上ゼロになる。
対策: 2 段シンクロナイザ
FF1 がメタステーブルになっても、次のクロックまでの 1 周期で解決する。 FF2 は解決後の安定した値を取り込む。
| 段数 | 用途 |
|---|---|
| 2 段 | 標準。ほとんどの用途で十分 |
| 3 段 | 高速クロック、高信頼性が要る場合 |
| 1 段 | 不十分。使ってはいけない |
メタステーブルの確率を確かめる
クロック周波数・データ頻度・許容時間を変えて、MTBF を確かめられる。
シンクロナイザで解決できない問題がある.
複数ビットの非同期信号を、各ビット独立にシンクロナイズしてはいけない。
複数ビットを独立に同期化してはいけない。グレイコードにするか、ハンドシェイクで受け渡す 各ビットが別々のクロックで確定する可能性がある。
0x0F→0x10の遷移で、途中で0x1Fや0x00が見える。対策:
手法 内容 グレイコード 一度に 1 ビットしか変わらない符号(FIFO のポインタで使う) ハンドシェイク req/ack で受け渡す。遅いが確実 非同期 FIFO 専用の構造。グレイコードのポインタを使う MUX リサイクル データはそのまま、制御信号だけを同期化して取り込む 組み込みの実務では、MCU の入力キャプチャや外部割り込みが 内部でシンクロナイザを持っていることが多い。データシートで確認すること。
4. 入出力タイミング
セットアップ/ホールドを外部インタフェースで守る
MISO のタイミングが最も厳しい。
配線遅延が効いてくるのは、意外に低い周波数からである.
基板上の配線遅延は約 6〜7 ns/m(FR4、マイクロストリップ)。 20 cm の配線なら 1.3 ns。
SPI 50 MHz(周期 20 ns)なら、往復 2.6 ns は 13 % を占める。 スレーブの \(t_{cq}\) が 10 ns あれば、もう余裕がない。
対策:
- 配線を短くする
- クロック周波数を下げる
- MCU の「入力サンプリング位相」を調整する(多くの MCU が持つ機能)
- DDR(両エッジ)ではなく SDR にする
出力の立ち上がり時間(スルーレート)制御
多くの MCU が、GPIO の出力ドライブ強度・スルーレートを設定できる。
| 設定 | 効果 |
|---|---|
| 速い(強い) | 立ち上がりが速い。EMI が増える、リンギングが増える |
| 遅い(弱い) | 立ち上がりが遅い。EMI が減る、タイミング余裕が減る |
必要以上に速くしないこと.
03 章で見たとおり、\(f \approx 0.35 / t_r\)。
- \(t_r = 1\) ns → 350 MHz の成分
- \(t_r = 10\) ns → 35 MHz の成分
10 倍の差がある。 遅くて構わない信号(LED、リレー制御)を 高速設定にしておくと、無用な EMI を出す(24 章)。
必要な速度で、最も遅い設定を選ぶ。
5. 消費電力の実務
静的(スリープ時)電流の内訳
| 要因 | 対策 |
|---|---|
| MCU のコア・周辺のリーク | スリープモードの選択(周辺の電源を切る) |
| プルアップ/プルダウン抵抗 | 値を大きくする。不要なら外す |
| 未使用 GPIO の設定 | アナログ入力か出力ローに設定する |
| オペアンプ・センサの静止電流 | シャットダウンピンで切る |
| LDO の静止電流 | 低 \(I_Q\) 品を選ぶ(14 章) |
| リーク(レギュレータ、ダイオード) | 逆流防止ダイオードの漏れ電流にも注意 |
未使用 GPIO を「入力・プルアップなし」にすると、リークが増える.
ピンが中間電位で浮くと、入力バッファに貫通電流が流れる(11 章)。
最も低消費なのは「アナログ入力」設定である(入力バッファが切り離される)。 多くの MCU で、この設定が推奨されている。
次点は「出力ロー」。「入力・プルアップ/プルダウンあり」は 抵抗経由の電流が流れるので、外部が固定されているなら不要。
動的電流の見積り
| 状態 | 典型的な電流(Cortex-M4 @ 80 MHz の例) |
|---|---|
| アクティブ | 10〜30 mA |
| スリープ(クロック停止) | 1〜5 mA |
| ディープスリープ | 数十 µA |
| スタンバイ(RTC のみ) | 1〜3 µA |
電池寿命の計算では、遷移時間を忘れないこと.
スリープから復帰するのに数百 µs〜数 msかかることがある。 その間はアクティブ電流が流れる。
「1 秒に 1 回、1 ms だけ動く」設計でも、 復帰に 2 ms かかるなら、実効デューティは 3 倍になる。
実測すること。 データシートの値だけで計算すると、 電池寿命が数分の 1 になることがある。
電流波形の測定
平均電流だけでは足りない。ピーク電流も重要である。
コイン電池(CR2032)は特に厳しい.
内部抵抗が 10〜30 Ω(新品)、低温や末期には 100 Ω 以上になる。
10 mA のピークで 0.1〜1 V の電圧降下。 3.0 V の電池が 2.0 V まで下がり、MCU がリセットする。
対策:
- 大容量コンデンサ(10〜100 µF)を並列に入れる
- ピーク電流を下げる(送信出力を下げる、処理を分散する)
- スーパーキャパシタを併用する
6. 温度と電圧によるタイミング変動
PVT コーナー
| 要因 | 遅延への影響 |
|---|---|
| Process(プロセスばらつき) | Fast / Typical / Slow |
| Voltage(電源電圧) | 低いほど遅い |
| Temperature(温度) | 高いほど遅い(通常のプロセス) |
全部が悪い方に振れると、typical の 2 倍近くになることがある。
温度反転(temperature inversion)という現象がある.
低電圧のプロセス(\(V_{DD}\) が \(V_{th}\) に近い)では、 高温の方が速くなることがある。
\(V_{th}\) が温度で下がる効果が、移動度低下の効果を上回るためである。
だから最悪ケースが「高温」とは限らない。両端で検証すること。
実務での確認
| 確認すべき条件 | 内容 |
|---|---|
| 低温 + 低電圧 | 最も遅い(通常のプロセス) |
| 高温 + 低電圧 | リークが多く、電圧降下も大きい |
| 高温 + 高電圧 | 最も消費電力が大きい(発熱) |
| 低温 + 高電圧 | 最も速い(ホールド違反のリスク) |
7. この章のまとめ
| ポイント | 内容 |
|---|---|
| 3 つの制約 | セットアップ・ホールド・クロック・ツー・Q |
| 決定的な違い | セットアップ違反はクロックを下げれば直る、ホールド違反は直らない |
| スキューとジッタ | 空間的なずれ/時間的な揺らぎ。クロック配線は等長に |
| メタステーブル | 「起きるか」ではなく「どれだけ続くか」の問題 |
| MTBF | 待ち時間が指数の肩にいる。5 ns 余裕で実用上ゼロに |
| シンクロナイザ | 2 段が標準。1 段は不十分 |
| 複数ビットの同期 | 各ビット独立にやってはいけない。グレイコードかハンドシェイク |
| 配線遅延 | 約 6〜7 ns/m。SPI 50 MHz では 20 cm で 13 % を占める |
| スルーレート設定 | 必要な速度で、最も遅い設定を選ぶ。EMI に直結 |
| 未使用 GPIO | アナログ入力が最も低消費。入力開放は貫通電流が流れる |
| ピーク電流 | 平均だけでは足りない。コイン電池は内部抵抗 10〜100 Ω |
| PVT | 低温・低電圧が最も遅い。温度反転もありうるので両端で検証 |
次章では、デジタル IC の中でも特殊な—— メモリの内部構造を扱う。