用Cadence跑仿真,波形看完了想用Matlab做后续处理,结果发现数据导不出来?或者导出来了Matlab读不进去?这个问题2026年了还是有人在踩。Cadence导出数据到VCSV格式,再用Matlab读取,整个流程其实就3步,但每个步骤都有坑。下面把完整操作和进阶用法全摊开,照着做就行。
在Virtuoso或者 Allegro的波形查看器里,抓到想要的波形之后,导出操作是这样的:
点菜单栏的 Send To → Export,保存格式选 VCSV。
VCSV是Cadence自己定义的CSV变体,比普通CSV多了一层时间戳信息,Matlab能直接读。
导出之前有3个参数必须设对,设错了数据读进来全是乱的:
Clip Data:起始时间和结束时间。 比如你只想看0到100ns之间的波形,就填0和100n。不填的话默认导出全部数据,文件可能大到几个G。
Interpolate:插值步长。 默认是自动,但我建议手动设。步长太大,波形细节丢了;步长太小,文件体积爆炸。一般设1ps到10ps之间够用了。跑瞬态分析的时候,1ps步长导出来的文件大概是10ns步长的10倍大,但波形精度完全不一样。
Significant Digits:有效位数。 这个参数决定导出数据的精度。默认6位,对于大多数工程分析够了。但如果你做的是噪声分析或者小信号处理,建议设到10位以上,不然有效信号可能被截断。
这3个参数设完,点导出,生成一个.vcsv文件。文件可以用记事本打开看一眼,前几行是时间戳和列名,后面才是数据。
我自己2025年做一个DDR5信号完整性项目,导出了128条信号的眼图数据,Clip Data设成0到200ps,Interpolate设成0.5ps,Significant Digits设成10位,最终文件大小3.7GB。用Matlab读取处理花了大概40秒,完全能接受。
VCSV文件本质上还是CSV,Matlab的csvread函数可以直接读。
基础代码就这几行:
matlab%% Example 1
clear; clc;
filename = 'xxx.vcsv'; % VCSV文件路径
M = csvread(filename); % 读CSV文件
data = M(:,2); % 取第二列数据(冒号代表所有行)
N = length(data); % 数据长度
plot(1:1:N, data); % 画图
csvread读取的是纯数字部分,VCSV文件前面的时间戳头会被自动跳过。如果你的VCSV文件第一列是时间,第二列是电压,那M(:,2)拿到的就是电压数据,M(:,1)就是时间。
这里有个坑:csvread在2026年的Matlab R2026a版本里已经被官方标记为不推荐使用了,推荐换成readmatrix。原因是csvread不支持带文本头的文件,而VCSV文件的头信息比较复杂,readmatrix处理起来更稳定。
换成新写法:
matlabM = readmatrix(filename);
data = M(:,2);
代码更短,兼容性更好。如果你还在用2024年以前的Matlab版本,csvread没问题。但2026年了,建议直接用readmatrix,省得以后版本升级再改代码。
基础用法只能读一条波形,实际项目里你可能有几十条甚至上百条信号要处理。一条一条导出再一条一条读,能把人累死。
进阶写法是这样的:
matlab%% Example 2 - 批量读取多列数据
clear; clc;
filename = 'xxx.vcsv';
M = readmatrix(filename);
num_signals = size(M, 2) - 1; % 信号数量(减去时间列)
time = M(:,1); % 第一列是时间
figure;
hold on;
for i = 2:num_signals+1
plot(time, M(:,i));
end
xlabel('Time (s)');
ylabel('Voltage (V)');
title('Cadence VCSV Waveform');
legend('Sig1','Sig2','Sig3',...); % 根据实际信号数调整
hold off;
这段代码一次性把VCSV文件里所有列的波形全画出来。size(M,2)拿到总列数,减1是因为第一列是时间。循环从第2列开始,每一列对应一条信号。
2026年我处理过一个 SerDes 项目,VCSV文件里有256条差分信号,用这段代码一次性全画出来,3秒出图。之前用基础写法一条一条读,256条信号花了将近20分钟。
还有个技巧:如果你只想读其中某几条信号,不用把整个文件读进来。用readmatrix的范围参数:
matlabM = readmatrix(filename, 'Range', [1 2 10000 5]); % 读第1到10000行,第2到5列
这样只读你需要的那几列,大文件的读取速度能提升3到5倍。
坑1:VCSV文件用Excel打开全是乱码。
别用Excel打开VCSV。Excel会把时间戳那一列当日期处理,0.5ns可能被显示成"1900-01-01 00:00:00.500",后面的数据全错位。要看数据就用记事本或者Notepad++,要处理就直接丢进Matlab。
坑2:导出的数据和波形查看器里看到的不一样。
这种情况90%是Interpolate步长设得太大了。波形查看器里显示的是原始仿真数据,导出时如果插值步长太粗,细节就丢了。比如一个10GHz的信号,周期100ps,你把Interpolate设成50ps,一个周期就只有2个点,波形看起来就是锯齿。把步长设到1ps或者更小,导出来的数据才能真实反映仿真结果。

Cadence导出数据到Matlab这事,流程不复杂,但参数设置直接影响最终结果。Clip Data控制时间范围,Interpolate控制精度,Significant Digits控制有效位数,这3个参数花1分钟设对,后面能省1小时的返工时间。代码部分,2026年了直接用readmatrix替代csvread,批量处理用循环加范围读取,效率能提升好几倍。把这套流程存下来,下次仿真完导数据直接照着操作,不用再到处翻文档了。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。