OpenSUSI-MPW
Open-Source TR-1um を使った OpenSUSI-MPW サービスを使って「何か本格的に設計したいなぁ」と考えていたのですが、折角なら Open-Source Tool を活用するリファレンス設計としてのドキュメント記録も残したいと思い始めました。そこで、1999 年にT社からザ○○に転職した頃、トップダウン設計の重要性をエンジニアメンバーと会社幹部にデモする目的でスクラッチから独自開発した 「Octave での PLL 設計手法」 を現代に焼き直して 「Python での PLL/DLL 設計手法」 として公開することにします。
第13回は 「Visualization #12」 を進めます。
#1 Project Foundation ✓
#2 Simulation Architecture ✓
#3 Parameter Definition ✓
#4 Simulation State ✓
#5 Event Simulation Engine ✓
#6 Ideal Delay Model ✓
#7 Ideal Phase Detector ✓
#8 Ideal Loop Controller ✓
#9 Lock Detector ✓
#10 Simulation History ✓
#11 Reference Clock ✓
---
#12 Visualization
目的
SimulationHistory を可視化する。
入力
SimulationHistory
↓
出力
Matplotlib Figure
dll/visualizer.py
"""
visualizer.py
Visualization utilities for the DLL simulator.
"""
import matplotlib.pyplot as plt
from dll.history import SimulationHistory
class Visualizer:
"""Visualization utilities."""
def plot_delay(
self,
history: SimulationHistory,
):
"""
Plot delay versus simulation cycle.
Returns
-------
matplotlib.figure.Figure
"""
data = history.data
fig, ax = plt.subplots()
ax.plot(
data["cycle"],
data["delay"],
linewidth=2,
)
ax.set_title("Delay")
ax.set_xlabel("Cycle")
ax.set_ylabel("Delay (s)")
ax.grid(True)
fig.tight_layout()
return fig
run.py
実行コマンド run.py がプロジェクトのエントリーポイントとなり、今後可視化項目を増えても使い方は変わりません。Delay を可視化するコードを作成してもらいます。
"""
run.py
Example program for the DLL top-down simulator.
"""
import matplotlib.pyplot as plt
from dll.params import DLLParams
from dll.simulator import DLLSimulator
from dll.visualizer import Visualizer
def main() -> None:
params = DLLParams.default()
simulator = DLLSimulator(params)
simulator.run()
visualizer = Visualizer()
fig = visualizer.plot_delay(
simulator.history
)
plt.show()
if __name__ == "__main__":
main()
実行結果
Loop 回数に従って Delay 量が減っていくことが確認出来ます
改造
AI に control も表示するように改造してもらいます。visualizer.py と run.py を改造します。
まとめ
チャピーにコーディングをお願いして、DLLのシステム設計用のシミュレーション環境を作成してきました。
システムのコードアーキ決定
↓
システム内の機能モジュールの独立化
↓
シミュレーションエンジン+記録
↓
ビジュアライズ+実行スクリプト
と作業を進めてシミュレーションを実行するところまで確認出来ました。実際の回路設計では、機能モジュールの一次近似(線形)記述に、非線形な特性を加えて行ったり、現実の回路動作をSPICEでシミュレーションした結果を多項式近似で組み込んだりする ことで、シミュレーションの精度を上げて行きます。
同時に、シミュレーション結果が目標仕様に合致しない場合は、機能モジュールのパラメーターを変更したり、機能モジュールの機能自体を変更することで対応します。回路設計レベルへ落とす前に、機能モジュール毎の仕様を決めていくことが重要です。
ハードウェアの設計でもAIを活用することは十分出来ます。ただし、システム構成や検証メソドロジー等の高位レベルでの設計仕様やアイデアをAIが理解できる形に翻訳することが重要と考えています。例えば、Python 等で言語化することで AI が活躍するフィールドが広がります。
今回の試みでは、AIに「ブラックボックス」を生成させるのではなくて、言語化により「設計プロセスを見える化する」ことを重視しました。コーディングはAIに全面的に頼っています。また機能毎のテストもすべてAIに全面的に頼っています。個人的に検証作業は手間がかかる割に、モチベーションが上がらない作業ですので、そこをAIに頼れるのは大変ありがたいです。
以上、駆け足で設計作業を進めてきましたが、一通りの設計プロセスを参考にして頂ければ幸いです。実際の応用では、機能モジュールの2次・3次の特性もコーディングして精度を上げる必要がありますが、一度AIで全体を構成してしまえば、AIを使って精度を上げて行くことも容易だと考えています。
今回は、DLL/PLLを設計ターゲットにしましたが、システム・ハードウェア設計には応用可能だと考えています。何度もループを回すΔΣ系の回路や、アダプティブに回路を補正して最適化していく様な SerDes 回路や AFE 回路等々です。

