Этот пример показывает, как использовать функции RF Toolbox™, чтобы сгенерировать модуль Verilog-A, который моделирует высокоуровневое поведение высокоскоростной основной платы. Во-первых, это читает несимметричные S-параметры с 4 портами для дифференциальной высокоскоростной основной платы и преобразовывает их в дифференциальные S-параметры с 2 портами. Затем это вычисляет передаточную функцию дифференциальной схемы и соответствует рациональной функции к передаточной функции. Затем, пример экспортирует модуль Verilog-A, который описывает модель. Наконец, это строит модульный переходной процесс сгенерированного модуля Verilog-A в стороннем инструменте симуляции схемы.
Считайте файл данных Touchstone®, default.s4p, в объект sparameters. Параметрами в этом файле данных являются S-параметры на 50 Ом несимметричной пассивной схемы с 4 портами, измеренной на 1 496 частотах в пределах от от 50 МГц до 15 ГГц. Затем извлеките несимметричные S-параметры с 4 портами от данных, хранимых в свойстве Parameters объекта sparameters, используйте функцию s2sdd, чтобы преобразовать их в дифференциальные S-параметры с 2 портами и использовать функцию s2tf, чтобы вычислить передаточную функцию дифференциальной схемы. Затем используйте функцию rationalfit, чтобы сгенерировать объект rfmodel.rational, который описывает высокоуровневое поведение этой высокоскоростной основной платы. Объект rfmodel.rational является объектом рациональной функции, который выражает передаточную функцию схемы в закрытой форме с помощью полюсов, остатков и других параметров, как описано на странице с описанием rationalfit.
filename = 'default.s4p';
backplane = sparameters(filename);
data = backplane.Parameters;
freq = backplane.Frequencies;
z0 = backplane.Impedance;
Преобразуйте в дифференциальные S-параметры с 2 портами.
diffdata = s2sdd(data); diffz0 = 2*z0; difftf = s2tf(diffdata,diffz0,diffz0,diffz0);
Вместите дифференциальную передаточную функцию в рациональную функцию.
fittol = -30; % Rational fitting tolerance in dB delayfactor = 0.9; % Delay factor rationalfunc = rationalfit(freq,difftf,fittol,'DelayFactor',delayfactor)
rationalfunc =
rfmodel.rational with properties:
A: [20x1 double]
C: [20x1 double]
D: 0
Delay: 6.0172e-09
Name: 'Rational Function'
Используйте метод writeva объекта rfmodel.rational экспортировать объект рациональной функции как модуль Verilog-A, названный samplepassive1, который описывает рациональную модель. Сети ввода и вывода samplepassive1 называются line_in и line_out. Предопределенная дисциплина Verilog-A, electrical, описывает атрибуты этих сетей. Форматом числовых значений, таких как числитель Преобразования Лапласа и коэффициенты знаменателя, является %12.10e. Электрическая дисциплина задана в файле disciplines.vams, который включен в начале файла samplepassive1.va.
workingdir = tempname; mkdir(workingdir) writeva(rationalfunc, fullfile(workingdir,'samplepassive1'), ... 'line_in', 'line_out', 'electrical', '%12.10e', 'disciplines.vams');
type(fullfile(workingdir,'samplepassive1.va'));
// Module: samplepassive1
// Generated by MATLAB(R) 9.6 and the RF Toolbox 3.6.
// Generated on: 10-Jan-2019 17:07:19
`include "disciplines.vams"
module samplepassive1(line_in, line_out);
electrical line_in, line_out;
electrical node1;
real nn1[0:1], nn2[0:1], nn3[0:1], nn4[0:1], nn5[0:1], nn6[0:1], nn7[0:1], nn8[0:1], nn9[0:1], nn10[0:0], nn11[0:0];
real dd1[0:2], dd2[0:2], dd3[0:2], dd4[0:2], dd5[0:2], dd6[0:2], dd7[0:2], dd8[0:2], dd9[0:2], dd10[0:1], dd11[0:1];
analog begin
@(initial_step) begin
nn1[0] = -3.8392614832e+18;
nn1[1] = 5.2046393014e+07;
dd1[0] = 2.8312609831e+21;
dd1[1] = 3.5124823781e+09;
dd1[2] = 1.0000000000e+00;
nn2[0] = -2.0838483814e+19;
nn2[1] = 5.3487174017e+08;
dd2[0] = 1.8020362314e+21;
dd2[1] = 7.8266367089e+09;
dd2[2] = 1.0000000000e+00;
nn3[0] = 1.7726270794e+19;
nn3[1] = 2.5185716022e+09;
dd3[0] = 1.2157471895e+21;
dd3[1] = 8.1132784895e+09;
dd3[2] = 1.0000000000e+00;
nn4[0] = 2.3112282793e+20;
nn4[1] = 9.2690544437e+08;
dd4[0] = 7.9582429152e+20;
dd4[1] = 1.1379108659e+10;
dd4[2] = 1.0000000000e+00;
nn5[0] = 8.9321469721e+19;
nn5[1] = -1.4945928109e+10;
dd5[0] = 4.1473706594e+20;
dd5[1] = 1.1346735824e+10;
dd5[2] = 1.0000000000e+00;
nn6[0] = -3.5180951909e+20;
nn6[1] = -1.9895507212e+10;
dd6[0] = 1.9080843811e+20;
dd6[1] = 1.0434555792e+10;
dd6[2] = 1.0000000000e+00;
nn7[0] = -1.0593240107e+20;
nn7[1] = 1.9248932577e+10;
dd7[0] = 6.1152960549e+19;
dd7[1] = 1.0001203231e+10;
dd7[2] = 1.0000000000e+00;
nn8[0] = 5.4441539403e+16;
nn8[1] = -9.7818749687e+06;
dd8[0] = 4.3821946493e+19;
dd8[1] = 6.6700188623e+08;
dd8[2] = 1.0000000000e+00;
nn9[0] = 2.2556903052e+16;
nn9[1] = 7.9711163023e+06;
dd9[0] = 2.1228807651e+19;
dd9[1] = 4.9531801417e+08;
dd9[2] = 1.0000000000e+00;
nn10[0] = 1.1592988960e+10;
dd10[0] = 3.0829914556e+09;
dd10[1] = 1.0000000000e+00;
nn11[0] = 1.2852839051e+08;
dd11[0] = 5.9779845807e+08;
dd11[1] = 1.0000000000e+00;
end
V(node1) <+ laplace_nd(V(line_in), nn1, dd1);
V(node1) <+ laplace_nd(V(line_in), nn2, dd2);
V(node1) <+ laplace_nd(V(line_in), nn3, dd3);
V(node1) <+ laplace_nd(V(line_in), nn4, dd4);
V(node1) <+ laplace_nd(V(line_in), nn5, dd5);
V(node1) <+ laplace_nd(V(line_in), nn6, dd6);
V(node1) <+ laplace_nd(V(line_in), nn7, dd7);
V(node1) <+ laplace_nd(V(line_in), nn8, dd8);
V(node1) <+ laplace_nd(V(line_in), nn9, dd9);
V(node1) <+ laplace_nd(V(line_in), nn10, dd10);
V(node1) <+ laplace_nd(V(line_in), nn11, dd11);
V(line_out) <+ absdelay(V(node1), 6.0171901584e-09);
end
endmodule
Много сторонних инструментов симуляции схемы поддерживают стандарт Verilog-A. Эти инструменты моделируют автономные компоненты, заданные модулями Verilog-A и схемами, которые содержат эти компоненты. Следующие данные показывают модульный переходной процесс samplepassive1 модуля. Фигура была сгенерирована со сторонним инструментом симуляции схемы.
Рисунок 1: модульный переходной процесс.
delete(fullfile(workingdir,'samplepassive1.va'));
rmdir(workingdir)