
写这篇ADS软件操作的记录之前我先说说自己的情况。我做射频链路仿真有些年头了平时用得最多的就是Keysight ADS。早些年我基本只用它的谐波平衡HB和S参数仿真后来做带数字预失真DPD和宽带调制信号的系统级验证才正儿八经开始折腾DAC控件。说实话刚开始用的时候挺不顺手明明一个不起眼的小控件参数设置不对后级滤波器和放大器仿真出来的频谱全都是乱的我还一度以为是放大器模型出了问题。后来静下心把DAC控件的原理和它跟仿真器之间的关系梳理清楚很多问题就迎刃而解了。这篇东西就是给刚开始用ADS做数模混合链路仿真的朋友写的尤其是那些需要把数字信号送进模拟链路里去验证射频指标的人。1. 先搞明白DAC控件在链路里到底干什么1.1 数字域和模拟域之间那道“接口”射频仿真里最头疼的事往往不是单一模块的设计而是把数字基带和模拟前端接到一起。ADS里面仿真域分得很清楚数字基带信号在DSP/信号源库里是一串时间离散、幅度离散的样本序列而模拟链路里的滤波器、放大器、混频器这些元件需要的是真正连续的电压随时间变化的波形。你总不能把一串0101的比特流直接塞进滤波器端口仿真器不知道该怎么解释。DAC控件就是干这个的。它把一个数字序列按照设定的采样率、位宽和输出幅度转换成一个可以被瞬态仿真Transient、谐波平衡仿真或包络仿真识别的模拟时域波形。你可以把它理解成一个理想化的数模转换芯片模型——每个时钟周期读入一个数字码字输出一个对应的模拟电平并且保持一个时钟周期直到下一个码字到来。这个“保持”动作很关键它决定了输出波形天然带着采样-保持Sample and Hold的特征。我见过不少刚接触ADS的人想当然地以为只要把数字源输出往模拟滤波器上一接就能直接得到平滑的发射信号。实际上如果不经过DAC控件做转换仿真器要么直接报错要么输出结果完全不符合物理意义。所以DAC控件在整个链路里的位置就是连接数字激励和模拟电路的那道“接口”。1.2 为什么不用电压源直接替代有人可能会问既然要的是模拟波形那直接用正弦电压源不就行了这就要说到做系统级验证的根本目的了。在DPD和宽带调制信号仿真里你关心的不是“一个标准的正弦波经过放大器之后变成什么样”而是“一个带着量化噪声、带外杂散、码间串扰的真实数字基带信号经过整个发射链路之后ACPR相邻信道功率比和EVM误差矢量幅度会不会恶化”。如果直接用理想正弦源你等于把最关键的信号失真环节跳过了仿真的参考意义就大打折扣。DAC控件存在的另一个重要价值是让仿真链路具备“重构真实发射机行为”的能力。真实发射机里的DAC会引入量化噪声、采样镜像、时钟抖动等非理想效应这些都会影响系统指标。ADS里的DAC控件允许你设定位宽、量化方式、时钟频率这样你就能在仿真阶段提前评估到底用10位的DAC还是12位的DAC系统性能差别有多大。这个评估如果靠堆板子来做成本和周期都是没法接受的。在仿真器底层DAC控件做的事其实是一个“数模状态转换”的过程。它读取前级数字源的输出数组把每个离散样本映射到设定的电压范围内然后在时间轴上按照采样周期展开成阶梯状波形。ADS的瞬态仿真器看到这个梯形波之后就会像对待普通电压源一样去求解后续电路。你把它当作一个行为级模型去理解很多参数设置就顺理成章了。2. DAC控件各个参数怎么设置才不出问题2.1 控件的存放位置和基本界面在ADS原理图设计窗口里不同版本的库路径会略有差异但常用的DAC控件一般都可以从“Sources-Data Flow Controller”库或者“DSP”相关库里找到。我平常用得比较多的路径是元件面板选择“Sources-Data Flow Controller”然后查找名字包含DAC的元件或者在“Design Library”里直接搜索关键词“DAC”。放上去之后双击打开参数设置对话框你会看到好几个参数项分别是位宽Number of Bits、采样率Sample Rate、量化模式Quantum Mode、最大输出电压Max Output Voltage等等。不同版本里参数名称可能有细微差别但核心就那几个。我个人的习惯是在开始设置参数之前先想清楚三个问题前级数字信号的码元速率和过采样率是多少这决定了DAC采样频率要怎么设。后级模拟链路能接受的输入电压范围和接口电平是多少这决定了输出幅度的设置。我是要做理想性评估还是要考虑量化效应这决定了位宽和量化模式怎么选。把这三个问题想清楚了参数设置基本不会跑偏。2.2 位宽和量化效应8位和12位的差别有多大位宽是DAC控件里最容易理解、也最容易忽略的一个参数。N位DAC的理论量化电平数是2的N次方比如8位对应256个电平12位对应4096个电平16位对应65536个电平。位数越多输出波形越接近理想模拟波形量化噪声的底噪就越低。量化噪声在仿真里的体现就是输出信号频谱基底抬升。理论上量化噪声的功率谱密度和位宽的关系近似是每增加1位量化噪声底降低约6dB。所以从8位升到12位理论上频谱底噪可以低差不多24dB。这个数字很直观你在仿真软件里看输出频谱从8位改成12位底噪确实会明显下沉。我踩过的坑是刚上手时图省事把位宽设成16位然后发现仿真速度变得特别慢尤其是在瞬态仿真加后级滤波器的时候。原因倒不复杂——位数越高DAC输出的阶梯波“台阶”描述越细仿真器为了准确求解后续的滤波器响应会在每个台阶处加密计算点计算量自然上去了。后来我习惯分阶段处理做链路架构验证和指标摸底时先用8位或10位快速跑最终评估某个具体DAC器件影响时再换成12位或更高。另外量化方式也要留意。ADS里通常有Truncation截断和Rounding四舍五入之类的选项。截断相当于直接把小数部分丢掉会有固定的直流偏移四舍五入更接近理想量化器行为。我一般都用Rounding模式除非你刻意要模拟某种特定芯片的截断误差特性。还有Dither抖动选项有些版本提供了这是模拟真实DAC里面加抖动来打散量化杂散的手段系统级预估时可以先不开细节评估时再打开看效果。2.3 采样率、时钟和输出波形的关系DAC控件的采样率设置是跟你的数字信号源采样率严格对应的。假如你的基带信号源是100MHz采样率产生了一个50MHz带宽的调制信号那DAC控件采样率也应该设成100MHz。如果这里设置不对输出波形的时域长度、频域位置都会发生错乱看起来就像整个信号被“拉伸”或“压缩”了。其实这背后是数字信号处理里最基本的采样定理问题。DAC输出的阶梯波在频域上除了包含你想要的基带信号之外还会在每个采样频率整数倍处产生镜像分量。你可以把DAC输出想象成在时域对理想冲激串做零阶保持这在频域上相当于乘了一个sinc函数形状的幅度权重同时在各个采样谐波附近产生镜像。镜像分量离有用信号越近后级滤波器越难滤除离得越远滤波越轻松。所以在设计仿真链路时如果条件允许尽量提高DAC的采样率也就是常说的“过采样”。这样做的好处有两个一是把采样镜像推得更远二是因为量化噪声会被摊到更宽的频带里带内的噪声密度会降低。ADS里你可以让DAC的采样率比信号码元速率高若干倍来模拟真实系统中的内插滤波效果。有一段时间我做一个宽带信号仿真基带速率是20MHzDAC时钟用了320MHz后级滤波器设计起来就非常轻松带外镜像落在很远的位置一个简单的低通滤波器就能压住。2.4 输出电压范围和偏置设置不能拍脑袋DAC控件的输出幅度参数很多人喜欢随便填个1V就完事。但真正接上后级放大器之后你会发现输出摆幅直接影响了放大器的工作点。如果DAC输出幅度给的过小放大器的输入功率可能达不到预期压缩状态完全不是你想要的那种给得过大又会过早进入饱和区EVM和ACPR都很差。我通常的做法是先查后级驱动放大器或者滤波器指定的输入电平范围再倒推DAC满量程输出。举个例子如果滤波器输入要求最大不超过0.8V我就会把DAC满量程设置到0dBm匹配阻抗下的0.632V再配合直流偏置如果仿真需要带直流的场景。ADS里DAC控件一般有最大输出电压和最小输出电压或者Reference Voltage相关参数你按实际链路需要定就行。直流偏置这一项很多人会忽略。如果后级链路是交流耦合的偏置设不设无所谓但如果后级是直接耦合而且模拟链路里面有单电源供电的放大器那么DAC输出必须设置合适的直流偏置否则放大器输入可能跑到不该跑的区域。我在做某些车规级射频前端仿真时芯片内部是直流耦合架构DAC偏置设错后面放大器静态工作点全乱了输出信号直接削顶。后来我把DAC的偏置和放大器输入端静态工作点对齐问题马上消掉。3. 手把手搭一个DAC输出链路并验证量化效果3.1 准备最小验证链路数字源DAC滤波器频谱纸上谈兵没啥用我带你把一个最小链路从头搭一遍。这组配置我在项目里反复用过很适合当成模板。第一步新建一个原理图在信号源库里放一个数字调制信号源或者直接用一个数字数据源。为了直观我第一次建议用一个单音的数字源就是数字正弦波序列频率设为5MHz采样率设为100MHz。这样输出的数字序列在时域上就是一个离散正弦波接DAC之后你马上就能看出量化台阶。第二步从“Sources-Data Flow Controller”库里调出DAC控件放在数字源后面。双击编辑参数我建议的初始值如下参数项建议值说明Number of Bits8能看到明显量化台阶便于理解Sample Rate100 MHz和数字源采样率保持一致Quantum ModeRounding正常量化行为Max Output Voltage1.0 V满量程输出1VMin Output Voltage-1.0 V双极性输出Output Impedance50 Ohm和后级匹配习惯一致第三步在DAC后面接一个低通滤波器可以用集总参数LC低通也可以用S参数文件滤波器模型。如果只是验证DAC行为用一个阶数适中的RC/LC低通就够截止频率别超过10MHz。第四步在滤波器输出端放一个瞬态仿真控制器设置仿真时长为几个微秒步长建议取DAC采样周期的十分之一甚至更小。这样观察输出波形时能看到每个DAC台阶内部被滤波器平滑的效果。3.2 观察波形和频谱怎么解读量化台阶跑完仿真把滤波前的DAC输出波形和滤波后的波形分别显示出来。滤波前的DAC输出你应该会看到一个非常标准的“阶梯状”正弦波形。这时候可以数一数正弦波峰值附近有几个台阶理论上8位DAC在整个幅度范围内有256级一个满摆幅正弦波大约会经过全部或者大部分台阶如果台阶数明显少说明信号幅度没有用满DAC的动态范围这时候应该调大信号源输出幅度或者调低DAC满量程电压。然后把低通滤波后的波形和滤波前对比。滤波后的波形上台阶边缘会被明显圆滑正弦波变得更加连续。这个现象就是“重构滤波”的效果——滤除采样产生的高频镜像分量保留基带信号。接着看频谱。ADS里你可以在显示面板里添加一个FFT测量或者直接对滤波器输出波形做频谱显示。关键看点有三个5MHz处的信号功率是不是符合你设置的幅度预期镜频分量是不是落在95MHz、105MHz、195MHz这些位置对应采样率100MHz的整数倍偏移整个频谱基底是不是有一条平坦的底噪这是量化噪声的体现。如果看到镜频分量特别高先别急着骂后级滤波器。可以把DAC输出直接接一个50MHz带宽的理想低通再看镜频是否被压下去。如果压下去了说明链路架构没毛病如果没压下去那就要检查滤波器截止特性和DAC采样率设置是否合理了。3.3 量化噪声对频谱底噪的影响验证一个很有意思的验证实验是把DAC位宽从8位改成12位其他参数不变重新跑一遍仿真对比噪声基底的变化。理论上你会看到频谱底噪下降了大约24dB。这个实验能帮助你直观理解位宽选择的性价比如果你的系统指标要求带外噪声低于某个值那么在DAC位数这个维度上每增加1位大约带来6dB改善。我自己做这个验证的时候通常会顺手把Dither选项也对比一下。有些ADS版本里DAC控件带Dither开启后你会发现量化产生的那些离散杂散被“打散”到整个频带里看起来像噪声更低了一点。实际上总噪声功率是不变的只是分布变了。在真实系统里这样做对改善某些窄带干扰有好处但会抬高整体底噪所以到底开不开Dither也是需要根据系统要求权衡的。别忘了记录仿真时间。8位DAC的仿真时间比12位快不少如果只是验证系统架构用8位能节省大量时间。我一般先用8位把所有链路和指标趋势跑通最后在关键节点换成12位做精确评估。3.4 进阶玩法接上ADC形成闭环回环DAC控件不只是单向的“数字转模拟”它还可以配合ADC控件做成一个“数字回环”链路。最常见的场景是你在仿真一个收发系统接收端需要把AD采样后的数字序列拿来做算法处理。这时候你可以用DAC把数字信号送进模拟链路模拟发射前端经过信道模型之后再用ADC控件把模拟波形采样回数字域去看整个收发链路的量化损伤。实际操作上你只要在模拟链路的末端放一个ADC控件设置它的位宽和采样率然后连接到数字信号分析工具比如ADS里的DSP库组件上就能得到接收端数字序列。这样整个仿真链路就是一个完整的数字收发闭环前端的DAC量化和后端的ADC量化影响都可以单独评估。这个玩法对做系统链路预算和算法前验证特别有用我在做数字预失真算法验证时就用这个办法观察DAC/ADC量化对预失真收敛效果的影响。需要注意的是ADC控件的采样率尽量和DAC保持倍数关系不要搞出非整数倍关系否则后续数字处理里面的时钟同步会很麻烦。如果一定要异频那就得在数字域里明确加上重采样模块这样仿真链路才和真实系统对应得上。4. 实际使用中的高频坑和排查办法4.1 输出波形全平或者断开问题大概率在数字源我曾经遇到过一次很诡异的情况DAC输出带宽设置了很多位宽也正常但输出波形就是一根直线。后来仔细检查发现是前级数字源的输出格式和DAC控件的输入格式不匹配。ADS里有些数字源输出的是逻辑电平0和1而DAC控件期望的输入是完整的数字样本序列比如带符号的整数值。两种格式接在一起DAC根本解析不了输出自然就是无效电平。这种问题在界面上还不会报错因为数据流层面它是通的只是数值解释完全不对。排查办法很简单在DAC前面加一个数据探针看看数字源实际输出的数值范围。如果是01序列那你需要在前级加一个格式转换或者用lookup table把逻辑电平映射成DAC输入码字不要直接硬接。另外还要检查数字源的采样率和比特率是不是跟DAC的采样率匹配。如果数字源是1Gbps、每个符号2bit可能输出速率是500Msps而DAC采样率设成了100MHz那么每五个数字样本才被DAC用一次输出波形就会被“降速播放”看起来频率不对。这个匹配关系一定要先算清楚。4.2 频谱里镜频压制不掉先别急着换滤波器很多人看到DAC输出频谱里有一堆镜频第一反应是“滤波器不够好”然后开始换成高阶椭圆滤波器或者贵的S参数滤波器模型。但在仿真里这样做往往得不偿失——仿真时间涨好几倍镜频却未必压得干净。有一个更优的思路先把DAC采样率提高让镜频推远。比如你的基带信号在5MHzDAC采样率从100MHz提到400MHz镜频就落在395MHz和405MHz这时候用一个截止频率20MHz的低通滤波器就能把镜频压得很彻底完全不用上高阶滤波器。这个思路在真实硬件设计里也一样成立用更高的DAC时钟去换取更宽松的滤波需求是系统设计里非常经典的一个取舍。在ADS仿真里这样做还有一个额外好处因为滤波器阶数降低了仿真收敛性更好整体计算时间反而可能比“低采样率高阶级联滤波器”更快。4.3 仿真速度慢到怀疑人生试试分步仿真当你把DAC接到一个包含非线性放大器的完整射频链路上然后用瞬态仿真跑全链路速度慢得让人崩溃是很常见的事。尤其当DAC采样率非常高、后级又有微带线、滤波器和非线性器件时瞬态仿真器会耗费大量时间处理DAC每个台阶和后面电路的状态切换。我的经验是不要试图一次性把全链路都放在一个瞬态仿真里跑。先分段验证——第一段只验证“数字源DAC滤波器”的输出波形和频谱第二段才把滤波器输出保存成文件或者作为固定激励源送到后级射频链路里用谐波平衡或者包络仿真来做射频指标验证。ADS里有“Save/Read”机制可以把前级仿真结果保存下来后级直接用这个文件做激励源。这样既保留了DAC量化带来的真实信号特征又避开了整个链路一起做瞬态仿真的性能瓶颈。如果你必须做全链路瞬态仿真那就要合理设置仿真步长。不要为了保险把步长设得过小把DAC时钟周期的1/20作为瞬态步长通常就够用了。更大的步长虽然更快但可能漏掉滤波器响应里的细节更小的步长典型是白白浪费算力。4.4 常见问题速查表现象可能原因排查手段解决办法DAC输出全为零或固定电平前级数字源输出格式不匹配用数据探针检查数字源输出数值范围增加格式转换或调整数字源输出为样本序列输出波形台阶数偏少信号幅度未用满DAC满量程检查信号峰值和DAC满量程电压调整数字源幅度或降低DAC满量程设置频谱出现非预期谱线数字源采样率和DAC采样率不匹配核对两者采样率设置统一采样率或加入重采样模块镜频分量过高DAC采样率偏低或滤波器截止不足查看镜像落在哪个频点提高DAC采样率或增加重构滤波仿真时间过长位宽过高、采样率过高、全链路瞬态检查仿真步长和链路复杂度分步仿真合理设置步长必要时降低位宽这条速查表是我自己平时遇到问题最先翻的一页。很多问题看起来五花八门但追根溯源无非就是“采样率不匹配”“位宽设置不合理”“链路结构过于复杂”这三类。先把这三类问题排除再谈别的。4.5 一个小细节后级器件负载效应对DAC输出的影响还有个容易忽略的细节是DAC控件虽然是个行为级模型但它的输出源阻抗是可以在参数里设置的。如果设成高阻输出而后级的滤波器或者放大器输入阻抗比较低分压效应就会导致实际加在后级输入端的电压比DAC设定值低不少。这个问题在检查功率的时候特别容易露馅——明明DAC设了0dBm输出到了放大器输入端测出来是-6dBm大概率就是源阻抗和负载阻抗的失配问题。解决办法是养成一个好习惯在DAC参数里把输出阻抗设成和整个链路特征阻抗一致比如50欧姆。同时在后级输入端加一个端口或阻抗匹配元件确保信号源和负载之间是匹配的。这个做法能让仿真链路里的功率计算和实际硬件测试对得上号不然你在仿真里看到的功率值拿到实验室测出来完全两回事。5. 需要养成的几个使用习惯5.1 先理想后现实分阶段逼近真实模型DAC控件是一个行为级模型但不同参数组合下它的“现实程度”差异很大。我建议在做系统仿真时遵循一个原则先做“理想DAC”评估再做“现实DAC”评估。具体操作是第一轮把位宽设成16位甚至更高量化模式选理想关闭Dither这时候DAC输出几乎接近理想模拟波形仿真结果反映的是除去DAC量化影响之后整个模拟链路的真实水平。如果你在这一步就已经发现某些指标恶化得很厉害那基本可以排除DAC的嫌疑问题大概率出在放大器、滤波器或者链路匹配上。第二轮再把位宽调整成你计划选用的实际DAC位数比如12位或者10位打开量化模式加上Dither如果实际芯片有这时候再对比指标变化。两轮之间的差值就是DAC量化对系统带来的额外损伤。这个差值是你评估“能否用更低成本的DAC”或者“必须选择更高性能DAC”的核心依据。5.2 把常用的DAC配置做成模板ADS里可以把自己常用的配置好的模块保存成子电路或者模板。我强烈建议你把那些验证过的链路组合保存下来比如“DAC重构滤波器”做成一个子电路参数都调好并加上注释下次设计新项目直接拖出来用。这样既避免了重复犯错也保证了不同项目之间仿真结果的可比性。我用这个方法之后效率提升非常明显。以前每次新开项目都要重新设置DAC参数偶尔漏掉一个采样率设置结果全盘出错。现在模板一拉顶多改一下采样率和位宽其他都是一把过。5.3 抽时间看看波形不要只盯数据结果现在的仿真环境越来越好用很多指标都能直接通过测量表达式输出成表格。但我始终有个习惯即使指标看起来很好也会把DAC前后的时域波形调出来看几眼。因为很多问题在指标数据里是看不出来的——比如波形上有不明显的小毛刺、台阶边缘出现短暂的回退、相位跳变异常这些在数据表格里很难体现但是在波形图上一眼就能看出来。有一次做个宽带调制信号仿真ACPR和EVM指标都正常但我无聊看了一眼DAC输出波形发现信号包络在某个幅度位置有一个非常细小的“凹陷”。换了个DAC时钟之后凹陷消失指标看起来差别不大但我心里踏实多了。后来查资料才知道这可能是仿真器数值求解在特定采样点上的伪影。这种细节问题只看数据是绝对发现不了的。写在最后的几句实际体会DAC控件在ADS里看着不起眼参数也就那么几个但它把数字仿真域和模拟仿真域之间的通道打通了。你只有真正理解它里面每秒在做的“读码字、置电平、保持住”这个循环才能把参数设得不偏不倚。以前我也走过弯路给8位DAC配了个极高阶的滤波器仿真跑了几个小时还跑不出来后来明白了提高采样率才是更优雅的办法很多问题豁然开朗。另外一个小建议不同ADS版本之间DAC控件的位置和参数名称多少有点出入碰到界面不一样也不用慌先看帮助文档里对参数定义的说明再看有没有“Sample and Hold”或者“Quantization”这类开关基本都能对上。我自己遇到过一个版本把Max Output Voltage改成了Reference第一眼没认出来差点又踩坑。如果你也在做带DAC的数模混合链路仿真欢迎按我上面推荐的配置方式搭一个最小链路跑一遍先感受一下量化台阶、采样镜像和重构滤波这几个现象再往自己真正的链路里迁移。这套流程我用了很久始终觉得是最快上手、也最能帮你建立直觉的路径。