mcpField
M
matlab-model-ams-systems

matlab-model-ams-systems

github.com/matlab其他1.2k53 次安装1 天前更新
代码仓库

关于 matlab-model-ams-systems

matlab-model-ams-systems 指导 MATLAB 和 Simulink 用户使用 Mixed-Signal Blockset,根据数据手册或系统规格建立 PLL IC 模型。内容涵盖架构选择与模型构建,后续验证阶段由配套文件介绍。

主要功能

  1. 01从数据手册或规格提取 PLL 参数
  2. 02选择 Integer-N、Fractional-N 或双模架构
  3. 03使用 Mixed-Signal Blockset 构建行为模型
  4. 04针对新目标调整现有 PLL 模型
  5. 05使用前检查所需函数和库

适用场景

  1. 01根据 IC 数据手册创建 Simulink PLL 模型
  2. 02按系统指标设计频率合成器
  3. 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.yaml
references/
assembly-code.md
datasheet-extraction.md
iteration-algorithm.md
modeling-pll-datasheet-validate.md
pitfalls.md
probing-simulink-models.md
stability-analysis.md
validate.md
scripts/
probeSlxModel.m
quickProbe.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 模块)

工作流指示(必须遵守)

  1. 逐个收集规格(必须遵守——无一例外)——对于任何 PLL 或频率合成器设计请求(基于规格或探索性), 每次回复只提出一个问题。不要列出多个问题,也不要 提供项目符号形式的需求清单。这可以减轻认知负担, 让对话更自然。顺序如下:

    1. 输出频率(或频率范围)
    2. 参考频率(如果 N > 200,则指出带内噪声较高的影响)
    3. 架构(Integer-N / Frac-N / 自动——也可能由 N 预先决定)
    4. 锁定时间目标
    5. 相位噪声 / 抖动 / 杂散目标(或确认“无”)
    6. 电荷泵电流(提供典型值作为默认值)
    7. VCO 要求(Kvco、相位噪声曲线——提供经验法则)
    8. 环路滤波器偏好(阶数、带宽覆盖值)
    9. 其他要求?
    10. 保存位置(.slx 文件和结果的文件夹路径)

    规则:

    • 每次只问一个问题,等待回答后再问下一个。
    • 跳过用户初始提示中已回答的问题。
    • 在括号中提供合理的默认值,让用户只需确认即可。
    • 收集完所有规格后,提供设计计划(指示 5,步骤 A)。
  2. 仅在未达到目标时自主迭代——如果首次尝试 以超过 3 倍的裕量通过,则停止。带宽公式已经能给出 良好的设计——不要为了“完整性”而扫描带宽或迭代。只有在首次尝试 失败或裕量小于 2 倍时,才进行扫描 / 迭代。 如需迭代,请扫描参数并重新仿真,直到达到目标。

  3. 报告进度并生成 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') 打开报告。

  4. 图窗必须可见——仿真后,调用 set(0,'DefaultFigureVisible','on'),并确保所有绘图图窗的 'Visible','on'。调用 drawnow 强制渲染。MCP MATLAB 服务默认将 Visible 设为 'off'。

  5. 每个步骤都在屏幕上显示进度——在关键里程碑处打印状态:

    • 步骤 A — 设计方案:构建前显示 ASCII 框图 + 参数
      [PLL TB]──▶[PFD]──▶[CP]──▶[Loop Filter]──▶[VCO]──┐
         ▲                                               │
         └─────────────[Divider ÷N]◀─────────────────────┘
      
      包括:架构、fRef、N、Icp、Kvco、Fc、PM、滤波器类型、求解器。 添加损耗因素时,须在实现之前显示更新后的框图。
    • 步骤 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 规格时):偏移、测量值与目标值对比、通过/失败

先决条件

  • 可访问目标 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 = 通道步进)

规格驱动步骤:

  1. 收集规格(Directive 1)→ 提交 Design Plan(Directive 5,Step A)
  2. 如果有 VCO PN 数据:先验证 VCO 单体(见下文)
  3. 从 msbPllArchitectures 中选择架构模块(Strategy A — DEFAULT)
  4. 设计环路滤波器:
    • N ≤ 50:使用 CompSelectionMethod='Automatic',并设置 Fc 和 Phi
    • N > 50(P79):使用 thirdOrderPassiveFilterDesign → CompSelectionMethod='Manual'
    • N 阈值适用于有效 N(包括小数部分)
  5. 构建模型、仿真并提交结果

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 模型,并希望在不从头重建的情况下满足目标 (锁定时间、相位噪声、杂散)时使用。

工作流:

  1. 探查 — 提取当前参数:Fc、Phi、N、OutputCurrent、Kvco、 CompSelectionMethod,并通过 get_param 获取滤波器组件
  2. 检查是否有 PLL Testbench — 如果缺少 Testbench 或 PLL 输入未连接,请向 用户询问 fComp(P104)。如有需要,添加 PLL Testbench。
  3. 基线仿真 — 执行 sim(model),通过 get_param(tbBlk, 'UserData') 读取 锁定时间、频率和相位噪声。这是唯一有效的基线(P103)。
  4. 确定调节手段:
    • 锁定时间过长 → 增大 Fc(带宽 ≈ 12/t_lock)
    • 带内相位噪声过高 → 减小 Fc、增大 Icp 或减小 N
    • 杂散过高 → 提高滤波器阶数或缩小 Fc
  5. 重新设计 — 设置新的 Fc(必要时也设置 Phi),保持 CompSelectionMethod='Automatic',以便模块重新计算滤波器组件
  6. 重新仿真 — 读取 Testbench UserData。迭代直至满足规格。
  7. 报告 — 提供调整前后对比,并说明权衡

关键规则:

  • 绝不要根据 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 PLLPFD->CP->LF->VCO->单模数预分频器Nmin、N(整数)——先设置 N
带双模数预分频器的整数 N PLLPFD->CP->LF->VCO->双模数预分频器ProgramCounter(P)、PrescalerDivider(N)、SwallowCounter(S)——约束:P > S > 0 (P105)
带累加器的小数 N PLLPFD->CP->LF->VCO->小数分频器(累加器)N(小数)、Nmin
带 Delta Sigma 调制器的小数 N PLLPFD->CP->LF->VCO->小数分频器(DSM)N(小数)、Nmin、dsm(阶数)

主要提升参数(所有架构共用):

类别参数
VCOKvco、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
PFDDeadbandCompensation、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。关键步骤:

  1. new_system + 求解器配置(VariableStepDiscrete、ReturnWorkspaceOutputs='on')
  2. 从 msbPllArchitectures/<type> 添加 add_block
  3. 设置分频器:先设置 Nmin='1',然后设置 N,最后将 Nmin 设为最终值(P57/P92)
  4. 设置 VCO 参数:Kvco、Fo、OutputCurrent、AddPhaseNoise、RefFreq
  5. 环路滤波器:N>50 时使用 thirdOrderPassiveFilterDesign(P79),否则使用 Automatic
  6. PFD 时序:PropDelay = max(50e-12, min(5e-12, 1/(2*fVCO)/10)),MaxFreqInterest = 2*fVCO(下限为 50ps——模块拒绝更小的值)
  7. 启用 lf_out='on' 以探测 Vctrl
  8. 添加 PLL Testbench(Fo=fPFD、ExpectedFreq=fVCO、SampleRate=8*fVCO)
  9. 设置 SpectralAverages='2'(P102:掩码默认值为 4)、LockTimeOption='on'、PhaseNoiseOption='off'(P83)
  10. StopTime = min(3*t_lock, 50e-6)、HoldOffTime = min(1.5*estLock, 0.8*StopTime)
  11. 通过 Simulink.Mask.get 设置成对向量:PhaseNoiseFreqOffset、TargetPhaseNoiseVector(P71、P100:没有目标时使用 -999——掩码拒绝 -inf)
  12. 连接:TB/1→PLL/1、PLL/1→TB/1、PLL/2→Scope+ToWorkspace
  13. 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.

评论

支持 Markdown