关于 matlab-model-ams-systems
matlab-model-ams-systems 指导 MATLAB 和 Simulink 用户使用 Mixed-Signal Blockset,根据数据手册或系统规格建立 PLL IC 模型。内容涵盖架构选择与模型构建,后续验证阶段由配套文件介绍。
主要功能
- 01从数据手册或规格提取 PLL 参数
- 02选择 Integer-N、Fractional-N 或双模架构
- 03使用 Mixed-Signal Blockset 构建行为模型
- 04针对新目标调整现有 PLL 模型
- 05使用前检查所需函数和库
适用场景
- 01根据 IC 数据手册创建 Simulink PLL 模型
- 02按系统指标设计频率合成器
- 03为锁定时间或噪声目标调整现有 PLL 模型
MCP 相关
该技能要求在使用前检查 MATLAB 函数和 Simulink 库是否可用;输入未说明 MCP 服务端接口。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-model-ams-systems安装后在 Claude Code 中输入/matlab-model-ams-systems确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
manifest.yamlreferences/assembly-code.mddatasheet-extraction.mditeration-algorithm.mdmodeling-pll-datasheet-validate.mdpitfalls.mdprobing-simulink-models.mdstability-analysis.mdvalidate.mdscripts/probeSlxModel.mquickProbe.m详细介绍
技能:PLL 数据手册建模——核心(阶段 1–4)
使用 Mixed-Signal Blockset(MSB)基础库 msbPllFoundation 中的 Simulink
构建模块,根据数据手册或系统规格对 PLL IC 建模。
配套文件:modeling-pll-datasheet-validate.md 涵盖阶段 5–9
(环路滤波器设计、验证、测量、迭代、注意事项)。
适用场景
- 根据数据手册对 PLL IC 建模(提取参数、选择架构)
- 根据系统规格设计频率合成器(fVco、fRef、锁定时间、相位噪声目标)
- 使用 Mixed-Signal Blockset 在 Simulink 中构建 PLL 行为模型
- 根据数据手册测量结果验证相位噪声性能
- 在 Integer-N、Fractional-N 或 Dual Modulus PLL 架构之间进行选择
不适用场景
- 电路级 PLL 设计(晶体管级 VCO、电荷泵原理图)
- 不构建 Simulink 模型的 PLL 分析(直接使用
estimatePLLPhaseNoise) - 时钟分配或抖动清理(而非频率合成)
- 非 MSB 的 PLL 建模(例如,不使用 Mixed-Signal Blockset 的自定义 Simulink 模块)
工作流指示(必须遵守)
-
逐个收集规格(必须遵守——无一例外)——对于任何 PLL 或频率合成器设计请求(基于规格或探索性), 每次回复只提出一个问题。不要列出多个问题,也不要 提供项目符号形式的需求清单。这可以减轻认知负担, 让对话更自然。顺序如下:
- 输出频率(或频率范围)
- 参考频率(如果 N > 200,则指出带内噪声较高的影响)
- 架构(Integer-N / Frac-N / 自动——也可能由 N 预先决定)
- 锁定时间目标
- 相位噪声 / 抖动 / 杂散目标(或确认“无”)
- 电荷泵电流(提供典型值作为默认值)
- VCO 要求(Kvco、相位噪声曲线——提供经验法则)
- 环路滤波器偏好(阶数、带宽覆盖值)
- 其他要求?
- 保存位置(.slx 文件和结果的文件夹路径)
规则:
- 每次只问一个问题,等待回答后再问下一个。
- 跳过用户初始提示中已回答的问题。
- 在括号中提供合理的默认值,让用户只需确认即可。
- 收集完所有规格后,提供设计计划(指示 5,步骤 A)。
-
仅在未达到目标时自主迭代——如果首次尝试 以超过 3 倍的裕量通过,则停止。带宽公式已经能给出 良好的设计——不要为了“完整性”而扫描带宽或迭代。只有在首次尝试 失败或裕量小于 2 倍时,才进行扫描 / 迭代。 如需迭代,请扫描参数并重新仿真,直到达到目标。
-
报告进度并生成 HTML 摘要——每次尝试都输出简短状态 (例如:“BW=1MHz,PM=70 -> 锁定时间=5.2us X”)。所有目标均通过后, 生成 HTML 报告并与模型保存在同一目录下。必须包含以下章节: 报告内容(必需):
- 摘要框:通过/失败判定及裕量
- 模型截图:
print(['-s' model], path, '-dpng', '-r150') - 架构图(文本形式)
- 设计参数网格(fVCO、fRef、N、Icp、Kvco、滤波器类型等)
- 环路滤波器元件表及时间常数(τ_z = R2·C2,τ_p3 = R3·C3)
- 传递函数框:Z(s)、G(s)=Icp·Kvco·2π·Z(s)/(N·s)、H(s)=G/(1+G), 以及关键数值:fc、PM、零点频率、极点频率
- 波特图(开环 + 闭环):通过
exportgraphics(fig, path, 'Resolution', 150)从pllOpenLoopPlot/pllCloseLoopPlot导出。 按 Tag 查找图窗:'PllOpenLoopDynamicPlot'、'PllCloseLoopDynamicPlot' - Vctrl 瞬态:根据 simOut timeseries 绘图,并标出锁定时间
- 仿真结果表(规格与测量值对比)
- 仿真配置(求解器、stopTime、holdOff、平均次数)
- 会话指标:在报告页脚中包含
[COST]和[DURATION]占位符。用户在任务完成后,从 Claude Code UI 中填写这些值(会话结束时可见)。
如何导出绘图:
pllOpenLoopPlot(Icp, Kvco, N, 0, R2, R3, 0, C1, C2, C3, 0); fig = findobj('Type','figure','Tag','PllOpenLoopDynamicPlot'); exportgraphics(fig, fullfile(outDir,'open_loop_bode.png'), 'Resolution', 150);在 HTML 中使用相对路径
src="filename.png"。使用web(reportPath, '-browser')打开报告。 -
图窗必须可见——仿真后,调用
set(0,'DefaultFigureVisible','on'),并确保所有绘图图窗的'Visible','on'。调用drawnow强制渲染。MCP MATLAB 服务默认将Visible设为'off'。 -
每个步骤都在屏幕上显示进度——在关键里程碑处打印状态:
- 步骤 A — 设计方案:构建前显示 ASCII 框图 + 参数
包括:架构、fRef、N、Icp、Kvco、Fc、PM、滤波器类型、求解器。 添加损耗因素时,须在实现之前显示更新后的框图。[PLL TB]──▶[PFD]──▶[CP]──▶[Loop Filter]──▶[VCO]──┐ ▲ │ └─────────────[Divider ÷N]◀─────────────────────┘ - 步骤 B — 滤波器 + 波特图:先显示元件值,然后调用
pllOpenLoopPlot/pllCloseLoopPlot - 步骤 C — 开始仿真:
Simulating Pass 1 (lock time)... StopTime=9µs - 步骤 D — 结果:
Lock time = 2.1 µs (target < 3 µs) ✓ [1.4× margin] - 步骤 E — 第 2 轮(仅当有 PN 规格时):偏移、测量值与目标值对比、通过/失败
- 步骤 A — 设计方案:构建前显示 ASCII 框图 + 参数
先决条件
- 可访问目标 PLL IC 数据手册(PDF)——或基本规格(fVco、fRef、锁定时间)
- 已安装 Mixed-Signal Blockset(提供
msbPllFoundation库) - Control System Toolbox(用于
estimatePLLPhaseNoise验证,R2026b+)
入口
A. 数据手册驱动(完整工作流,阶段 1-4)
适用于有 PLL IC 数据手册的情况。请遵循以下所有阶段。
B. 规格驱动(无数据手册)
当你掌握基本 PLL 规格但没有数据手册时使用。按照 Directive 1 收集规格,然后推导其余参数。
参数推导规则:
N = fVco / fRef (or P*N+S for dual modulus)
BW = min(12/t_lock, fPFD/10) (capped at fPFD/10 for stability)
Kvco: fVco/50 typical if not specified (e.g., 6 GHz → 120 MHz/V)
Icp: 1-5 mA typical (higher Icp → wider achievable BW with smaller R2)
PM: 50° default (60° if adding 4th-order pole)
架构选择:
| 条件 | 架构 |
|---|---|
| N 为整数,使用单模数预分频器 | 带单模数预分频器的整数 N PLL |
| N 为整数,需要 P/P+1 灵活性 | 带双模数预分频器的整数 N PLL |
| N 为分数,要求低杂散 | 带 Delta Sigma 调制器的分数 N PLL |
| N 为分数,设计简单 | 带累加器的分数 N PLL |
DSM 阶数选择(使用 Frac-N DSM 时):
- 阶数 1:最简单,在 fPFD/denom 处的杂散最高
- 阶数 2:适用于大多数设计的良好平衡
- 阶数 3-4:杂散最低,但更多量化噪声能量被推至 高偏移频率处(需要足够的滤波器衰减)
- 如果有数据手册,按其指定的 DSM 阶数;默认使用阶数 3
R 分频器的权衡(当 fRef ≠ fComp 时):
- 使用 R 计数器:fComp = fRef/R → N_eff = fVco/fComp = N×R
- 带内噪声损失:+20×log10(N_eff) — N 越大,带内 PN 越差
- 仅当通道间隔有此要求时才使用 R > 1(fComp = 通道步进)
规格驱动步骤:
- 收集规格(Directive 1)→ 提交 Design Plan(Directive 5,Step A)
- 如果有 VCO PN 数据:先验证 VCO 单体(见下文)
- 从
msbPllArchitectures中选择架构模块(Strategy A — DEFAULT) - 设计环路滤波器:
- N ≤ 50:使用
CompSelectionMethod='Automatic',并设置Fc和Phi - N > 50(P79):使用
thirdOrderPassiveFilterDesign→CompSelectionMethod='Manual' - N 阈值适用于有效 N(包括小数部分)
- N ≤ 50:使用
- 构建模型、仿真并提交结果
VCO 单体验证(提供 PN 数据时):
% 1. Create VCO testbench model
vcoModel = 'VCO_Validation';
new_system(vcoModel); open_system(vcoModel);
set_param(vcoModel, 'Solver', 'VariableStepDiscrete');
add_block('msbPllFoundation/Ring Oscillator VCO', [vcoModel '/VCO']);
add_block('msbPllMeasurements/VCO Testbench', [vcoModel '/VCO TB']);
add_line(vcoModel, 'VCO TB/1', 'VCO/1', 'autorouting', 'smart');
add_line(vcoModel, 'VCO/1', 'VCO TB/1', 'autorouting', 'smart');
% 2. Get PeriodJitter and CornerFrequency from PN data
[pJitter, cFreq] = msblks.VCO.estimatePhaseNoiseCore(fVco, Foffset, PN_dBc);
set_param([vcoModel '/VCO'], 'Fo', num2str(fVco), ...
'PeriodJitter', num2str(pJitter), 'CornerFrequency', num2str(cFreq));
% 3. Simulate and compare to datasheet (accept ±3 dB)
sim(vcoModel);
ud = get_param([vcoModel '/VCO TB'], 'UserData');
推导参数后,跳转到 Phase 4.0(Strategy A assembly)。
C. 调整现有模型(满足新规格)
当用户提供现有 .slx 模型,并希望在不从头重建的情况下满足目标
(锁定时间、相位噪声、杂散)时使用。
工作流:
- 探查 — 提取当前参数:
Fc、Phi、N、OutputCurrent、Kvco、CompSelectionMethod,并通过get_param获取滤波器组件 - 检查是否有 PLL Testbench — 如果缺少 Testbench 或 PLL 输入未连接,请向 用户询问 fComp(P104)。如有需要,添加 PLL Testbench。
- 基线仿真 — 执行
sim(model),通过get_param(tbBlk, 'UserData')读取 锁定时间、频率和相位噪声。这是唯一有效的基线(P103)。 - 确定调节手段:
- 锁定时间过长 → 增大
Fc(带宽 ≈ 12/t_lock) - 带内相位噪声过高 → 减小
Fc、增大 Icp 或减小 N - 杂散过高 → 提高滤波器阶数或缩小
Fc
- 锁定时间过长 → 增大
- 重新设计 — 设置新的
Fc(必要时也设置Phi),保持CompSelectionMethod='Automatic',以便模块重新计算滤波器组件 - 重新仿真 — 读取 Testbench UserData。迭代直至满足规格。
- 报告 — 提供调整前后对比,并说明权衡
关键规则:
- 绝不要根据 Vctrl 稳定过程估算锁定时间(P103)
- 绝不要根据
Fo/N或RefFreq参数猜测 fComp(P104) - 为保证稳定性,将
Fc限制在 fPFD/10 - 仅在初步定尺寸时使用
lock_time ≈ 12/Fc,随后通过 Testbench 验证
可用性检查(必须执行)
使用任何函数或模块之前,必须先验证其存在。对关键函数
(thirdOrderPassiveFilterDesign、estimatePLLPhaseNoise、
phaseNoiseMeasure、phaseNoiseToJitter)检查 exist(func,'file');
对库(msbPllFoundation、msbPllMeasurements、msbPllArchitectures)检查
exist(lib,'file')==4。如果未找到,不要使用,并跳过依赖该项的步骤。
Phase 1:提取数据手册参数
1.0 读取数据手册 PDF
使用 MATLAB 的 extractFileText(绝不要直接使用 Read 工具读取 PDF):
pdfPath = 'path/to/datasheet.pdf';
txtContent = extractFileText(pdfPath);
txtPath = strrep(pdfPath, '.pdf', '_extracted.txt');
fid = fopen(txtPath, 'w'); fprintf(fid, '%s', txtContent); fclose(fid);
fprintf('Extracted %d characters to: %s\n', strlength(txtContent), txtPath);
1.1 架构识别
根据功能框图确定 PLL 拓扑:
| 问题 | 典型选项 |
|---|---|
| 整数-N 还是小数-N? | 仅整数、小数(带累加器)、小数(带 DSM) |
| DSM 阶数(若为小数)? | 1 阶、2 阶、3 阶、4 阶 |
| 预分频器类型? | 单模数、双模数(P/P+1) |
| 是否集成 VCO? | 是 / 否(外部) |
| 参考路径? | 直接、带 R 计数器、带倍频器、带分频器 |
| 输出分频器? | 无、可编程分频链 |
| 反馈抽头点? | 输出分频器之前(VCO)、输出分频器之后 |
1.2-1.4 详细参数提取
完整参数表请参阅 references/datasheet-extraction.md:
- 1.2:PLL 核心参数(PFD、CP、分频器、VCO、输出级)
- 1.3:噪声参数(VCO PN、PNSYNTH、闪烁噪声、抖动、杂散)
- 1.4:频率规划示例
阶段 2:选择组装策略
决策树(务必遵循)
START
│
├─ Does the PLL topology match an msbPllArchitectures template?
│ ├─ YES ──► Strategy A (Architecture block) ◄── DEFAULT
│ └─ NO ───► Strategy B (Foundation blocks)
│
└─ Do you need EXTERNAL custom noise injection (BLWN, spur sources wired
into the signal path OUTSIDE the PLL subsystem)?
├─ NO ───► Strategy A (Architecture block) ◄── DEFAULT
└─ YES ──► Strategy A + editSystem (flatten, then inject)
OR Strategy B (if injection point is before CP or after VCO)
策略 A 是所有设计的默认选项——无论是规格驱动还是数据手册驱动。 仅当拓扑没有匹配的架构模板时,才需要基础模块(策略 B)(例如双环路、注入锁定、带非标准反馈的外部 VCO)。
| 策略 | 使用场景 | 性能 | 复杂度 |
|---|---|---|---|
| A:架构模块 | 默认。 任何标准 Int-N、Frac-N、双模数 PLL | 仿真速度提升 3.3 倍(5 GHz PLL 用时 65 秒,而非 212 秒) | 4 个模块,4 个连接 |
| A + editSystem | 需要注入 CP 宽带噪声或添加自定义损伤 | 展平前速度相同 | 展平后增加约 5 个内部模块 |
| B:基础模块 | 非标准拓扑、外部 VCO、双环路,或用于教学/可视化 | 基准(最慢) | 9 个以上模块,11 个以上连接 |
先探测模式(在 set_param 之前必须执行)
设置任何模块参数之前,先探测掩码以确定准确的参数名称。切勿根据文档或记忆猜测参数名称。
完整探测流程请参阅 references/probing-simulink-models.md。
blk = [model '/PLL'];
m = Simulink.Mask.get(blk);
paramNames = {m.Parameters.Name};
fprintf('Available params (%d):\n', numel(paramNames));
cellfun(@(p) fprintf(' %s\n', p), paramNames);
这样可以避免使用 'Icp'(错误)而非 'OutputCurrent'(正确),或使用 'DividerRatio'(错误)而非 'N'(正确)等错误。
2.1 msbPllArchitectures——预构建 PLL 模板(策略 A)
| 架构模块 | 拓扑 | 分频器参数 |
|---|---|---|
| 带单模数预分频器的整数 N PLL | PFD->CP->LF->VCO->单模数预分频器 | Nmin、N(整数)——先设置 N |
| 带双模数预分频器的整数 N PLL | PFD->CP->LF->VCO->双模数预分频器 | ProgramCounter(P)、PrescalerDivider(N)、SwallowCounter(S)——约束:P > S > 0 (P105) |
| 带累加器的小数 N PLL | PFD->CP->LF->VCO->小数分频器(累加器) | N(小数)、Nmin |
| 带 Delta Sigma 调制器的小数 N PLL | PFD->CP->LF->VCO->小数分频器(DSM) | N(小数)、Nmin、dsm(阶数) |
主要提升参数(所有架构共用):
| 类别 | 参数 |
|---|---|
| VCO | Kvco、Fo、Amplitude、AddPhaseNoise、Foffset、PhaseNoise、PeriodJitter、CornerFrequency、FlickerExponent |
| 电荷泵 | OutputCurrent、EnableCurrentImpairments、CurrentImbalance、LeakageCurrent、EnableTimingImpairments |
| 环路滤波器 | CompSelectionMethod(Automatic/Manual)、Fc、Phi、FilterType、C1-C4、R2-R4、LfEnableImpairments、Temperature |
| PFD | DeadbandCompensation、EnableImpairments |
| 分析 | ol_opt、cl_opt、estimatePn |
| 探针 | pfd_up_dn、cp_out、lf_out、ps_out |
内置回调:
msblks.PLL.editSystem(gcb)——展平为可编辑子系统msblks.PLL.estimatePhaseNoise(gcb)——相位噪声的解析估算msblks.VCO.plotMaskFigure(gcb)——绘制相位噪声拟合结果与数据的对比图
2.2 msbPllFoundation —— 单独的构建模块(策略 B)
完整的模块表和参数请参阅 references/assembly-code.md。 关键模块:PFD、Charge Pump、Loop Filter、Ring Oscillator VCO、带 DSM 的 Fractional Clock Divider。
2.3 差距分析
架构模块涵盖 PFD、CP、LF、VCO 和分频器。对于 R 计数器、
ref doubler、RF 输出分频器或 CP 宽带噪声,请使用
editSystem 展平,然后在子系统中添加自定义模块。
阶段 3:创建自定义模块/自定义架构
3.0 展平(msblks.PLL.editSystem)
先设置所有掩码参数,然后再展平。展平后,子系统中会包含单独的模块 (PFD、CP、LF、VCO、分频器),你可以对其进行修改。
blk = [model '/PLL'];
set_param(blk, 'Kvco','40e6', 'Fo','4.225e9', 'OutputCurrent','5e-3', ...
'N','422.52', 'CompSelectionMethod','Automatic', 'Fc','60e3', 'Phi','48');
msblks.PLL.editSystem(blk); % Flatten AFTER setting params
3.1-3.4 自定义模块配方
有关 CP 宽带噪声(3.1)、参考路径(3.2)、RF 输出分频器(3.3)、反馈选择多路复用器(3.4),请参阅 references/assembly-code.md。
阶段 4:组装模型
性能指令——批量组装模型 在一次
mcp__matlab__evaluate_matlab_code调用中执行整个模型组装 (new_system、set_param、add_block、add_line、示波器设置——全部放在一个脚本中)。 每次 MCP 往返约耗时 10-15 秒。批量执行约 30 秒,而逐项执行需要 5 分钟以上。 流程:(1)计算参数,(2)将组装脚本写入保存文件夹中的 .m 文件, (3)通过mcp__matlab__run_matlab_file执行(保持终端整洁——不输出代码), (4)验证。对于大型脚本,使用run_matlab_file而不是evaluate_matlab_code, 可避免实时演示时原始代码充斥用户屏幕。
4.0 策略 A:架构模块组装(默认)
架构模块:仿真速度提升 3.3 倍,模块数量减少 56%,连接数量减少 64%。 完整组装代码模板请参阅 references/assembly-code.md。关键步骤:
new_system+ 求解器配置(VariableStepDiscrete、ReturnWorkspaceOutputs='on')- 从
msbPllArchitectures/<type>添加add_block - 设置分频器:先设置
Nmin='1',然后设置N,最后将Nmin设为最终值(P57/P92) - 设置 VCO 参数:
Kvco、Fo、OutputCurrent、AddPhaseNoise、RefFreq - 环路滤波器:N>50 时使用
thirdOrderPassiveFilterDesign(P79),否则使用Automatic - PFD 时序:
PropDelay = max(50e-12, min(5e-12, 1/(2*fVCO)/10)),MaxFreqInterest = 2*fVCO(下限为 50ps——模块拒绝更小的值) - 启用
lf_out='on'以探测 Vctrl - 添加 PLL Testbench(
Fo=fPFD、ExpectedFreq=fVCO、SampleRate=8*fVCO) - 设置
SpectralAverages='2'(P102:掩码默认值为 4)、LockTimeOption='on'、PhaseNoiseOption='off'(P83) StopTime = min(3*t_lock, 50e-6)、HoldOffTime = min(1.5*estLock, 0.8*StopTime)- 通过
Simulink.Mask.get设置成对向量:PhaseNoiseFreqOffset、TargetPhaseNoiseVector(P71、P100:没有目标时使用-999——掩码拒绝-inf) - 连接:TB/1→PLL/1、PLL/1→TB/1、PLL/2→Scope+ToWorkspace
Simulink.BlockDiagram.arrangeSystem(model); drawnow; set_param(model,'ZoomFactor','FitSystem'); drawnow;(P95)
4.1 策略 B:基础模块
仅用于非标准拓扑。请参阅 references/assembly-code.md。
4.2 稳定性分析(始终先于时域仿真)
在运行完整仿真前,确认 PM > 45°,且闭环峰化不超过 1 dB。
pllOpenLoopPlot(Icp,Kvco,N,Fc,R2,R3,R4,C1,C2,C3,C4)/pllCloseLoopPlot(...)- 对于三阶无源滤波器:R4=0,C4=0。请参阅 references/stability-analysis.md。
- 如果
pllOpenLoopPlot崩溃(相位 <= -180° 时出现 ylim 错误):按照 P106 使用手动 Bode 备用方案——通过logspace扫频计算 Z(s)、G(s)。不要使用 Control System Toolbox(tf、bode)——它不是必需的。
4.3 仿真并读取结果
simOut = sim(model);
delete(findall(0,'Type','figure','Tag','Msgbox_Warning'));
% Read lock time from PLL Testbench model workspace
sid = Simulink.ID.getSID([model '/PLL Testbench']);
sidParts = split(sid, ':'); sidSuffix = sidParts{2};
mdlWs = get_param(model, 'ModelWorkspace');
lockTime = evalin(mdlWs, ['LockTime_' sidSuffix]);
freq = evalin(mdlWs, ['Frequency_' sidSuffix]);
% Alternative: read from UserData (works after sim completes)
ud = get_param([model '/PLL Testbench'], 'UserData');
lockTime = ud.lockTime; % seconds
freq = ud.freq; % Hz
pnLevels = ud.phaseNoiseLevel; % dBc/Hz vector
P103:切勿根据 Vctrl 稳定时间估算锁定时间。 PLL 测试平台使用基于频率误差的检测(FreqErrorTol)——这是唯一有效的锁定时间测量方法。手动分析 Vctrl 会得出错误结果。
P104:如果模型没有 PLL 测试平台,或参考输入未连接,则无法确定 fComp。 RefFreq 参数仅用于 PN 估算——它不定义实际参考时钟。继续操作前,请向用户询问 fComp。不要猜测,也不要根据 Fo/N 计算。
探测器选项卡端口(VCO 输出端口 1 之后):pfd_up、pfd_dn、cp_out、lf_out、ps_out。
HoldOffTime 必须小于 StopTime,否则不会进行测量。
快速参考
f_PFD = f_REFIN*(1+D)/(R*(1+T)) | f_VCO = f_PFD*(INT+FRAC/MOD) | f_OUT = f_VCO/RF_DIV
N_eff = INT+FRAC/MOD (from VCO) | N_eff = (INT+FRAC/MOD)*RF_DIV (from divider output)
In-band PN = PNSYNTH + 10*log10(f_PFD) + 20*log10(N)
1/f PN at f = PN1_f + 10*log10(10kHz/f) + 20*log10(f_RF/1GHz)
Divider effect = -20*log10(RF_DIV) on output phase noise
顺畅流程速查表(规格 → 已验证的锁定时间)
最常见的工作流,约 20 步:
1. User gives: fVCO, fRef, lock time target
2. Derive: N = fVCO/fRef, Fc = 12/t_lock (cap at fPFD/10), Kvco = fVCO/50
3. Present Design Plan (block diagram + params)
4. Build model (ONE mcp call):
- new_system, VariableStepDiscrete solver
- add_block msbPllArchitectures/Integer N PLL...
- set Nmin='1', N, Nmin=N
- set Kvco, Fo, OutputCurrent, Fc, Phi='50'
- add PLL Testbench (Fo=fRef, ExpectedFreq=fVCO, SampleRate=8*fVCO)
- set LockTimeOption='on', SpectralAverages='2'
- connect TB↔PLL, enable lf_out, add scope
- StopTime = min(3*12/Fc, 50e-6), HoldOff = 1.5*12/Fc
- arrangeSystem + FitSystem
5. Plot Bode: pllOpenLoopPlot(...), confirm PM > 45° (if ylim crash, use manual fallback P106)
6. sim(model)
7. ud = get_param(tbBlk, 'UserData'); lockTime = ud.lockTime;
8. Report: lock_time vs target, margin, PASS/FAIL
9. If margin > 3x → DONE. If not → increase Fc by 50%, repeat from step 5.
库名称(规范名称): msbPllArchitectures、msbPllFoundation、msbPllMeasurements、msbUtilities
版权所有 2026 The MathWorks, Inc.