PLL

懇意にしてるWebページが、去年あたりから放置されるのが目立ってきた。 つい先月ぐらいにも、毎日更新されてたページが、何の前触れもなく更新STOP。 燃え尽き症候群かしらね。

それとも、SNSに移行しちゃった?フェースブックとか大流行みたいですから。 そして、ツイッターも当たり前に使われてるみたい。

この間、図書館へ行ったら、『今さら聞けないツイッター入門』なんてのが飾って あったので、手に取ってみた。はじめての図解で簡単シリーズみたい。フェイスブック編も 出版されてるようだから、入荷してたら見てみよう。

まずは、フォローしましょ。誰を? いきなり安倍ちゃんはないから、オバマかトランプ 野郎か。彼らのフォロワーって一体何人ぐらいいるの?

オバマちゃんは当たり前な事しか言わないだろうから、トランプ野郎の方を暫く ワッチしてみるか。失言期待。

人気の検索キーワードって、話題作りの種を撒いているのね。旨く当って成長します ようにってか。競馬の予想とかも、ここで良いのなな。株屋さんもさりげなく見てる。 それとも、儲かりそうな言葉をピックアップするように、フィルタリングしてる?

きっとやってるだろうね。藁にもすがって、金儲けしたい。さあ、Pythonかなにかに コード書けよ。#python codersとかかな。暇潰しには良さそうだな。

こういう暇つぶしは、ipadにも入れておくべきだろうな。140文字制限で全角だと 70文字かと思ってた、関係なく文字として140字分。Cメールと同じと考えれば いいのか。そして、 今後の予定:140文字をより活用できるように とな。何も知らないのは罪?

Windowsでもngspice

ちょっと周回遅れのような気がするが、 Rubyが今のPythonの地位にいない理由 なんてのを見てる。

Windowsに注力しなかったってのが上げられていたけど、激同意。unix人口なんて 世間一般では極わずか。そこでぐだぐだやってても、拡がらないのは道理。

そうさな、spiceも同様で、まずはWindows系で広めて、地位を磐石なものにするのが 正しいマーケッティングです。Windows上ったら、LTSPICEだけど、unix系で動いて いたのも、移植されてるようなので、試しに入れてみる。

ngspice download

ここから、zipファイルを落としてきて、展開すれば終わり。こちらに、 NGSPICE簡易説明書 が有るので、参考に。

インストールめんどいとか言う人は、Webから実行。 NGSPICE Online なんてのも有る。ちょいと試すには こちらが良いか。

アンテナアナライザー

前回は、石の良否を見極めるのに、カーブトレーサーなんてのを持ち出した。これって 一種の測定器。まあ、アマチュアには高値の花だな。アマチュアの測定器と言えば、筆頭はテスターでしょう。

昔々その昔、オイラーが中学生ぐらいの頃、TV番組で、TVの修理講座なんてのをやって いた。そこに登場するのもテスターだけ。これ一丁で、TVの修理をしちゃいましょってんだから 恐れ入る。

感心したのは、テスターを電圧測定レンジにすると、高抵抗の変わりになるよってノウハウ。 昔の事だから、真空管が使われている。グリッドにバイアスを与えるために、グリッド 抵抗が使われているんだけど、その抵抗の断線をどうやって見つけるか?

グリッドの電圧を測ってみろ。これすなわち、テスターを抵抗の代用にしてるって事。 テスターを回路に接続した時、TVの表示が変われば(正常になれば)、これすなわち 抵抗の断線が疑われる。ここから、トピックで、電圧計の説明が有ったように思う。 昔の人は、こうして、測定器の原理を体験を通して学んでいたんですなあ。

アマチュアがテスターの次に欲しがる汎用測定器と言ったら、グリッドディップメーター でしょうか? 同調回路の周波数を求めたり、時には鉱石ラジオになったり。

オイラーがハムにカムバックした時は、デップメーターの変わりにアンテナアナライザーを 選んだのだった。これ、同調周波数やSWRやLCの値も測定出来るって優れもの。

本物のLC測定器が、どのようになってるか調べてみたら、面白いのが見つかった。

インピーダンス測定

Z測定のヒント

伝送系のふるまい

テスターの単純明快な理論と違って、大分複雑。これはちょっと手が出ないなと思って、 アンテナ七ライザーにフォールバックする。昔やった記憶があるけど、再度資料を漁ってみた。

Aa-30

AA-30/54のインピーダンス測定の実力

RigExpert製アンテナ・アナライザー

こちらは、ロシア語の原文 AA-30 internal

で、心臓部は、アナデジの石、 AD8302 世の中、便利な時代なんですなあ。この石が有ったんで、ウクライナの人は、アナライザーを 作ろうと思ったんだな。

これも、うーんと唸るだけ? まてまて、原理ぐらいは、spiceで確認出来るだろう。

AA-90 Antena analyzer

.subckt XTAL 1 2
L1 1 P001 8.0m
C1 P002 P001 120f
R1 2 P002 6
C2 1 2 4p
.ends

.subckt lcp 1 2
L1 1 2 10u
C1 1 2 100p
.ends

.subckt lcs 1 2
L1 1  jp  10u
C1 jp 2   100p
.ends

vin   1   0   ac 2v
r1    1   rr  50
r2    rr  0   50
rs    1   rx  50
x1  rx 0 lcs

.ac dec 400 100k 90meg
.control
  run
  plot v(rx,rr) ph(rx)
.endc
.end

さくっと、作ってみた。被測定物(業界用語ではDUTと言うそうな)は、サブサーキットに まとめて、いかにも中がブラックボックスぽくしてみた。

水晶片をDUTに選ぶと、共振点を見つけるのが大変。一桁あたり100ポイントぐらいの 検索では、橋にも棒にも引っかかりませんでした。400ポイントに増やして、やっと この辺に共振点が有るんだなと分かる程度。Qがいかに高いか実感出来ました。

その点、LCの並列回路の場合、レゾナンスカーブが非常にブロード。これって、ブリッジ 片を構成してる抵抗群がLC回路に並列接続されたように振る舞い、Qを下げているって 事だろうね。直列共振は、わりとシャープな特性となっている。

一番の問題は、位相差をどうやって検出するか? AD8302の代わりを何とか実現でき ないか?

位相比較器

位相差で検索してみると、PLLなんてのが引っかかってくる。そしてその心臓部は 位相比較器とか位相検波器と呼ばれるもののようだ。

位相比較器のふるまい

位相比較器の動作範囲を広げる

ミキサが古典的な比較器になるとな。デジタルICでも実現可能か。

位相比較器 (Phase Frequency Comparator) の 動作 に詳しい説明が有った。

位相検波ってなんだ が、発展してLメータを作った人がいる。

位相同期回路の動作原理 と言いつつ、複雑な式が出てきて、理解が大変。

PLL

PLLの原理

PLLの動作と回路構成

PLLのための要素回路の設計および評価

PLL on spice

ltspiceに付属してる例を見る。そのものずばりの PLL.ascってのとPLL2.ascが有った。 EORで位相検出やってるのと、専用のICを使ってるのとあるな。ICの中身はどうなってるの?

他にないかと思って探してみたら、 アナログ PLL という力が入ったページに行き当たった。デジタルとアナログの融合って所でしょうかね。

ltspiceでは、pllの面白いと思われる所が隠されてしまっているので、ngspiceに付属 してる例から、xspice/pllの中を覗いてみる事にした。

READMEを見ると、各ファイルの役割が説明されてた。その中で一番短いのを 観賞してみる。

[ob: pll]$ cat f-p-det-d-sub.cir
* frequency-phase detector according to
* http://www.uwe-kerwien.de/pll/pll-phasenvergleich.htm

.subckt f-p-det d_R d_V d_U d_U_ d_D d_D_

aa1 [d_U d_D] d_rset and1
.model and1 d_and(rise_delay = 1e-10 fall_delay = 0.1e-9
+ input_load = 0.5e-12)

ad1 d_d1 d_R d_d0 d_rset d_U d_U_ flop1
ad2 d_d1 d_V d_d0 d_rset d_D d_D_ flop1
.model flop1 d_dff(clk_delay = 1.0e-10 set_delay = 1.0e-10
+ reset_delay = 1.0e-10 ic = 2 rise_delay = 1.0e-10
+ fall_delay = 1e-10)

.ends f-p-det

周波数・位相検出器の孫ボードっぽい。subcktの所を見ると、6コネクタのボードで、 名前はf-p-detって事だな。ボードの中には、aa1,ad1,ad2という3つの部品が載ってるんだな。

あれ? 今までに無い鍵括弧なんてのが出てきてる。この意味を読み解くのが鍵に なりそう。ngspiceのマニュアルの12章Code Modelって所に説明が有った。

鍵括弧は、ベクターインプットを表す。あるいは、パラメータのベクターとしても 使われる。信号の前にチルダーが有ると、負論理信号と看做されるとな。 部品名は、Aから始めるのがお約束らしい。

各信号端子は、xspiceではportと呼ぶようだ。そのポートの性質は、電圧とか電流とか デジタル信号とか色々あり、部品によって決まってる。(そりゃ、そうだ) その説明が、140ページに出てた。Mixd-signalだから、きっちり定義されてるのね。

このまま、マニュアルを見て行ってもいいんだけど、それじゃマニュアル人間に なっちゃいそうなので、古式ゆかしく、ソースから紐解いてみる。

今まで、ngspiceは、fedoraとウブでしかやってなかったけど、もしものために、OpenBSD でも動くかやってみる。

OpenBSDでもngspice

port/cad/ngspiceにあったMakefileを見ると、特殊なものは必要なさそう。

USE_GMAKE =             yes
CONFIGURE_STYLE =       gnu
WANTLIB +=              c m ICE SM X11 Xau Xaw Xdmcp Xext Xmu Xt
WANTLIB +=              Xpm pthread-stubs xcb

必要なのはX関係者だけ。gmakeが必要なのは、半ばお約束。コンパイルした後の残骸は そのまま残して、ソース探検に使う。

早速、上で出てきた部品から、d_dff ってのを探してみる。接頭語の d_ は、デジタル を表しているんだな。

/usr/ports/pobj/ngspice-26/ngspice-26/src/xspice/icm/digital って所にデジタル 部品が集まっていた。デジタルが有るならアナログが有ると思って探したら、一つ 上の階層にアナログ系グループが有った。土地勘大事。

d_dff/ の下には、cfunc.modっていうC語の定義とifspec.ifsっていうコードモデルの 定義ファイルが置いてあった。まずは、コードモデルの方から見ていく。

NAME_TABLE:

C_Function_Name:       cm_d_dff
Spice_Model_Name:      d_dff
Description:           "digital d-type flip flop"

C語のルーチン名とspice上での呼び名、それに説明だな。そして、次からは、portの 説明になる。

PORT_TABLE:

Port_Name:           data               clk
Description:         "input data"       "clock"
Direction:           in                 in
Default_Type:        d                  d
Allowed_Types:       [d]                [d]
Vector:               no                 no
Vector_Bounds:        -                  -
Null_Allowed:        no                 no

PORT_TABLE:

Port_Name:           set                reset
Description:         "asynch. set"      "asynch. reset"
Direction:           in                 in
  ;

PORT_TABLE:

Port_Name:           out                Nout
Description:         "data output"      "inverted data output"
Direction:           out                out
 :

set,reset端子付きのD-TypeのFFとは、珍しいな。出力は反転端子も有るとな。

PARAMETER_TABLE:

Parameter_Name:     clk_delay           set_delay
Description:        "delay from clk"    "delay from set"
Data_Type:          real                real
Default_Value:      1.0e-9              1.0e-9
Limits:             [1e-12 -]           [1e-12 -]
Vector:              no                  no
Vector_Bounds:       -                   -
Null_Allowed:       yes                 yes
  :

PARAMETER_TABLE:

Parameter_Name:     reset_delay         ic
Description:        "delay from reset"  "output initial state"
Data_Type:          real                int
Default_Value:      1.0e-9              0
  :

PARAMETER_TABLE:

Parameter_Name:     rise_delay                  fall_delay
Description:        "rise delay"                "fall delay"
Data_Type:          real                        real
 :

続いて、各端子間のパラメータが定義されてる。clk_delayとかは、clkが入ってから 出力が決定されるまでの遅れ時間だな。初期値が1nSって、かなり速い部類に なるかな。model行の括弧の中は、ICの交流パラメータ(スイッチングパラメータ)を指定するんか。

交流パラメータと言えば、オイラーは、テキサス・インスツルメンツ(TI)のSN7400で 育った世代だから、Tplhとか言う名前に馴染みが有る。こういう規格名って、各社各様 だろうけど、著作権みたいなものって有るのだろうか? 統一して欲しいと思う今日この頃。

もう少しソース観光

Windowsに入れたngspice上で、editってやると、ノートパッドが起動してくる。これ、何とか 他のものにしたい。どうなってるか調べてみる。

notepadでgrepすると、conf.cにこんなのが見つかった。

#if defined (__MINGW32__) || defined (_MSC_VER)
char    *Def_Editor     = "notepad.exe";
#else
char    *Def_Editor     = "vi";
#endif

今度は、どういう風に使われているか、調べる。

[ob: src]$ find . -type f | xargs grep Def_Editor
./frontend/inp.c:            if (Def_Editor && *Def_Editor)
./frontend/inp.c:                editor = Def_Editor;
./include/ngspice/ngspice.h:extern char *Def_Editor;
./conf.c:char   *Def_Editor     = "notepad.exe";
./conf.c:char   *Def_Editor     = "vi";
./misc/ivars.c:    env_overr(&Def_Editor, "SPICE_EDITOR");
./conf.h:extern char *Def_Editor;

で、misc/ivars.cあたりを見ると、Windows環境でも、環境変数SPICE_EDITORが使えそうでした。

source-dirのトップにDEVICESなんて言うファイルが置いてあったので、興味深げに見てる。

11. MOS devices
  :
 11.13 HiSIM2 - Hiroshima-University STARC IGFET Model
 11.14 HiSIM_HV - Hiroshima-University STARC IGFET High Voltage Model
  :
13. Verilog-A models
 13.1 EKV MOS model

Verilogなんてのが有る。これって、キーボード叩いて石を設計するツールの総本山な 所じゃないですか。そしてそんなのに混じって何となく、広島大学なんて風に読めるやつも 居るぞ。詳細を覗いてみると

 11.13 HiSIM2 - Hiroshima-university STARC IGFET Model

       Ver:    2.7.0
       Class:  M
       Level:  61, 68
       Dir:    devices/hisim2
       Status: TO BE TESTED.

       This is the HiSIM2 model available from Hiroshima University
       (Ultra-Small Device Engineering Laboratory)

       Web site: http://home.hiroshima-u.ac.jp/usdl/HiSIM.html

なんと、バークレー校とかに混じって、本当に広島大学ですよ。 極微細デバイス工学研究室ですって。研究室の設備を見ると、べったりと、Agilent Technologies と癒着もとえ協力関係にある事が分かる。産学協同かしら。大いに結構、どんどんやって ください、と、上から目線の物言です。

なにはともあれ、楽しそうで羨ましい。オイラーも混ぜておくれよ。

そして、INSTALLの章には、LINUXに混じって

  9 NGSPICE COMPILATION UNDER WINDOWS OS
   9.1 How to make ngspice with MINGW and MSYS
   9.2 make ngspice with MS Visual Studio 2008
   9.3 make ngspice with pure CYGWIN
   9.4 ngspice console app with MINGW or CYGWIN

windowsでも動きますから、暇人は試してごらんって言う案内も有った。unixもどきに 混じって、M$が押しているVisual Studdioでも動くって、本格的じゃん。

日本の技術が採用されているらしいので、現場視察をしておくか。AUTHORSファイルには、 日本人とおぼしき名の人が3名挙げられていたぞ。その方達のクレジットも有るか注目です。

場所は、 /usr/ports/pobj/ngspice-26/ngspice-26/src/spicelib/devices/hisim2 です。

/***********************************************************************

 HiSIM (Hiroshima University STARC IGFET Model)
 Copyright (C) 2012 Hiroshima University & STARC

 MODEL NAME : HiSIM
 ( VERSION : 2  SUBVERSION : 7  REVISION : 0 ) Beta

 FILE : hsm2.c

 Date : 2012.10.25

 released by
                Hiroshima University &
                Semiconductor Technology Academic Research Center (STARC)
***********************************************************************/

特に、個人名が入っている事はありませんでした。驚くのは、hsm2eval.cの中身。 7000行を超える、計算式が凝縮されてた。そこまで複雑なんですかい?

hisimってのは、Surface-Potential-Based MOSFET Model for Circuit Simulation らしいけど、面ー順位のよるMOSFETの解析モデルって事で宜しいでしょうか。 オイラーには、当分関係なさそう。

etc

JA5FP

Arts of analo circuits