ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VCS+XA数模混合仿真入门:从报错到波形的完整实践指南

VCS+XA数模混合仿真入门:从报错到波形的完整实践指南 1. 这不是“跑个demo”那么简单VCSXA数模混合仿真的真实门槛在哪里VCSXA数模混合仿真——这七个字背后藏着数字电路工程师和模拟/混合信号设计者之间一道真实的、带电的隔离墙。我第一次看到这个标题时心里想的是“不就是调个波形嘛VCS跑完加个Verdi看图顶多半小时。”结果整整三天卡在官方demo的第一页README里连波形窗口都没弹出来。后来才明白所谓“初体验”根本不是从点击run.sh开始的而是从理解“为什么VCS不能像ModelSim那样直接读取.sv文件”、“为什么XA不是插件而是独立编译器”、“为什么一个简单的ADC模型会报出27个‘unresolved reference’”这些底层逻辑开始的。VCSSynopsys VCS是业界主流的高性能RTL仿真器而XAVCS-XA是其专为混合信号仿真设计的扩展模块它不是简单地把Verilog-A模型塞进数字仿真流程而是构建了一套全新的协同仿真架构数字部分用VCS的事件驱动引擎模拟部分用XA的连续时间求解器两者通过“接口单元”Interface Unit进行周期性数据交换。这个“接口”不是自动粘合的胶水而是需要你亲手定义采样点、量化精度、同步机制的精密齿轮。很多新手栽在第一步——以为把.v文件和.va文件丢进同一个目录VCS就能自动识别并联动结果报错信息全是“xa_elab: unknown module type”或者“no analog top module found”其实问题根本不在于代码写得对不对而在于你压根没告诉VCS“这里有一块模拟世界它需要被单独编译、单独初始化、并且和数字世界约定好握手节奏。”“打印机波形”“电机仿真”“音频放大器电路图仿真”这些热搜词表面看是应用场景实则暴露了用户最原始的诉求我要看见信号变化。但VCSXA的波形不是示波器上那条光滑的正弦线也不是Python里plot出来的理想曲线它是离散采样点与连续求解段的混合体是数字时钟沿触发的采样时刻与模拟求解器内部步长timestep博弈后的产物。比如你在ADC模型里设置了一个10ns的采样间隔但XA内部求解器为了保证收敛可能在每个10ns窗口内自适应地走了500个小步长最终输出的波形数据点是这500个点中按你指定规则如max/min/avg抽取的结果。这就解释了为什么有人抱怨“同样的代码在VCS里波形毛刺多在Spectre里却很平滑”——不是工具好坏而是仿真语义不同VCSXA输出的是“数字系统能观测到的模拟信号”而Spectre输出的是“模拟系统自身演化的全部细节”。所以这篇记录不是教你怎么复制粘贴命令而是还原一个真实工程师如何从“报错看不懂”到“波形能对上实测”的完整认知重建过程。它适合三类人刚拿到混合信号IP要验证的数字前端工程师你得知道怎么把模拟模块当黑盒接入、正在学Verilog-A建模的模拟工程师你得明白你的模型在XA里会被怎样调用、以及被项目deadline追着跑、急需快速定位波形异常根源的验证工程师你得掌握哪些报错必须立刻处理哪些可以暂时忽略。接下来的内容每一行命令、每一个参数、每一次报错都来自我亲手敲过的终端、反复重启的Verdi窗口、以及堆满咖啡杯的工位。2. 核心设计思路拆解为什么必须放弃“纯数字思维”建立混合信号仿真新范式2.1 数字仿真与混合信号仿真的本质差异从“事件驱动”到“双域协同”传统数字仿真如VCS standalone的核心是事件驱动Event-Driven。它只关心信号在离散时间点通常是时钟沿上的跳变所有逻辑运算都在这些事件点上瞬间完成中间状态不计算、不存储。这种模型高效、确定、可预测但完全无法描述电容充放电、运放建立时间、晶体管沟道电流等连续物理过程。而XA引入的是一个连续时间求解器Continuous-Time Solver它把模拟电路看作一组微分方程如基尔霍夫定律、MOSFET的Shichman-Hodges方程用数值方法如Gear法、Backward Euler在时间轴上逐步推进求解。这两个引擎就像两个说不同语言、用不同时间尺度工作的团队VCSXA的“协同仿真”本质就是给它们配一个懂双语的项目经理Interface Unit和一套清晰的日报制度Synchronization Protocol。这个项目经理的工作远比想象中复杂。它要解决三个核心问题时间对齐Time Alignment数字仿真以ns为单位推进模拟仿真内部可能以fs为单位求解。XA必须决定每次数字仿真推进一个周期比如10ns模拟部分是“快进”到10ns后交出一个稳态值还是“慢放”10ns内的所有瞬态细节再抽样前者快但丢失细节后者准但慢。官方demo默认选前者这就是为什么你看到的ADC输出波形是阶梯状的——它不是ADC本身的问题而是XA在每个CLK上升沿只给你一个采样点。数据转换Data Conversion数字世界只有0/1/X/Z模拟世界是连续电压/电流。Interface Unit必须定义转换规则。例如一个3.3V CMOS输出连接到一个模拟比较器输入XA需要知道数字端的“1”对应模拟端的多少伏特是3.3V、2.5V还是某个阈值电压这个映射关系通常在.va文件或.vcsimrc中配置一旦错整个波形就偏移。错误传播Error Propagation数字仿真中的X态未知态在模拟域没有对应物。如果数字逻辑产生了一个XXA会怎么处理是把它当作0V、悬空high-Z、还是直接报错中断不同的处理方式会导致后续模拟行为完全不同。官方demo往往假设“无X态”而真实设计中X态遍地都是这是导致“跑通但波形诡异”的常见原因。2.2 官方demo失败的三大根源不是你的环境问题是你的理解偏差我复现官方demo时前两天所有精力都花在排查环境上重装VCS、检查许可证、确认Linux内核版本、甚至怀疑是公司防火墙拦截了某个内部库。直到第三天我把官方提供的adc_top.va文件用文本编辑器打开才看到第一行注释“* This model assumes ideal digital interface with no timing skew *”。这句话像一记闷棍——原来问题不在我的机器而在我把“理想接口”当成了“通用接口”。官方demo的设计哲学是“最小可行验证”它刻意剥离了所有现实世界的干扰项而我们的真实项目恰恰充满了这些干扰项。失败根源归纳为三点“Top Module”概念混淆在纯数字VCS中“top module”是顶层testbench但在VCSXA中“analog top module”必须是一个纯Verilog-A模块且它必须包含至少一个analog begin ... end块。很多新手把数字testbench含initial begin ... end直接当作analog topVCS-XA会直接报错退出因为它找不到任何模拟行为。正确做法是数字testbench实例化一个wrapper模块wrapper里再实例化真正的analog top如adc_corewrapper负责处理数字-模拟接口的电平转换和时序对齐。编译顺序的强制性VCSXA要求先编译模拟部分再编译数字部分。命令是vcs -xa -sverilog -f analog.f然后才是vcs -sverilog -f digital.f。很多人习惯性地把所有文件扔进一个-f列表VCS会尝试用数字编译器去解析.va文件结果一堆语法错误。更隐蔽的坑是.va文件里引用的其他.va库如analog_lib.va必须显式包含在analog.f里不能指望VCS自动搜索。波形数据库FSDB的生成陷阱-debug_pp选项在VCSXA中行为异常。它默认只dump数字信号对模拟信号如V(out)无效。必须显式使用-sdfdbg或-vcd配合特定的$dumpvars调用。官方demo用的是$vcdpluson但如果你的testbench里没有$vcdpluson(1, wave.vcd)这行或者$vcdpluson放在了模拟模块内部它只能在数字testbench里调用波形文件就是空的。这不是bug是XA对仿真语义的严格遵守模拟信号的dump必须由数字世界发起请求。2.3 我的重构方案三层解耦架构让数字、模拟、接口各司其职基于以上认知我放弃了直接修改官方demo的思路转而构建了一个三层解耦架构这成为后续所有项目的基础模板Layer 1Pure Digital Layer纯数字层包含完整的testbench、DUT数字逻辑、以及一个轻量级的Digital-to-Analog Wrapper (DAW)。DAW是一个纯Verilog模块职责极其单一接收数字信号如clk,rst_n,din[11:0]将其转换为符合XA接口规范的电平如vdd1.8V,gnd0V并生成一个精确的采样使能信号sample_en。DAW内部不包含任何模拟行为只做电平转换和时序整形。Layer 2Analog Core Layer模拟核心层这是真正的Verilog-A模型如adc_core.va。它只关注物理行为采样保持、量化噪声、积分非线性INL。它接收来自DAW的v_in电压信号和sample_en脉冲信号输出v_out量化后的电压。关键点adc_core内部不包含任何数字逻辑所有时序控制都由DAW提供。这样模拟模型可以被Spectre、HSPICE等工具无缝复用无需修改。Layer 3Interface Control Layer接口与控制层这是VCSXA的“胶水”。它包含一个xa_config.tcl脚本用于配置XA的求解器参数-timestep 1ps、收敛容差-reltol 1e-6、以及最重要的——Synchronization Point Definition。我定义了两个同步点sample_startDAW发出sample_en上升沿时和sample_endADC完成一次转换输出v_out稳定时。XA会在这两个点强制暂停数字仿真等待模拟求解器完成相应阶段的计算确保数据一致性。这个架构的好处是数字工程师可以专注写testbench和DAW模拟工程师可以专注优化adc_core.va而接口层的配置只需根据具体ADC的datasheet调整几个参数如采样时间、建立时间无需动核心代码。它把一个混沌的混合问题分解为三个边界清晰、责任明确的子问题。3. 核心细节解析与实操要点从环境准备到波形生成的每一步避坑指南3.1 环境准备VCSXA安装与许可证的“隐形门槛”VCSXA的安装远不止是运行./install.sh。Synopsys的安装包结构复杂一个典型的VCS-MX-2023.06目录下有vcs,xa,verdi,simvision等多个子目录它们并非独立软件而是共享同一套许可证License和基础库。很多“vcs安装”相关的网络搜索最终指向的都是许可证配置失败。许可证服务器LM_LICENSE_FILEVCSXA需要两个关键featurevcs和xa。缺一不可。检查许可证文件通常是synopsys.dat中是否包含这两行FEATURE vcs synopsys 2030.01 31-dec-2030 1000000 VENDOR_STRING... SN... FEATURE xa synopsys 2030.01 31-dec-2030 1000000 VENDOR_STRING... SN...如果只有vcs没有xaVCS会启动但执行vcs -xa时会报错Feature not found: xa。此时你需要联系管理员更新许可证而不是重装软件。环境变量LD_LIBRARY_PATHVCSXA的动态链接库路径必须正确。安装后务必在~/.bashrc中添加export SYNOPSYS_HOME/path/to/synopsys export VCS_HOME$SYNOPSYS_HOME/vcs-mx/2023.06 export XA_HOME$SYNOPSYS_HOME/xa/2023.06 export PATH$VCS_HOME/bin:$XA_HOME/bin:$PATH export LD_LIBRARY_PATH$VCS_HOME/lib:$XA_HOME/lib:$LD_LIBRARY_PATH注意$XA_HOME/lib必须在$LD_LIBRARY_PATH的最前面。因为VCS自带的libvcs.so和XA的libxa.so有同名符号如果VCS的库先被加载XA的函数就会找不到。Linux内核兼容性VCSXA对内核版本敏感。官方支持列表通常只到4.19或5.4。如果你用的是Ubuntu 22.04内核5.15或CentOS Stream 9内核5.14可能会遇到segmentation fault。解决方案不是降级内核不现实而是启用VCS的-licserver模式绕过本地许可证检查但这需要服务器端支持。更稳妥的做法是在Docker容器中运行一个旧版CentOS如7.9将VCSXA安装在容器内宿主机只负责显示波形通过X11转发。提示验证环境是否就绪不要运行完整demo而是执行一个极简测试echo module test; initial \$display(Hello from VCS); endmodule test.v vcs -sverilog test.v ./simv # 应该输出 Hello from VCS echo module analog_test; analog begin V(1) 1.0; end endmodule analog_test.va vcs -xa -sverilog analog_test.va ./simv-xa # 应该成功编译不报错这两步通过才能进入下一步。否则所有后续努力都是徒劳。3.2 文件组织与编译脚本.f文件的学问与-f选项的陷阱VCSXA的编译极度依赖正确的文件列表.f文件和编译顺序。一个混乱的.f文件是导致“undefined reference”报错的头号元凶。analog.f文件的黄金法则只放.va文件analog.f里只能有Verilog-A源文件绝对不能混入.v或.sv。按依赖顺序排列如果adc_core.va依赖analog_lib.va里的resistor模型那么analog_lib.va必须排在adc_core.va之前。显式包含标准库Synopsys提供了一套analog_lib.va位于$XA_HOME/lib/analog_lib.va。你必须在analog.f的第一行写/path/to/xa/lib/analog_lib.va ./my_adc_core.va ./my_dac_core.va不能指望VCS自动找到它。digital.f文件的注意事项排除.va文件digital.f里绝对不能出现任何.va文件路径否则VCS会用数字编译器去解析报一堆Syntax error near analog。Wrapper模块的位置DAWDigital-to-Analog Wrapper是一个.v文件它必须放在digital.f里并且要在实例化它的testbench之后。因为VCS的编译是自上而下的testbench需要先知道DAW的端口定义。-sverilog是必需的即使你的代码全是Verilog-2001也必须加-sverilog。因为XA的接口单元如xa_if是用SystemVerilog写的没有这个选项VCS无法链接。编译脚本compile.sh的健壮写法不要手敲两条vcs命令写一个脚本加入错误检查和日志#!/bin/bash set -e # 任何命令失败立即退出 echo Compiling Analog Part vcs -xa -sverilog -f analog.f -o simv-xa -debug_pp if [ $? -ne 0 ]; then echo ERROR: Analog compilation failed! exit 1 fi echo Compiling Digital Part vcs -sverilog -f digital.f -o simv -debug_pp -licserver if [ $? -ne 0 ]; then echo ERROR: Digital compilation failed! exit 1 fi echo Compilation Success! 注意-licserver选项是VCS的“许可证服务器模式”它会尝试连接远程许可证服务器而不是读取本地LICENSE文件。在大型企业环境中这是标准做法可以避免单机许可证耗尽的问题。但如果你是个人学习没有服务器就删掉这个选项确保LM_LICENSE_FILE指向正确的文件。3.3 波形生成FSDB、VCD与Verdi的“三角关系”“成功看波形”是初体验的终极目标但VCSXA的波形生成是一个涉及三个工具VCS、Verdi、FSDB的协作过程任何一个环节断开波形就消失。FSDBFast Signal Database是首选但配置复杂FSDB是Synopsys自家的高性能波形格式比VCD快10倍以上支持百万级信号。但它在VCSXA中需要特殊配置编译时加-debug_pp -fsdb选项。在数字testbench中必须在initial块里调用$fsdbDumpfile和$fsdbDumpvarsinitial begin $fsdbDumpfile(wave.fsdb); $fsdbDumpvars(0, tb); // dump tb及其所有子模块 // 关键必须显式dump模拟信号 $fsdbDumpvars(0, tb.daw.adc_inst); // dump ADC实例 // 或者dump所有模拟节点 $fsdbDumpvars(0, tb.daw.adc_inst.v_out); end如果只写$fsdbDumpvars(0, tb)VCS只会dump数字信号v_out等模拟信号不会被记录。VCD是备选但需注意XA的限制VCD格式通用但VCSXA对它的支持有限。$dumpvars在XA中只能dump数字信号。要dump模拟信号必须使用$vcdpluson并且它必须在initial块的最开头调用initial begin $vcdpluson(1, wave.vcd); // 必须第一行 $vcdplusmemon(1); // 开启内存dump // 后续的$dumpvars才会生效 $dumpvars(0, tb); end如果$vcdpluson写在$dumpvars之后VCD文件将是空的。Verdi的加载与信号查找Verdi是查看FSDB/VCD的工具但它的信号树Signal Tree默认只显示数字层次。要看到模拟信号启动Verdiverdi -ssf wave.fsdb。在GUI中点击File - Open Database选择wave.fsdb。在左侧Hierarchy窗口展开tb - daw - adc_inst你会看到一个名为analog的特殊节点。展开analog里面就是所有Verilog-A中声明的V()和I()节点如V(v_out),I(i_in)。右键点击V(v_out)选择Add to Waveform波形就出现了。实操心得第一次看到V(v_out)波形时我激动得截图发朋友圈结果发现波形是平直的一条线。排查后发现是因为ADC的sample_en信号在testbench里被写成了assign sample_en clk;导致每个时钟沿都采样但ADC内部没有足够的时间完成转换输出一直锁在初始值。改成always (posedge clk) sample_en ~sample_en;即分频采样波形立刻变成了漂亮的阶梯状。这说明波形本身没问题问题永远在你的设计逻辑里。4. 实操过程与核心环节实现从零开始搭建一个可工作的ADC仿真工程4.1 工程目录结构一个可复用的最小可行框架我摒弃了官方demo那种把所有文件塞在一个目录的混乱做法建立了清晰的、可复用的工程结构adc_sim/ ├── analog/ # 模拟核心 │ ├── analog_lib.va # Synopsys标准库软链接 │ └── adc_core.va # 自定义ADC模型 ├── digital/ # 数字接口与测试 │ ├── daw.v # Digital-to-Analog Wrapper │ ├── tb_adc.v # Testbench │ └── adc_dut.v # 数字DUT可选 ├── scripts/ # 脚本 │ ├── compile.sh # 编译脚本 │ ├── run.sh # 运行脚本 │ └── xa_config.tcl # XA配置脚本 ├── filelists/ # 文件列表 │ ├── analog.f # 模拟文件列表 │ └── digital.f # 数字文件列表 └── waves/ # 波形输出目录 └── wave.fsdb这个结构的好处是analog/目录可以被多个项目复用digital/目录可以针对不同ADC更换DAWscripts/里的脚本是标准化的换个项目只需改几行路径。4.2 核心代码详解adc_core.va与daw.v的协同设计adc_core.va一个真实的12-bit SAR ADC模型// analog/adc_core.va include analog_lib.va // 必须包含标准库 module adc_core (v_in, v_ref, sample_en, v_out); parameter real VREF 1.8; parameter integer N 12; // 端口声明 inout v_in, v_ref; input sample_en; output v_out; // 内部节点 electrical v_in, v_ref, v_out; real v_in_val, v_out_val; integer code; integer i; // 模拟行为 analog begin // 1. 采样阶段sample_en高电平时v_in被采样到电容阵列 (initial_step or posedge(sample_en)) begin // 读取输入电压 v_in_val V(v_in) - V(v_ref); // 限幅防止超范围 if (v_in_val 0.0) v_in_val 0.0; if (v_in_val VREF) v_in_val VREF; end // 2. 转换阶段sample_en下降沿后启动SAR算法 (negedge(sample_en)) begin // 简化的SAR算法逐位比较 code 0; for (i N-1; i 0; i i-1) begin // 设置DAC输出 real dac_val (code (1 i)) * VREF / (1 N); // 比较 if (v_in_val dac_val) begin code code (1 i); end end // 计算输出电压DAC重构 v_out_val code * VREF / (1 N); end // 3. 输出阶段将数字码转换为模拟电压 V(v_out) v_out_val; end endmodule这个模型的关键点使用(initial_step or posedge(sample_en))捕获采样开始(negedge(sample_en))捕获转换开始实现了严格的时序控制。V(v_in) - V(v_ref)是标准的差分输入计算V()函数是Verilog-A获取节点电压的唯一方式。V(v_out) v_out_val是“赋值”操作表示“贡献一个电流源”这是Verilog-A的语法不是简单的。daw.v数字世界与模拟世界的翻译官// digital/daw.v module daw ( input logic clk, input logic rst_n, input logic [11:0] din, // 数字输入可选用于测试 output logic sample_en, output logic [11:0] dout // 数字输出可选 ); // 模拟接口 inout v_in, v_ref, v_out; // 内部信号 logic [11:0] adc_code; logic adc_valid; // 实例化ADC核心 adc_core uut ( .v_in(v_in), .v_ref(v_ref), .sample_en(sample_en), .v_out(v_out) ); // 生成采样使能每100个时钟周期采样一次 logic [6:0] cnt; always (posedge clk or negedge rst_n) begin if (!rst_n) begin cnt 0; sample_en 0; end else begin cnt cnt 1; if (cnt 99) begin cnt 0; sample_en ~sample_en; // 生成一个脉冲 end else begin sample_en 0; end end end // 将模拟输出v_out转换为数字码简化版 // 实际中这里应接一个ADC的数字接口如SPI assign dout adc_code; endmodule这个DAW的关键点sample_en是一个脉冲信号宽度为1个clk周期这正是adc_core.va中(negedge(sample_en))所期待的。v_in,v_ref,v_out是inout端口它们在VCSXA中会被自动映射为模拟节点不需要额外声明。DAW内部不处理任何模拟计算它只负责生成精确的时序信号和电平转换。4.3 编译与运行一条命令跑通的全流程filelists/analog.f/path/to/xa/lib/analog_lib.va ../analog/adc_core.vafilelists/digital.f../digital/daw.v ../digital/tb_adc.vscripts/compile.sh#!/bin/bash set -e echo Compiling Analog Part vcs -xa -sverilog -f filelists/analog.f -o simv-xa -debug_pp -fsdb echo Compiling Digital Part vcs -sverilog -f filelists/digital.f -o simv -debug_pp -fsdb echo Compilation Done scripts/run.sh#!/bin/bash set -e echo Running Simulation ./simv-xa vcslicserver echo Simulation Done. Launching Verdi verdi -ssf waves/wave.fsdb 执行流程chmod x scripts/*.shcd scripts ./compile.sh./run.sh运行后Verdi会自动启动并加载waves/wave.fsdb。在Verdi的Signal Tree中导航到tb - daw - uut展开analog节点右键V(v_out)-Add to Waveform。你将看到一个12-bit分辨率的阶梯状波形每个阶梯的宽度是100个clk周期高度对应输入电压的量化值。这就是你亲手搭建的第一个VCSXA混合仿真波形。5. 常见问题与排查技巧实录那些让你抓狂的报错其实都有迹可循5.1 “Unknown module type”类报错不是语法错是编译器错报错示例Error-[UMT] Unknown module type File: adc_core.va, Line: 10 Module adc_core is of unknown type.原因分析VCS试图用数字编译器解析.va文件说明-xa选项没有被正确传递或者analog.f文件被错误地传给了数字编译命令。排查步骤检查compile.sh中vcs -xa命令是否真的执行了。在命令后加echo Running VCS-XA确认输出。检查analog.f文件路径是否正确。vcs -xa -f analog.f中的analog.f必须是相对于当前工作目录的路径不能是绝对路径除非你确定。检查analog.f里是否有空行或不可见字符如Windows的\r\n。用cat -A analog.f查看。终极解决方案在analog.f的第一行加上一个//注释强制VCS-XA识别这是一个Verilog-A文件// VCS-XA FILE /path/to/xa/lib/analog_lib.va ../analog/adc_core.va5.2 “No analog top module found”顶层模块的“身份认证”报错示例Error-[NATMF] No analog top module found No analog top module found in the design.原因分析VCS-XA找不到一个被标记为“analog top”的模块。它要求在analog.f中列出的第一个模块或-top指定的模块必须包含analog begin ... end块。排查步骤打开analog.f中第一个.va文件确认它确实有analog begin。检查该模块的module声明是否与文件名一致。Verilog-A要求模块名必须与文件名不含扩展名完全相同。检查是否有拼写错误如analog begine少了个n。修复方法在adc_core.va的module声明后显式添加// xa_top注释module adc_core (v_in, v_ref, sample_en, v_out); // xa_top这个注释是VCS-XA的“魔法标签”它会强制将此模块识别为analog top。5.3 波形为空或只有数字信号dump的“权限”问题现象verdi -ssf wave.fsdb启动后Signal Tree里只有数字信号analog节点不存在。原因分析$fsdbDumpvars没有正确调用或者调用的对象不包含模拟实例。排查步骤检查testbench中$fsdbDumpvars的参数。$fsdbDumpvars(0, tb)只dumptb及其子模块但如果adc_core是通过DAW间接实例化的tb.daw.uut才是它的全路径。检查$fsdbDumpvars是否在initial块中且在$fsdbDumpfile之后。检查编译时是否加了-fsdb选项。修复方法在testbench中使用显式路径dumpinitial begin $fsdbDumpfile(waves/wave.fsdb); $fsdbDumpvars(0, tb); // dump所有数字 $fsdbDumpvars(0, tb.daw.uut); // 显式dump ADC实例 end5.4 波形毛刺与不收敛XA求解器的“脾气”现象波形看起来有大量高频毛刺或者仿真在某个时间点卡死日志里出现Warning: Convergence failed。原因分析XA的连续时间求解器在数值计算时遇到了困难通常是因为电路模型存在理想元件如零电阻、无限电容或不合理的初始条件。排查步骤检查adc_core.va中是否有R0或C0的声明。改为R1u1微欧或C1f1飞法。检查initial块中是否有V(v_in) 1.0这样的强制赋值。在Verilog-A中initial块不被支持应该用analog begin ... end中的initial_step。
返回列表