概要 / Overview
本関数 multi_clk_ideal_delay は、アナログ/デジタル混載回路(例:パイプラインADC、サンプル&ホールド回路、DFF群)において必要とされる理想的クロック信号および入力信号を同時に生成する、Simulink向けのMATLAB Functionモジュールである。
出力信号一覧 / Output Signal Summary
| 信号名 | 内容 / Description |
|---|---|
clk1 |
フェーズ1の理想クロック信号(non-overlap付き) |
clk2 |
clk1 に続くnon-overlap付きの理想クロック |
clkDFF |
clk1 より1/4周期+遅延後に立ち上がるDFF制御クロック |
clkDFF2 |
clkDFF に続く理想DFF制御クロック |
ramp |
勾配1のランプ入力信号(直線増加) |
Vdd |
ステップ入力電圧(2msで0V→16Vに変化) |
clk_last |
周期1秒、デューティ比50%のサンプリングクロック |
特徴 / Features
-
🧭 マルチフェーズ・クロック生成:
クロックclk1およびclk2は、非重複期間(non-overlap)を確保しつつ理想矩形波として動作。 -
⏱️ 遅延クロック(DFF系):
clkDFFとclkDFF2は、適切なタイミング遅延を伴うクロック信号として設計されており、Dラッチ制御やサンプル&ホールドに最適。 -
📈 ランプ信号:
ramp = tにより、簡単なアナログ入力として動作し、ADC特性検証等で使用可能。 -
🔋 電源ステップ:
Vddは 2ms 時点で 0V → 16V にステップアップし、電源立ち上がり条件下での挙動をテスト可能。 -
🕐 サンプリングクロック:
clk_lastは周期1秒・High期間0.5秒のクロック。ADC出力の最終ラッチタイミングや低速制御用に有効。
使用例 / Use Case in Simulink
この関数は Simulink の MATLAB Functionブロックにそのまま挿入して使用する。
以下のような構成で、回路ブロック(例:ADC、DFF、S/H)へ信号供給する役割を果たす:
+------------------------+ +------------------+
\| MATLAB Function (this) | --> | DUT (e.g. ADC) |
+------------------------+ +------------------+
応用 / Application Examples
- パイプラインADCの段間制御クロック生成
- 電源立ち上がり時の動作確認
- クロック遅延と非重複時間のタイミング設計検証
- Verilogテストベンチとの共通クロック生成
- クロック/アナログ混載系のSimulinkモデリング
拡張提案 / Future Extensions
- ノイズ付きVdd(例:tanh遷移やリップル)
- 非対称デューティ比クロック対応
- 周波数可変機能の追加(外部入力対応)
備考 / Notes
-
tは Simulink から供給される時間(scalar or vector)として動作 - すべてのクロックは 0/1 の理想矩形波(smoothなし)
function [clk1, clk2, clkDFF, clkDFF2, ramp, Vdd, clk_last] = multi_clk_ideal_delay(t)
% Program Name: multi_clk_ideal_delay.m
% Creation Date: 20250629
% Overview: Generates 4 ideal non-overlapping clocks, a ramp signal, step Vdd, and 1Hz sampling clock
% Usage: Provide scalar or vector time t to get clocks, ramp, Vdd, and last sampling clock
% --- Parameter Definition / パラメータ定義 ---
T = 0.01; % Clock period [10ms] / クロック周期 [10ミリ秒]
nov = 1.0e-6; % Non-overlap time [1.0µs] / 非重複時間 [1.0マイクロ秒]
delay = 0.5e-6; % Delay for DFF clocks [0.5µs] / DFFクロック用遅延
w = T / 2 - 2*nov; % High level width / Highレベルの有効幅
vstep = 16.0; % High level of Vdd after step / ステップ後の電圧 [16V]
t_step = 2e-3; % Step occurs at t = 2ms / ステップの開始時刻 [2ミリ秒]
T_last = 1.0; % Last sampling clock period [1 sec] / ラストクロック周期 [1秒]
w_last = 0.5; % High duration of last clock [0.5 sec] / High期間 [0.5秒]
% --- Ideal clk1 ---
tp1 = mod(t, T);
clk1 = double(tp1 >= 0 & tp1 < w);
% --- Ideal clk2 ---
tp2 = mod(t - (w + 2*nov), T);
clk2 = double(tp2 >= 0 & tp2 < w);
% --- Ideal clkDFF ---
tp3 = mod(t - T/4 - delay, T);
clkDFF = double(tp3 >= 0 & tp3 < w);
% --- Ideal clkDFF2 ---
tp4 = mod(t - T/4 - w - 2*nov - delay, T);
clkDFF2 = double(tp4 >= 0 & tp4 < w);
% --- Ramp signal ---
ramp = t;
% --- Vdd: Step input (0V before t_step, 16V after) ---
if numel(t) > 1
Vdd = vstep * double(t >= t_step);
else
Vdd = vstep * double(t >= t_step);
end
% --- Last Sampling Clock (1Hz, 50% duty) ---
tp_last = mod(t, T_last);
clk_last = double(tp_last >= 0 & tp_last < w_last); % High for 0.5s every 1s
end
本関数は、アナログ・デジタル混在回路のクロック/電源/入力テスト信号を一元的に生成するユーティリティ関数として、検証・教育・研究用途に活用可能である。