OpenSUSI-MPW
Open-Source TR-1um を使った OpenSUSI-MPW サービスを使って「何か本格的に設計したいなぁ」と考えていたのですが、折角なら Open-Source Tool を活用するリファレンス設計としてのドキュメント記録も残したいと思い始めました。そこで、1999 年にT社からザ○○に転職した頃、トップダウン設計の重要性をエンジニアメンバーと会社幹部にデモする目的でスクラッチから独自開発した 「Octave での PLL 設計手法」 を現代に焼き直して 「Python での PLL/DLL 設計手法」 として公開することにします。
ザ○○は、高速インターフェース(SerDes)チップが代表製品で、当時普及し始めた、液晶ノートブックPC向けの、狭いヒンジ部分を通す、画像データ転送向けのパラレルーシリアルーパラレル変換に応用されていました。
個人的にT社時代から、Open-Source Tool を工夫して設計に使っていました。当時はIT 部門の縛りも緩く、会社の EWS (高級PC) の SUN-OS のカーネルの再構築や、Open-Source Software (GNU/Emacs等) を勝手にインストールして仕事に活用することが出来たことも幸いしています。転職したザ○○でも、廉価なホワイトボックスPCに FreeBSD を入れて足りないコンピュータ資源を底上げすると共に、Open-Source Tool をインストールして半導体回路設計に実際に適用していきました。
SerDes とは?
Serializer/Desirializer の略です。つまりパラレルーシリアル変換/シリアルーパラレル変換をする回路技術のことです。世間でよく知られている Ethernet、SATA, PCIe、HDMI 等々、PC 向けのデジタルインターフェースには SerDes 技術が広く応用されています。昔、30年以上前は、PC 向けのデジタルインターフェースといえばパラレル伝送 (SCSI, ATA, ISA-Bus, PCI-bus等) が一般的でしたが、転送速度が上がるにつれて、データスキューやEMI等の問題が明らかになり、シリアル伝送化することが必須となってきた歴史があります。
シリアル化すると、その分伝送速度を上げなければいけないのですが、それでもシリアル化した方が更に伝送速度を上げられる回路テクニックを実装できるメリットがあります。一方、最近話題のチップレットのチップ間通信に使われる D2D (Die to Die) インターフェースでは、シリアル度は下げてパラレルのままで伝送速度を上げる方向に向かっています。これは、シリアル化で必要な回路テクニックを実装するために必要なシリコン面積や消費電力と、所詮は短い伝送距離と割り切って信号品質を実装面で担保するというシステム全体のトレードオフをバランスしたソリューションになっています。
*著者の個人的見解
PLL/DLL とは
Phase-Locked Loop / Delay-Locked Loop の略です。どちらも入力信号にチップ内部で生成した信号を同期する回路になります。入力信号を内部の発振機の出力に同期するのが PLL で、入力信号を内部の遅延回路の出力に同期するのが DLL になります。
*もっと詳しく知りたい方はチャッピーに聞いてください。
チップ内部で発生した信号を 1/N 分周して入力信号に同期をかけると、内部で発生した信号は入力信号の N 倍の周波数に逓倍されます。一つの水晶発振機からの固定周波数を任意の周波数出力に設定できる Fractional-N PLL という回路は、通信機でのキャリア周波数同期等に使われます。また、内部でN段の遅延をかけた出力に同期をかけると、入力信号の正確な 1/N 遅延信号を生成することができるので、伝送線路の遅延(スキュー)補償等の応用に使われます。このように PLL/DLLは、大変応用範囲の広いミックスドシグナル回路設計でのビルディングブロックといえます。
*著者の個人的見解
トップダウン設計
DLL/PLL に代表されるミックスドシグナル向けビルディングブロックは、マルチタイムドメインでの動作検証が必要になります。通常の SPICE 回路シミュレーションは、回路動作スピードに比べて十分に細かい時間間隔 (psec) でキルヒホッフの電流則を解いていきますが、DLL/PLL の動作検証には、高速な内部回路動作の解析と並行して、入力信号が内部信号に同期するまでの同期時間 (msec)での回路動作という、長い時間単位での動作検証も必要になります。$10^9$ 以上も時間粒度の異なる回路動作を SPICE で検証するには膨大な計算時間が必要になるので実用的ではありません。
トップダウン設計というと、思い浮かぶのは MATLAB/SIMULINK ですが、当時、転職したばかりの外様エンジニアという立場では、ライセンスを購入する以前に、設計メソドロジーとしての有用性を証明しないと予算が確保できない状況でしたので、MATLAB 互換の Open-Source Software である Octave での実装を試みたのでした。
トップダウン設計メソドロジーでは、PLL/DLL を構成する回路ブロックをモデル化することで、Octave や MATLAB のような数値解析ソフトを使った動作検証を可能にします。回路ブロック毎にモデル化された特性パラメーターは数値解析でのシミュレーションに使われると同時に、回路ブロック単体を SPICE シミュレーションすることで特性パラメーターを抽出して、相互にフィードバックかけることで、回路全体の動作検証が可能になります。
PLL/DLL 回路は、1)位相比較機、2)チャージポンプ、3)ループフィルター、4)VCO/VCD (Volgate Controled Oscilator/Delay)の4つの回路ブロックに分割されます。
商用でのマルチタイムドメインの回路シミュレーターは、このような回路ブロックのモデル化とパーティショニングによる SPICE シミュレーションでの計算マトリックスの縮小を自動化して高速実行しますが、利用ライセンスは大変高価です。実際の半導体開発では「ミスが許されない」「時間がない」等々の理由から、往々にして商用ツールを使った設計検証に頼りがちですが、順序を追って設計することで、Open-Source Tool での設計検証も可能ですし、PLL/DLL の動作原理を確実に理解できるようになることで、応用アイデアが更に広がるはずです。
Python vs Octave
前述した、1999年転職当時は Python 自体が一般的ではなかったことに加えて、Open-Source Tool で実用的な数値解析ソフトが Octave ぐらいしか無かったことから、Octave を使って PLL/DLL の設計と動作検証をしましたが、2026年の現代では Python で多様な数値解析モジュールが使えます。以下、チャッピーに比較してもらいました。
| 観点 | Python | Octave |
|---|---|---|
| 長期拡張性 | 高い | 中程度 |
| 数値解析ライブラリ | 非常に豊富 | MATLAB互換中心 |
| Notebook化 | Jupyterで強い | 可能だがPythonほど自然ではない |
ということで、30年近く前の 「Octave での PLL 設計手法」 を現代に焼き直した 「Python での PLL/DLL 設計手法」 として紹介することにします。
以降、順番に各回路ブロック毎の python のモジュールをチャッピーと一緒にコード化していくことを実況中継的に紹介していこうと思います。
AIと設計する
結論としては、最初は ReferenceClock / PhaseDetector / LoopFilter / DelayLine / LockDetector / Metrics の6ブロックで始めるのが良いです。
ChargePump と詳細な LoopFilter は、Level 2 以降で独立ブロック化すれば十分です。
by チャッピー
と言うことで、始まりました。次回以降順番にコード化を進めていきます。



