🎯 概要(Overview)
本記事では、PythonとMatplotlib を使って、理想的な非重複クロック信号を生成・可視化する方法を紹介します。対象は、**アナログ・デジタル混載回路(例:パイプラインADC、サンプル&ホールド、DFF制御回路)**などにおけるタイミング設計・検証用途です。
生成するクロックは以下の4種類:
-
clk1
:基本クロック(第1フェーズ) -
clk2
:非重複時間を挟んだ第2フェーズクロック -
clkDFF
:Dフリップフロップ制御用クロック(位相ずれあり) -
clkDFF2
:clkDFF
の後続クロック
🧮 コード実装(Python + matplotlib)
以下に示すのは、10クロック周期(100ms)分の波形を生成し、4段表示で個別プロットする完全なコードです。
import numpy as np
import matplotlib.pyplot as plt
# --- Parameter Definition ---
T = 0.01 # Clock period [s]
nov = 1.0e-6 # Non-overlap time [s]
delay = 0.5e-6 # Delay for DFF clocks [s]
w = T / 2 - 2 * nov # High level width [s]
# Time vector for 10 cycles
t = np.linspace(0, 10 * T, 5000)
# --- Generate clk1 ---
tp1 = np.mod(t, T)
clk1 = (tp1 >= 0) & (tp1 < w)
# --- Generate clk2 ---
tp2 = np.mod(t - (w + 2 * nov), T)
clk2 = (tp2 >= 0) & (tp2 < w)
# --- Generate clkDFF ---
tp3 = np.mod(t - T / 4 - delay, T)
clkDFF = (tp3 >= 0) & (tp3 < w)
# --- Generate clkDFF2 ---
tp4 = np.mod(t - T / 4 - w - 2 * nov - delay, T)
clkDFF2 = (tp4 >= 0) & (tp4 < w)
# --- Plot clocks separately with color customization ---
fig, axs = plt.subplots(4, 1, figsize=(12, 6), sharex=True)
axs[0].plot(t * 1000, clk1.astype(int), drawstyle='steps-post', color='blue')
axs[0].set_ylabel("clk1")
axs[0].set_title("Ideal Clock Signals (10 Cycles)")
axs[1].plot(t * 1000, clk2.astype(int), drawstyle='steps-post', color='red')
axs[1].set_ylabel("clk2")
axs[2].plot(t * 1000, clkDFF.astype(int), drawstyle='steps-post', color='green')
axs[2].set_ylabel("clkDFF")
axs[3].plot(t * 1000, clkDFF2.astype(int), drawstyle='steps-post', color='purple')
axs[3].set_ylabel("clkDFF2")
axs[3].set_xlabel("Time [ms]")
plt.tight_layout()
plt.show()