В этом примере показано, как использовать функции радиочастотного Toolbox™ для создания модуля Verilog-A, который моделирует высокоуровневое поведение высокоскоростной объединительной платы. Сначала он считывает однополюсные 4-портовые S-параметры для дифференциальной высокоскоростной объединительной платы и преобразует их в 2-портовые дифференциальные S-параметры. Затем он вычисляет передаточную функцию дифференциальной схемы и подгоняет рациональную функцию к передаточной функции. Далее в примере экспортируется модуль Verilog-A, описывающий модель. Наконец, в нем отображается отклик на шаг блока генерируемого модуля Verilog-A в инструменте моделирования цепи стороннего производителя.
Прочитайте файл данных Touchstone ® ,default.s4p, в sparameters объект. Параметры в этом файле данных представляют собой 50-омные S-параметры однополюсной 4-портовой пассивной схемы, измеряемые на 1496 частотах от 50 МГц до 15 ГГц. Затем извлеките однополюсные 4-портовые S-параметры из данных, сохраненных в Parameters имущества sparameters объект, используйте s2sdd чтобы преобразовать их в дифференциальные 2-портовые S-параметры и использовать s2tf для вычисления передаточной функции дифференциальной схемы. Затем используйте rationalfit для создания функции rfmodel.rational объект, описывающий высокоуровневое поведение этой высокоскоростной объединительной платы. rfmodel.rational объект - объект рациональной функции, выражающий передаточную функцию цепи в замкнутом виде с использованием полюсов, остатков и других параметров, как описано в rationalfit справочная страница.
filename = 'default.s4p';
backplane = sparameters(filename);
data = backplane.Parameters;
freq = backplane.Frequencies;
z0 = backplane.Impedance;Преобразуйте в 2-портовые дифференциальные S-параметры.
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.10 and the RF Toolbox 4.1.
// Generated on: 22-Apr-2021 20:41:30
`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)