最近要在电路中仿真不同大小的“Clock jitter”和“随机比特序列 ”对系统输出信号的影响。但是,当作者浏览完analogLib中的各种source后,也没有发现令人满意的产生上述信号的方式。因此作者研究了如何用Matlab 代码生成所需的波形文件,并将其导入Cadence中作为输入信号。整个操作非常简单,各种细节列在此处,供大家参考。
下面以随机比特序列为例进行演示。作者用如下Matlab代码产生随机的比特序列,并输出成波形文件pwlTest.p。
t = 1:1:100;
y = round(rand(1,100));
a = [t' y'];
save -ascii pwlTest.p a
在图1中的Filename一栏中填入pwlTest.p,并运行瞬态仿真,得到图2所示的波形。其瞬态波形的最小间隔为0.5ns,幅度为1.2V,与【功能说明】中的设置吻合。
在逻辑翻转时, 相邻比特之间本应存在rise-transition 和fall-transition 的过渡。但这种情况并没有出现,而是进行了幅度的插值。这是我们所不希望看到的。于是,作者写了一个简单的Matlab小程序来自动引入rise/fall transition。其中tr为rise/fall time,这取0.1。
[t, y] = data_generation(t,y,0.1)
function [t,dout]=data_generation(tin,din,tr)
dout = [];
t = [];
for i = 1 :length(tin)-1
t = [t, tin(i)+tr/2, tin(i+1)-tr/2];
dout = [dout, din(i), din(i)];
end
dout = [dout,din(length(tin))];
t = [t, tin(length(tin))+tr/2];
end
通过该程序对bit序列进行处理,我们就能得到所期望的波形,如图3所示。
下面用同样的方式产生clock jitter,jitter的rms为20ps,即0.5ns的4/100。(感谢
的指正)t_clk = 0:1:10;
v_clk = mod(t_clk,2);
%% jitter added
t_clk = t_clk + wgn(1,length(t_clk),-34);
%% add transition
[t_clk, v_clk] = data_generation(t_clk, v_clk,0.1);
%% export file
a = [t_clk' v_clk'];
save -ascii pwlTest.p a
仿真结果如下:
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...