バイパスとデカップリング

今日届いた、エレクトロニクス実装学会誌5月号(Vol.12 No.3)の特集は「プリント配線板のパワーインテグリティ」と題し、昨年のサマーセミナー「プリント配線板の誤動作を防ぐ!高速時代のパワーインテグリティ」で発表された内容を詳しく解説した論文が掲載されている。
投稿論文は、まだ精読していないが、システムから基板、部品それぞれの階層から、シミュレーションだけでなく実践的なアプローチも含めて論じられており、かなり役立ちそうな内容のようだ。

イントロダクションとして、京都大学の和田先生がパワーインテグリティの基礎知識をまとめておられる。
その中で「バイパス」と「デカップリング」について論じている。いわく、「両者はしばしば混同され,あるいは区別されないことも多いが,インピーダンスの観点で考えると全く逆であるので,この両者を区別することにより,ノイズ低減設計が容易になる。」とある。

過去のエントリでも取り上げたことのある、いわゆる「パスコン」=「バイパスコンデンサ」は、英語では「Decoupling Capacitor」と表記され、同じコンデンサが「バイパス」と「デカップリング」という全く逆の概念で語られることに違和感を感じたが、高周波電流の経路で考えると両者が意味するところを理解しやすいだろう。

「バイパス」は、高周波電流、すなわちノイズ成分を電源からグラウンドに「バイパス」する、帰還経路のショートカットを提供するもの。
「デカップリング」は、ノイズ成分をノイズ源附近と外界で遮断(「デカップリング」)するもの。
いずれも、ノイズ成分となる高周波電流をノイズ源から遠くに行かないようにするのが目的となる。

和田先生の解説では、前者はコンデンサ(C)を電源-グラウンド間に並列に入れるもの、後者はインダクタ(L)を電源に直列に入れるもの、と説明していて判りやすいが、本質的には、ノイズの進行方向(直列)にインピーダンスで壁を作って進行を阻害し、低インピーダンスの帰還経路を(グラウンド方向に並列に)作ってあげる、ということに他ならない。
ノイズ成分、すなわち高周波電流の形成する電流ループは、極力小さくすることがノイズ低減には重要だ。そのため、バイパス/デカップリング素子はノイズ源であるLSIの電源ピンのできるだけ近くに置くのが望ましい。
また、電流はインピーダンスの低い方に流れやすいので、電源ピンとデカップリング素子、グラウンドの形成する電流経路は、インピーダンスを最小にするように設計するのが望ましい。
この観点で考えると、パスコンをLSIの電源ピンからのパターンで直結するべきか、ビアで電源プレーンに接続するかは議論の分かれるところだろう。

これも以前のエントリで取り上げたが、一般にはビアで電源プレーンに落とす方がベターとされ、和田先生の解説とは異なる。ビアもインダクタンスを持っているので、パターンの持つインダクタンスと比較して、ケースバイケースで判断すべきところで、一概にどちらが良いとはいえないのだろう。
LSIの電源ピンの数が限られ、直近にパスコンが置ける、太いパターンで接続できるといった好条件の場合は、パターンで接続する方が良いだろう。もっとも、電源プレーン経由でつなぐ場合も、電源ピンやパスコンのピンからパターンで引き出してビア打ちしてしまうと、パスコンの効果が無くなってしまうので、それは絶対に避けたい。
ビアは径にもよるが長さはせいぜい基板の厚さ程度なので、インダクタンスはたかが知れている。パターンも太さ次第だが長さはビアの10倍のオーダがあるので、インダクタンスもそれなりになると考えておくべきだろう。同時に、電流経路を考えてインダクタンスループが最小になるように設計するよう心がけたい。

デカップリングのためにチョークコイルやフェライトビーズのようなインダクタを電源に挿入する方法は、示された図では電源の(グラウンドに対する)インピーダンスを増やしてしまうように見えるので、この図はあまり良くないと思うのだが、実際にLSIの電源となるのはインダクタで分離された先の部分なので、この電源のインピーダンスを下げることを考えれば良い。
この方法はPLL用電源などノイズにセンシティブな電源系にはよく用いられている手法で、同じLSIでも明示的に電源ドメインを分けて、他の回路からのノイズを分離したい場合などにも使える。論文にも書かれているように、チップ-パッケージ-PCB間の共振に注意して設計する必要がある。
LSIからのノイズではなく、電源生成回路(レギュレータ)からのノイズを抑制してきれいな電源をLSIに供給したいという逆の観点でみると、インダクタの配置位置も悩むところだ。チップベンダのデザインガイドでは、LSIの電源ピン近傍を推奨している場合もあれば、レギュレータ出力直近を推奨している場合もある。一般には前者の方が望ましいのだろうが、そのインダクタを入れる意図を考えてどちらが望ましいのか判断する必要があるだろう。

| | Comments (0) | TrackBack (0)

HyperTransportの転送性能

Hammer-Infoさんが紹介されている、Hardware Secretの記事「The HyperTransport Bus Used By AMD Processors」から、Hammer-Infoさんが転送性能の表記などについて取り上げているので、コメントしておきたい。
なお、Hammer-Infoさんの記事は時間が経つと消滅してしまうので、適宜引用させていただく。

転送レートの計算式は、

帯域幅(bit数)x クロック x クロック当たりのデータ / 8(Bite変換のため)

現在AMDプロセッサで使われているHyperTransport 1 は、16-bit data paths, 800MHz or 1000MHz, 2 data/clockであるので、

16 x 800 (or 1000) x 2/8 = 3200 (or 4000) MB/s

である。

ここは特に異論は無いが、コメントしておくとAMDプロセッサで使われているHyperTransportは、Rev 1.02をベースにしている。詳細は後述する。

転送レートの言い方はいろいろあって、

* 1600MHzとか2000MHzという言い方。
クロックごとに2 dataを転送する (DDR) から、クロック当たり1 dataしか転送しない場合に置き換えると(実クロック800MHzならば)1600MHzに等しいというから。
* 1600 MT/s, 2000 MT/sという言い方。
MT/sはMega (or Million) Transfers per Secondの意味。T/sは、1クロック当たりのデータ転送量にクロックを掛けたものに等しい。

T/s = クロック x クロック当たりのデータ

* 6400MB/s, 8000MB/sという言い方。
これは各方向の公表転送レートが3200MB/s, 4000MB/sであることから、双方向で2倍としたもの。賛成しかねる。高速道路の最高速度が130 km/hだから片側65 km/hと言うようなものだ(input, outputどちらも最大3200MB/sが限界で、6400MB/sは出ないのだから、双方向合計ではなく一方向での最大値で言うべきだという主張)。
* 外部バス、FSBが1600MHz, 2000MHzという言い方
メモリ用に別I/Oがあるから、不正確な言い方。
* クロックは可変で、例えば
800MHz = 1600MT/s = 3200 MB/s
1000MHz = 2000MT/s = 4000 MB/s である。
* 帯域も8-bitに減らすことができる。

転送レート(性能)の表記方法について。AMDプロセッサを採用しているパソコンのカタログ等の仕様を見ると、表記方法が統一されていないことに気が付く。CPU-チップセット間のバスの性能表記として「システムバス」の項目に、「HyperTransport(TM)テクノロジ 800MHz」と記載していたり、「1600MHz」と記載されていたりする。どちらも同じ性能を表しているのだが、ユーザは混乱する。普通に捉えれば後者の方が性能が高い、と読める。
「MHz」で表記するのであれば、DDRメモリなどは、DDR2-667は333MHzクロックで駆動しているが「667MHz」と表記するので、同様に800MHzのDDR(Double Data Rate)であるHyperTransportは「1600MHz」と表記すべきである。
Fmv07091202

ところが、同じ「システムバス」の項目で対比されるインテルプロセッサのバス(FSB)のデータ幅は64ビット、一方HyperTransportのデータ幅は上り/下りそれぞれ16ビットなので、そもそもこの項目を「MHz」の対比で記載すること自体が間違っているのである。
対等な表記、という観点では、ビット幅×ビットレート=ピーク転送量(MB/s)あたりが適切な指標に思える。この場合、

- HyperTransportは片道16ビット×1600MT/s=3200MB/s、上下合わせて6400MB/s
- FSBは64ビット×1066MHz=約8600MB/s

となるが、これもバスアービトレーションの有無やバス使用率などを鑑みると、適切な対比とは言えない。
要するに、HyperTransportとFSBを横並びで比較する意味は無い、という結論になる。実際、カタログから「システムバス」の数値表記そのものを無くしてしまったメーカもある(HPなど)。

Htc07091201_2
「上下合わせて」の部分にも異論があるようだが、HyperTransportコンソーシアムでは「Aggregate Bandwidth」という指標を公表しているので、この表記には理がある。HyperTransportは全二重通信なのに対して、FSBは半二重通信だからである。道路の比喩で言うと、対向二車線の道路(HyperTransport)と一車線交互通行の道路(FSB)の交通量を比較するようなものである。

Hypertransport.orgのオフィシャルでのHT1説明との齟齬を解説すると

* HyperTransport 1.0はオフィシャルには、最大クロックが800MHzとされているが、AMDはオフィシャルでない1000MHzを使っている。
* オフィシャルでは最大転送レートが12.8GB/sとされているが、これは32-bitリンクを使った場合のことで、AMDプロセッサは16-bitであるので、そうはならない。
なお、32-bit で12.8GB/sとなるのは、オフィシャルでは、片方向だけの数値ではなく双方向分を合計しているためである。先に述べたとおり、この表記は賛成できない。

HT2では、より上のクロック(1.0-1.4GHz)と、PCI Express Adress mappingという新機能を追加したが、AMDプロセッサには採用されなかった。PCI-E Adress MappingはHTとPCI-E busとのインターフェイスを容易にするものである。

最初の指摘は正しい。AMDはHyperTransport 1.03をベースに独自の拡張を加えてプロセッサに採用している。仕様上のクロック上限 800MHz(1600MT/s)を超えて、最大1000MHz(2000MT/s)としている点はその通りだが、それ以上の拡張を施している。
HyperTransportコンソーシアムで標準化されているプロトコルは、正確にはHyperTransport I/O Link Specification というI/Oプロトコルのみである。AMDはさらに、HyperTransport Uni-Processor Protocol というプロセッサ接続のためのプロトコル拡張をしている。これはHyperTransport 2.0以上の仕様には盛り込まれている。
また、プロセッサ間の通信には、キャッシュの整合性を保つためのプロトコル Coherent HyperTransport Protocol が独自に定義されており、こちらはつい最近まで門外不出の内部規格だった(現在でも特別なライセンスが無いと開示されない)。
HyperTransportの第一世代では、1.1という規格があり、ホストコントローラ以外のチップのダイレクト通信プロトコル、16本の仮想チャネルのサポート、エラー再送などが盛り込まれているが、これはAMDプロセッサには採用されていない。
HyperTransport 2.0ではクロック向上のため、ディエンファシスが定義されている。このため、電気的スペックも1.0とは異なるのだが、こちらもAMDプロセッサでは採用されていない。

* HT3ではより上のクロック(1.8-2.6GHz)をサポートする。AMDによると、HT3をサポートするプロセッサは、最大10400 MB/s (2.6GHz時)をサポートするというが、(これまでと同じく)これより低クロックもサポートする。逆に言うと、HT3プロセッサであっても、HT1 ベースのマザーではHT3の新クロックでは動作しないし、HT3ベースのチップセットがHT3の最大値をサポートしてくれるという保証もない。

ACオペレーティングモードでは、許容されるバス長が延びる。これは、ケース、ボード、バックプレーン間をHTで直接接続しようとするもので、プロセッサがこのモードを使うことはない。

Link splittingとは、16-bitリンクを2つの8-bit リンクとして独立に使えるというものである。リンク数を増やすのに使う(HT I/Oが3であっても、6プロセッサと直接接続可能となる)。

ホットプラグは、HTバスを接続状態のまま抜き差しできるというものである。だからといってプロセッサ(にはHT以外にホットプラグでないpinがあるから)を抜き差しできるわけではないが、HT3ベースのストレージサーバで活用される。

Dynamic Link Clock/Width Adjustmentは、HTのクロックと帯域を動的に(動作中に)変更することができるというものである。チップセットもこれをサポートしている必要がある。消費電力削減を狙ったものである。

このHyperTransport 3.0に関する記述は、次世代のAMDプロセッサで採用される規格として取り上げられているが、これまでにAMDが公表している内容との齟齬が見られる。
ACオペレーティングモードがプロセッサで使われない、とあるが、AMDはACオペレーティングモードによるノード間プロセッサ直結を示唆する発表をしている。リンク分割(Link splitting)とともに将来のプロセッサでは採用される可能性がある。
リンク分割については、AMDでは最初のK8、すなわちHyperTransport 1.0世代からの導入を目論んでいたフシがある。なぜなら現行のプロセッサにはCTL信号が16ビットデータ幅に対して2本ある(規格では1本)。すなわち16ビットのデータバスを8ビット2本に分割できるように仕込まれていた形跡が見受けられるのだ。
Dynamic Link Clock/Width Adjustmentは、AMDの次世代モバイル向けプロセッサGriffinで、積極的に活用することが表明されている。

かように、この記事はAMDプロセッサとそれに採用されたHyperTransportの解説記事としては、いささか不適切な記述が多く、あまり参考にならないと思われる。

最後に、Hammer-Infoさんが付けたコメントに対して。

# AMDが現在のHTをHT1だと言っているのは、現在のHTが1000MHzをサポートするHT1にすぎず、PCI-E Adress Mappingを実装できなかった(真偽は知りません)という辺りかもしれません。

おそらく、AMD的にはHyperTransport 1.0の規格範囲で十分で、ただクロックだけ少し上げることができた、というのが正直なところではないかと。2.0にするとディエンファシスなど回路コストも増大するので。

なお、HT3サポートのK10では、実際のHTクロックは、プロセッサクロックの約3/4となるという噂です。ですから、噂にも上がってない3.5GHz前後のプロセッサでないと、HTが2.6GHzにはならないわけです。

Griffinについては最高クロックレート(2.6GHz)で動作することになるらしい。デスクトップ向けは内蔵ノースブリッジのクロックに律速される模様。

| | Comments (0) | TrackBack (0)

ガーバ(ー)データ

今週のPC Watch後藤さんの海外ニュースで、

JEDECが標準ガーヴァーを策定するDDR3世代のメモリモジュールは、PC市場でのフォームファクタについては2008年までは大きな変更がない。

という一文があった。

ガーバー(GERBER)の「バ」は"b"なので"v"ではないので「ヴ」にはなりませんが…というツッコミ。

「ガーバーデータ」「ガーバーファイル」、あるいは単に「ガーバー」(JIS表記的には「ガーバ」)は、一般的にプリント回路基板の製造用に使われるデータを指す。Wikipediaの"Gerber file"の説明

本来、いわゆるCAMファイルを指すもので、プリント板各層のパターンなどの図形情報を製造マシンに渡すためのデータである。各層とは言っても、我々電気屋の興味あるパターン層(エッチング層などとも)だけではなく、シルク層、ソルダーレジスト層、ペーストマスク(ハンダを塗る位置情報)層などの(パターン=電気層に対して「機械層」「非電気層」などとも)製造情報も含まれる。スルーホールなどのためのドリル位置・ドリル径などの情報は、別途「NCファイル」として渡されるようだ。
ガーバの形式はGERBER社が策定したものがほぼ業界標準となり、RS-274Xという形式名で標準化されている。CAM、製造機メーカはこれを独自に拡張していたりもする。

ガーバには、われわれ電気屋に必要な電気的情報(回路情報)が、実は含まれていない。パターンなどは単に図形情報として存在するだけで、信号の属性はおろかネット名すら入っていない。パターンチェックでPDFを渡された時のように途方に暮れるしかない。

最近は「ガーバデータください」とお願いして、本当にガーバデータが来ることは少ない。大抵、AllegroとかBoardDesignerなどのCADデータがいただける。こちらは(当然)回路情報が入っているのでパターンチェックに使える。ただし、ガーバデータは汎用的なフリーのビューワがあるのに、CADの方はまだなかなか揃っていない。AllegroはCadenceが提供しているので助かっている。これも読めないCADデータだったら、やはり途方に暮れるしかない。

後藤さんの記事にあるJEDECのガーバデータは、なぜかAllegro形式である。業界標準、ということか。

(真の)ガーバデータはプロッタ情報である。読めるようになれば、手書きでも図形(パターンなど)を書くことができる。

…ところで、離乳食で有名な「ガーバー」社も同じ"Gerber"ですが、関係あるのでしょうか。

| | Comments (0) | TrackBack (0)

パスコン(Decoupling capacitor)

昔、LSIではなくICだった頃の基板を見ると、ゲジゲジのようなICの隣には必ず茶色く丸いコンデンサが乗っていた。ICには必ずパスコンを入れること、というのは常識で、設計規格ばかりか「初歩のラジオ」のようなアマチュア向けの製作記事にも必ず書いてあった。
ICの電源とグランド(GND)の間を「バイパス」するコンデンサだから「パスコン」と呼ばれていた。ICの急峻な電流消費に対する電源、という機能を持つ。

近年の大規模LSIの時代になっても、LSIの周辺に配置されるコンデンサはやはり「パスコン」と呼ばれている。

機能的には「電源ノイズを取るため」という側面から注目されているが、電源ノイズの原因もやはりLSIが必要とする電流消費を賄いきれないがために発生するのであり、LSIのためのローカルな電源と考えてよい。
パスコンがノイズを取る原理は一般に、コンデンサの「直流は通さないが交流は通す」という性質で理解されている。すなわち、ノイズの持つ(0でない)周波数成分をGNDに流してしまう、という働きを期待している。

英語で表記される際の"Decoupling"(=結合を断ち切る)という意味は、LSI周辺とそれ以外の電源部をAC的に遮断するところからきている。実際には、電源回路のノイズをLSIに送り込まないことと、逆にLSIで発生したノイズを電源回路に流さないことの両方が期待されている。

コンデンサはどのように工夫しても寄生成分を持ってしまう。特にインダクタンスがあるがゆえに、ある周波数以上ではインダクタンスとしての働きが顕著になってしまい、交流成分を流しにくくなってしまう。また、ノイズを垂れ流す先であるGNDも、ほとんどのシステムで理想的なGNDとは程遠いものとなってしまうため、電源~GND間をノイズがぐるぐる廻ってしまうだけになる。こうなるといくらコンデンサによってノイズ対策しようとしてもムダである。

最近、LTCCという新しいデカップリング素子が注目を浴びている。パスコンに変わって高周波のノイズ対策に使われるこの素子は、電源回路とLSI間のインピーダンスをあえて高くすることで、高周波成分の通過を抑止しようというものだ。ノイズをGNDに垂れ流さないため、本来の意味でのデカップリング効果が期待できる。

| | Comments (0) | TrackBack (0)

デイトナ効果(Indy Effect)

伝送路のコーナー部分では、電流密度がコーナーの内側より外側で高くなる。まるで自動車レースのコーナーリングでクルマがコーナーの外側を通るように。

この現象を「デイトナ効果」と呼ぶ人もいる。

というのが間違い…というか勘違いだったコトを、今日指摘されて気付いた。

正解は、「インディ効果」だった。

ちなみに命名は、同名の電磁界シミュレーションソフトを作っているSonnet社。
技術士の小暮さんとお会いする機会があったので、この効果についてお話しさせていただいた。ハナシの内容としてはこうだ。

Sonnetのようなモーメント法のツールで解析すると、確かにインディ効果が見られる。電流にも慣性があって直進しようとするために外周に電流が集中する、とすれば理解しやすい。またその直進性から、エネルギーが電磁波となって導体の外に出てしまうと考えれば、伝送路のコーナーで放射電磁界強度が高いのも理解できる。

一方、別の手法、例えばFDTDとかPEECで解析すると、電流密度はコーナーの内側で高くなる。電流はインピーダンスの低い部分に集中して流れ、また最短経路を通ろうとするので(エントロピーが低いところを選ぶ)、コーナーの内周を選んで流れるとすれば説明できる。コーナーでの電磁界放射は遠心力的な説明で良い。
この2つの相反する結論は、いったいどちらが正しいのだろうか?

実はコレ、自分でもどちらが正解かわかっていない。また小暮さんも判らないそうだ。(解析方法ではなく)モデルに依存するのではないかという意見をくださったNECの井上さん、ありがとうございました。確かにそうかもしれない。

小暮さんはわざわざ検証していただけるようだ。ありがたい。結果が判ったら報告したい。

| | Comments (2) | TrackBack (0)

ダンピング抵抗(Series Termination)

「ノイズ対策」という言葉には大きく2つの意味がある。ひとつは回路設計者が最も気にする部分、シグナルインテグリティを確保するためのノイズ対策、もうひとつは回路設計者よりEMC技術者が重点を置く放射ノイズ対策である。
後者は、その一部にシグナルインテグリティの改善を含むのでより広い意味での「ノイズ対策」となるが、極端に波形が汚い場合、回路設計者は放射ノイズにかまってはいられない。なにしろ設計しているシステムが正常に動作しないのだから。

波形が汚くなる要因~すなわちノイズの代表的な例は「反射ノイズ」と「クロストークノイズ」である。反射ノイズの多くは伝送線路系のインピーダンスミスマッチに起因し、段付波形やリンギング・グリッチによる波形割れを引き起こす。クロストークノイズの場合は結果としてグリッチや段付波形となるケースが多い。
これらのノイズ対策は、プリント板のパターン変更や終端設計の見直しによって根本的な対策を取るのが本道であるが、とりあえずノイズレベルを下げて動作させたい場合、線路に直列に抵抗を挿入することで応急的な対策を取る場合が多い。
「ノイズの電圧を下げる」意味から、この抵抗は「ダンピング抵抗」とか「ダンパー抵抗」と呼ばれる。

反射ノイズの場合、恒久的な対策はインピーダンスのマッチングを取ることだが、ドライバのインピーダンスが線路のインピーダンスに比べて低い場合、先に書いた通り適切な終端を設けてマッチングを取る必要がある。この場合も、最もシンプルかつ効果的な方法としては、ドライバ出力直後の線路に直列に抵抗を挿入して、ドライバと線路のインピーダンスを整合させる。このような終端方法を「直列終端(Series Termination)」と称する。

直列終端のもう一つの例は、途中で分岐が発生するようなトポロジーの場合。分岐後、レシーバで発生した反射は再び線路に戻ってきて反射ノイズを引き起こす。この場合、分岐直後に直列終端を設けることによって、分岐前後で発生するインピーダンスミスマッチを補正し、整合することができる。

ところが、多くの設計者はこの「直列終端」をも「ダンピング抵抗」と呼んでいる。これは明らかに誤用であると言っておきたい。

確かに、インピーダンスの低いドライバは出力のドライブ能力も高く、オーバーシュートを発生しやすいので、「オーバーシュートする電圧分を<ダンプ>する」と考えれば「ダンピング抵抗」と言っても間違いではないだろう。分岐の場合も、分岐によって発生する反射ノイズを「ダンプする」と捉えれば「ダンピング抵抗」でもいいような気がする。

しかし、あえて「誤用である」とするのは、設計者は「インピーダンスマッチング」という概念を持って伝送系の設計をするべきだと考えるからである。電圧レベルを下げるために抵抗を挿入するのではなく、インピーダンスを整合させるため抵抗を入れるのだと考えれば、当初からインピーダンスマッチングを意識した設計もできるし、後から抵抗値をカット&トライで調整する手間も大きく省ける。

| | Comments (0) | TrackBack (0)

段付波形(non-monotonic)

同期(シンクロナスタイミング)回路では、クロックやストローブ信号の立ち上がりで信号の状態をサンプリングすることが多い。もちろん、DDRなどではクロック等の立ち下がり(*)も使うし、場合によっては立ち上がりと立ち下がりの間をサンプリングポイントとする場合もある...が前者はともかく後者は本題と外れるので「ことが多い」と、しておく。とりあえず。

さて。

クロックの立ち上がり波形がL(Low)からH(High)に、スッと変化していれば、レシーバのサンプリング回路は予め定められたスレッショルド(Threshold)電圧を、クロック信号の電圧が超えた、と判断した時に、他の必要な信号をサンプリングできる...なんだかまどろっこしい書き方だが、要するに、「あるタイミングでズバッと値を確定できる」のだ。
ところが、クロックの立ち上がり波形が、スレッショルド電圧の前後をウロウロしていたらどうだろう。その区間では信号のHとLが目まぐるしく変わるかもしれない。もしくは、スレッショルド電圧に幅がある場合、その区間では値が確定できない可能性が出てくる。
そのような都合上、クロック信号はすべからくLからHに「スッ」と変化することが要求される。
ところが、
クロック信号がそのように「スッ」と変化してくれない場合が、ままある。多くは伝送線路の反射に起因するものだが、クロストークやら電源の一時的なドロップによっても容易に起こりうる。

波形でいうと、LからHに向けて上昇して行った電圧が、いったん下がり、再びHに向かって上昇する。上り坂の途中に一休みした「谷」が発生したような波形だ。

わたしは慣例的に「段がある」などと表現していたが、この現象をズバリ指す言葉が、英語にはこれといって見当たらない。文献や技術者の会話では"non-monotonic"という表現を、比較的良く目にする。「単調でない」という意味だが、それだけではやや守備範囲が不明確な気がする。
例えば、この現象のように電圧の(時間に対する)変化率が「(+)→(-)→(+)」となれば明らかに「単調ではない」ので、的確な用語のように思えるが、変化率が(+)のまま「大→小→大」と変化しても~波形ではいったん小休止が入るようなイメージとなる~やはり「単調でない」と言える。
前者の場合、誤動作の原因となるのは先に述べた通りだが、後者の場合、それが許容できる場合とそうでない場合がある。例えばデータ確定のタイミングマージンが小さくなる、が、多くの場合、それはクリティカルな問題ではない。

さて、これをどう呼ぶべきか...明確な答えはわたしも出せていない。「段がある」「段付き」という日本語は、ワリといいネーミングではないかと思う。英語では"non-monotonic"という言い古された言葉でも問題ないように思われる。
ただし、気をつけるべきは、前後の文脈から~あるいは別の方法で明確にすべきかもしれないが~どの程度が許容できる/できない範囲なのか、ハッキリさせる必要があるということだ。

ちなみに、このような「段」を"plateau"(「高原」とか「踊り場」といった意)と表現している文章も見た。これもまた微妙であることに変わりはない。

設計者の中には、この「段付波形」にコダわって、クロック/ストローブはもとより、データ系の信号に段がついていることを気にする人を見かける。確かにタイミングマージンが少なくリスクがある場合、データ系の信号といえどもきれいな波形であるにと越したことはない、のだが、マージンも十分にあるのに過剰対策にムダな労力を払う人もいる。なぜ「段付波形」が悪であるか、基本に立ち返って考えてみたいものだ。

| | Comments (0) | TrackBack (0)

アンダーシュート(undershoot)

インテルから発行されている Pentium(R) II Processor Developer's Manual は、Pentium II以降のインテルアーキテクチャ(IA-32)のPCハードウェア設計者には大変参考になる資料だが、その中の信号波形を解説した図(Figure 9-2)に「アンダーシュート(Undershoot)」という用語が出てくる。

反対の言葉:「オーバーシュート(Overshoot)」というのは、電圧-時間(VT)波形において、立ち上がりエッジからHigh電圧に移行する部分で、規定されたHigh電圧を超えて電圧レベルが(一般的には)瞬間的に上回ってしまう現象を表す言葉で、広く使われておりこの定義自体に異論を唱える技術者は少ない。
インテルの「定義」では、立ち下がり(*1)エッジからLow電圧に移行する際、電圧レベルがLow電圧を下回ってしまう現象を指して「アンダーシュート」としている。

そもそも「オーバーシュート」は、戦闘機がドッグファイト中に、追跡していたハズの敵機より前に飛び出てしまうことをこのように呼ぶように、想定していた(あるいは規定された)経路を「行き過ぎて」逸脱してしまうことを表現している。こちらの意味に従うと、インテルの言うところの「アンダーシュート」はやはり「オーバーシュート」と呼ぶべきではないか。
実際、一般的に言われる「オーバーシュート」を「(正の)オーバーシュート」、「アンダーシュート」は「負のオーバーシュート」と呼んでいる技術者もおり、またそのように定義・解説しているツールやドキュメントもある。

個人的には、どちらも「オーバーシュート」と表現すべきだと考えている。

では、その場合「アンダーシュート」は使わないのか? というと、そうでもない。その場合の「アンダーシュート」は「規定(想定)された時間に、規定(想定)した電圧に達しない場合」、一般的には、想定された経路に「届かずに」逸脱してしまうこと、を示す言葉としたい。

また、技術者によってはオーバーシュートの「跳ね返り」による、一時的な電圧低下(波形割れ・リンギング)を「アンダーシュート」と呼ぶ人もいるようなので、注意が必要だ。

(*1) falling edgeのこと。この用語もオカシイのでいずれ取り上げたい。

【参考】
オーバーシュート
アンダーシュート

| | Comments (1) | TrackBack (0)

SIで使われる用語

シグナルインテグリティで使われる用語には、ちょっと変なのが多い。
個々のエンジニアで違う表現を使う場合もあるし、そのエンジニアが属するグループ(業種とか、会社とか、部署とか)で慣用的に使っていて、他から見ると変に思われるコトバもある。
このカテゴリでは、そういった用語を取り上げてみたい。

| | Comments (0) | TrackBack (0)